diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/pipeline/rasterization/fragment-shader-interlock.slang | 20 | ||||
| -rw-r--r-- | tests/pipeline/rasterization/fragment-shader-interlock.slang.glsl | 31 |
2 files changed, 51 insertions, 0 deletions
diff --git a/tests/pipeline/rasterization/fragment-shader-interlock.slang b/tests/pipeline/rasterization/fragment-shader-interlock.slang new file mode 100644 index 000000000..66597a9a8 --- /dev/null +++ b/tests/pipeline/rasterization/fragment-shader-interlock.slang @@ -0,0 +1,20 @@ +// fragment-shader-interlock.slang + +// Test that explicit use of fragment-shader interlock (FSI) +// operations is supported by Slang + +//TEST:CROSS_COMPILE:-target spirv -entry main -stage fragment + +[shader("fragment")] +void main( + float4 coords : COORDS, + uniform RasterizerOrderedTexture2D<float4> texture, + out float4 result : SV_Target) +{ + beginInvocationInterlock(); + + result = texture[coords.xy]; + texture[coords.xy] = result + coords; + + endInvocationInterlock(); +} diff --git a/tests/pipeline/rasterization/fragment-shader-interlock.slang.glsl b/tests/pipeline/rasterization/fragment-shader-interlock.slang.glsl new file mode 100644 index 000000000..a12b9827b --- /dev/null +++ b/tests/pipeline/rasterization/fragment-shader-interlock.slang.glsl @@ -0,0 +1,31 @@ +//TEST_IGNORE_FILE: + +#version 450 +#extension GL_ARB_fragment_shader_interlock : require + +layout(rgba32f) +layout(binding = 0) +uniform image2D entryPointParams_texture_0; + +layout(location = 0) +in vec4 _S1; + +layout(location = 0) +out vec4 _S2; + +void main() +{ + vec4 _S3; + + beginInvocationInterlockARB(); + + vec4 _S4 = (imageLoad((entryPointParams_texture_0), ivec2((uvec2(_S1.xy))))); + + _S3 = _S4; + imageStore((entryPointParams_texture_0), ivec2((uvec2(_S1.xy))), _S3 + _S1); + + endInvocationInterlockARB(); + + _S2 = _S3; + return; +} |
