From: Marek Olšák <marek.ol...@amd.com>

Fixes: 6d19120da85 "radeonsi/gfx9: workaround for INTERP with indirect indexing"
Cc: 18.1 <mesa-sta...@lists.freedesktop.org>
---
 src/gallium/drivers/radeonsi/si_get.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/gallium/drivers/radeonsi/si_get.c 
b/src/gallium/drivers/radeonsi/si_get.c
index d4e0eab187d..c31ab43cb42 100644
--- a/src/gallium/drivers/radeonsi/si_get.c
+++ b/src/gallium/drivers/radeonsi/si_get.c
@@ -487,20 +487,29 @@ static int si_get_shader_param(struct pipe_screen* 
pscreen,
 
        case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
                /* TODO: Indirect indexing of GS inputs is unimplemented. */
                if (shader == PIPE_SHADER_GEOMETRY)
                        return 0;
 
                if (shader == PIPE_SHADER_VERTEX &&
                    !sscreen->llvm_has_working_vgpr_indexing)
                        return 0;
 
+               /* Doing indirect indexing on GFX9 with LLVM 6.0 hangs.
+                * This means we don't support INTERP instructions with
+                * indirect indexing on inputs.
+                */
+               if (shader == PIPE_SHADER_FRAGMENT &&
+                   !sscreen->llvm_has_working_vgpr_indexing &&
+                   HAVE_LLVM < 0x0700)
+                       return 0;
+
                /* TCS and TES load inputs directly from LDS or offchip
                 * memory, so indirect indexing is always supported.
                 * PS has to support indirect indexing, because we can't
                 * lower that to TEMPs for INTERP instructions.
                 */
                return 1;
 
        case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
                return sscreen->llvm_has_working_vgpr_indexing ||
                       /* TCS stores outputs directly to memory. */
-- 
2.17.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to