summaryrefslogtreecommitdiffstats
path: root/tests/compute
diff options
context:
space:
mode:
Diffstat (limited to 'tests/compute')
-rw-r--r--tests/compute/constexpr.slang111
-rw-r--r--tests/compute/constexpr.slang.1.expected.txt2
-rw-r--r--tests/compute/constexpr.slang.expected.txt2
3 files changed, 115 insertions, 0 deletions
diff --git a/tests/compute/constexpr.slang b/tests/compute/constexpr.slang
new file mode 100644
index 000000000..c3f9b6a89
--- /dev/null
+++ b/tests/compute/constexpr.slang
@@ -0,0 +1,111 @@
+// constexpr.slang
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -gcompute
+//DISABLED://TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -gcompute
+//TEST_INPUT: Texture2D(size=4, content = one) : dxbinding(0),glbinding(0)
+//TEST_INPUT: Sampler : dxbinding(0),glbinding(0)
+//TEST_INPUT: ubuffer(data=[0 0], stride=4):dxbinding(1),glbinding(0),out
+
+// Note: Vulkan version of this test is disabled pending adding
+// support for rendering tests to the harness.
+
+Texture2D tex;
+SamplerState samp;
+RWStructuredBuffer<float> outputBuffer;
+
+cbuffer Uniforms
+{
+ float4x4 modelViewProjection;
+}
+
+struct AssembledVertex
+{
+ float3 position;
+ float3 color;
+ float2 uv;
+};
+
+struct CoarseVertex
+{
+ float3 color;
+ float2 uv;
+};
+
+struct Fragment
+{
+ float4 color;
+};
+
+
+// Vertex Shader
+
+struct VertexStageInput
+{
+ AssembledVertex assembledVertex : A;
+};
+
+struct VertexStageOutput
+{
+ CoarseVertex coarseVertex : CoarseVertex;
+ float4 sv_position : SV_Position;
+};
+
+VertexStageOutput vertexMain(VertexStageInput input)
+{
+ VertexStageOutput output;
+
+ float3 position = input.assembledVertex.position;
+ float3 color = input.assembledVertex.color;
+
+ output.coarseVertex.color = color;
+ output.sv_position = mul(modelViewProjection, float4(position, 1.0));
+ output.coarseVertex.uv = input.assembledVertex.uv;
+ return output;
+}
+
+// Fragment Shader
+
+struct FragmentStageInput
+{
+ CoarseVertex coarseVertex : CoarseVertex;
+};
+
+struct FragmentStageOutput
+{
+ Fragment fragment : SV_Target;
+};
+
+FragmentStageOutput fragmentMain(FragmentStageInput input)
+{
+ // The texel offset argument to `Texture2D.Sample` is
+ // required to be `constexpr`. This test is going to
+ // check that we correctly propagate this constraint
+ // backward to the value `a`.
+ //
+ // Because the HLSL compiler(s) already do this kind
+ // of propagation, the only real way to test this
+ // will be to target Vulkan, where the standard
+ // GLSL compiler gives an error message rather than
+ // infer `const`-ness.
+
+ uint a = 0;
+ constexpr uint b = 1;
+
+ uint2 ab = uint2(a,b);
+
+ FragmentStageOutput output;
+
+ float3 color = input.coarseVertex.color;
+ float2 uv = input.coarseVertex.uv;
+ output.fragment.color = float4(color, 1.0);
+
+ float4 val = float4(color, 1.0);
+ val = val - 16*tex.Sample(samp, uv, ab);
+
+ outputBuffer[0] = 1;
+
+ if(val.x < 0)
+ discard;
+
+ outputBuffer[1] = 1;
+ return output;
+} \ No newline at end of file
diff --git a/tests/compute/constexpr.slang.1.expected.txt b/tests/compute/constexpr.slang.1.expected.txt
new file mode 100644
index 000000000..e0e43c4e8
--- /dev/null
+++ b/tests/compute/constexpr.slang.1.expected.txt
@@ -0,0 +1,2 @@
+3F800000
+0
diff --git a/tests/compute/constexpr.slang.expected.txt b/tests/compute/constexpr.slang.expected.txt
new file mode 100644
index 000000000..e0e43c4e8
--- /dev/null
+++ b/tests/compute/constexpr.slang.expected.txt
@@ -0,0 +1,2 @@
+3F800000
+0