summaryrefslogtreecommitdiffstats
path: root/tests/pipeline/rasterization/fragment-shader-interlock.slang
blob: 0e438c456d5ca2184c74e1228677a8886bca569d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// fragment-shader-interlock.slang

// Test that explicit use of fragment-shader interlock (FSI)
// operations is supported by Slang

//TEST:SIMPLE(filecheck=CHECK):-target spirv -entry main -stage fragment
//TEST:SIMPLE(filecheck=CHECK):-emit-spirv-directly -target spirv -entry main -stage fragment


// CHECK: OpCapability FragmentShaderPixelInterlockEXT
// CHECK: OpExtension "SPV_EXT_fragment_shader_interlock"
// CHECK: OpEntryPoint Fragment %main "main"

// CHECK-DAG: OpExecutionMode %main OriginUpperLeft

// CHECK-DAG: OpExecutionMode %main PixelInterlockOrderedEXT

[shader("fragment")]
void main(
    float4 coords : COORDS,
    uniform RasterizerOrderedTexture2D<float4> texture,
    out float4 result : SV_Target)
{
    beginInvocationInterlock();

    result = texture[uint2(coords.xy)];
    texture[uint2(coords.xy)] = result + coords;

    endInvocationInterlock();
}