mesa/st: move some renderbuffer code into mesa
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
527b6ca412
commit
21d4dd8c39
|
@ -52,6 +52,7 @@
|
|||
#include "texobj.h"
|
||||
#include "api_exec_decl.h"
|
||||
|
||||
#include "util/u_memory.h"
|
||||
#include "state_tracker/st_cb_fbo.h"
|
||||
#include "state_tracker/st_cb_eglimage.h"
|
||||
#include "state_tracker/st_context.h"
|
||||
|
@ -465,6 +466,20 @@ driver_RenderTexture_is_safe(const struct gl_renderbuffer_attachment *att)
|
|||
return true;
|
||||
}
|
||||
|
||||
static struct gl_renderbuffer *
|
||||
new_renderbuffer(struct gl_context *ctx, GLuint name)
|
||||
{
|
||||
struct gl_renderbuffer *rb = CALLOC_STRUCT(gl_renderbuffer);
|
||||
if (rb) {
|
||||
assert(name != 0);
|
||||
_mesa_init_renderbuffer(rb, name);
|
||||
rb->Delete = _mesa_delete_renderbuffer;
|
||||
rb->AllocStorage = st_renderbuffer_alloc_storage;
|
||||
return rb;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a renderbuffer which will be set up by the driver to wrap the
|
||||
* texture image slice.
|
||||
|
@ -489,7 +504,7 @@ _mesa_update_texture_renderbuffer(struct gl_context *ctx,
|
|||
|
||||
rb = att->Renderbuffer;
|
||||
if (!rb) {
|
||||
rb = st_new_renderbuffer(ctx, ~0);
|
||||
rb = new_renderbuffer(ctx, ~0);
|
||||
if (!rb) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glFramebufferTexture()");
|
||||
return;
|
||||
|
@ -1558,7 +1573,7 @@ allocate_renderbuffer_locked(struct gl_context *ctx, GLuint renderbuffer,
|
|||
struct gl_renderbuffer *newRb;
|
||||
|
||||
/* create new renderbuffer object */
|
||||
newRb = st_new_renderbuffer(ctx, renderbuffer);
|
||||
newRb = new_renderbuffer(ctx, renderbuffer);
|
||||
if (!newRb) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func);
|
||||
return NULL;
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "mtypes.h"
|
||||
#include "renderbuffer.h"
|
||||
#include "util/u_memory.h"
|
||||
|
||||
#include "util/u_inlines.h"
|
||||
|
||||
/**
|
||||
* Initialize the fields of a gl_renderbuffer to default values.
|
||||
|
@ -84,6 +84,16 @@ _mesa_init_renderbuffer(struct gl_renderbuffer *rb, GLuint name)
|
|||
void
|
||||
_mesa_delete_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
|
||||
{
|
||||
if (ctx) {
|
||||
pipe_surface_release(ctx->pipe, &rb->surface_srgb);
|
||||
pipe_surface_release(ctx->pipe, &rb->surface_linear);
|
||||
} else {
|
||||
pipe_surface_release_no_context(&rb->surface_srgb);
|
||||
pipe_surface_release_no_context(&rb->surface_linear);
|
||||
}
|
||||
rb->surface = NULL;
|
||||
pipe_resource_reference(&rb->texture, NULL);
|
||||
free(rb->data);
|
||||
free(rb->Label);
|
||||
FREE(rb);
|
||||
}
|
||||
|
|
|
@ -106,7 +106,7 @@ st_renderbuffer_alloc_sw_storage(struct gl_context * ctx,
|
|||
* This is called to allocate the original drawing surface, and
|
||||
* during window resize.
|
||||
*/
|
||||
static GLboolean
|
||||
GLboolean
|
||||
st_renderbuffer_alloc_storage(struct gl_context * ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLenum internalFormat,
|
||||
|
@ -272,46 +272,6 @@ st_renderbuffer_alloc_storage(struct gl_context * ctx,
|
|||
return rb->surface != NULL;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* gl_renderbuffer::Delete()
|
||||
*/
|
||||
static void
|
||||
st_renderbuffer_delete(struct gl_context *ctx, struct gl_renderbuffer *rb)
|
||||
{
|
||||
if (ctx) {
|
||||
struct st_context *st = st_context(ctx);
|
||||
pipe_surface_release(st->pipe, &rb->surface_srgb);
|
||||
pipe_surface_release(st->pipe, &rb->surface_linear);
|
||||
} else {
|
||||
pipe_surface_release_no_context(&rb->surface_srgb);
|
||||
pipe_surface_release_no_context(&rb->surface_linear);
|
||||
}
|
||||
rb->surface = NULL;
|
||||
pipe_resource_reference(&rb->texture, NULL);
|
||||
free(rb->data);
|
||||
_mesa_delete_renderbuffer(ctx, rb);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called via ctx->Driver.NewRenderbuffer()
|
||||
*/
|
||||
struct gl_renderbuffer *
|
||||
st_new_renderbuffer(struct gl_context *ctx, GLuint name)
|
||||
{
|
||||
struct gl_renderbuffer *rb = CALLOC_STRUCT(gl_renderbuffer);
|
||||
if (rb) {
|
||||
assert(name != 0);
|
||||
_mesa_init_renderbuffer(rb, name);
|
||||
rb->Delete = st_renderbuffer_delete;
|
||||
rb->AllocStorage = st_renderbuffer_alloc_storage;
|
||||
return rb;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Allocate a renderbuffer for an on-screen window (not a user-created
|
||||
* renderbuffer). The window system code determines the format.
|
||||
|
@ -435,7 +395,7 @@ st_new_renderbuffer_fb(enum pipe_format format, unsigned samples, boolean sw)
|
|||
}
|
||||
|
||||
/* st-specific methods */
|
||||
rb->Delete = st_renderbuffer_delete;
|
||||
rb->Delete = _mesa_delete_renderbuffer;
|
||||
rb->AllocStorage = st_renderbuffer_alloc_storage;
|
||||
|
||||
/* surface is allocated in st_renderbuffer_alloc_storage() */
|
||||
|
|
|
@ -73,7 +73,11 @@ extern void
|
|||
st_regen_renderbuffer_surface(struct st_context *st,
|
||||
struct gl_renderbuffer *strb);
|
||||
|
||||
struct gl_renderbuffer *st_new_renderbuffer(struct gl_context *ctx, GLuint name);
|
||||
GLboolean
|
||||
st_renderbuffer_alloc_storage(struct gl_context * ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
GLenum internalFormat,
|
||||
GLuint width, GLuint height);
|
||||
void st_render_texture(struct gl_context *ctx,
|
||||
struct gl_framebuffer *fb,
|
||||
struct gl_renderbuffer_attachment *att);
|
||||
|
|
Loading…
Reference in New Issue