radeonsi/nir: set colors_read properly
authorTimothy Arceri <tarceri@itsqueeze.com>
Mon, 11 Feb 2019 23:36:35 +0000 (10:36 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Tue, 19 Feb 2019 23:46:19 +0000 (10:46 +1100)
shader-db results for VEGA64:

Totals from affected shaders:
SGPRS: 1976 -> 1976 (0.00 %)
VGPRS: 1240 -> 1144 (-7.74 %)
Spilled SGPRs: 145 -> 145 (0.00 %)
Spilled VGPRs: 0 -> 0 (0.00 %)
Private memory VGPRs: 0 -> 0 (0.00 %)
Scratch size: 0 -> 0 (0.00 %) dwords per thread
Code Size: 34632 -> 34604 (-0.08 %) bytes
LDS: 0 -> 0 (0.00 %) blocks
Max Waves: 261 -> 285 (9.20 %)
Wait states: 0 -> 0 (0.00 %)

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_shader_nir.c

index a151182bf8fbefb78f93c4f462c2141c357798b5..7e98eb391525333fe0cb4493f472b2e9c5b8512e 100644 (file)
@@ -74,9 +74,18 @@ static void gather_intrinsic_load_deref_info(const nir_shader *nir,
                }
                break;
        }
-       default:
+       default: {
+               unsigned semantic_name, semantic_index;
+               tgsi_get_gl_varying_semantic(var->data.location, true,
+                                            &semantic_name, &semantic_index);
+
+               if (semantic_name == TGSI_SEMANTIC_COLOR) {
+                       uint8_t mask = nir_ssa_def_components_read(&instr->dest.ssa);
+                       info->colors_read |= mask << (semantic_index * 4);
+               }
                break;
        }
+       }
 }
 
 static void scan_instruction(const struct nir_shader *nir,
@@ -495,12 +504,6 @@ void si_nir_scan_shader(const struct nir_shader *nir,
                                info->input_interpolate[i] = TGSI_INTERPOLATE_CONSTANT;
                                break;
                        }
-
-                       /* TODO make this more precise */
-                       if (variable->data.location == VARYING_SLOT_COL0)
-                               info->colors_read |= 0x0f;
-                       else if (variable->data.location == VARYING_SLOT_COL1)
-                               info->colors_read |= 0xf0;
                }
        }