Module: Mesa
Branch: main
Commit: 21d4dd8c39d89745b18ab6f365ecb6666685dd4f
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=21d4dd8c39d89745b18ab6f365ecb6666685dd4f

Author: Dave Airlie <[email protected]>
Date:   Mon Dec 20 16:42:47 2021 +1000

mesa/st: move some renderbuffer code into mesa

Reviewed-by: Kristian H. Kristensen <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14675>

---

 src/mesa/main/fbobject.c           | 19 ++++++++++++++--
 src/mesa/main/renderbuffer.c       | 12 ++++++++++-
 src/mesa/state_tracker/st_cb_fbo.c | 44 ++------------------------------------
 src/mesa/state_tracker/st_cb_fbo.h |  6 +++++-
 4 files changed, 35 insertions(+), 46 deletions(-)

diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index c09c0cae952..96ca680393a 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -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;
diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c
index cfa0f66a1f1..97c7a95cda8 100644
--- a/src/mesa/main/renderbuffer.c
+++ b/src/mesa/main/renderbuffer.c
@@ -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);
 }
diff --git a/src/mesa/state_tracker/st_cb_fbo.c 
b/src/mesa/state_tracker/st_cb_fbo.c
index 46e0bc8a4e3..c9e72d3b7b4 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -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() */
diff --git a/src/mesa/state_tracker/st_cb_fbo.h 
b/src/mesa/state_tracker/st_cb_fbo.h
index 6a043032671..7415243605d 100644
--- a/src/mesa/state_tracker/st_cb_fbo.h
+++ b/src/mesa/state_tracker/st_cb_fbo.h
@@ -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);

Reply via email to