summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/library/export-library-generics.slang39
-rw-r--r--tests/library/module-library-matrix.slang8
-rw-r--r--tests/library/precompiled-dxil-generics.slang28
-rw-r--r--tests/library/precompiled-dxil-matrix.slang26
-rw-r--r--tests/library/precompiled-dxil.slang3
-rw-r--r--tests/library/precompiled-module-library-resource.slang33
6 files changed, 135 insertions, 2 deletions
diff --git a/tests/library/export-library-generics.slang b/tests/library/export-library-generics.slang
new file mode 100644
index 000000000..f88541da3
--- /dev/null
+++ b/tests/library/export-library-generics.slang
@@ -0,0 +1,39 @@
+//TEST_IGNORE_FILE:
+
+// export-library-generics.slang
+
+module "export-library-generics";
+
+public cbuffer Constants {
+ public float x;
+ public float y;
+}
+
+interface MyInterface
+{
+ int myMethod(int a);
+}
+
+struct MyType : MyInterface
+{
+ int myMethod(int a)
+ {
+ return a * 3;
+ }
+}
+
+int genericFunc<T: MyInterface>(T arg)
+{
+ return arg.myMethod(3);
+}
+
+public int normalFuncUsesGeneric(int a)
+{
+ MyType obj;
+ return genericFunc(obj);
+}
+
+public int normalFunc(int a)
+{
+ return a - 2;
+}
diff --git a/tests/library/module-library-matrix.slang b/tests/library/module-library-matrix.slang
new file mode 100644
index 000000000..85e4685cc
--- /dev/null
+++ b/tests/library/module-library-matrix.slang
@@ -0,0 +1,8 @@
+//TEST_IGNORE_FILE:
+
+module "module-library-matrix";
+
+public float4x4 to4x4(float3x4 source)
+{
+ return float4x4(source[0], source[1], source[2], float4(0.0f, 0.0f, 0.0f, 1.0f));
+}
diff --git a/tests/library/precompiled-dxil-generics.slang b/tests/library/precompiled-dxil-generics.slang
new file mode 100644
index 000000000..f01291a8e
--- /dev/null
+++ b/tests/library/precompiled-dxil-generics.slang
@@ -0,0 +1,28 @@
+// precompiled-dxil-generics.slang
+
+// A test that uses slang-modules with embedded precompiled DXIL and a library containing generics.
+// The test compiles a library slang (export-library-generics.slang) with -embed-dxil then links the
+// library to entrypoint slang (this file).
+// The test passes if there is no errror thrown.
+// TODO: Check if final linkage used only the precompiled dxil.
+
+//TEST(windows):COMPILE: tests/library/export-library-generics.slang -o tests/library/export-library-generics.slang-module -embed-dxil -profile lib_6_6 -incomplete-library
+//TEST(windows):COMPILE: tests/library/precompiled-dxil-generics.slang -target dxil -stage anyhit -entry anyhit -o tests/library/linked.dxil
+
+import "export-library-generics";
+
+struct Payload
+{
+ int val;
+}
+
+struct Attributes
+{
+ float2 bary;
+}
+
+[shader("anyhit")]
+void anyhit(inout Payload payload, Attributes attrib)
+{
+ payload.val = normalFunc(x * y) + normalFuncUsesGeneric(y);
+}
diff --git a/tests/library/precompiled-dxil-matrix.slang b/tests/library/precompiled-dxil-matrix.slang
new file mode 100644
index 000000000..271a7e214
--- /dev/null
+++ b/tests/library/precompiled-dxil-matrix.slang
@@ -0,0 +1,26 @@
+// precompiled-dxil-matrix.slang
+
+// This test imports a precompiled module that exports a matrix type, which is known to
+// cause https://github.com/shader-slang/slang/issues/4880 without driver mitigation.
+
+//TEST(windows):COMPILE: tests/library/module-library-matrix.slang -o tests/library/module-library-matrix.slang-module -embed-dxil -profile lib_6_6 -incomplete-library
+//TEST(windows):COMPILE: tests/library/precompiled-dxil-matrix.slang -stage anyhit -entry shadow -target dxil -o precompiled-dxil-matrix.dxil
+
+import "module-library-matrix";
+
+struct ShadowHitInfo
+{
+ bool isHit;
+ uint seed;
+};
+
+struct Attributes
+{
+ float2 bary;
+};
+
+[shader("anyhit")]
+void shadow(inout ShadowHitInfo payload, Attributes attrib)
+{
+ IgnoreHit();
+}
diff --git a/tests/library/precompiled-dxil.slang b/tests/library/precompiled-dxil.slang
index 19f67b075..8cc25bab5 100644
--- a/tests/library/precompiled-dxil.slang
+++ b/tests/library/precompiled-dxil.slang
@@ -8,8 +8,7 @@
// TODO: Check if final linkage used only the precompiled dxil.
//TEST(windows):COMPILE: tests/library/export-library.slang -o tests/library/export-library.slang-module -embed-dxil -profile lib_6_6 -incomplete-library
-//TEST(windows):COMPILE: tests/library/precompiled-dxil.slang -o tests/library/precompiled-dxil.slang-module -embed-dxil -profile lib_6_6 -incomplete-library
-//TEST(windows):COMPILE: tests/library/export-library.slang-module tests/library/precompiled-dxil.slang-module -target dxil -entry computeMain -profile cs_6_6 -o tests/library/linked.dxil
+//TEST(windows):COMPILE: tests/library/precompiled-dxil.slang tests/library/export-library.slang-module -target dxil -entry computeMain -profile cs_6_6 -o tests/library/linked.dxil
extern int foo(int a);
diff --git a/tests/library/precompiled-module-library-resource.slang b/tests/library/precompiled-module-library-resource.slang
new file mode 100644
index 000000000..79c3daaa1
--- /dev/null
+++ b/tests/library/precompiled-module-library-resource.slang
@@ -0,0 +1,33 @@
+// precompiled-module-library-resource.slang
+
+// Compile this library source with -embed-dxil option. Tests that modules can be
+// precompiled to dxil despite having resource parameters or return types.
+
+//TEST(windows):COMPILE: tests/library/precompiled-module-library-resource.slang -o tests/library/precompiled-module-library-resource.slang-module -embed-dxil -profile lib_6_6 -incomplete-library
+
+module "precompiled-module-library-resource";
+
+public struct ResourceStruct {
+ public StructuredBuffer<int> buffer;
+};
+
+public int resource_in_parameter(StructuredBuffer<int> buffer)
+{
+ return buffer[0];
+}
+
+public int resource_in_struct_parameter(ResourceStruct rs)
+{
+ return rs.buffer[0];
+}
+
+internal int matrix_in_parameter_internal(int1x1 matrix)
+{
+ return matrix[0][0];
+}
+
+public int matrix_in_parameter_public(int a)
+{
+ int1x1 matrix = {a};
+ return matrix_in_parameter_internal(matrix);
+}