---
 src/gallium/drivers/radeonsi/si_shader_nir.c | 21 +++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index ba7c0b31bd2..d5a5464e235 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -477,15 +477,24 @@ void si_nir_scan_shader(const struct nir_shader *nir,
 
                for (unsigned j = 0; j < attrib_count; j++, i++) {
 
+                       tgsi_get_gl_varying_semantic(variable->data.location + 
j, true,
+                                                    &semantic_name, 
&semantic_index);
+
+                       if (semantic_name == TGSI_SEMANTIC_COLOR) {
+                               unsigned num_components;
+                               unsigned component;
+                               get_num_of_component_info(variable, 0, 
&num_components, &component);
+
+                               ubyte usage_mask = 
get_component_usagemask(component, num_components);
+                               info->colors_read |= usage_mask << 
(semantic_index * 4);
+                       }
+
                        if (processed_inputs & ((uint64_t)1 << i))
                                continue;
 
                        processed_inputs |= ((uint64_t)1 << i);
                        num_inputs++;
 
-                       tgsi_get_gl_varying_semantic(variable->data.location + 
j, true,
-                                                    &semantic_name, 
&semantic_index);
-
                        info->input_semantic_name[i] = semantic_name;
                        info->input_semantic_index[i] = semantic_index;
 
@@ -531,12 +540,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;
                }
        }
 
-- 
2.20.1

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to