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