[Mesa-dev] [PATCH 1/2] radeonsi/nir: fix input processing for packed varyings

Timothy Arceri tarceri at itsqueeze.com
Fri Mar 23 01:49:51 UTC 2018


The location was only being incremented the first time we processed a
location. This meant we would incorrectly skip some elements of
an array if the first element was packed and proccessed previously
but other elements were not.
---
 src/gallium/drivers/radeonsi/si_shader_nir.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c
index ed9f90a6a3a..4e15eeae6b9 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -911,7 +911,7 @@ bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader *nir)
 				/* Packed components share the same location so skip
 				 * them if we have already processed the location.
 				 */
-				if (processed_inputs & ((uint64_t)1 << loc)) {
+				if (processed_inputs & ((uint64_t)1 << (loc + i))) {
 					input_idx += 4;
 					continue;
 				}
@@ -929,8 +929,7 @@ bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader *nir)
 					bitcast_inputs(ctx, data, input_idx);
 				}
 
-				processed_inputs |= ((uint64_t)1 << loc);
-				loc++;
+				processed_inputs |= ((uint64_t)1 << (loc + i));
 				input_idx += 4;
 			}
 		}
-- 
2.14.3



More information about the mesa-dev mailing list