turnip: implement VK_EXT_shader_demote_to_helper_invocation
authorDanylo Piliaiev <dpiliaiev@igalia.com>
Fri, 5 Mar 2021 18:01:34 +0000 (20:01 +0200)
committerMarge Bot <eric+marge@anholt.net>
Mon, 19 Apr 2021 17:11:36 +0000 (17:11 +0000)
commit9dd9424a85f761961a176c21740ad9158fed2304
tree6439164a61521aa7918ef63a3d6fde1c227ec4b6
parentf17b41ab4f017b562fdf7c388200e68c22105331
turnip: implement VK_EXT_shader_demote_to_helper_invocation

The "demote" intrinsic has the semantics of D3D discard, which means
it doesn't change the control flow, allowing derivatives to work.

On A6xx there is no known way to check whether invocation was demoted,
thus we use nir_lower_is_helper_invocation.

Add "logical" OPC_DEMOTE which is later translated to "kill".
Such separation is necessary to run "kill" specific optimizations
which are invalid for "demote".

Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9460>
src/freedreno/ir3/disasm-a3xx.c
src/freedreno/ir3/instr-a3xx.h
src/freedreno/ir3/ir3.h
src/freedreno/ir3/ir3_compiler_nir.c
src/freedreno/ir3/ir3_postsched.c
src/freedreno/ir3/ir3_sched.c
src/freedreno/isa/encode.c
src/freedreno/vulkan/tu_device.c
src/freedreno/vulkan/tu_extensions.py
src/freedreno/vulkan/tu_shader.c