summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2019-04-16 07:46:02 -0700
committerTim Foley <tfoleyNV@users.noreply.github.com>2019-04-16 07:46:02 -0700
commita81efa750f093fdbfcf28c5d9bd619fca119bcde (patch)
tree2c23ef1416f377b1939e6e8fb33075d53a9b05b5 /tests
parent7c82ead1f5a7f866abe4e8fa931f857a505c3077 (diff)
Add the missing case for `AssocTypeDecl` in varying parameters' layout generation. (#947)
Diffstat (limited to 'tests')
-rw-r--r--tests/compute/type-param-varying.slang107
-rw-r--r--tests/compute/type-param-varying.slang.expected.txt1
2 files changed, 108 insertions, 0 deletions
diff --git a/tests/compute/type-param-varying.slang b/tests/compute/type-param-varying.slang
new file mode 100644
index 000000000..ef9ae9881
--- /dev/null
+++ b/tests/compute/type-param-varying.slang
@@ -0,0 +1,107 @@
+//TEST(compute):COMPARE_RENDER_COMPUTE:
+
+//TEST_INPUT: global_type AssembledVertex
+//TEST_INPUT: ubuffer(data=[0], stride=4):dxbinding(1),glbinding(0),out
+
+// Testing associated types in a varying parameter field
+
+interface IColorSet
+{
+ float3 getColor();
+}
+
+struct NoColorSet : IColorSet
+{
+ float3 getColor() { return float3(0.0); }
+};
+
+struct SingleColorSet : IColorSet
+{
+ float3 color;
+ float3 getColor() { return color; }
+};
+
+interface IVertexFormat
+{
+ associatedtype ColorSet : IColorSet;
+ ColorSet getColorSet();
+ float3 getPosition();
+ float2 getUv();
+}
+
+type_param TVertex : IVertexFormat;
+
+cbuffer Uniforms
+{
+ float4x4 modelViewProjection;
+}
+RWStructuredBuffer<float> outputBuffer;
+
+struct AssembledVertex : IVertexFormat
+{
+ typedef SingleColorSet ColorSet;
+ float3 position;
+ SingleColorSet colorSet;
+ float2 uv;
+ ColorSet getColorSet() { return colorSet; }
+ float3 getPosition() { return position; }
+ float2 getUv() { return uv; }
+};
+
+struct CoarseVertex
+{
+ TVertex.ColorSet color;
+ float2 uv;
+};
+
+struct Fragment
+{
+ float4 color;
+};
+
+
+// Vertex Shader
+
+struct VertexStageInput
+{
+ TVertex assembledVertex : A;
+};
+
+struct VertexStageOutput
+{
+ CoarseVertex coarseVertex : CoarseVertex;
+ float4 sv_position : SV_Position;
+};
+
+VertexStageOutput vertexMain(VertexStageInput input)
+{
+ VertexStageOutput output;
+
+ float3 position = input.assembledVertex.getPosition();
+ output.sv_position = mul(modelViewProjection, float4(position, 1.0));
+ output.coarseVertex.uv = input.assembledVertex.getUv();
+ output.coarseVertex.color = input.assembledVertex.getColorSet();
+ return output;
+}
+
+// Fragment Shader
+
+struct FragmentStageInput
+{
+ CoarseVertex coarseVertex : CoarseVertex;
+};
+
+struct FragmentStageOutput
+{
+ Fragment fragment : SV_Target;
+};
+
+FragmentStageOutput fragmentMain(FragmentStageInput input)
+{
+ FragmentStageOutput output;
+ float3 color = input.coarseVertex.color.getColor();
+ float2 uv = input.coarseVertex.uv;
+ output.fragment.color = float4(color, 1.0);
+ outputBuffer[0] = 1.0;
+ return output;
+}
diff --git a/tests/compute/type-param-varying.slang.expected.txt b/tests/compute/type-param-varying.slang.expected.txt
new file mode 100644
index 000000000..47b9ba0c8
--- /dev/null
+++ b/tests/compute/type-param-varying.slang.expected.txt
@@ -0,0 +1 @@
+3F800000 \ No newline at end of file