From: Iago Toral Quiroga <ito...@igalia.com>

It seems to use 1 channel por DF, just like later hardware. The docs say things
like:

"Each DF operand uses a pair of channels and all masking  and swizzling
 should be adjusted appropriately."

"In Align16, all regioning parameters must use the syntax of a pair of packed
 floats, including channel selects and channel enables."

In these cases, masking and channel select/enables seem to refere only to
Align16's swizzle and writemasks respectively, not to execution masking.

In any case, this means that execution masking controls and execsize go
in different units and we need to adjust the assertion on the relation
between the two accordingly.
---
 src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp 
b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
index 90ee7c1..ac2d8ad 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
@@ -1646,7 +1646,11 @@ fs_generator::generate_code(const cfg_t *cfg, int 
dispatch_width)
       brw_set_default_exec_size(p, cvt(inst->exec_size) - 1);
 
       assert(inst->force_writemask_all || inst->exec_size >= 4);
-      assert(inst->force_writemask_all || inst->group % inst->exec_size == 0);
+      assert(inst->force_writemask_all ||
+             ((devinfo->gen != 7 || devinfo->is_haswell) &&
+              inst->group % inst->exec_size == 0) ||
+             ((devinfo->gen == 7 && !devinfo->is_haswell) &&
+              (2 * inst->group) % inst->exec_size == 0));
       assert(inst->base_mrf + inst->mlen <= BRW_MAX_MRF(devinfo->gen));
       assert(inst->mlen <= BRW_MAX_MSG_LENGTH);
 
-- 
2.9.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to