[Mesa-dev] [PATCH v4 23/28] i965/vec4: don't do horizontal stride on some register file types
Samuel Iglesias Gonsálvez
siglesias at igalia.com
Mon Mar 20 09:17:20 UTC 2017
horiz_offset() doesn't make sense to destination registers on some
cases like null registers.
Signed-off-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
---
src/intel/compiler/brw_ir_vec4.h | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/src/intel/compiler/brw_ir_vec4.h b/src/intel/compiler/brw_ir_vec4.h
index 6130950c72f..06142deffc9 100644
--- a/src/intel/compiler/brw_ir_vec4.h
+++ b/src/intel/compiler/brw_ir_vec4.h
@@ -194,7 +194,28 @@ offset(dst_reg reg, unsigned width, unsigned delta)
static inline dst_reg
horiz_offset(dst_reg reg, unsigned delta)
{
- return byte_offset(reg, delta * type_sz(reg.type));
+ switch (reg.file) {
+ case BAD_FILE:
+ case UNIFORM:
+ case IMM:
+ /* These only have a single component that is implicitly splatted. A
+ * horizontal offset should be a harmless no-op.
+ * XXX - Handle vector immediates correctly.
+ */
+ return reg;
+ case VGRF:
+ case MRF:
+ case ATTR:
+ return byte_offset(reg, delta * type_sz(reg.type));
+ case ARF:
+ case FIXED_GRF:
+ if (reg.is_null()) {
+ return reg;
+ } else {
+ return byte_offset(reg, delta * type_sz(reg.type));
+ }
+ }
+ unreachable("Invalid register file");
}
static inline dst_reg
--
2.11.0
More information about the mesa-dev
mailing list