svga: avoid emitting redundant SetIndexBuffer commands
Reviewed-by: Charmaine Lee <charmainel@vmware.com> Reviewed-by: José Fonseca <jfonseca@vmware.com>
This commit is contained in:
@@ -343,6 +343,10 @@ struct svga_hw_draw_state
|
||||
SVGA3dElementLayoutId layout_id;
|
||||
SVGA3dPrimitiveType topology;
|
||||
|
||||
struct svga_winsys_surface *ib; /**< index buffer for drawing */
|
||||
SVGA3dSurfaceFormat ib_format;
|
||||
unsigned ib_offset;
|
||||
|
||||
/* used for rebinding */
|
||||
unsigned num_sampler_views[PIPE_SHADER_TYPES];
|
||||
unsigned default_constbuf_size[PIPE_SHADER_TYPES];
|
||||
|
||||
@@ -539,11 +539,18 @@ draw_vgpu10(struct svga_hwtnl *hwtnl,
|
||||
SVGA3dSurfaceFormat indexFormat = xlate_index_format(range->indexWidth);
|
||||
|
||||
/* setup index buffer */
|
||||
ret = SVGA3D_vgpu10_SetIndexBuffer(svga->swc, ib_handle,
|
||||
indexFormat,
|
||||
range->indexArray.offset);
|
||||
if (ret != PIPE_OK)
|
||||
return ret;
|
||||
if (ib_handle != svga->state.hw_draw.ib ||
|
||||
indexFormat != svga->state.hw_draw.ib_format ||
|
||||
range->indexArray.offset != svga->state.hw_draw.ib_offset) {
|
||||
ret = SVGA3D_vgpu10_SetIndexBuffer(svga->swc, ib_handle,
|
||||
indexFormat,
|
||||
range->indexArray.offset);
|
||||
if (ret != PIPE_OK)
|
||||
return ret;
|
||||
svga->state.hw_draw.ib = ib_handle;
|
||||
svga->state.hw_draw.ib_format = indexFormat;
|
||||
svga->state.hw_draw.ib_offset = range->indexArray.offset;
|
||||
}
|
||||
|
||||
if (instance_count > 1) {
|
||||
ret = SVGA3D_vgpu10_DrawIndexedInstanced(svga->swc,
|
||||
|
||||
Reference in New Issue
Block a user