summaryrefslogtreecommitdiffstats
path: root/tests/compute
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2018-01-21 16:26:52 -0800
committerTim Foley <tfoleyNV@users.noreply.github.com>2018-01-21 16:26:52 -0800
commit8196dc4a684a75344e507697273e2123af97b979 (patch)
treedbee3f92a10f15a9f7202010e1683b369c38ba15 /tests/compute
parent4044a1d3a0605198465a7eb6e0e3c1f8b1a3c298 (diff)
specialize witness tables when needed when specializing `lookup_witness_table` instruction. (#376)
Diffstat (limited to 'tests/compute')
-rw-r--r--tests/compute/int-generic.slang42
-rw-r--r--tests/compute/int-generic.slang.expected.txt1
2 files changed, 43 insertions, 0 deletions
diff --git a/tests/compute/int-generic.slang b/tests/compute/int-generic.slang
new file mode 100644
index 000000000..7531ee74e
--- /dev/null
+++ b/tests/compute/int-generic.slang
@@ -0,0 +1,42 @@
+//TEST(compute):COMPARE_COMPUTE:-xslang -use-ir
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):dxbinding(0),glbinding(0),out
+//TEST_INPUT:type Material<1,2>
+RWStructuredBuffer<int> outputBuffer;
+
+interface IBRDF
+{
+ int compute();
+};
+
+interface IMaterial
+{
+ associatedtype TBRDF : IBRDF;
+ TBRDF getBRDF();
+}
+
+struct BRDF<let A:int, let B:int> : IBRDF
+{
+ int c;
+ int compute()
+ {
+ return A+B;
+ }
+};
+
+struct Material<let A:int, let B: int> : IMaterial
+{
+ typedef BRDF<A,B> TBRDF;
+ TBRDF getBRDF() { TBRDF a; a.c = 0; return a; }
+};
+
+type_param TMaterial : IMaterial;
+
+TMaterial material;
+
+[numthreads(1, 1, 1)]
+void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+ TMaterial.TBRDF brdf = material.getBRDF();
+ int outVal = brdf.compute();
+ outputBuffer[dispatchThreadID.x] = outVal;
+} \ No newline at end of file
diff --git a/tests/compute/int-generic.slang.expected.txt b/tests/compute/int-generic.slang.expected.txt
new file mode 100644
index 000000000..e440e5c84
--- /dev/null
+++ b/tests/compute/int-generic.slang.expected.txt
@@ -0,0 +1 @@
+3 \ No newline at end of file