mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-30 00:40:25 +01:00
svga: avoid emitting redundant SetVertexBuffers() commands
Reviewed-by: Charmaine Lee <charmainel@vmware.com>
This commit is contained in:
parent
b11bd20889
commit
077aa3be93
2 changed files with 26 additions and 5 deletions
|
|
@ -345,6 +345,11 @@ struct svga_hw_draw_state
|
|||
SVGA3dElementLayoutId layout_id;
|
||||
SVGA3dPrimitiveType topology;
|
||||
|
||||
/** Vertex buffer state */
|
||||
SVGA3dVertexBuffer vbuffers[PIPE_MAX_ATTRIBS];
|
||||
struct svga_winsys_surface *vbuffer_handles[PIPE_MAX_ATTRIBS];
|
||||
unsigned num_vbuffers;
|
||||
|
||||
struct svga_winsys_surface *ib; /**< index buffer for drawing */
|
||||
SVGA3dSurfaceFormat ib_format;
|
||||
unsigned ib_offset;
|
||||
|
|
|
|||
|
|
@ -517,11 +517,27 @@ draw_vgpu10(struct svga_hwtnl *hwtnl,
|
|||
buffers[i].offset = hwtnl->cmd.vbufs[i].buffer_offset;
|
||||
}
|
||||
if (vbuf_count > 0) {
|
||||
ret = SVGA3D_vgpu10_SetVertexBuffers(svga->swc, vbuf_count,
|
||||
0, /* startBuffer */
|
||||
buffers, vb_handle);
|
||||
if (ret != PIPE_OK)
|
||||
return ret;
|
||||
/* If we haven't yet emitted a drawing command or if any
|
||||
* vertex buffer state is changing, issue that state now.
|
||||
*/
|
||||
if (((hwtnl->cmd.swc->hints & SVGA_HINT_FLAG_DRAW_EMITTED) == 0) ||
|
||||
vbuf_count != svga->state.hw_draw.num_vbuffers ||
|
||||
memcmp(buffers, svga->state.hw_draw.vbuffers,
|
||||
vbuf_count * sizeof(buffers[0])) ||
|
||||
memcmp(vb_handle, svga->state.hw_draw.vbuffer_handles,
|
||||
vbuf_count * sizeof(vb_handle[0]))) {
|
||||
ret = SVGA3D_vgpu10_SetVertexBuffers(svga->swc, vbuf_count,
|
||||
0, /* startBuffer */
|
||||
buffers, vb_handle);
|
||||
if (ret != PIPE_OK)
|
||||
return ret;
|
||||
|
||||
svga->state.hw_draw.num_vbuffers = vbuf_count;
|
||||
memcpy(svga->state.hw_draw.vbuffers, buffers,
|
||||
vbuf_count * sizeof(buffers[0]));
|
||||
memcpy(svga->state.hw_draw.vbuffer_handles, vb_handle,
|
||||
vbuf_count * sizeof(vb_handle[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue