[Mesa-dev] [PATCH 4/6] gallium: remove pipe_vertex_buffer::max_index
José Fonseca
jfonseca at vmware.com
Mon Feb 14 09:58:59 PST 2011
Marek,
I'm OK with removing pipe_vertex_buffer::max_index but there is a bit
more work involved, as they are not really equivalent in the guarantees.
pipe_vertex_buffer::max_index is an attribute of the vertex buffer -- it
describe the max index that can be fetch from the buffer without running
into a buffer overflow. It is an hard limit -- it must be set
accurately by the state tracker or crashes will occur. It can be
removed because it can be derived from the vertex element size, vertex
element stride, vertex buffer offset, and vertex buffer size.
pipe_draw_info::max_index is an attribute of the index buffer: it
describes the maximum index in the index buffer. It is an hint -- there
may be higher indices in the index buffer, and if so it is OK for the
driver to ignore those vertices, but it should not crash with a buffer
overflow.
Therefore, in order to safely remove pipe_vertex_buffer::max_index, we
should compute the max_index inside the draw module / pipe drivers, and
ensure vertices with higher indices will never be removed.
There are a few places in this patch where you replace
pipe_vertex_buffer::max_index with ~0 or no checks, which means that
places which where previous robust to pipe_draw_info::max_index == ~0
and bogus indices will now start crashing.
Jose
On Sat, 2011-02-12 at 11:04 -0800, Marek Olšák wrote:
> This is redundant to pipe_draw_info::max_index and doesn't really fit
> in the optimizations I plan.
> ---
> src/gallium/auxiliary/draw/draw_llvm.c | 17 ++++-------------
> src/gallium/auxiliary/draw/draw_llvm.h | 5 +----
> src/gallium/auxiliary/draw/draw_pt.c | 3 +--
> src/gallium/auxiliary/draw/draw_pt_fetch.c | 4 ++--
> src/gallium/auxiliary/draw/draw_pt_fetch_emit.c | 2 +-
> .../auxiliary/draw/draw_pt_fetch_shade_emit.c | 2 +-
> src/gallium/auxiliary/util/u_draw_quad.c | 1 -
> src/gallium/auxiliary/util/u_dump_state.c | 1 -
> src/gallium/docs/d3d11ddi.txt | 1 -
> src/gallium/drivers/svga/svga_state_vs.c | 2 +-
> src/gallium/drivers/trace/tr_dump_state.c | 1 -
> src/gallium/include/pipe/p_state.h | 1 -
> .../state_trackers/d3d1x/dxgi/src/dxgi_native.cpp | 1 -
> .../state_trackers/d3d1x/gd3d11/d3d11_context.h | 1 -
> src/gallium/state_trackers/vega/polygon.c | 2 --
> src/gallium/tests/graw/fs-test.c | 1 -
> src/gallium/tests/graw/gs-test.c | 2 --
> src/gallium/tests/graw/quad-tex.c | 1 -
> src/gallium/tests/graw/shader-leak.c | 1 -
> src/gallium/tests/graw/tri-gs.c | 1 -
> src/gallium/tests/graw/tri-instanced.c | 2 --
> src/gallium/tests/graw/tri.c | 1 -
> src/gallium/tests/graw/vs-test.c | 1 -
> src/mesa/state_tracker/st_draw.c | 5 -----
> src/mesa/state_tracker/st_draw_feedback.c | 1 -
> 25 files changed, 11 insertions(+), 49 deletions(-)
>
> diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c
> index a73bdd7..a5217c1 100644
> --- a/src/gallium/auxiliary/draw/draw_llvm.c
> +++ b/src/gallium/auxiliary/draw/draw_llvm.c
> @@ -214,13 +214,12 @@ static LLVMTypeRef
> create_jit_vertex_buffer_type(struct gallivm_state *gallivm)
> {
> LLVMTargetDataRef target = gallivm->target;
> - LLVMTypeRef elem_types[4];
> + LLVMTypeRef elem_types[3];
> LLVMTypeRef vb_type;
>
> elem_types[0] =
> - elem_types[1] =
> - elem_types[2] = LLVMInt32TypeInContext(gallivm->context);
> - elem_types[3] = LLVMPointerType(LLVMInt8TypeInContext(gallivm->context), 0); /* vs_constants */
> + elem_types[1] = LLVMInt32TypeInContext(gallivm->context);
> + elem_types[2] = LLVMPointerType(LLVMInt8TypeInContext(gallivm->context), 0); /* vs_constants */
>
> vb_type = LLVMStructTypeInContext(gallivm->context, elem_types,
> Elements(elem_types), 0);
> @@ -229,10 +228,8 @@ create_jit_vertex_buffer_type(struct gallivm_state *gallivm)
>
> LP_CHECK_MEMBER_OFFSET(struct pipe_vertex_buffer, stride,
> target, vb_type, 0);
> - LP_CHECK_MEMBER_OFFSET(struct pipe_vertex_buffer, max_index,
> - target, vb_type, 1);
> LP_CHECK_MEMBER_OFFSET(struct pipe_vertex_buffer, buffer_offset,
> - target, vb_type, 2);
> + target, vb_type, 1);
>
> LP_CHECK_STRUCT_SIZE(struct pipe_vertex_buffer, target, vb_type);
>
> @@ -513,9 +510,7 @@ generate_fetch(struct gallivm_state *gallivm,
> LLVMValueRef vbuffer_ptr = LLVMBuildGEP(builder, vbuffers_ptr,
> &indices, 1, "");
> LLVMValueRef vb_stride = draw_jit_vbuffer_stride(gallivm, vbuf);
> - LLVMValueRef vb_max_index = draw_jit_vbuffer_max_index(gallivm, vbuf);
> LLVMValueRef vb_buffer_offset = draw_jit_vbuffer_offset(gallivm, vbuf);
> - LLVMValueRef cond;
> LLVMValueRef stride;
>
> if (velem->instance_divisor) {
> @@ -525,10 +520,6 @@ generate_fetch(struct gallivm_state *gallivm,
> "instance_divisor");
> }
>
> - /* limit index to min(index, vb_max_index) */
> - cond = LLVMBuildICmp(builder, LLVMIntULE, index, vb_max_index, "");
> - index = LLVMBuildSelect(builder, cond, index, vb_max_index, "");
> -
> stride = LLVMBuildMul(builder, vb_stride, index, "");
>
> vbuffer_ptr = LLVMBuildLoad(builder, vbuffer_ptr, "vbuffer");
> diff --git a/src/gallium/auxiliary/draw/draw_llvm.h b/src/gallium/auxiliary/draw/draw_llvm.h
> index 9f038f1..e8623e7 100644
> --- a/src/gallium/auxiliary/draw/draw_llvm.h
> +++ b/src/gallium/auxiliary/draw/draw_llvm.h
> @@ -133,11 +133,8 @@ struct draw_jit_context
> #define draw_jit_vbuffer_stride(_gallivm, _ptr) \
> lp_build_struct_get(_gallivm, _ptr, 0, "stride")
>
> -#define draw_jit_vbuffer_max_index(_gallivm, _ptr) \
> - lp_build_struct_get(_gallivm, _ptr, 1, "max_index")
> -
> #define draw_jit_vbuffer_offset(_gallivm, _ptr) \
> - lp_build_struct_get(_gallivm, _ptr, 2, "buffer_offset")
> + lp_build_struct_get(_gallivm, _ptr, 1, "buffer_offset")
>
>
> typedef int
> diff --git a/src/gallium/auxiliary/draw/draw_pt.c b/src/gallium/auxiliary/draw/draw_pt.c
> index 4078b2a..c3d7e87 100644
> --- a/src/gallium/auxiliary/draw/draw_pt.c
> +++ b/src/gallium/auxiliary/draw/draw_pt.c
> @@ -459,10 +459,9 @@ draw_vbo(struct draw_context *draw,
> }
> debug_printf("Buffers:\n");
> for (i = 0; i < draw->pt.nr_vertex_buffers; i++) {
> - debug_printf(" %u: stride=%u maxindex=%u offset=%u ptr=%p\n",
> + debug_printf(" %u: stride=%u offset=%u ptr=%p\n",
> i,
> draw->pt.vertex_buffer[i].stride,
> - draw->pt.vertex_buffer[i].max_index,
> draw->pt.vertex_buffer[i].buffer_offset,
> draw->pt.user.vbuffer[i]);
> }
> diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch.c b/src/gallium/auxiliary/draw/draw_pt_fetch.c
> index ae12ee2..4fa3b26 100644
> --- a/src/gallium/auxiliary/draw/draw_pt_fetch.c
> +++ b/src/gallium/auxiliary/draw/draw_pt_fetch.c
> @@ -139,7 +139,7 @@ void draw_pt_fetch_run( struct pt_fetch *fetch,
> ((char *)draw->pt.user.vbuffer[i] +
> draw->pt.vertex_buffer[i].buffer_offset),
> draw->pt.vertex_buffer[i].stride,
> - draw->pt.vertex_buffer[i].max_index);
> + draw->pt.user.max_index);
> }
>
> translate->run_elts( translate,
> @@ -166,7 +166,7 @@ void draw_pt_fetch_run_linear( struct pt_fetch *fetch,
> ((char *)draw->pt.user.vbuffer[i] +
> draw->pt.vertex_buffer[i].buffer_offset),
> draw->pt.vertex_buffer[i].stride,
> - draw->pt.vertex_buffer[i].max_index);
> + draw->pt.user.max_index);
> }
>
> translate->run( translate,
> diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_emit.c b/src/gallium/auxiliary/draw/draw_pt_fetch_emit.c
> index e706b77..5104310 100644
> --- a/src/gallium/auxiliary/draw/draw_pt_fetch_emit.c
> +++ b/src/gallium/auxiliary/draw/draw_pt_fetch_emit.c
> @@ -186,7 +186,7 @@ static void fetch_emit_prepare( struct draw_pt_middle_end *middle,
> ((char *)draw->pt.user.vbuffer[i] +
> draw->pt.vertex_buffer[i].buffer_offset),
> draw->pt.vertex_buffer[i].stride,
> - draw->pt.vertex_buffer[i].max_index);
> + draw->pt.user.max_index);
> }
>
> *max_vertices = (draw->render->max_vertex_buffer_bytes /
> diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
> index c98fb3d..1e926fb 100644
> --- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
> +++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
> @@ -169,7 +169,7 @@ static void fse_prepare( struct draw_pt_middle_end *middle,
> ((const ubyte *) draw->pt.user.vbuffer[i] +
> draw->pt.vertex_buffer[i].buffer_offset),
> draw->pt.vertex_buffer[i].stride,
> - draw->pt.vertex_buffer[i].max_index );
> + draw->pt.user.max_index );
> }
>
> *max_vertices = (draw->render->max_vertex_buffer_bytes /
> diff --git a/src/gallium/auxiliary/util/u_draw_quad.c b/src/gallium/auxiliary/util/u_draw_quad.c
> index 2747cd4..0defd91 100644
> --- a/src/gallium/auxiliary/util/u_draw_quad.c
> +++ b/src/gallium/auxiliary/util/u_draw_quad.c
> @@ -56,7 +56,6 @@ util_draw_vertex_buffer(struct pipe_context *pipe,
> vbuffer.buffer = vbuf;
> vbuffer.stride = num_attribs * 4 * sizeof(float); /* vertex size */
> vbuffer.buffer_offset = offset;
> - vbuffer.max_index = num_verts - 1;
>
> if (cso) {
> cso_set_vertex_buffers(cso, 1, &vbuffer);
> diff --git a/src/gallium/auxiliary/util/u_dump_state.c b/src/gallium/auxiliary/util/u_dump_state.c
> index b471d59..5ecf8cb 100644
> --- a/src/gallium/auxiliary/util/u_dump_state.c
> +++ b/src/gallium/auxiliary/util/u_dump_state.c
> @@ -681,7 +681,6 @@ util_dump_vertex_buffer(struct os_stream *stream, const struct pipe_vertex_buffe
> util_dump_struct_begin(stream, "pipe_vertex_buffer");
>
> util_dump_member(stream, uint, state, stride);
> - util_dump_member(stream, uint, state, max_index);
> util_dump_member(stream, uint, state, buffer_offset);
> util_dump_member(stream, ptr, state, buffer);
>
> diff --git a/src/gallium/docs/d3d11ddi.txt b/src/gallium/docs/d3d11ddi.txt
> index 11e7719..0a9e7e5 100644
> --- a/src/gallium/docs/d3d11ddi.txt
> +++ b/src/gallium/docs/d3d11ddi.txt
> @@ -337,7 +337,6 @@ IaSetTopology
> + Gallium supports line loops, triangle fans, quads, quad strips and polygons
>
> IaSetVertexBuffers -> set_vertex_buffers
> - + Gallium allows to specify a max_index here
> - Gallium only allows setting all vertex buffers at once, while D3D11 supports setting a subset
>
> OpenResource -> texture_from_handle
> diff --git a/src/gallium/drivers/svga/svga_state_vs.c b/src/gallium/drivers/svga/svga_state_vs.c
> index 6682a1e..ae9a20e 100644
> --- a/src/gallium/drivers/svga/svga_state_vs.c
> +++ b/src/gallium/drivers/svga/svga_state_vs.c
> @@ -229,7 +229,7 @@ static int update_zero_stride( struct svga_context *svga,
>
> translate->set_buffer(translate, vel->vertex_buffer_index,
> mapped_buffer,
> - vbuffer->stride, vbuffer->max_index);
> + vbuffer->stride, ~0);
> translate->run(translate, 0, 1, 0,
> svga->curr.zero_stride_constants);
>
> diff --git a/src/gallium/drivers/trace/tr_dump_state.c b/src/gallium/drivers/trace/tr_dump_state.c
> index 155c869..1880565 100644
> --- a/src/gallium/drivers/trace/tr_dump_state.c
> +++ b/src/gallium/drivers/trace/tr_dump_state.c
> @@ -517,7 +517,6 @@ void trace_dump_vertex_buffer(const struct pipe_vertex_buffer *state)
> trace_dump_struct_begin("pipe_vertex_buffer");
>
> trace_dump_member(uint, state, stride);
> - trace_dump_member(uint, state, max_index);
> trace_dump_member(uint, state, buffer_offset);
> trace_dump_member(resource_ptr, state, buffer);
>
> diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
> index 574a7a8..cf6c5b5 100644
> --- a/src/gallium/include/pipe/p_state.h
> +++ b/src/gallium/include/pipe/p_state.h
> @@ -408,7 +408,6 @@ struct pipe_transfer
> struct pipe_vertex_buffer
> {
> unsigned stride; /**< stride to same attrib in next vertex, in bytes */
> - unsigned max_index; /**< number of vertices in this buffer */
> unsigned buffer_offset; /**< offset to start of data in buffer, in bytes */
> struct pipe_resource *buffer; /**< the actual buffer */
> };
> diff --git a/src/gallium/state_trackers/d3d1x/dxgi/src/dxgi_native.cpp b/src/gallium/state_trackers/d3d1x/dxgi/src/dxgi_native.cpp
> index 2ff24e1..61cf2dd 100644
> --- a/src/gallium/state_trackers/d3d1x/dxgi/src/dxgi_native.cpp
> +++ b/src/gallium/state_trackers/d3d1x/dxgi/src/dxgi_native.cpp
> @@ -796,7 +796,6 @@ struct dxgi_blitter
>
> vbuf.buffer = pipe_buffer_create(pipe->screen, PIPE_BIND_VERTEX_BUFFER, sizeof(quad_data));
> vbuf.buffer_offset = 0;
> - vbuf.max_index = ~0;
> vbuf.stride = 4 * sizeof(float);
> pipe_buffer_write(pipe, vbuf.buffer, 0, sizeof(quad_data), quad_data);
>
> diff --git a/src/gallium/state_trackers/d3d1x/gd3d11/d3d11_context.h b/src/gallium/state_trackers/d3d1x/gd3d11/d3d11_context.h
> index e1ba6c1..542d659 100644
> --- a/src/gallium/state_trackers/d3d1x/gd3d11/d3d11_context.h
> +++ b/src/gallium/state_trackers/d3d1x/gd3d11/d3d11_context.h
> @@ -623,7 +623,6 @@ struct GalliumD3D10Device : public GalliumD3D10ScreenImpl<threadsafe>
> vertex_buffers[start + i].buffer = buffer ? ((GalliumD3D11Buffer*)buffer)->resource : 0;
> vertex_buffers[start + i].buffer_offset = new_offsets[i];
> vertex_buffers[start + i].stride = new_strides[i];
> - vertex_buffers[start + i].max_index = ~0;
> last_different = i;
> }
> }
> diff --git a/src/gallium/state_trackers/vega/polygon.c b/src/gallium/state_trackers/vega/polygon.c
> index a491de2..bcc5cb2 100644
> --- a/src/gallium/state_trackers/vega/polygon.c
> +++ b/src/gallium/state_trackers/vega/polygon.c
> @@ -303,7 +303,6 @@ void polygon_fill(struct polygon *poly, struct vg_context *ctx)
> vbuffer.buffer = poly->vbuf;
> vbuffer.stride = COMPONENTS * sizeof(float); /* vertex size */
> vbuffer.buffer_offset = 0;
> - vbuffer.max_index = poly->num_verts - 1;
>
> renderer_polygon_stencil_begin(ctx->renderer,
> &velement, ctx->state.vg.fill_rule, VG_FALSE);
> @@ -354,7 +353,6 @@ void polygon_array_fill(struct polygon_array *polyarray, struct vg_context *ctx)
>
> polygon_prepare_buffer(ctx, poly);
> vbuffer.buffer = poly->vbuf;
> - vbuffer.max_index = poly->num_verts - 1;
>
> renderer_polygon_stencil(ctx->renderer, &vbuffer,
> PIPE_PRIM_TRIANGLE_FAN, 0, (VGuint) poly->num_verts);
> diff --git a/src/gallium/tests/graw/fs-test.c b/src/gallium/tests/graw/fs-test.c
> index d21eb44..ff82b60 100644
> --- a/src/gallium/tests/graw/fs-test.c
> +++ b/src/gallium/tests/graw/fs-test.c
> @@ -215,7 +215,6 @@ static void set_vertices( void )
>
>
> vbuf.stride = sizeof( struct vertex );
> - vbuf.max_index = sizeof(vertices) / vbuf.stride;
> vbuf.buffer_offset = 0;
> vbuf.buffer = screen->user_buffer_create(screen,
> vertices,
> diff --git a/src/gallium/tests/graw/gs-test.c b/src/gallium/tests/graw/gs-test.c
> index 0c65390..cc05889 100644
> --- a/src/gallium/tests/graw/gs-test.c
> +++ b/src/gallium/tests/graw/gs-test.c
> @@ -251,13 +251,11 @@ static void set_vertices( void )
> vbuf.stride = sizeof( struct vertex );
> vbuf.buffer_offset = 0;
> if (draw_strip) {
> - vbuf.max_index = sizeof(vertices_strip) / vbuf.stride;
> vbuf.buffer = screen->user_buffer_create(screen,
> vertices_strip,
> sizeof(vertices_strip),
> PIPE_BIND_VERTEX_BUFFER);
> } else {
> - vbuf.max_index = sizeof(vertices) / vbuf.stride;
> vbuf.buffer = screen->user_buffer_create(screen,
> vertices,
> sizeof(vertices),
> diff --git a/src/gallium/tests/graw/quad-tex.c b/src/gallium/tests/graw/quad-tex.c
> index 58ca639..4e66813 100644
> --- a/src/gallium/tests/graw/quad-tex.c
> +++ b/src/gallium/tests/graw/quad-tex.c
> @@ -97,7 +97,6 @@ static void set_vertices( void )
>
>
> vbuf.stride = sizeof( struct vertex );
> - vbuf.max_index = sizeof(vertices) / vbuf.stride;
> vbuf.buffer_offset = 0;
> vbuf.buffer = screen->user_buffer_create(screen,
> vertices,
> diff --git a/src/gallium/tests/graw/shader-leak.c b/src/gallium/tests/graw/shader-leak.c
> index 9af76f5..a23ca73 100644
> --- a/src/gallium/tests/graw/shader-leak.c
> +++ b/src/gallium/tests/graw/shader-leak.c
> @@ -88,7 +88,6 @@ static void set_vertices( void )
>
>
> vbuf.stride = sizeof(struct vertex);
> - vbuf.max_index = sizeof(vertices) / vbuf.stride;
> vbuf.buffer_offset = 0;
> vbuf.buffer = screen->user_buffer_create(screen,
> vertices,
> diff --git a/src/gallium/tests/graw/tri-gs.c b/src/gallium/tests/graw/tri-gs.c
> index a1a00b3..47b7653 100644
> --- a/src/gallium/tests/graw/tri-gs.c
> +++ b/src/gallium/tests/graw/tri-gs.c
> @@ -89,7 +89,6 @@ static void set_vertices( void )
>
>
> vbuf.stride = sizeof( struct vertex );
> - vbuf.max_index = sizeof(vertices) / vbuf.stride;
> vbuf.buffer_offset = 0;
> vbuf.buffer = screen->user_buffer_create(screen,
> vertices,
> diff --git a/src/gallium/tests/graw/tri-instanced.c b/src/gallium/tests/graw/tri-instanced.c
> index f61d8b9..259b3d9 100644
> --- a/src/gallium/tests/graw/tri-instanced.c
> +++ b/src/gallium/tests/graw/tri-instanced.c
> @@ -132,7 +132,6 @@ static void set_vertices( void )
>
> /* vertex data */
> vbuf[0].stride = sizeof( struct vertex );
> - vbuf[0].max_index = sizeof(vertices) / vbuf[0].stride;
> vbuf[0].buffer_offset = 0;
> vbuf[0].buffer = screen->user_buffer_create(screen,
> vertices,
> @@ -141,7 +140,6 @@ static void set_vertices( void )
>
> /* instance data */
> vbuf[1].stride = sizeof( inst_data[0] );
> - vbuf[1].max_index = sizeof(inst_data) / vbuf[1].stride;
> vbuf[1].buffer_offset = 0;
> vbuf[1].buffer = screen->user_buffer_create(screen,
> inst_data,
> diff --git a/src/gallium/tests/graw/tri.c b/src/gallium/tests/graw/tri.c
> index 006d61c..4266c03 100644
> --- a/src/gallium/tests/graw/tri.c
> +++ b/src/gallium/tests/graw/tri.c
> @@ -93,7 +93,6 @@ static void set_vertices( void )
>
>
> vbuf.stride = sizeof( struct vertex );
> - vbuf.max_index = sizeof(vertices) / vbuf.stride;
> vbuf.buffer_offset = 0;
> vbuf.buffer = screen->user_buffer_create(screen,
> vertices,
> diff --git a/src/gallium/tests/graw/vs-test.c b/src/gallium/tests/graw/vs-test.c
> index 1358fa8..dd64d8b 100644
> --- a/src/gallium/tests/graw/vs-test.c
> +++ b/src/gallium/tests/graw/vs-test.c
> @@ -171,7 +171,6 @@ static void set_vertices( void )
> }
>
> vbuf.stride = sizeof( struct vertex );
> - vbuf.max_index = sizeof(vertices) / vbuf.stride;
> vbuf.buffer_offset = 0;
> vbuf.buffer = screen->user_buffer_create(screen,
> vertices,
> diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
> index d9b99a3..4cbcecf 100644
> --- a/src/mesa/state_tracker/st_draw.c
> +++ b/src/mesa/state_tracker/st_draw.c
> @@ -384,7 +384,6 @@ setup_interleaved_attribs(struct gl_context *ctx,
> vbuffer->buffer_offset = pointer_to_offset(low);
> }
> vbuffer->stride = stride; /* in bytes */
> - vbuffer->max_index = max_index;
> }
>
> /*
> @@ -488,10 +487,6 @@ setup_non_interleaved_attribs(struct gl_context *ctx,
>
> /* common-case setup */
> vbuffer[attr].stride = stride; /* in bytes */
> - if (arrays[mesaAttr]->InstanceDivisor)
> - vbuffer[attr].max_index = arrays[mesaAttr]->_MaxElement;
> - else
> - vbuffer[attr].max_index = max_index;
>
> velements[attr].src_offset = 0;
> velements[attr].instance_divisor = arrays[mesaAttr]->InstanceDivisor;
> diff --git a/src/mesa/state_tracker/st_draw_feedback.c b/src/mesa/state_tracker/st_draw_feedback.c
> index 545b32d..1e1220b 100644
> --- a/src/mesa/state_tracker/st_draw_feedback.c
> +++ b/src/mesa/state_tracker/st_draw_feedback.c
> @@ -179,7 +179,6 @@ st_feedback_draw_vbo(struct gl_context *ctx,
>
> /* common-case setup */
> vbuffers[attr].stride = arrays[mesaAttr]->StrideB; /* in bytes */
> - vbuffers[attr].max_index = max_index;
> velements[attr].instance_divisor = 0;
> velements[attr].vertex_buffer_index = attr;
> velements[attr].src_format =
> --
> 1.7.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list