aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2020-01-13 21:09:35 -0500
committerMarek Olšák <[email protected]>2020-01-14 13:42:36 -0500
commitf341db3e1712802a290c6a3baac826ba7cc20934 (patch)
treef81d95fe2c4ec72b77c4fc1ad89b63b5583ea02c
parentcc3ef3643a6d05f2f08b20828934807e3c49f5af (diff)
radeonsi: fix assertion and other failures in si_emit_graphics_shader_pointers
The assertion was failing. Fixes: 363b4027fcb - radeonsi: put up to 5 VBO descriptors into user SGPRs Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]>
-rw-r--r--src/gallium/drivers/radeonsi/si_descriptors.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
index 3c43911a211..193029820e5 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -2270,7 +2270,7 @@ void si_emit_graphics_shader_pointers(struct si_context *sctx)
sctx->shader_pointers_dirty &=
~u_bit_consecutive(SI_DESCS_RW_BUFFERS, SI_DESCS_FIRST_COMPUTE);
- if (sctx->vertex_buffer_pointer_dirty) {
+ if (sctx->vertex_buffer_pointer_dirty && sctx->num_vertex_elements) {
struct radeon_cmdbuf *cs = sctx->gfx_cs;
/* Find the location of the VB descriptor pointer. */
@@ -2290,13 +2290,14 @@ void si_emit_graphics_shader_pointers(struct si_context *sctx)
sctx->vertex_buffer_pointer_dirty = false;
}
- if (sctx->vertex_buffer_user_sgprs_dirty) {
+ if (sctx->vertex_buffer_user_sgprs_dirty &&
+ sctx->num_vertex_elements &&
+ sctx->screen->num_vbos_in_user_sgprs) {
struct radeon_cmdbuf *cs = sctx->gfx_cs;
unsigned num_desc = MIN2(sctx->num_vertex_elements,
sctx->screen->num_vbos_in_user_sgprs);
unsigned sh_offset = sh_base[PIPE_SHADER_VERTEX] + SI_SGPR_VS_VB_DESCRIPTOR_FIRST * 4;
- assert(num_desc);
si_emit_shader_pointer_head(cs, sh_offset, num_desc * 4);
radeon_emit_array(cs, sctx->vb_descriptor_user_sgprs, num_desc * 4);
sctx->vertex_buffer_user_sgprs_dirty = false;