diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index d2604603771..a96fc2c3e4a 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -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, diff --git a/src/mesa/state_tracker/st_cb_fbo.h b/src/mesa/state_tracker/st_cb_fbo.h index 362c4db55bf..7ddfd1d4e5d 100644 --- a/src/mesa/state_tracker/st_cb_fbo.h +++ b/src/mesa/state_tracker/st_cb_fbo.h @@ -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); diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c index 7a82e2c029f..ae94a45c444 100644 --- a/src/mesa/state_tracker/st_manager.c +++ b/src/mesa/state_tracker/st_manager.c @@ -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