Mesa (main): mesa/st: move transformfeedback to direct calls

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Dec 7 13:47:27 UTC 2021


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Mon Dec  6 17:10:05 2021 +1000

mesa/st: move transformfeedback to direct calls

Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14073>

---

 src/mesa/main/dd.h                     | 15 --------------
 src/mesa/main/transformfeedback.c      | 36 +++++++++++++---------------------
 src/mesa/state_tracker/st_cb_xformfb.c | 27 +++++++------------------
 src/mesa/state_tracker/st_cb_xformfb.h | 25 ++++++++++++++++++++---
 src/mesa/state_tracker/st_context.c    |  3 ---
 5 files changed, 43 insertions(+), 63 deletions(-)

diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 27bd1d66334..97560987bfc 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -915,21 +915,6 @@ struct dd_function_table {
                                     struct gl_texture_object *texObj,
                                     struct gl_texture_image *texImage,
                                     GLeglImageOES image_handle);
-   /**
-    * \name GL_EXT_transform_feedback interface
-    */
-   struct gl_transform_feedback_object *
-        (*NewTransformFeedback)(struct gl_context *ctx, GLuint name);
-   void (*DeleteTransformFeedback)(struct gl_context *ctx,
-                                   struct gl_transform_feedback_object *obj);
-   void (*BeginTransformFeedback)(struct gl_context *ctx, GLenum mode,
-                                  struct gl_transform_feedback_object *obj);
-   void (*EndTransformFeedback)(struct gl_context *ctx,
-                                struct gl_transform_feedback_object *obj);
-   void (*PauseTransformFeedback)(struct gl_context *ctx,
-                                  struct gl_transform_feedback_object *obj);
-   void (*ResumeTransformFeedback)(struct gl_context *ctx,
-                                   struct gl_transform_feedback_object *obj);
 
    /**
     * \name GL_ARB_texture_multisample
diff --git a/src/mesa/main/transformfeedback.c b/src/mesa/main/transformfeedback.c
index 004bf5596bf..57a87f493ee 100644
--- a/src/mesa/main/transformfeedback.c
+++ b/src/mesa/main/transformfeedback.c
@@ -46,6 +46,8 @@
 
 #include "util/u_memory.h"
 
+#include "state_tracker/st_cb_xformfb.h"
+
 struct using_program_tuple
 {
    struct gl_program *prog;
@@ -105,7 +107,7 @@ reference_transform_feedback_object(struct gl_transform_feedback_object **ptr,
       if (oldObj->RefCount == 0) {
          GET_CURRENT_CONTEXT(ctx);
          if (ctx)
-            ctx->Driver.DeleteTransformFeedback(ctx, oldObj);
+            st_delete_transform_feedback(ctx, oldObj);
       }
 
       *ptr = NULL;
@@ -130,10 +132,8 @@ void
 _mesa_init_transform_feedback(struct gl_context *ctx)
 {
    /* core mesa expects this, even a dummy one, to be available */
-   assert(ctx->Driver.NewTransformFeedback);
-
    ctx->TransformFeedback.DefaultObject =
-      ctx->Driver.NewTransformFeedback(ctx, 0);
+      st_new_transform_feedback(ctx, 0);
 
    assert(ctx->TransformFeedback.DefaultObject->RefCount == 1);
 
@@ -160,7 +160,7 @@ delete_cb(void *data, void *userData)
    struct gl_transform_feedback_object *obj =
       (struct gl_transform_feedback_object *) data;
 
-   ctx->Driver.DeleteTransformFeedback(ctx, obj);
+   st_delete_transform_feedback(ctx, obj);
 }
 
 
@@ -171,8 +171,6 @@ void
 _mesa_free_transform_feedback(struct gl_context *ctx)
 {
    /* core mesa expects this, even a dummy one, to be available */
-   assert(ctx->Driver.NewTransformFeedback);
-
    _mesa_reference_buffer_object(ctx,
                                  &ctx->TransformFeedback.CurrentBuffer,
                                  NULL);
@@ -182,9 +180,8 @@ _mesa_free_transform_feedback(struct gl_context *ctx)
    _mesa_DeleteHashTable(ctx->TransformFeedback.Objects);
 
    /* Delete the default feedback object */
-   assert(ctx->Driver.DeleteTransformFeedback);
-   ctx->Driver.DeleteTransformFeedback(ctx,
-                                       ctx->TransformFeedback.DefaultObject);
+   st_delete_transform_feedback(ctx,
+                                ctx->TransformFeedback.DefaultObject);
 
    ctx->TransformFeedback.CurrentObject = NULL;
 }
