yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
a85c350df
master
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