mesa: Use _mesa_delete_transform_feedback_object in drivers
authorYevhenii Kolesnikov <yevhenii.kolesnikov@globallogic.com>
Thu, 1 Aug 2019 13:05:29 +0000 (16:05 +0300)
committerEric Anholt <eric@anholt.net>
Wed, 7 Aug 2019 17:25:22 +0000 (17:25 +0000)
Function _mesa_delete_transform_feedback_object called from within
drivers once driver-specific clean-up has been done. Brings into
conformity with how other GL objects are handled.

CC: Eric Anholt <eric@anholt.net>
CC: Kenneth Graunke <kenneth@whitecape.org>
Signed-off-by: Yevhenii Kolesnikov <yevhenii.kolesnikov@globallogic.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
src/mesa/drivers/dri/i965/gen6_sol.c
src/mesa/main/transformfeedback.c
src/mesa/main/transformfeedback.h
src/mesa/state_tracker/st_cb_xformfb.c

index 1d5f26ab0c0d4569485ca0fb0a32f4f9543f20f7..bda015e6cc5b74961f7937a83c3b99160d80d600 100644 (file)
@@ -211,15 +211,10 @@ brw_delete_transform_feedback(struct gl_context *ctx,
    struct brw_transform_feedback_object *brw_obj =
       (struct brw_transform_feedback_object *) obj;
 
-   for (unsigned i = 0; i < ARRAY_SIZE(obj->Buffers); i++) {
-      _mesa_reference_buffer_object(ctx, &obj->Buffers[i], NULL);
-   }
-
    brw_bo_unreference(brw_obj->offset_bo);
    brw_bo_unreference(brw_obj->prim_count_bo);
 
-   free(obj->Label);
-   free(brw_obj);
+   _mesa_delete_transform_feedback_object(ctx, obj);
 }
 
 /**
index 8eccdc20b7664b1deea624e7c0002fd144e16cdc..06719b1ce827dda23a6c777607c809abf3008534 100644 (file)
@@ -198,6 +198,27 @@ _mesa_init_transform_feedback_object(struct gl_transform_feedback_object *obj,
    obj->EverBound = GL_FALSE;
 }
 
+/**
+ * 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
+ * has been done.
+ *
+ * \param ctx GL context to wich transform feedback object belongs.
+ * \param obj Transform feedback object due to be deleted.
+ */
+void
+_mesa_delete_transform_feedback_object(struct gl_context *ctx,
+                                       struct gl_transform_feedback_object
+                                              *obj)
+{
+   for (unsigned i = 0; i < ARRAY_SIZE(obj->Buffers); i++) {
+      _mesa_reference_buffer_object(ctx, &obj->Buffers[i], NULL);
+   }
+
+   free(obj->Label);
+   free(obj);
+}
 
 /** Default fallback for ctx->Driver.NewTransformFeedback() */
 static struct gl_transform_feedback_object *
@@ -213,22 +234,6 @@ new_transform_feedback_fallback(struct gl_context *ctx, GLuint name)
    return obj;
 }
 
-/** Default fallback for ctx->Driver.DeleteTransformFeedback() */
-static void
-delete_transform_feedback_fallback(struct gl_context *ctx,
-                                   struct gl_transform_feedback_object *obj)
-{
-   GLuint i;
-
-   for (i = 0; i < ARRAY_SIZE(obj->Buffers); i++) {
-      _mesa_reference_buffer_object(ctx, &obj->Buffers[i], NULL);
-   }
-
-   free(obj->Label);
-   free(obj);
-}
-
-
 /** Default fallback for ctx->Driver.BeginTransformFeedback() */
 static void
 begin_transform_feedback_fallback(struct gl_context *ctx, GLenum mode,
@@ -270,7 +275,7 @@ void
 _mesa_init_transform_feedback_functions(struct dd_function_table *driver)
 {
    driver->NewTransformFeedback = new_transform_feedback_fallback;
-   driver->DeleteTransformFeedback = delete_transform_feedback_fallback;
+   driver->DeleteTransformFeedback = _mesa_delete_transform_feedback_object;
    driver->BeginTransformFeedback = begin_transform_feedback_fallback;
    driver->EndTransformFeedback = end_transform_feedback_fallback;
    driver->PauseTransformFeedback = pause_transform_feedback_fallback;
index 78a6c3377dd00abb24c6a60942855ee32deb68b3..063e295a2ecf63dc4086824165d692acdb582544 100644 (file)
@@ -108,6 +108,11 @@ extern void
 _mesa_init_transform_feedback_object(struct gl_transform_feedback_object *obj,
                                      GLuint name);
 
+extern void
+_mesa_delete_transform_feedback_object(struct gl_context *ctx,
+                                       struct gl_transform_feedback_object
+                                              *obj);
+
 struct gl_transform_feedback_object *
 _mesa_lookup_transform_feedback_object(struct gl_context *ctx, GLuint name);
 
index e591c58d2b72d2687b73b7145de450dac1c8b9d5..476eb9be02bc0d4eb7b2996cf7763123ded0bf4c 100644 (file)
@@ -96,12 +96,7 @@ st_delete_transform_feedback(struct gl_context *ctx,
       pipe_so_target_reference(&sobj->targets[i], NULL);
    }
 
-   for (i = 0; i < ARRAY_SIZE(sobj->base.Buffers); i++) {
-      _mesa_reference_buffer_object(ctx, &sobj->base.Buffers[i], NULL);
-   }
-
-   free(obj->Label);
-   free(obj);
+   _mesa_delete_transform_feedback_object(ctx, obj);
 }