@@ -201,9 +198,8 @@ _mesa_init_transform_feedback_object(struct gl_transform_feedback_object *obj,
 }
 
 /**
- * Delete a transform feedback object.  Called via
- * ctx->Driver->DeleteTransformFeedback, if not overwritten by driver.  In
- * the latter case, called from the driver after all driver-specific clean-up
+ * Delete a transform feedback object.
+ * Called from the driver after all driver-specific clean-up
  * has been done.
  *
  * \param ctx GL context to wich transform feedback object belongs.
@@ -419,8 +415,7 @@ begin_transform_feedback(struct gl_context *ctx, GLenum mode, bool no_error)
       obj->program = source;
    }
 
-   assert(ctx->Driver.BeginTransformFeedback);
-   ctx->Driver.BeginTransformFeedback(ctx, mode, obj);
+   st_begin_transform_feedback(ctx, mode, obj);
    _mesa_update_valid_to_render_state(ctx);
 }
 
@@ -448,8 +443,7 @@ end_transform_feedback(struct gl_context *ctx,
    FLUSH_VERTICES(ctx, 0, 0);
    ctx->NewDriverState |= ctx->DriverFlags.NewTransformFeedback;
 
-   assert(ctx->Driver.EndTransformFeedback);
-   ctx->Driver.EndTransformFeedback(ctx, obj);
+   st_end_transform_feedback(ctx, obj);
 
    _mesa_reference_program_(ctx, &obj->program, NULL);
    ctx->TransformFeedback.CurrentObject->Active = GL_FALSE;
@@ -1013,7 +1007,7 @@ create_transform_feedbacks(struct gl_context *ctx, GLsizei n, GLuint *ids,
       GLsizei i;
       for (i = 0; i < n; i++) {
          struct gl_transform_feedback_object *obj
-            = ctx->Driver.NewTransformFeedback(ctx, ids[i]);
+            = st_new_transform_feedback(ctx, ids[i]);
          if (!obj) {
             _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func);
             return;
@@ -1192,8 +1186,7 @@ pause_transform_feedback(struct gl_context *ctx,
    FLUSH_VERTICES(ctx, 0, 0);
    ctx->NewDriverState |= ctx->DriverFlags.NewTransformFeedback;
 
-   assert(ctx->Driver.PauseTransformFeedback);
-   ctx->Driver.PauseTransformFeedback(ctx, obj);
+   st_pause_transform_feedback(ctx, obj);
 
    obj->Paused = GL_TRUE;
    _mesa_update_valid_to_render_state(ctx);
@@ -1239,8 +1232,7 @@ resume_transform_feedback(struct gl_context *ctx,
 
    obj->Paused = GL_FALSE;
 
-   assert(ctx->Driver.ResumeTransformFeedback);
-   ctx->Driver.ResumeTransformFeedback(ctx, obj);
+   st_resume_transform_feedback(ctx, obj);
    _mesa_update_valid_to_render_state(ctx);
 }
 
diff --git a/src/mesa/state_tracker/st_cb_xformfb.c b/src/mesa/state_tracker/st_cb_xformfb.c
index 8ecf91c5e2b..9e4fdce1839 100644
--- a/src/mesa/state_tracker/st_cb_xformfb.c
+++ b/src/mesa/state_tracker/st_cb_xformfb.c
@@ -66,7 +66,7 @@ st_transform_feedback_object(struct gl_transform_feedback_object *obj)
    return (struct st_transform_feedback_object *) obj;
 }
 
-static struct gl_transform_feedback_object *
+struct gl_transform_feedback_object *
 st_new_transform_feedback(struct gl_context *ctx, GLuint name)
 {
    struct st_transform_feedback_object *obj;
@@ -81,7 +81,7 @@ st_new_transform_feedback(struct gl_context *ctx, GLuint name)
 }
 
 
-static void
+void
 st_delete_transform_feedback(struct gl_context *ctx,
                              struct gl_transform_feedback_object *obj)
 {
@@ -102,7 +102,7 @@ st_delete_transform_feedback(struct gl_context *ctx,
 
 
 /* XXX Do we really need the mode? */
