i965/fs: Properly check for PAD in fragment shaders with > 16 varyings.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 26 Oct 2015 08:03:12 +0000 (01:03 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 29 Oct 2015 05:05:08 +0000 (22:05 -0700)
Commit 268008f98c3810b9f276df985dc93efc0c49f33e changed unused VUE map
slots to be initialized with BRW_VARYING_SLOT_PAD, not COUNT.  I missed
updating this.  It also means that commit message was wrong, as some
code *did* rely slots being initialized to COUNT.

This may fix a bug with SSO programs with > 16 FS input varyings.
I think we probably just emitted extra pointless code, but probably
didn't break anything.  We might also just have no tests for that.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
src/mesa/drivers/dri/i965/brw_fs.cpp

index 75f1a926c1d96525c2bad88126f6c6951eb812dd..2eef7af4e11d46e963ce5d794c1d4e6ef3007d4a 100644 (file)
@@ -1456,10 +1456,7 @@ fs_visitor::calculate_urb_setup()
          for (int slot = first_slot; slot < prev_stage_vue_map.num_slots;
               slot++) {
             int varying = prev_stage_vue_map.slot_to_varying[slot];
-            /* Note that varying == BRW_VARYING_SLOT_COUNT when a slot is
-             * unused.
-             */
-            if (varying != BRW_VARYING_SLOT_COUNT &&
+            if (varying != BRW_VARYING_SLOT_PAD &&
                 (nir->info.inputs_read & BRW_FS_VARYING_INPUT_MASK &
                  BITFIELD64_BIT(varying))) {
                prog_data->urb_setup[varying] = slot - first_slot;