radeonsi/gfx9: prevent shader-db crashes
authorMarek Olšák <marek.olsak@amd.com>
Fri, 18 Aug 2017 18:16:03 +0000 (20:16 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 22 Aug 2017 11:29:47 +0000 (13:29 +0200)
- don't precompile LS and ES (they don't exist on GFX9), compile as VS instead
- don't precompile HS and GS (we don't have LS and ES parts)

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_state_shaders.c

index 968e231b8b88ef871c512ac144880afdd628031c..45b321b0a61a718f996ccfcf819570f62ed478c3 100644 (file)
@@ -1876,7 +1876,11 @@ void si_init_shader_selector_async(void *job, int thread_index)
        }
 
        /* Pre-compilation. */
-       if (sscreen->b.debug_flags & DBG_PRECOMPILE) {
+       if (sscreen->b.debug_flags & DBG_PRECOMPILE &&
+           /* GFX9 needs LS or ES for compilation, which we don't have here. */
+           (sscreen->b.chip_class <= VI ||
+            (sel->type != PIPE_SHADER_TESS_CTRL &&
+             sel->type != PIPE_SHADER_GEOMETRY))) {
                struct si_shader_ctx_state state = {sel};
                struct si_shader_key key;
 
@@ -1885,6 +1889,12 @@ void si_init_shader_selector_async(void *job, int thread_index)
                                              sel->so.num_outputs != 0,
                                              &key);
 
+               /* GFX9 doesn't have LS and ES. */
+               if (sscreen->b.chip_class >= GFX9) {
+                       key.as_ls = 0;
+                       key.as_es = 0;
+               }
+
                /* Set reasonable defaults, so that the shader key doesn't
                 * cause any code to be eliminated.
                 */