-static void
+void
 st_begin_transform_feedback(struct gl_context *ctx, GLenum mode,
                             struct gl_transform_feedback_object *obj)
 {
@@ -152,16 +152,16 @@ st_begin_transform_feedback(struct gl_context *ctx, GLenum mode,
 }
 
 
-static void
+void
 st_pause_transform_feedback(struct gl_context *ctx,
-                           struct gl_transform_feedback_object *obj)
+                            struct gl_transform_feedback_object *obj)
 {
    struct st_context *st = st_context(ctx);
    cso_set_stream_outputs(st->cso_context, 0, NULL, NULL);
 }
 
 
-static void
+void
 st_resume_transform_feedback(struct gl_context *ctx,
                              struct gl_transform_feedback_object *obj)
 {
@@ -178,8 +178,7 @@ st_resume_transform_feedback(struct gl_context *ctx,
                           sobj->targets, offsets);
 }
 
-
-static void
+void
 st_end_transform_feedback(struct gl_context *ctx,
                           struct gl_transform_feedback_object *obj)
 {
@@ -223,15 +222,3 @@ st_transform_feedback_draw_init(struct gl_transform_feedback_object *obj,
    out->count_from_stream_output = sobj->draw_count[stream];
    return out->count_from_stream_output != NULL;
 }
-
-
-void
-st_init_xformfb_functions(struct dd_function_table *functions)
-{
-   functions->NewTransformFeedback = st_new_transform_feedback;
-   functions->DeleteTransformFeedback = st_delete_transform_feedback;
-   functions->BeginTransformFeedback = st_begin_transform_feedback;
-   functions->EndTransformFeedback = st_end_transform_feedback;
-   functions->PauseTransformFeedback = st_pause_transform_feedback;
-   functions->ResumeTransformFeedback = st_resume_transform_feedback;
-}
diff --git a/src/mesa/state_tracker/st_cb_xformfb.h b/src/mesa/state_tracker/st_cb_xformfb.h
index 635ebd8eed6..b51f6018766 100644
--- a/src/mesa/state_tracker/st_cb_xformfb.h
+++ b/src/mesa/state_tracker/st_cb_xformfb.h
@@ -29,12 +29,31 @@
 #define ST_CB_XFORMFB_H
 
 
-struct dd_function_table;
 struct gl_transform_feedback_object;
 struct pipe_draw_indirect_info;
 
-extern void
-st_init_xformfb_functions(struct dd_function_table *functions);
+struct gl_transform_feedback_object *
+st_new_transform_feedback(struct gl_context *ctx, GLuint name);
+
+void
+st_delete_transform_feedback(struct gl_context *ctx,
+                             struct gl_transform_feedback_object *obj);
+
+void
+st_begin_transform_feedback(struct gl_context *ctx, GLenum mode,
+                            struct gl_transform_feedback_object *obj);
+
+void
+st_pause_transform_feedback(struct gl_context *ctx,
+                            struct gl_transform_feedback_object *obj);
+
+void
+st_resume_transform_feedback(struct gl_context *ctx,
+                             struct gl_transform_feedback_object *obj);
+
+void
+st_end_transform_feedback(struct gl_context *ctx,
+                          struct gl_transform_feedback_object *obj);
 
 extern bool
 st_transform_feedback_draw_init(struct gl_transform_feedback_object *obj,
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index 73c2a81ad1d..3d4363e398c 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -64,7 +64,6 @@
 #include "st_cb_readpixels.h"
 #include "st_cb_semaphoreobjects.h"
 #include "st_cb_texture.h"
-#include "st_cb_xformfb.h"
 #include "st_cb_flush.h"
 #include "st_cb_viewport.h"
 #include "st_atom.h"
@@ -966,8 +965,6 @@ st_init_driver_functions(struct pipe_screen *screen,
    st_init_viewport_functions(functions);
    st_init_compute_functions(functions);
 
-   st_init_xformfb_functions(functions);
-
    st_init_vdpau_functions(functions);
 
    if (screen->get_param(screen, PIPE_CAP_STRING_MARKER))



More information about the mesa-commit mailing list