From 25e214db0094306835a03225e1a37164c7c98bf7 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Mon, 30 Mar 2015 16:09:51 -0700 Subject: [PATCH] nir: Use _mesa_flsll(InputsRead) in prog->nir. InputsRead is a 64-bit bitfield. Using _mesa_fls would silently truncate off the high bits, claiming inputs 32..56 (VARYING_SLOT_MAX) were never read. Using <= here was a hack I threw in at the last minute to fix programs which happened to use input slot 32. Switch back to using < now that the underlying problem is fixed. Fixes crashes in "Euro Truck Simulator 2" when using prog->nir, which uses input slot 33. Signed-off-by: Kenneth Graunke Reviewed-by: Matt Turner --- src/mesa/program/prog_to_nir.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesa/program/prog_to_nir.c b/src/mesa/program/prog_to_nir.c index 4e210d1..5f00a8b 100644 --- a/src/mesa/program/prog_to_nir.c +++ b/src/mesa/program/prog_to_nir.c @@ -931,8 +931,8 @@ setup_registers_and_variables(struct ptn_compile *c) struct nir_shader *shader = b->shader; /* Create input variables. */ - const int last_input = _mesa_fls(c->prog->InputsRead); - for (int i = 0; i <= last_input; i++) { + const int num_inputs = _mesa_flsll(c->prog->InputsRead); + for (int i = 0; i < num_inputs; i++) { if (!(c->prog->InputsRead & BITFIELD64_BIT(i))) continue; nir_variable *var = rzalloc(shader, nir_variable); -- 2.7.4