i965/skl: Fix the order of the arguments for the LD sampler message
authorNeil Roberts <neil@linux.intel.com>
Fri, 6 Mar 2015 19:11:19 +0000 (19:11 +0000)
committerNeil Roberts <neil@linux.intel.com>
Wed, 8 Apr 2015 11:08:41 +0000 (12:08 +0100)
In Skylake the order of the arguments for sample messages with the LD
type are u, v, lod, r whereas previously they were u, lod, v, r.

This fixes 144 Piglit tests including ones that directly use
texelFetch and also some using the meta stencil blit path which
appears to use texelFetch in its shader.

v2: Fix sampling 1D textures

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp

index 3622e651818ee0e1179437afae3f47df35b87945..06337c9051a183d73e7859b5a1ff8eccf1b22320 100644 (file)
@@ -1889,15 +1889,26 @@ fs_visitor::emit_texture_gen7(ir_texture_opcode op, fs_reg dst,
       length++;
       break;
    case ir_txf:
-      /* Unfortunately, the parameters for LD are intermixed: u, lod, v, r. */
+      /* Unfortunately, the parameters for LD are intermixed: u, lod, v, r.
+       * On Gen9 they are u, v, lod, r
+       */
+
       emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), coordinate));
       coordinate = offset(coordinate, 1);
       length++;
 
+      if (brw->gen >= 9) {
+         if (coord_components >= 2) {
+            emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), coordinate));
+            coordinate = offset(coordinate, 1);
+         }
+         length++;
+      }
+
       emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), lod));
       length++;
 
-      for (int i = 1; i < coord_components; i++) {
+      for (int i = brw->gen >= 9 ? 2 : 1; i < coord_components; i++) {
         emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), coordinate));
         coordinate = offset(coordinate, 1);
         length++;