diff options
author | Kenneth Graunke <[email protected]> | 2013-05-24 01:29:14 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2013-10-31 11:04:37 -0700 |
commit | 0d7033c3940aa6aef7ab72dc31ab154b2e614b1b (patch) | |
tree | 01be4f5fc2dc6e31795e9b2e158f819946383064 /src/mesa | |
parent | be6227d29dcf443d9b8bae66d3d2f0b946874a83 (diff) |
i965: Create a new brw_transform_feedback_object subclass.
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 <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.h | 9 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/gen6_sol.c | 29 |
3 files changed, 40 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 8420c656b2d..2df12ed423d 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -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; diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 7aacf4f160b..19d846de0a0 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -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); diff --git a/src/mesa/drivers/dri/i965/gen6_sol.c b/src/mesa/drivers/dri/i965/gen6_sol.c index 9a3feb52e71..484be42b390 100644 --- a/src/mesa/drivers/dri/i965/gen6_sol.c +++ b/src/mesa/drivers/dri/i965/gen6_sol.c @@ -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) |