Mesa (master): i965/fs: Make half(fs_reg, unsigned) handle register files more explicitly

Jason Ekstrand jekstrand at kemper.freedesktop.org
Wed May 6 18:06:29 UTC 2015


Module: Mesa
Branch: master
Commit: cf4607e85339c3cfd6ab5fd4a28985c9fafb0b86
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf4607e85339c3cfd6ab5fd4a28985c9fafb0b86

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Tue May  5 15:57:11 2015 -0700

i965/fs: Make half(fs_reg, unsigned) handle register files more explicitly

Previously, we had a special case for uniforms and immediates and then a
bunch of asserts for various other pessimal things.  This commit changes it
so that it explicitly does something on each register file.  Some of them
are disallowed and others are treated properly.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/drivers/dri/i965/brw_ir_fs.h |   21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_ir_fs.h b/src/mesa/drivers/dri/i965/brw_ir_fs.h
index acbf617..9ebe980 100644
--- a/src/mesa/drivers/dri/i965/brw_ir_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_ir_fs.h
@@ -183,13 +183,24 @@ half(fs_reg reg, unsigned idx)
 {
    assert(idx < 2);
 
-   if (reg.file == UNIFORM || reg.file == IMM)
+   switch (reg.file) {
+   case BAD_FILE:
+   case UNIFORM:
+   case IMM:
       return reg;
 
-   assert(idx == 0 || reg.file != HW_REG);
-   assert(reg.width == 16);
-   reg.width = 8;
-   return horiz_offset(reg, 8 * idx);
+   case GRF:
+   case MRF:
+      assert(reg.width == 16);
+      reg.width = 8;
+      return horiz_offset(reg, 8 * idx);
+
+   case ATTR:
+   case HW_REG:
+   default:
+      unreachable("Cannot take half of this register type");
+   }
+   return reg;
 }
 
 static const fs_reg reg_undef;




More information about the mesa-commit mailing list