nir: Use _mesa_flsll(InputsRead) in prog->nir.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 30 Mar 2015 23:09:51 +0000 (16:09 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 1 Apr 2015 20:30:13 +0000 (13:30 -0700)
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 <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/program/prog_to_nir.c

index 4e210d190decf90419e8f52d69e60f5f6869427b..5f00a8b2fd017abf6ecf712d913962c37c055419 100644 (file)
@@ -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);