Description
- Implement
clip
clang builtin, - Link
clip
clang builtin withhlsl_intrinsics.h
- Add sema checks for
clip
toCheckHLSLBuiltinFunctionCall
inSemaChecking.cpp
- Add codegen for
clip
toEmitHLSLBuiltinExpr
inCGBuiltin.cpp
- Add codegen tests to
clang/test/CodeGenHLSL/builtins/clip.hlsl
- Add sema tests to
clang/test/SemaHLSL/BuiltIns/clip-errors.hlsl
- Create the
int_dx_clip
intrinsic inIntrinsicsDirectX.td
- Create the
DXILOpMapping
ofint_dx_clip
to82
inDXIL.td
- Create the
clip.ll
andclip_errors.ll
tests inllvm/test/CodeGen/DirectX/
- Create the
int_spv_clip
intrinsic inIntrinsicsSPIRV.td
- In SPIRVInstructionSelector.cpp create the
clip
lowering and map it toint_spv_clip
inSPIRVInstructionSelector::selectIntrinsic
. - Create SPIR-V backend test case in
llvm/test/CodeGen/SPIRV/hlsl-intrinsics/clip.ll
DirectX
DXIL Opcode | DXIL OpName | Shader Model | Shader Stages |
---|---|---|---|
82 | Discard | 6.0 | ('pixel',) |
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.
Word Count | Opcode | Results | Operands |
---|---|---|---|
1 | 5380 |
Test Case(s)
Example 1
//dxc clip_test.hlsl -T ps_6_8
RWBuffer<float4> Buf;
float4 main( ) : SV_Target {
float4 p1 = Buf[0];
clip(p1.a);
return p1;
}
HLSL:
Discards the current pixel if the specified value is less than zero.
clip(x) |
---|
Parameters
Item | Description |
---|---|
x |
[in] The specified value. |
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:
clip( Input.Color.A < 0.1f ? -1:1 );
Type Description
Name | Template Type | Component Type | Size |
---|---|---|---|
x | scalar, vector, or matrix | float | any |
Minimum Shader Model
This function is supported in the following shader models.
Shader Model | Supported |
---|---|
Shader Model 4 | yes (pixel shader only) |
Shader Model 3 (DirectX HLSL) | yes (pixel shader only) |
Shader Model 2 (DirectX HLSL) | yes (pixel shader only) |
Shader Model 1 (DirectX HLSL) | yes (pixel shader only) |
See also
Metadata
Metadata
Assignees
Labels
Type
Projects
Status