i965: Create a new brw_transform_feedback_object subclass.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 24 May 2013 08:29:14 +0000 (01:29 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 31 Oct 2013 18:04:37 +0000 (11:04 -0700)
This adds the basic driver hooks to allocate/free the brw variant.
It doesn't contain any additional information yet, but it will soon.

v2: Use the new _mesa_init_transform_feedback_object helper function
    (requested by Eric and Ian).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/gen6_sol.c

index 8420c656b2deff5b3eb51ccb646cd98edae300e7..2df12ed423db632454fa61c33211d7ef6255f862 100644 (file)
@@ -250,6 +250,8 @@ brw_init_driver_functions(struct brw_context *brw,
 
    functions->QuerySamplesForFormat = brw_query_samples_for_format;
 
+   functions->NewTransformFeedback = brw_new_transform_feedback;
+   functions->DeleteTransformFeedback = brw_delete_transform_feedback;
    if (brw->gen >= 7) {
       functions->BeginTransformFeedback = gen7_begin_transform_feedback;
       functions->EndTransformFeedback = gen7_end_transform_feedback;
index 7aacf4f160b0b93609185de5ad612591e9d1a444..19d846de0a01ef9e6f8cdfb8a75e99004b45de1f 100644 (file)
@@ -887,6 +887,10 @@ struct intel_batchbuffer {
    } saved;
 };
 
+struct brw_transform_feedback_object {
+   struct gl_transform_feedback_object base;
+};
+
 /**
  * Data shared between each programmable stage in the pipeline (vs, gs, and
  * wm).
@@ -1574,6 +1578,11 @@ extern int intel_translate_logic_op(GLenum opcode);
 void intel_init_syncobj_functions(struct dd_function_table *functions);
 
 /* gen6_sol.c */
+struct gl_transform_feedback_object *
+brw_new_transform_feedback(struct gl_context *ctx, GLuint name);
+void
+brw_delete_transform_feedback(struct gl_context *ctx,
+                              struct gl_transform_feedback_object *obj);
 void
 brw_begin_transform_feedback(struct gl_context *ctx, GLenum mode,
                             struct gl_transform_feedback_object *obj);
index 9a3feb52e7191ee241080d5a6f920f33a0bc95e1..484be42b39012cffecc9cffacc31fe1d151aa7e0 100644 (file)
@@ -26,6 +26,7 @@
  * Code to initialize the binding table entries used by transform feedback.
  */
 
+#include "main/bufferobj.h"
 #include "main/macros.h"
 #include "brw_context.h"
 #include "intel_batchbuffer.h"
@@ -132,6 +133,34 @@ const struct brw_tracked_state gen6_gs_binding_table = {
    .emit = brw_gs_upload_binding_table,
 };
 
+struct gl_transform_feedback_object *
+brw_new_transform_feedback(struct gl_context *ctx, GLuint name)
+{
+   struct brw_context *brw = brw_context(ctx);
+   struct brw_transform_feedback_object *brw_obj =
+      CALLOC_STRUCT(brw_transform_feedback_object);
+   if (!brw_obj)
+      return NULL;
+
+   _mesa_init_transform_feedback_object(&brw_obj->base, name);
+
+   return &brw_obj->base;
+}
+
+void
+brw_delete_transform_feedback(struct gl_context *ctx,
+                              struct gl_transform_feedback_object *obj)
+{
+   struct brw_transform_feedback_object *brw_obj =
+      (struct brw_transform_feedback_object *) obj;
+
+   for (unsigned i = 0; i < Elements(obj->Buffers); i++) {
+      _mesa_reference_buffer_object(ctx, &obj->Buffers[i], NULL);
+   }
+
+   free(brw_obj);
+}
+
 void
 brw_begin_transform_feedback(struct gl_context *ctx, GLenum mode,
                             struct gl_transform_feedback_object *obj)