This will be reused in the following patch.
---
 src/gallium/drivers/radeonsi/si_shader_nir.c | 38 ++++++++++++--------
 1 file changed, 24 insertions(+), 14 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 5abda445e09..04e9e217306 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -51,6 +51,27 @@ static nir_variable* intrinsic_get_var(nir_intrinsic_instr 
*instr)
        return nir_deref_instr_get_variable(nir_src_as_deref(instr->src[0]));
 }
 
+static void get_num_of_component_info(nir_variable *var, unsigned slot_idx,
+                                     unsigned *num_comps, unsigned *first_comp)
+{
+       unsigned num_components = 4;
+       unsigned vector_elements = 
glsl_get_vector_elements(glsl_without_array(var->type));
+       if (vector_elements)
+               num_components = vector_elements;
+
+       *first_comp = var->data.location_frac;
+       if (glsl_type_is_64bit(glsl_without_array(var->type))) {
+               if (glsl_type_is_dual_slot(glsl_without_array(var->type)) && 
slot_idx % 2) {
+                       num_components = (num_components * 2) - 4;
+                       *first_comp = 0;
+               } else {
+                       num_components = MIN2(num_components * 2, 4);
+               }
+       }
+
+       *num_comps = num_components;
+}
+
 static ubyte get_component_usagemask(unsigned first_comp,
                                     unsigned num_components)
 {
@@ -538,20 +559,9 @@ void si_nir_scan_shader(const struct nir_shader *nir,
                                                             &semantic_name, 
&semantic_index);
                        }
 
-                       unsigned num_components = 4;
-                       unsigned vector_elements = 
glsl_get_vector_elements(glsl_without_array(variable->type));
-                       if (vector_elements)
-                               num_components = vector_elements;
-
-                       unsigned component = variable->data.location_frac;
-                       if 
(glsl_type_is_64bit(glsl_without_array(variable->type))) {
-                               if 
(glsl_type_is_dual_slot(glsl_without_array(variable->type)) && k % 2) {
-                                       num_components = (num_components * 2) - 
4;
-                                       component = 0;
-                               } else {
-                                       num_components = MIN2(num_components * 
2, 4);
-                               }
-                       }
+                       unsigned num_components;
+                       unsigned component;
+                       get_num_of_component_info(variable, k, &num_components, 
&component);
 
                        ubyte usagemask = get_component_usagemask(component, 
num_components);
 
-- 
2.20.1

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

Reply via email to