summaryrefslogtreecommitdiff
path: root/tests/hlsl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/hlsl')
-rw-r--r--tests/hlsl/raster-order-resource.slang50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/hlsl/raster-order-resource.slang b/tests/hlsl/raster-order-resource.slang
new file mode 100644
index 000000000..2db9f31dc
--- /dev/null
+++ b/tests/hlsl/raster-order-resource.slang
@@ -0,0 +1,50 @@
+//TEST:SIMPLE(filecheck=SPIRV): -target spirv -fvk-use-entrypoint-name
+//TEST:SIMPLE(filecheck=METAL): -target metal
+//TEST:SIMPLE(filecheck=METALASM): -target metallib
+
+
+// METAL-DAG: {{.*}}{{\[\[}}raster_order_group(0){{\]\]}} {{\[\[}}buffer(0)
+// METAL-DAG: {{.*}}{{\[\[}}raster_order_group(0){{\]\]}} {{\[\[}}texture(0)
+// METAL-DAG: {{.*}}{{\[\[}}raster_order_group(0){{\]\]}} {{\[\[}}buffer(1)
+
+// METALASM: @fragMain
+
+RasterizerOrderedByteAddressBuffer buffer;
+
+[shader("fragment")]
+float4 fragMain() : SV_Target
+{
+ // SPIRV: %fragMain_0 = OpFunction
+ // SPIRV: OpBeginInvocationInterlockEXT
+ // SPIRV: OpEndInvocationInterlockEXT
+
+ buffer.Store(0, 0x12345678);
+ return float4(1, 0, 0, 1);
+}
+
+RasterizerOrderedTexture2D tex;
+
+[shader("fragment")]
+float4 fragMain2() : SV_Target
+{
+ // SPIRV: %fragMain2_0 = OpFunction
+ // SPIRV: OpBeginInvocationInterlockEXT
+ // SPIRV: OpEndInvocationInterlockEXT
+
+ tex[uint2(0, 0)] = float4(1, 0, 0, 1);
+ return float4(1, 0, 0, 1);
+}
+
+RasterizerOrderedStructuredBuffer<float> buffer2;
+
+[shader("fragment")]
+float4 fragMain3() : SV_Target
+{
+ // SPIRV: %fragMain3_0 = OpFunction
+ // SPIRV: OpBeginInvocationInterlockEXT
+ // SPIRV: OpEndInvocationInterlockEXT
+
+ buffer2[0] = 1;
+ return float4(1, 0, 0, 1);
+}
+