diff options
Diffstat (limited to 'src/gallium/auxiliary/draw')
-rw-r--r-- | src/gallium/auxiliary/draw/draw_context.h | 3 | ||||
-rw-r--r-- | src/gallium/auxiliary/draw/draw_pt.c | 8 | ||||
-rw-r--r-- | src/gallium/auxiliary/draw/draw_pt_so_emit.c | 3 |
3 files changed, 7 insertions, 7 deletions
diff --git a/src/gallium/auxiliary/draw/draw_context.h b/src/gallium/auxiliary/draw/draw_context.h index c9f933c7017..f114f503546 100644 --- a/src/gallium/auxiliary/draw/draw_context.h +++ b/src/gallium/auxiliary/draw/draw_context.h @@ -53,14 +53,13 @@ struct tgsi_sampler; * structure to contain driver internal information * for stream out support. mapping stores the pointer * to the buffer contents, and internal offset stores - * stores an internal counter to how much of the stream + * an internal counter to how much of the stream * out buffer is used (in bytes). */ struct draw_so_target { struct pipe_stream_output_target target; void *mapping; int internal_offset; - int emitted_vertices; }; struct draw_context *draw_create( struct pipe_context *pipe ); diff --git a/src/gallium/auxiliary/draw/draw_pt.c b/src/gallium/auxiliary/draw/draw_pt.c index e2ff7f9fe9f..3236e523a94 100644 --- a/src/gallium/auxiliary/draw/draw_pt.c +++ b/src/gallium/auxiliary/draw/draw_pt.c @@ -431,14 +431,16 @@ draw_pt_arrays_restart(struct draw_context *draw, */ static void resolve_draw_info(const struct pipe_draw_info *raw_info, - struct pipe_draw_info *info) + struct pipe_draw_info *info, + struct pipe_vertex_buffer *vertex_buffer) { memcpy(info, raw_info, sizeof(struct pipe_draw_info)); if (raw_info->count_from_stream_output) { struct draw_so_target *target = (struct draw_so_target *)info->count_from_stream_output; - info->count = target->emitted_vertices; + assert(vertex_buffer != NULL); + info->count = target->internal_offset / vertex_buffer->stride; /* Stream output draw can not be indexed */ debug_assert(!info->indexed); @@ -467,7 +469,7 @@ draw_vbo(struct draw_context *draw, */ util_fpstate_set_denorms_to_zero(fpstate); - resolve_draw_info(info, &resolved_info); + resolve_draw_info(info, &resolved_info, &(draw->pt.vertex_buffer[0])); info = &resolved_info; assert(info->instance_count > 0); diff --git a/src/gallium/auxiliary/draw/draw_pt_so_emit.c b/src/gallium/auxiliary/draw/draw_pt_so_emit.c index 7cef17c7cf9..bd49d0adec6 100644 --- a/src/gallium/auxiliary/draw/draw_pt_so_emit.c +++ b/src/gallium/auxiliary/draw/draw_pt_so_emit.c @@ -194,7 +194,7 @@ static void so_emit_prim(struct pt_so_emit *so, { int j; debug_printf("VERT[%d], offset = %d, slot[%d] sc = %d, num_c = %d, idx = %d = [", - i + draw->so.targets[ob]->emitted_vertices, + i, draw->so.targets[ob]->internal_offset, slot, start_comp, num_comps, idx); for (j = 0; j < num_comps; ++j) { @@ -209,7 +209,6 @@ static void so_emit_prim(struct pt_so_emit *so, struct draw_so_target *target = draw->so.targets[ob]; if (target && buffer_written[ob]) { target->internal_offset += state->stride[ob] * sizeof(float); - target->emitted_vertices += 1; } } } |