mesa/st: move st_new_renderbuffer_fb to manager
This is st_manager code really. Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14675>
This commit is contained in:
parent
b70b738bd1
commit
9c7e79c4b7
|
@ -59,134 +59,6 @@
|
|||
#include "util/format/u_format.h"
|
||||
#include "util/u_inlines.h"
|
||||
#include "util/u_surface.h"
|
||||
#include "util/u_memory.h"
|
||||
|
||||
/**
|
||||
* Allocate a renderbuffer for an on-screen window (not a user-created
|
||||
* renderbuffer). The window system code determines the format.
|
||||
*/
|
||||
struct gl_renderbuffer *
|
||||
st_new_renderbuffer_fb(enum pipe_format format, unsigned samples, boolean sw)
|
||||
{
|
||||
struct gl_renderbuffer *rb;
|
||||
|
||||
rb = CALLOC_STRUCT(gl_renderbuffer);
|
||||
if (!rb) {
|
||||
_mesa_error(NULL, GL_OUT_OF_MEMORY, "creating renderbuffer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
_mesa_init_renderbuffer(rb, 0);
|
||||
rb->ClassID = 0x4242; /* just a unique value */
|
||||
rb->NumSamples = samples;
|
||||
rb->NumStorageSamples = samples;
|
||||
rb->Format = st_pipe_format_to_mesa_format(format);
|
||||
rb->_BaseFormat = _mesa_get_format_base_format(rb->Format);
|
||||
rb->software = sw;
|
||||
|
||||
switch (format) {
|
||||
case PIPE_FORMAT_B10G10R10A2_UNORM:
|
||||
case PIPE_FORMAT_R10G10B10A2_UNORM:
|
||||
rb->InternalFormat = GL_RGB10_A2;
|
||||
break;
|
||||
case PIPE_FORMAT_R10G10B10X2_UNORM:
|
||||
case PIPE_FORMAT_B10G10R10X2_UNORM:
|
||||
rb->InternalFormat = GL_RGB10;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8B8A8_UNORM:
|
||||
case PIPE_FORMAT_B8G8R8A8_UNORM:
|
||||
case PIPE_FORMAT_A8R8G8B8_UNORM:
|
||||
rb->InternalFormat = GL_RGBA8;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8B8X8_UNORM:
|
||||
case PIPE_FORMAT_B8G8R8X8_UNORM:
|
||||
case PIPE_FORMAT_X8R8G8B8_UNORM:
|
||||
case PIPE_FORMAT_R8G8B8_UNORM:
|
||||
rb->InternalFormat = GL_RGB8;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8B8A8_SRGB:
|
||||
case PIPE_FORMAT_B8G8R8A8_SRGB:
|
||||
case PIPE_FORMAT_A8R8G8B8_SRGB:
|
||||
rb->InternalFormat = GL_SRGB8_ALPHA8;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8B8X8_SRGB:
|
||||
case PIPE_FORMAT_B8G8R8X8_SRGB:
|
||||
case PIPE_FORMAT_X8R8G8B8_SRGB:
|
||||
rb->InternalFormat = GL_SRGB8;
|
||||
break;
|
||||
case PIPE_FORMAT_B5G5R5A1_UNORM:
|
||||
rb->InternalFormat = GL_RGB5_A1;
|
||||
break;
|
||||
case PIPE_FORMAT_B4G4R4A4_UNORM:
|
||||
rb->InternalFormat = GL_RGBA4;
|
||||
break;
|
||||
case PIPE_FORMAT_B5G6R5_UNORM:
|
||||
rb->InternalFormat = GL_RGB565;
|
||||
break;
|
||||
case PIPE_FORMAT_Z16_UNORM:
|
||||
rb->InternalFormat = GL_DEPTH_COMPONENT16;
|
||||
break;
|
||||
case PIPE_FORMAT_Z32_UNORM:
|
||||
rb->InternalFormat = GL_DEPTH_COMPONENT32;
|
||||
break;
|
||||
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
|
||||
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
|
||||
rb->InternalFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
break;
|
||||
case PIPE_FORMAT_Z24X8_UNORM:
|
||||
case PIPE_FORMAT_X8Z24_UNORM:
|
||||
rb->InternalFormat = GL_DEPTH_COMPONENT24;
|
||||
break;
|
||||
case PIPE_FORMAT_S8_UINT:
|
||||
rb->InternalFormat = GL_STENCIL_INDEX8_EXT;
|
||||
break;
|
||||
case PIPE_FORMAT_R16G16B16A16_SNORM:
|
||||
/* accum buffer */
|
||||
rb->InternalFormat = GL_RGBA16_SNORM;
|
||||
break;
|
||||
case PIPE_FORMAT_R16G16B16A16_UNORM:
|
||||
rb->InternalFormat = GL_RGBA16;
|
||||
break;
|
||||
case PIPE_FORMAT_R16G16B16_UNORM:
|
||||
rb->InternalFormat = GL_RGB16;
|
||||
break;
|
||||
case PIPE_FORMAT_R8_UNORM:
|
||||
rb->InternalFormat = GL_R8;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8_UNORM:
|
||||
rb->InternalFormat = GL_RG8;
|
||||
break;
|
||||
case PIPE_FORMAT_R16_UNORM:
|
||||
rb->InternalFormat = GL_R16;
|
||||
break;
|
||||
case PIPE_FORMAT_R16G16_UNORM:
|
||||
rb->InternalFormat = GL_RG16;
|
||||
break;
|
||||
case PIPE_FORMAT_R32G32B32A32_FLOAT:
|
||||
rb->InternalFormat = GL_RGBA32F;
|
||||
break;
|
||||
case PIPE_FORMAT_R32G32B32X32_FLOAT:
|
||||
case PIPE_FORMAT_R32G32B32_FLOAT:
|
||||
rb->InternalFormat = GL_RGB32F;
|
||||
break;
|
||||
case PIPE_FORMAT_R16G16B16A16_FLOAT:
|
||||
rb->InternalFormat = GL_RGBA16F;
|
||||
break;
|
||||
case PIPE_FORMAT_R16G16B16X16_FLOAT:
|
||||
rb->InternalFormat = GL_RGB16F;
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(NULL,
|
||||
"Unexpected format %s in st_new_renderbuffer_fb",
|
||||
util_format_name(format));
|
||||
FREE(rb);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rb->surface = NULL;
|
||||
|
||||
return rb;
|
||||
}
|
||||
|
||||
void
|
||||
st_regen_renderbuffer_surface(struct st_context *st,
|
||||
|
|
|
@ -61,10 +61,6 @@ st_ws_framebuffer(struct gl_framebuffer *fb)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
extern struct gl_renderbuffer *
|
||||
st_new_renderbuffer_fb(enum pipe_format format, unsigned samples, boolean sw);
|
||||
|
||||
extern void
|
||||
st_update_renderbuffer_surface(struct st_context *st,
|
||||
struct gl_renderbuffer *strb);
|
||||
|
|
|
@ -303,6 +303,132 @@ st_framebuffer_update_attachments(struct gl_framebuffer *stfb)
|
|||
stfb->stamp++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate a renderbuffer for an on-screen window (not a user-created
|
||||
* renderbuffer). The window system code determines the format.
|
||||
*/
|
||||
static struct gl_renderbuffer *
|
||||
st_new_renderbuffer_fb(enum pipe_format format, unsigned samples, boolean sw)
|
||||
{
|
||||
struct gl_renderbuffer *rb;
|
||||
|
||||
rb = CALLOC_STRUCT(gl_renderbuffer);
|
||||
if (!rb) {
|
||||
_mesa_error(NULL, GL_OUT_OF_MEMORY, "creating renderbuffer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
_mesa_init_renderbuffer(rb, 0);
|
||||
rb->ClassID = 0x4242; /* just a unique value */
|
||||
rb->NumSamples = samples;
|
||||
rb->NumStorageSamples = samples;
|
||||
rb->Format = st_pipe_format_to_mesa_format(format);
|
||||
rb->_BaseFormat = _mesa_get_format_base_format(rb->Format);
|
||||
rb->software = sw;
|
||||
|
||||
switch (format) {
|
||||
case PIPE_FORMAT_B10G10R10A2_UNORM:
|
||||
case PIPE_FORMAT_R10G10B10A2_UNORM:
|
||||
rb->InternalFormat = GL_RGB10_A2;
|
||||
break;
|
||||
case PIPE_FORMAT_R10G10B10X2_UNORM:
|
||||
case PIPE_FORMAT_B10G10R10X2_UNORM:
|
||||
rb->InternalFormat = GL_RGB10;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8B8A8_UNORM:
|
||||
case PIPE_FORMAT_B8G8R8A8_UNORM:
|
||||
case PIPE_FORMAT_A8R8G8B8_UNORM:
|
||||
rb->InternalFormat = GL_RGBA8;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8B8X8_UNORM:
|
||||
case PIPE_FORMAT_B8G8R8X8_UNORM:
|
||||
case PIPE_FORMAT_X8R8G8B8_UNORM:
|
||||
case PIPE_FORMAT_R8G8B8_UNORM:
|
||||
rb->InternalFormat = GL_RGB8;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8B8A8_SRGB:
|
||||
case PIPE_FORMAT_B8G8R8A8_SRGB:
|
||||
case PIPE_FORMAT_A8R8G8B8_SRGB:
|
||||
rb->InternalFormat = GL_SRGB8_ALPHA8;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8B8X8_SRGB:
|
||||
case PIPE_FORMAT_B8G8R8X8_SRGB:
|
||||
case PIPE_FORMAT_X8R8G8B8_SRGB:
|
||||
rb->InternalFormat = GL_SRGB8;
|
||||
break;
|
||||
case PIPE_FORMAT_B5G5R5A1_UNORM:
|
||||
rb->InternalFormat = GL_RGB5_A1;
|
||||
break;
|
||||
case PIPE_FORMAT_B4G4R4A4_UNORM:
|
||||
rb->InternalFormat = GL_RGBA4;
|
||||
break;
|
||||
case PIPE_FORMAT_B5G6R5_UNORM:
|
||||
rb->InternalFormat = GL_RGB565;
|
||||
break;
|
||||
case PIPE_FORMAT_Z16_UNORM:
|
||||
rb->InternalFormat = GL_DEPTH_COMPONENT16;
|
||||
break;
|
||||
case PIPE_FORMAT_Z32_UNORM:
|
||||
rb->InternalFormat = GL_DEPTH_COMPONENT32;
|
||||
break;
|
||||
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
|
||||
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
|
||||
rb->InternalFormat = GL_DEPTH24_STENCIL8_EXT;
|
||||
break;
|
||||
case PIPE_FORMAT_Z24X8_UNORM:
|
||||
case PIPE_FORMAT_X8Z24_UNORM:
|
||||
rb->InternalFormat = GL_DEPTH_COMPONENT24;
|
||||
break;
|
||||
case PIPE_FORMAT_S8_UINT:
|
||||
rb->InternalFormat = GL_STENCIL_INDEX8_EXT;
|
||||
break;
|
||||
case PIPE_FORMAT_R16G16B16A16_SNORM:
|
||||
/* accum buffer */
|
||||
rb->InternalFormat = GL_RGBA16_SNORM;
|
||||
break;
|
||||
case PIPE_FORMAT_R16G16B16A16_UNORM:
|
||||
rb->InternalFormat = GL_RGBA16;
|
||||
break;
|
||||
case PIPE_FORMAT_R16G16B16_UNORM:
|
||||
rb->InternalFormat = GL_RGB16;
|
||||
break;
|
||||
case PIPE_FORMAT_R8_UNORM:
|
||||
rb->InternalFormat = GL_R8;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8_UNORM:
|
||||
rb->InternalFormat = GL_RG8;
|
||||
break;
|
||||
case PIPE_FORMAT_R16_UNORM:
|
||||
rb->InternalFormat = GL_R16;
|
||||
break;
|
||||
case PIPE_FORMAT_R16G16_UNORM:
|
||||
rb->InternalFormat = GL_RG16;
|
||||
break;
|
||||
case PIPE_FORMAT_R32G32B32A32_FLOAT:
|
||||
rb->InternalFormat = GL_RGBA32F;
|
||||
break;
|
||||
case PIPE_FORMAT_R32G32B32X32_FLOAT:
|
||||
case PIPE_FORMAT_R32G32B32_FLOAT:
|
||||
rb->InternalFormat = GL_RGB32F;
|
||||
break;
|
||||
case PIPE_FORMAT_R16G16B16A16_FLOAT:
|
||||
rb->InternalFormat = GL_RGBA16F;
|
||||
break;
|
||||
case PIPE_FORMAT_R16G16B16X16_FLOAT:
|
||||
rb->InternalFormat = GL_RGB16F;
|
||||
break;
|
||||
default:
|
||||
_mesa_problem(NULL,
|
||||
"Unexpected format %s in st_new_renderbuffer_fb",
|
||||
util_format_name(format));
|
||||
FREE(rb);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rb->surface = NULL;
|
||||
|
||||
return rb;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a renderbuffer to the framebuffer. The framebuffer is one that
|
||||
|
|
Loading…
Reference in New Issue