yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Darren WihandiImplement Quad Control intrinsics (#5981)a85c350df

master
1.7 KiB53 linesraw
1//TEST:SIMPLE(filecheck=CHECK_SPIRV): -entry fragmentMain -stage fragment -target spirv
2//TEST:SIMPLE(filecheck=CHECK_GLSL): -entry fragmentMain -stage fragment -target glsl
3//TEST:SIMPLE(filecheck=CHECK_HLSL): -entry fragmentMain -stage fragment -target hlsl
4//TEST:SIMPLE(filecheck=CHECK_METAL): -entry fragmentMain -stage fragment -target metal
5
6Texture2D colorTexture1;
7Texture2D colorTexture2;
8SamplerState samplerState;
9
10struct FragmentInput {
11    float2 uv : TEXCOORD0;
12};
13
14// CHECK_SPIRV: OpExecutionMode %fragmentMain MaximallyReconvergesKHR
15// CHECK_SPIRV: OpExecutionMode %fragmentMain QuadDerivativesKHR
16// CHECK_SPIRV: OpExecutionMode %fragmentMain RequireFullQuadsKHR
17// CHECK_GLSL: layout(quad_derivatives) in
18// CHECK_GLSL: layout(full_quads) in
19// CHECK_GLSL: [maximally_reconverges]
20[QuadDerivatives]
21[RequireFullQuads]
22float4 fragmentMain(FragmentInput input) : SV_Target
23{
24    bool nonUniformCondition1 = input.uv.x > 0.5;
25    bool nonUniformCondition2 = input.uv.y > 0.8;
26
27    float4 fragColor = float4(1.0, 1.0, 1.0, 1.0);
28
29    // CHECK_SPIRV: OpGroupNonUniformQuadAnyKHR
30    // CHECK_GLSL: subgroupQuadAny
31    // CHECK_HLSL: QuadAny
32    // CHECK_METAL: quad_any
33    if (QuadAny(nonUniformCondition1)) {
34        float4 color = colorTexture1.Sample(samplerState, input.uv);
35        if (nonUniformCondition1) {
36            fragColor = color;
37        }
38    }
39
40    // CHECK_SPIRV: OpGroupNonUniformQuadAllKHR
41    // CHECK_GLSL: subgroupQuadAll
42    // CHECK_HLSL: QuadAll
43    // CHECK_METAL: quad_all
44    if (QuadAll(nonUniformCondition2)) {
45        float4 color = colorTexture2.Sample(samplerState, input.uv);
46        if (nonUniformCondition2) {
47            fragColor += color * 0.5;
48        }
49    }
50
51    return fragColor;
52}
53