diff options
Diffstat (limited to 'src/gallium/drivers/svga/svga_draw_elements.c')
-rw-r--r-- | src/gallium/drivers/svga/svga_draw_elements.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/gallium/drivers/svga/svga_draw_elements.c b/src/gallium/drivers/svga/svga_draw_elements.c index 7d420c6b29..cf61144c9a 100644 --- a/src/gallium/drivers/svga/svga_draw_elements.c +++ b/src/gallium/drivers/svga/svga_draw_elements.c @@ -113,6 +113,7 @@ svga_hwtnl_simple_draw_range_elements( struct svga_hwtnl *hwtnl, unsigned hw_count; unsigned index_offset = start * index_size; int ret = PIPE_OK; + unsigned i, src_offs; hw_prim = svga_translate_prim(prim, count, &hw_count); if (hw_count == 0) @@ -142,6 +143,21 @@ svga_hwtnl_simple_draw_range_elements( struct svga_hwtnl *hwtnl, index_buffer = upload_buffer; } + for (i = 0; i < hwtnl->cmd.vdecl_count; i++) { + struct pipe_resource *vb = hwtnl->cmd.vdecl_vb[i]; + struct svga_buffer *sbuf = svga_buffer(vb); + unsigned stride = hwtnl->cmd.vdecl[i].array.stride; + unsigned tmp_src_offs = sbuf->source_offset; + + if (stride) + tmp_src_offs /= stride; + assert(i == 0 || tmp_src_offs == src_offs); + src_offs = tmp_src_offs; + } + + index_bias -= src_offs; + assert(index_bias >= 0); + range.primType = hw_prim; range.primitiveCount = hw_count; range.indexArray.offset = index_offset; |