[Mesa-dev] [PATCH] svga: avoid emitting redundant SetIndexBuffer commands
Jose Fonseca
jfonseca at vmware.com
Fri Dec 11 08:13:00 PST 2015
On 10/12/15 21:09, Brian Paul wrote:
> ---
> src/gallium/drivers/svga/svga_context.h | 4 ++++
> src/gallium/drivers/svga/svga_draw.c | 17 ++++++++++++-----
> 2 files changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/src/gallium/drivers/svga/svga_context.h b/src/gallium/drivers/svga/svga_context.h
> index c4284cc..db9491b 100644
> --- a/src/gallium/drivers/svga/svga_context.h
> +++ b/src/gallium/drivers/svga/svga_context.h
> @@ -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];
> diff --git a/src/gallium/drivers/svga/svga_draw.c b/src/gallium/drivers/svga/svga_draw.c
> index cca499a..2d3631d 100644
> --- a/src/gallium/drivers/svga/svga_draw.c
> +++ b/src/gallium/drivers/svga/svga_draw.c
> @@ -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,
>
Reviewed-by: Jose Fonseca <jfonseca at vmware.com>
More information about the mesa-dev
mailing list