radeonsi: fix assertion and other failures in si_emit_graphics_shader_pointers
authorMarek Olšák <marek.olsak@amd.com>
Tue, 14 Jan 2020 02:09:35 +0000 (21:09 -0500)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 14 Jan 2020 18:42:36 +0000 (13:42 -0500)
The assertion was failing.

Fixes: 363b4027fcb - radeonsi: put up to 5 VBO descriptors into user SGPRs
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
src/gallium/drivers/radeonsi/si_descriptors.c

index 3c43911a2118fd73e0b1717f895dbc3e7ce2a851..193029820e54bddc1e7064f4769fcc152a3b3ffb 100644 (file)
@@ -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;