From f341db3e1712802a290c6a3baac826ba7cc20934 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 13 Jan 2020 21:09:35 -0500 Subject: [PATCH] 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 --- src/gallium/drivers/radeonsi/si_descriptors.c | 7 ++++--- 1 file 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; -- 2.30.2