diff options
author | Brian <brian.paul@tungstengraphics.com> | 2007-09-10 16:29:23 -0600 |
---|---|---|
committer | Brian <brian.paul@tungstengraphics.com> | 2007-09-10 16:29:23 -0600 |
commit | d56a3adc30c19c8f00cb7dc585e86babfd3a79a7 (patch) | |
tree | 38004b2d716a1383978ceca10ff5f93084d1a03b /src/mesa/pipe/softpipe/sp_draw_arrays.c | |
parent | b2dfe2be6cc91c330e7fe21ea663cacfc220582d (diff) |
More work on vertex feedback / glRasterPos. Basic rasterpos works now.
Diffstat (limited to 'src/mesa/pipe/softpipe/sp_draw_arrays.c')
-rw-r--r-- | src/mesa/pipe/softpipe/sp_draw_arrays.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/mesa/pipe/softpipe/sp_draw_arrays.c b/src/mesa/pipe/softpipe/sp_draw_arrays.c index 5198a493da..7ea29a0a26 100644 --- a/src/mesa/pipe/softpipe/sp_draw_arrays.c +++ b/src/mesa/pipe/softpipe/sp_draw_arrays.c @@ -135,6 +135,19 @@ softpipe_draw_elements(struct pipe_context *pipe, draw_set_mapped_element_buffer(draw, 0, NULL); } + /* Map feedback buffers if enabled */ + if (sp->feedback.enabled) { + const uint n = sp->feedback.interleaved ? 1 : sp->feedback.num_attribs; + for (i = 0; i < n; i++) { + void *ptr = pipe->winsys->buffer_map(pipe->winsys, + sp->feedback_buffer[i].buffer, + PIPE_BUFFER_FLAG_WRITE); + draw_set_mapped_feedback_buffer(draw, i, ptr, + sp->feedback_buffer[i].size); + } + } + + /* draw! */ draw_arrays(draw, mode, start, count); @@ -152,6 +165,17 @@ softpipe_draw_elements(struct pipe_context *pipe, draw_set_mapped_element_buffer(draw, 0, NULL); } + /* Unmap feedback buffers if enabled */ + if (sp->feedback.enabled) { + const uint n = sp->feedback.interleaved ? 1 : sp->feedback.num_attribs; + for (i = 0; i < n; i++) { + pipe->winsys->buffer_unmap(pipe->winsys, + sp->feedback_buffer[i].buffer); + draw_set_mapped_feedback_buffer(draw, i, NULL, 0); + } + } + + softpipe_unmap_surfaces(sp); softpipe_unmap_constant_buffers(sp); |