diff options
author | Marek Olšák <[email protected]> | 2011-12-09 17:00:23 +0100 |
---|---|---|
committer | Christoph Bumiller <[email protected]> | 2011-12-15 18:50:44 +0100 |
commit | 14bb957b996dcc5392b8fa589bd3ffa5c55cb6b4 (patch) | |
tree | 1dce64c3156c0df8ab638050dcc62365b6fb8197 /src/mesa/state_tracker | |
parent | 3baaa1bbd72f67f6bc7374b2b6a16b0322006a65 (diff) |
mesa: implement DrawTransformFeedback from ARB_transform_feedback2
It's like DrawArrays, but the count is taken from a transform feedback
object.
This removes DrawTransformFeedback from dd_function_table and adds the same
function to GLvertexformat (with the function parameters matching GL).
The vbo_draw_func callback has a new parameter
"struct gl_transform_feedback_object *tfb_vertcount".
The rest of the code just validates states and forwards the transform
feedback object into vbo_draw_func.
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r-- | src/mesa/state_tracker/st_cb_rasterpos.c | 3 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_xformfb.c | 13 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_draw.c | 4 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_draw.h | 6 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_draw_feedback.c | 3 |
5 files changed, 11 insertions, 18 deletions
diff --git a/src/mesa/state_tracker/st_cb_rasterpos.c b/src/mesa/state_tracker/st_cb_rasterpos.c index 32d465c5cce..2c21dc9a776 100644 --- a/src/mesa/state_tracker/st_cb_rasterpos.c +++ b/src/mesa/state_tracker/st_cb_rasterpos.c @@ -251,7 +251,8 @@ st_RasterPos(struct gl_context *ctx, const GLfloat v[4]) rs->array[0].Ptr = (GLubyte *) v; /* draw the point */ - st_feedback_draw_vbo(ctx, rs->arrays, &rs->prim, 1, NULL, GL_TRUE, 0, 1); + st_feedback_draw_vbo(ctx, rs->arrays, &rs->prim, 1, NULL, GL_TRUE, 0, 1, + NULL); /* restore draw's rasterization stage depending on rendermode */ if (ctx->RenderMode == GL_FEEDBACK) { diff --git a/src/mesa/state_tracker/st_cb_xformfb.c b/src/mesa/state_tracker/st_cb_xformfb.c index e415b186aa7..a17b54d326e 100644 --- a/src/mesa/state_tracker/st_cb_xformfb.c +++ b/src/mesa/state_tracker/st_cb_xformfb.c @@ -105,18 +105,6 @@ st_resume_transform_feedback(struct gl_context *ctx, } -static void -st_draw_transform_feedback(struct gl_context *ctx, GLenum mode, - struct gl_transform_feedback_object *obj) -{ - /* XXX to do */ - /* - * Get number of vertices in obj's feedback buffer. - * Call ctx->Exec.DrawArrays(mode, 0, count); - */ -} - - void st_init_xformfb_functions(struct dd_function_table *functions) { @@ -128,7 +116,6 @@ st_init_xformfb_functions(struct dd_function_table *functions) functions->EndTransformFeedback = st_end_transform_feedback; functions->PauseTransformFeedback = st_pause_transform_feedback; functions->ResumeTransformFeedback = st_resume_transform_feedback; - functions->DrawTransformFeedback = st_draw_transform_feedback; } #endif /* FEATURE_EXT_transform_feedback */ diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index fd1c8ee4879..86478bbceba 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -926,7 +926,8 @@ st_draw_vbo(struct gl_context *ctx, const struct _mesa_index_buffer *ib, GLboolean index_bounds_valid, GLuint min_index, - GLuint max_index) + GLuint max_index, + struct gl_transform_feedback_object *tfb_vertcount) { struct st_context *st = st_context(ctx); struct pipe_context *pipe = st->pipe; @@ -939,6 +940,7 @@ st_draw_vbo(struct gl_context *ctx, /* Mesa core state should have been validated already */ assert(ctx->NewState == 0x0); + assert(!tfb_vertcount); if (ib) { /* Gallium probably doesn't want this in some cases. */ diff --git a/src/mesa/state_tracker/st_draw.h b/src/mesa/state_tracker/st_draw.h index a7b50ce977a..2623cdbb1ff 100644 --- a/src/mesa/state_tracker/st_draw.h +++ b/src/mesa/state_tracker/st_draw.h @@ -55,7 +55,8 @@ st_draw_vbo(struct gl_context *ctx, const struct _mesa_index_buffer *ib, GLboolean index_bounds_valid, GLuint min_index, - GLuint max_index); + GLuint max_index, + struct gl_transform_feedback_object *tfb_vertcount); extern void st_feedback_draw_vbo(struct gl_context *ctx, @@ -65,7 +66,8 @@ st_feedback_draw_vbo(struct gl_context *ctx, const struct _mesa_index_buffer *ib, GLboolean index_bounds_valid, GLuint min_index, - GLuint max_index); + GLuint max_index, + struct gl_transform_feedback_object *tfb_vertcount); /* Internal function: */ diff --git a/src/mesa/state_tracker/st_draw_feedback.c b/src/mesa/state_tracker/st_draw_feedback.c index a7e6a0f1b71..4c1e67495b7 100644 --- a/src/mesa/state_tracker/st_draw_feedback.c +++ b/src/mesa/state_tracker/st_draw_feedback.c @@ -97,7 +97,8 @@ st_feedback_draw_vbo(struct gl_context *ctx, const struct _mesa_index_buffer *ib, GLboolean index_bounds_valid, GLuint min_index, - GLuint max_index) + GLuint max_index, + struct gl_transform_feedback_object *tfb_vertcount) { struct st_context *st = st_context(ctx); struct pipe_context *pipe = st->pipe; |