Module: Mesa Branch: master Commit: 638a80bc075a4b58123cb9ba03993bd8bfd024cd URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=638a80bc075a4b58123cb9ba03993bd8bfd024cd
Author: Zack Rusin <za...@vmware.com> Date: Wed Jun 16 15:56:17 2010 -0400 draw: make sure we correctly iterate over output buffers on stream out we kept overwriting the first attribute of a vertex in a single-stream- out-buffer case --- src/gallium/auxiliary/draw/draw_pt_so_emit.c | 16 +++++++++++----- 1 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_pt_so_emit.c b/src/gallium/auxiliary/draw/draw_pt_so_emit.c index 1877afb..720c105 100644 --- a/src/gallium/auxiliary/draw/draw_pt_so_emit.c +++ b/src/gallium/auxiliary/draw/draw_pt_so_emit.c @@ -124,14 +124,15 @@ static void so_emit_prim(struct pt_so_emit *so, for (i = 0; i < num_vertices; ++i) { const float (*input)[4]; + unsigned total_written_compos = 0; /*debug_printf("%d) vertex index = %d (prim idx = %d)\n", i, indices[i], prim_idx);*/ input = (const float (*)[4])( (const char *)input_ptr + (indices[i] * input_vertex_stride)); for (slot = 0; slot < state->num_outputs; ++slot) { unsigned idx = state->register_index[slot]; unsigned writemask = state->register_mask[slot]; - unsigned compo; unsigned written_compos = 0; + unsigned compo; buffer = (float**)&so->buffers[state->output_buffer[slot]]; @@ -157,11 +158,16 @@ static void so_emit_prim(struct pt_so_emit *so, input[idx][2], input[idx][3]); #endif - if (!so->single_buffer) - *buffer += written_compos; + *buffer += written_compos; + total_written_compos += written_compos; + } + if (so->single_buffer) { + unsigned stride = state->stride - + sizeof(float) * total_written_compos; + + debug_assert(stride >= 0); + *buffer = (float*) (((char*)*buffer) + stride); } - if (so->single_buffer) - *buffer = (float*) (((char*)*buffer) + state->stride); } so->emitted_vertices += num_vertices; ++so->emitted_primitives; _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit