[Mesa-dev] [PATCH 4/4] radeonsi/nir: set colors_read properly

Timothy Arceri tarceri at itsqueeze.com
Mon Feb 11 03:44:01 UTC 2019


---
 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



More information about the mesa-dev mailing list