intel/fs/gen12: Workaround data coherency issues due to broken NoMask control flow.

Together with the fixup_nomask_control_flow() pass introduced in a
previous patch, this implements a less invasive alternative to the
workaround documented in the hardware spec for GEN:BUG:1407528679,
which doesn't involve disabling structured control flow.

Under some conditions Gen12 hardware can end up executing a BB with
all channels disabled, which will lead to the execution of any NoMask
instructions in it, even though any execution-masked instructions will
be correctly shot down.  This *might* break assumptions of the SWSB
pass if the data computed by a NoMask instruction is synchronized
against by using an SWSB annotation baked into a regular
execution-masked instruction, since the first (NoMask) instruction may
be executed redundantly by the hardware, even though the second will
correctly be shot down, potentially leading to a RaW or WaW hazard if
a third instruction subsequently accesses the destination register of
the first instruction.

I'm still waiting for a response from the hardware team confirming
that this scenario is possible, but given that the solution is
relatively invasive it probably makes sense to upstream this before
the branchpoint, even though there is a chance we'll want to revert
this patch before the release.
38 jobs for !3594 with intel-gen12-eu-fusion-fixes in 22 minutes and 35 seconds (queued for 3 seconds)
latest detached
Status Job ID Name Coverage
  Container
passed #1487212
aarch64
arm_build

00:00:20

passed #1487213
aarch64
arm_test

00:00:17

passed #1487209
x86_build

00:00:22

passed #1487211
x86_build_old

00:00:36

passed #1487210
x86_test-gl

00:00:36

 
  Build
passed #1487217
aarch64
meson-arm64

00:06:12

passed #1487216
aarch64
meson-armhf

00:12:01

passed #1487218
meson-clang

00:05:59

passed #1487221
meson-clover

00:07:34

passed #1487222
meson-clover-old-llvm

00:09:30

passed #1487224
meson-i386

00:03:45

passed #1487215
meson-main

00:04:10

passed #1487225
meson-mingw32-x86_64

00:05:39

passed #1487214
meson-testing

00:06:08

passed #1487223
meson-vulkan

00:05:33

passed #1487226
scons

00:04:58

passed #1487227
scons-old-llvm

00:04:48

passed #1487219
scons-swr

00:06:40

passed #1487220
scons-win64

00:07:29

 
  Test
passed #1487246
db410c
arm64_a306_gles2

00:07:36

passed #1487243
mesa-cheza
arm64_a630_gles2

00:01:47

passed #1487245
mesa-cheza
arm64_a630_gles3

00:15:53

passed #1487244
mesa-cheza
arm64_a630_gles31

00:10:51

passed #1487231
lava-meson-gxl-s905x-libretech-cc
lima-mali450-test:arm64

00:08:51

passed #1487228
lava-sun50i-h6-pine-h64
panfrost-t720-test:arm64

00:08:18

passed #1487229
lava-rk3288-veyron-jaq
panfrost-t760-test:armhf

00:05:50

passed #1487230
lava-rk3399-gru-kevin
panfrost-t860-test:arm64

00:05:36

passed #1487233
piglit-glslparser

00:04:57

passed #1487232
piglit-quick_gl

00:09:53

passed #1487234
piglit-quick_shader

00:03:46

passed #1487235
test-llvmpipe-gles2

00:06:26

passed #1487236
test-softpipe-gles2

00:01:38

passed #1487239
test-softpipe-gles31 1/4

00:03:16

passed #1487237
test-softpipe-gles3 1/2

00:04:45

passed #1487240
test-softpipe-gles31 2/4

00:04:07

passed #1487241
test-softpipe-gles31 3/4

00:05:00

passed #1487242
test-softpipe-gles31 4/4

00:03:27

passed #1487238
test-softpipe-gles3 2/2

00:07:17