r300: Set consistent PIPE_SHADER_CAP_PREFERRED_IR
authorPavel Ondračka <pavel.ondracka@gmail.com>
Wed, 26 Jan 2022 08:16:37 +0000 (09:16 +0100)
committerMarge Bot <emma+marge@anholt.net>
Thu, 27 Jan 2022 21:04:32 +0000 (21:04 +0000)
This efectivelly enables NIR to TGSI for swtcl chipsets.

Otherwise on swtcl chipsets we can end with PIPE_SHADER_IR_TGSI
for vertex stage and PIPE_SHADER_IR_NIR for fragment stage.
This is not expected by core mesa and leads to issues most
visible as crashing piglit atan tests.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5916
Reviewed-by: Emma Anholt <emma@anholt.net>
Signed-off-by: Pavel Ondračka <pavel.ondracka@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14732>

src/gallium/drivers/r300/r300_screen.c

index 2aa5351..798dfe9 100644 (file)
@@ -253,6 +253,15 @@ static int r300_get_shader_param(struct pipe_screen *pscreen,
    boolean is_r400 = r300screen->caps.is_r400;
    boolean is_r500 = r300screen->caps.is_r500;
 
+   switch (param) {
+    case PIPE_SHADER_CAP_PREFERRED_IR:
+        return (r300screen->debug & DBG_USE_TGSI) ? PIPE_SHADER_IR_TGSI : PIPE_SHADER_IR_NIR;
+    case PIPE_SHADER_CAP_SUPPORTED_IRS:
+        return (1 << PIPE_SHADER_IR_NIR) | (1 << PIPE_SHADER_IR_TGSI);
+    default:
+        break;
+    }
+
    switch (shader) {
     case PIPE_SHADER_FRAGMENT:
         switch (param)
@@ -315,10 +324,8 @@ static int r300_get_shader_param(struct pipe_screen *pscreen,
             return 0;
         case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
             return 32;
-        case PIPE_SHADER_CAP_PREFERRED_IR:
-            return (r300screen->debug & DBG_USE_TGSI) ? PIPE_SHADER_IR_TGSI : PIPE_SHADER_IR_NIR;
-        case PIPE_SHADER_CAP_SUPPORTED_IRS:
-            return (1 << PIPE_SHADER_IR_NIR) | (1 << PIPE_SHADER_IR_TGSI);
+        default:
+            break;
         }
         break;
     case PIPE_SHADER_VERTEX:
@@ -404,10 +411,8 @@ static int r300_get_shader_param(struct pipe_screen *pscreen,
             return 0;
         case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
             return 32;
-        case PIPE_SHADER_CAP_PREFERRED_IR:
-            return (r300screen->debug & DBG_USE_TGSI) ? PIPE_SHADER_IR_TGSI : PIPE_SHADER_IR_NIR;
-        case PIPE_SHADER_CAP_SUPPORTED_IRS:
-            return (1 << PIPE_SHADER_IR_NIR) | (1 << PIPE_SHADER_IR_TGSI);
+        default:
+            break;
         }
         break;
     default: