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:
Dave Airlie 2021-12-21 16:08:21 +10:00
parent b70b738bd1
commit 9c7e79c4b7
3 changed files with 126 additions and 132 deletions

View File

@ -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,

View File

@ -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);

View File

@ -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