i965: fix varying output setup
authorTimothy Arceri <timothy.arceri@collabora.com>
Fri, 22 Jul 2016 13:19:09 +0000 (23:19 +1000)
committerTimothy Arceri <timothy.arceri@collabora.com>
Fri, 22 Jul 2016 14:04:10 +0000 (00:04 +1000)
Since 7f53fead5c we treat every location as using all
four components so we only need special handling for
doubles when they cross multiple locations.

This fixes a crash in GL45-CTS.enhanced_layouts.varying_locations
where the outputs array would overflow when a dmat2 was stored at
the max varying location i.e 30.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/mesa/drivers/dri/i965/brw_fs_nir.cpp

index 48cb4bd453bf5551fc39f40de00035a4ed3e07ef..5236d0e5fc4feaa32fcfacca15d0afd6a27627a5 100644 (file)
@@ -68,7 +68,7 @@ fs_visitor::nir_setup_single_output_varying(fs_reg *reg,
    } else {
       assert(type->is_scalar() || type->is_vector());
       unsigned num_iter = 1;
-      if (type->is_double())
+      if (type->is_dual_slot())
          num_iter = 2;
       for (unsigned count = 0; count < num_iter; count++) {
          this->outputs[*location] = *reg;