nir/spirv/cfg: Handle switches whose break block is a loop continue
authorJason Ekstrand <jason.ekstrand@intel.com>
Sat, 17 Sep 2016 04:55:08 +0000 (21:55 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Sat, 1 Oct 2016 22:40:14 +0000 (15:40 -0700)
commit4d02faede57b782264ab97d57919e9dad7dd8131
tree4ce586d0529a54869dc44c7620c34105b4f95f4a
parentfc03ecfeaf5a10a8b84d366f24f02e74ab03b145
nir/spirv/cfg: Handle switches whose break block is a loop continue

It is possible that the break block of a switch is actually the continue of
the loop containing the switch.  In this case, we need to identify the
break block as a continue and break out of current level of CFG handling.
If we don't, the continue portion of the loop will get handled twice, once
by following after the break and a second time by the loop handling code
handling it explicitly.

This fixes 6 of the new Vulkan CTS tests:
 - dEQP-VK.spirv_assembly.instruction.graphics.opphi.out_of_order*
 - dEQP-VK.spirv_assembly.instruction.graphics.selection_block_order.out_of_order*

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
src/compiler/spirv/vtn_cfg.c