summaryrefslogtreecommitdiff
path: root/tests/compute
diff options
context:
space:
mode:
Diffstat (limited to 'tests/compute')
-rw-r--r--tests/compute/generics-constrained.slang46
-rw-r--r--tests/compute/generics-constrained.slang.expected.txt4
2 files changed, 50 insertions, 0 deletions
diff --git a/tests/compute/generics-constrained.slang b/tests/compute/generics-constrained.slang
new file mode 100644
index 000000000..669674376
--- /dev/null
+++ b/tests/compute/generics-constrained.slang
@@ -0,0 +1,46 @@
+//TEST(smoke,compute):COMPARE_COMPUTE:-xslang -use-ir
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):dxbinding(0),glbinding(0),out
+
+// Use interface constraints on a generic parameter
+
+interface Helper
+{
+ float getHelp();
+}
+
+struct A : Helper
+{
+ float a;
+
+ float getHelp()
+ {
+ // TODO: we should be able to reference a member variable here,
+ // but the front-end isn't handling references through `this`
+ // properly yet.
+// return a;
+
+ return 1.0f;
+ }
+};
+
+__generic<T : Helper>
+float testHelp(T helper)
+{
+ return helper.getHelp();
+}
+
+RWStructuredBuffer<float> outputBuffer : register(u0);
+
+
+[numthreads(4, 1, 1)]
+void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+ uint tid = dispatchThreadID.x;
+ float inVal = float(tid);
+
+ A a;
+ a.a = inVal;
+ float outVal = testHelp<A>(a);
+
+ outputBuffer[tid] = outVal;
+} \ No newline at end of file
diff --git a/tests/compute/generics-constrained.slang.expected.txt b/tests/compute/generics-constrained.slang.expected.txt
new file mode 100644
index 000000000..cc5e55ab6
--- /dev/null
+++ b/tests/compute/generics-constrained.slang.expected.txt
@@ -0,0 +1,4 @@
+3F800000
+3F800000
+3F800000
+3F800000