Demote this fragment shader invocation to a helper
invocation. Any stores to memory after this instruction are suppressed
and the fragment does not write outputs to the framebuffer.
Unlike the OpTerminateInvocation
instruction, this does not necessarily terminate the invocation which
might be needed for derivative calculations. It is not considered a flow
control instruction (flow control does not become non-uniform) and does
not terminate the block. The implementation may terminate helper
invocations before the end of the shader as an optimization, but doing
so must not affect derivative calculations and does not make control
flow non-uniform.
After an invocation executes this instruction, any subsequent load of
HelperInvocation within that invocation will load an undefined value
unless the HelperInvocationbuilt-in variable is
decorated with Volatile or the load included
Volatile in its Memory Operands
This instruction is only valid in the FragmentExecution
Model.
clip
clang builtin,clip
clang builtin withhlsl_intrinsics.h
clip
toCheckHLSLBuiltinFunctionCall
inSemaChecking.cpp
clip
toEmitHLSLBuiltinExpr
inCGBuiltin.cpp
clang/test/CodeGenHLSL/builtins/clip.hlsl
clang/test/SemaHLSL/BuiltIns/clip-errors.hlsl
int_dx_clip
intrinsic inIntrinsicsDirectX.td
DXILOpMapping
ofint_dx_clip
to82
inDXIL.td
clip.ll
andclip_errors.ll
tests inllvm/test/CodeGen/DirectX/
int_spv_clip
intrinsic inIntrinsicsSPIRV.td
clip
lowering and map it toint_spv_clip
inSPIRVInstructionSelector::selectIntrinsic
.llvm/test/CodeGen/SPIRV/hlsl-intrinsics/clip.ll
DirectX
SPIR-V
OpDemoteToHelperInvocation:
Description:
(OpDemoteToHelperInvocationEXT)**
Demote this fragment shader invocation to a helper invocation. Any stores to memory after this instruction are suppressed and the fragment does not write outputs to the framebuffer.
Unlike the OpTerminateInvocation instruction, this does not necessarily terminate the invocation which might be needed for derivative calculations. It is not considered a flow control instruction (flow control does not become non-uniform) and does not terminate the block. The implementation may terminate helper invocations before the end of the shader as an optimization, but doing so must not affect derivative calculations and does not make control flow non-uniform.
After an invocation executes this instruction, any subsequent load of HelperInvocation within that invocation will load an undefined value unless the HelperInvocation built-in variable is decorated with Volatile or the load included Volatile in its Memory Operands
This instruction is only valid in the Fragment Execution Model.
Capability:
DemoteToHelperInvocation
Missing before version 1.6.
Test Case(s)
Example 1
HLSL:
Discards the current pixel if the specified value is less than zero.
Parameters
Return Value
None.
Remarks
Use the clip HLSL intrinsic function to simulate clipping planes if each component of the x parameter represents the distance from a plane.
Also, use the clip function to test for alpha behavior, as shown in the following example:
Type Description
Minimum Shader Model
This function is supported in the following shader models.
See also