i965: Fix sampling on Ivybridge after headerless change.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 20 May 2011 23:25:59 +0000 (16:25 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 20 May 2011 23:33:43 +0000 (16:33 -0700)
Fixes a regression since 90e922267a89fa9bef254bb257405531ceff7356.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs.cpp

index eb954c8bf9c381f750ef4dbdbfd130eb1f73cb2f..6d545afab64198d5dcd1c982f7c63da3e55994f6 100644 (file)
@@ -1388,9 +1388,19 @@ fs_inst *
 fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate,
                              int sampler)
 {
-   int mlen = 1; /* g0 header always present. */
-   int base_mrf = 1;
+   int mlen = 0;
+   int base_mrf = 2;
    int reg_width = c->dispatch_width / 8;
+   bool header_present = false;
+
+   if (ir->offset) {
+      /* The offsets set up by the ir_texture visitor are in the
+       * m1 header, so we can't go headerless.
+       */
+      header_present = true;
+      mlen++;
+      base_mrf--;
+   }
 
    if (ir->shadow_comparitor) {
       ir->shadow_comparitor->accept(this);
@@ -1439,6 +1449,7 @@ fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate,
    }
    inst->base_mrf = base_mrf;
    inst->mlen = mlen;
+   inst->header_present = header_present;
 
    if (mlen > 11) {
       fail("Message length >11 disallowed by hardware\n");