summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/metal/simple-compute.slang6
-rw-r--r--tests/metal/stage-in.slang89
2 files changed, 92 insertions, 3 deletions
diff --git a/tests/metal/simple-compute.slang b/tests/metal/simple-compute.slang
index b5c0aaf75..85abaffb4 100644
--- a/tests/metal/simple-compute.slang
+++ b/tests/metal/simple-compute.slang
@@ -1,6 +1,6 @@
//TEST:SIMPLE(filecheck=CHECK): -target metal
//TEST:SIMPLE(filecheck=CHECK-ASM): -target metallib
-//TEST:REFLECTION(filecheck=REFLECT):-target metal
+//TEST:REFLECTION(filecheck=REFLECT):-target metal -entry main_kernel -stage compute
uniform RWStructuredBuffer<float> outputBuffer;
@@ -26,10 +26,10 @@ ParameterBlock<MyBlock> block2;
// REFLECT: "binding": {"kind": "metalArgumentBufferElement", "index": 0, "count": 2}
// REFLECT: "name": "outputBuffer",
-// REFLECT-NEXT: "binding": {"kind": "constantBuffer", "index": 0, "used": 0}
+// REFLECT-NEXT: "binding": {"kind": "constantBuffer", "index": 0{{.*}}}
// REFLECT: "name": "block",
-// REFLECT-NEXT: "binding": {"kind": "constantBuffer", "index": 1, "used": 0}
+// REFLECT-NEXT: "binding": {"kind": "constantBuffer", "index": 1{{.*}}}
void func(float v)
{
diff --git a/tests/metal/stage-in.slang b/tests/metal/stage-in.slang
new file mode 100644
index 000000000..31d224072
--- /dev/null
+++ b/tests/metal/stage-in.slang
@@ -0,0 +1,89 @@
+//TEST:SIMPLE(filecheck=CHECK): -target metal
+//TEST:SIMPLE(filecheck=CHECK-ASM): -target metallib
+
+// CHECK: struct VOut{{.*}}
+// CHECK-NEXT:{
+// CHECK-NEXT: float4 position{{.*}} {{\[\[}}position{{\]\]}};
+// CHECK-NEXT: float4 vertexColor{{.*}} {{\[\[}}user(_slang_attr){{\]\]}};
+// CHECK-NEXT: float2 vertexUV{{.*}} {{\[\[}}user(_slang_attr_1){{\]\]}};
+// CHECK-NEXT: float3 vertexNormal{{.*}} {{\[\[}}user(NORMAL){{\]\]}};
+// CHECK-NEXT:};
+
+// CHECK: struct vertexInput{{.*}}
+// CHECK-NEXT:{
+// CHECK-NEXT: float4 position{{.*}} {{\[\[}}attribute(0){{\]\]}} {{\[\[}}user(POSITION){{\]\]}};
+// CHECK-NEXT: float4 color{{.*}} {{\[\[}}attribute(1){{\]\]}} {{\[\[}}user(COLOR){{\]\]}};
+// CHECK-NEXT:};
+
+// CHECK: {{\[\[}}vertex{{\]\]}} VOut{{.*}} main_vertex(vertexInput{{.*}}{{\[\[}}stage_in{{\]\]}}, uint vid{{.*}}{{\[\[}}vertex_id{{\]\]}}, uint instanceID{{.*}} {{\[\[}}instance_id{{\]\]}})
+
+// CHECK: struct pixelOutput{{.*}}
+// CHECK-NEXT:{
+// CHECK-NEXT: float4 output{{.*}}{{\[\[}}color(0){{\]\]}};
+// CHECK-NEXT:};
+
+// CHECK: struct pixelInput{{.*}}
+// CHECK-NEXT:{
+// CHECK-NEXT: float4 vertexColor{{.*}} {{\[\[}}user(_slang_attr){{\]\]}};
+// CHECK-NEXT: float2 vertexUV{{.*}} {{\[\[}}user(_slang_attr_1){{\]\]}};
+// CHECK-NEXT: float3 vertexNormal{{.*}} {{\[\[}}user(NORMAL){{\]\]}};
+// CHECK-NEXT:};
+
+// CHECK: {{\[\[}}fragment{{\]\]}} pixelOutput{{.*}} main_fragment(pixelInput{{.*}} {{\[\[}}stage_in{{\]\]}}, float4 position{{.*}} {{\[\[}}position{{\]\]}})
+
+// CHECK: struct FragOut{{.*}}
+// CHECK-NEXT:{
+// CHECK-NEXT: float4 color{{.*}}{{\[\[}}color(0){{\]\]}};
+// CHECK-NEXT: float depth{{.*}} {{\[\[}}depth(any){{\]\]}};
+// CHECK-NEXT:};
+
+// CHECK-ASM: define {{.*}} @main_vertex
+// CHECK-ASM: define {{.*}} @main_fragment
+// CHECK-ASM: define {{.*}} @main_fragment1
+
+struct VIn
+{
+ float4 position : POSITION;
+ float4 color : COLOR;
+ uint vid : SV_VertexID;
+ uint instanceID : SV_InstanceID;
+}
+
+struct VOut
+{
+ float4 position : SV_Position;
+ float4 vertexColor;
+ float2 vertexUV;
+ float3 vertexNormal : NORMAL;
+}
+
+[shader("vertex")]
+VOut main_vertex(VIn vertexIn)
+{
+ VOut vertexOut;
+ vertexOut.position = vertexIn.position;
+ vertexOut.vertexColor = vertexIn.color;
+ vertexOut.vertexUV = float2(0.0, 1.0);
+ return vertexOut;
+}
+
+[shader("fragment")]
+float4 main_fragment(VOut fragmentIn) : SV_Target
+{
+ return fragmentIn.vertexColor;
+}
+
+struct FragOut
+{
+ float4 color : SV_Target;
+ float depth : SV_Depth;
+}
+
+[shader("fragment")]
+FragOut main_fragment1(VOut fragmentIn)
+{
+ FragOut fragOut;
+ fragOut.color = fragmentIn.vertexColor;
+ fragOut.depth = 0.5;
+ return fragOut;
+} \ No newline at end of file