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
This commit is contained in:
parent
509ff13d06
commit
638a80bc07
|
@ -124,14 +124,15 @@ static void so_emit_prim(struct pt_so_emit *so,
|
||||||
|
|
||||||
for (i = 0; i < num_vertices; ++i) {
|
for (i = 0; i < num_vertices; ++i) {
|
||||||
const float (*input)[4];
|
const float (*input)[4];
|
||||||
|
unsigned total_written_compos = 0;
|
||||||
/*debug_printf("%d) vertex index = %d (prim idx = %d)\n", i, indices[i], prim_idx);*/
|
/*debug_printf("%d) vertex index = %d (prim idx = %d)\n", i, indices[i], prim_idx);*/
|
||||||
input = (const float (*)[4])(
|
input = (const float (*)[4])(
|
||||||
(const char *)input_ptr + (indices[i] * input_vertex_stride));
|
(const char *)input_ptr + (indices[i] * input_vertex_stride));
|
||||||
for (slot = 0; slot < state->num_outputs; ++slot) {
|
for (slot = 0; slot < state->num_outputs; ++slot) {
|
||||||
unsigned idx = state->register_index[slot];
|
unsigned idx = state->register_index[slot];
|
||||||
unsigned writemask = state->register_mask[slot];
|
unsigned writemask = state->register_mask[slot];
|
||||||
unsigned compo;
|
|
||||||
unsigned written_compos = 0;
|
unsigned written_compos = 0;
|
||||||
|
unsigned compo;
|
||||||
|
|
||||||
buffer = (float**)&so->buffers[state->output_buffer[slot]];
|
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][2],
|
||||||
input[idx][3]);
|
input[idx][3]);
|
||||||
#endif
|
#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_vertices += num_vertices;
|
||||||
++so->emitted_primitives;
|
++so->emitted_primitives;
|
||||||
|
|
Loading…
Reference in New Issue