From bb8ebec76e94955c14bf7e0ba22c953f94ce988d Mon Sep 17 00:00:00 2001 From: Andreas Boll Date: Mon, 3 Jun 2013 16:32:12 +0200 Subject: XXX apply changes from 14bb957b996dcc5392b8fa589bd3ffa5c55cb6b4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 14bb957b996dcc5392b8fa589bd3ffa5c55cb6b4 Author: Marek Olšák Date: Fri Dec 9 17:00:23 2011 +0100 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. --- src/mesa/state_tracker/st_draw.h | 3 ++- src/mesa/state_tracker/st_draw_select_emul.c | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/mesa/state_tracker/st_draw.h b/src/mesa/state_tracker/st_draw.h index 4b5e497c51..404faf2699 100644 --- a/src/mesa/state_tracker/st_draw.h +++ b/src/mesa/state_tracker/st_draw.h @@ -95,6 +95,7 @@ st_select_draw_func(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); #endif diff --git a/src/mesa/state_tracker/st_draw_select_emul.c b/src/mesa/state_tracker/st_draw_select_emul.c index 444b4faf96..d37da55926 100644 --- a/src/mesa/state_tracker/st_draw_select_emul.c +++ b/src/mesa/state_tracker/st_draw_select_emul.c @@ -382,7 +382,8 @@ st_select_draw_func(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) { GLboolean saved_scissorEnabled; struct gl_framebuffer *saved_fbo = NULL; @@ -444,7 +445,7 @@ st_select_draw_func(struct gl_context *ctx, cso_set_viewport(st->cso_context, &state_viewport); /* draw */ - st_draw_vbo(ctx, prims, nr_prims, ib, index_bounds_valid, min_index, max_index); + st_draw_vbo(ctx, prims, nr_prims, ib, index_bounds_valid, min_index, max_index, tfb_vertcount); } /* render max-z */ @@ -456,7 +457,7 @@ st_select_draw_func(struct gl_context *ctx, cso_set_viewport(st->cso_context, &state_viewport); /* draw */ - st_draw_vbo(ctx, prims, nr_prims, ib, index_bounds_valid, min_index, max_index); + st_draw_vbo(ctx, prims, nr_prims, ib, index_bounds_valid, min_index, max_index, tfb_vertcount); } /* XXX: needs flushing? */ -- cgit v1.2.3