diff options
author | Zack Rusin <zackr@vmware.com> | 2010-06-17 10:47:10 -0400 |
---|---|---|
committer | Zack Rusin <zackr@vmware.com> | 2010-06-17 10:47:10 -0400 |
commit | 91862051f98e646647906bb15aec5c5d537f87e4 (patch) | |
tree | 74c75f7c029dc29fe99a671e9002608a604904fe /src/gallium/auxiliary/draw/draw_pt_so_emit.c | |
parent | c85971da31276f17f90fe7d7596c24b5daa204f9 (diff) |
draw: validate stream output buffers
fixes a crash.
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_pt_so_emit.c')
-rw-r--r-- | src/gallium/auxiliary/draw/draw_pt_so_emit.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pt_so_emit.c b/src/gallium/auxiliary/draw/draw_pt_so_emit.c index 84555a73c4..5d82934889 100644 --- a/src/gallium/auxiliary/draw/draw_pt_so_emit.c +++ b/src/gallium/auxiliary/draw/draw_pt_so_emit.c @@ -57,6 +57,20 @@ void draw_pt_so_emit_prepare(struct pt_so_emit *emit) emit->has_so = (draw->so.state.num_outputs > 0); + /* if we have a state with outputs make sure we have + * buffers to output to */ + if (emit->has_so) { + boolean has_valid_buffer = FALSE; + unsigned i; + for (i = 0; i < draw->so.num_buffers; ++i) { + if (draw->so.buffers[i]) { + has_valid_buffer = TRUE; + break; + } + } + emit->has_so = has_valid_buffer; + } + if (!emit->has_so) return; @@ -240,8 +254,9 @@ void draw_pt_so_emit( struct pt_so_emit *emit, emit->emitted_primitives = 0; emit->input_vertex_stride = input_verts->stride; emit->inputs = (const float (*)[4])input_verts->verts->data; - for (i = 0; i < draw->so.num_buffers; ++i) + for (i = 0; i < draw->so.num_buffers; ++i) { emit->buffers[i] = draw->so.buffers[i]; + } emit->single_buffer = TRUE; for (i = 0; i < draw->so.state.num_outputs; ++i) { if (draw->so.state.output_buffer[i] != 0) |