Mesa (master): i965/fs: Teach regions_overlap() about COMPR4 MRF regions.
Francisco Jerez
currojerez at kemper.freedesktop.org
Tue May 31 22:58:54 UTC 2016
Module: Mesa
Branch: master
Commit: 88f380a2ddbdeda6e83725403b12ee0070f1f0f3
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=88f380a2ddbdeda6e83725403b12ee0070f1f0f3
Author: Francisco Jerez <currojerez at riseup.net>
Date: Thu May 26 23:53:31 2016 -0700
i965/fs: Teach regions_overlap() about COMPR4 MRF regions.
Cc: "12.0" <mesa-stable at lists.freedesktop.org>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
---
src/mesa/drivers/dri/i965/brw_ir_fs.h | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_ir_fs.h b/src/mesa/drivers/dri/i965/brw_ir_fs.h
index 7b1ec68..f214483 100644
--- a/src/mesa/drivers/dri/i965/brw_ir_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_ir_fs.h
@@ -204,9 +204,23 @@ reg_offset(const fs_reg &r)
static inline bool
regions_overlap(const fs_reg &r, unsigned dr, const fs_reg &s, unsigned ds)
{
- return reg_space(r) == reg_space(s) &&
- !(reg_offset(r) + dr <= reg_offset(s) ||
- reg_offset(s) + ds <= reg_offset(r));
+ if (r.file == MRF && (r.nr & BRW_MRF_COMPR4)) {
+ fs_reg t = r;
+ t.nr &= ~BRW_MRF_COMPR4;
+ /* COMPR4 regions are translated by the hardware during decompression
+ * into two separate half-regions 4 MRFs apart from each other.
+ */
+ return regions_overlap(t, dr / 2, s, ds) ||
+ regions_overlap(byte_offset(t, 4 * REG_SIZE), dr / 2, s, ds);
+
+ } else if (s.file == MRF && (s.nr & BRW_MRF_COMPR4)) {
+ return regions_overlap(s, ds, r, dr);
+
+ } else {
+ return reg_space(r) == reg_space(s) &&
+ !(reg_offset(r) + dr <= reg_offset(s) ||
+ reg_offset(s) + ds <= reg_offset(r));
+ }
}
/**
More information about the mesa-commit
mailing list