summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-11-01 21:42:12 -0700
committerGitHub <noreply@github.com>2023-11-01 21:42:12 -0700
commit6aca3813c4ccc496c0f9b2db293acb546aa11d2d (patch)
tree5281f0ac62946787db90409c1ab3da5ed3f0fc5c /tests
parent532c4322c9d9ab2c95a5bb573c89062456b59236 (diff)
Parameter binding and gfx fixes. (#3302)
* Parameter binding and gfx fixes. * Add diagnostics on entry point parameters. * Fix. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/bindings/nested-parameter-block-2.slang42
-rw-r--r--tests/language-feature/generics/generic-shader-object-cbuffer.slang53
-rw-r--r--tests/language-feature/generics/generic-shader-object-cbuffer2.slang46
-rw-r--r--tests/language-feature/generics/generic-shader-object.slang48
-rw-r--r--tests/reflection/default-space.slang.expected4
-rw-r--r--tests/reflection/mix-explicit-and-implicit-spaces.slang.expected12
-rw-r--r--tests/reflection/parameter-block-explicit-space.slang.expected8
-rw-r--r--tests/reflection/parameter-block.slang.2.expected4
-rw-r--r--tests/reflection/parameter-block.slang.expected4
-rw-r--r--tests/reflection/unbounded-arrays.hlsl.1.expected2
10 files changed, 206 insertions, 17 deletions
diff --git a/tests/bindings/nested-parameter-block-2.slang b/tests/bindings/nested-parameter-block-2.slang
new file mode 100644
index 000000000..38ce9232e
--- /dev/null
+++ b/tests/bindings/nested-parameter-block-2.slang
@@ -0,0 +1,42 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj -output-using-type
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d12 -use-dxil -shaderobj -output-using-type
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -shaderobj -output-using-type
+// nested-parameter-block-2.slang
+
+struct CB
+{
+ uint4 value;
+}
+
+struct MaterialSystem
+{
+ CB cb;
+ RWStructuredBuffer<uint4> data;
+}
+
+struct Scene
+{
+ CB sceneCb;
+ RWStructuredBuffer<uint4> data;
+ ParameterBlock<MaterialSystem> material;
+}
+
+//TEST_INPUT: set scene = new Scene { { {1,2,3,4} }, ubuffer(data=[1 2 3 4], stride=4), new MaterialSystem {{ {1,2,3,4} }, ubuffer(data=[1 2 3 4], stride=4)} }
+ParameterBlock<Scene> scene;
+
+struct MyBuffer
+{
+ RWStructuredBuffer<uint4> resultBuffer;
+}
+//TEST_INPUT: set pb2 = new MyBuffer { out ubuffer(data=[0 0 0 0], stride=4) }
+ParameterBlock<MyBuffer> pb2;
+
+// Main entry-point. Applies the transformation encoded by `transformer`
+// to all elements in `buffer`.
+[shader("compute")]
+[numthreads(4,1,1)]
+void computeMain(uint3 sv_dispatchThreadID : SV_DispatchThreadID)
+{
+ // CHECK: 4
+ pb2.resultBuffer[sv_dispatchThreadID.x] = scene.sceneCb.value.x + scene.data[0].x + scene.material.cb.value.x + scene.material.data[0].x;
+}
diff --git a/tests/language-feature/generics/generic-shader-object-cbuffer.slang b/tests/language-feature/generics/generic-shader-object-cbuffer.slang
new file mode 100644
index 000000000..eaaca7097
--- /dev/null
+++ b/tests/language-feature/generics/generic-shader-object-cbuffer.slang
@@ -0,0 +1,53 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d11 -shaderobj -output-using-type
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d12 -shaderobj -output-using-type -use-dxil
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -shaderobj -output-using-type
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -cpu -shaderobj -output-using-type
+
+interface IFoo
+{
+ float getVal();
+}
+interface IElement
+{
+ float getElementVal();
+}
+
+struct Elem : IElement
+{
+ float x;
+ float getElementVal()
+ {
+ return x;
+ }
+}
+
+struct Impl<T1:IElement, T2:IElement> : IFoo
+{
+ float v1;
+ RWStructuredBuffer<T1> buffer0;
+ RWStructuredBuffer<T2> buffer1;
+
+ float getVal()
+ {
+ return buffer0[0].getElementVal() + buffer1[0].getElementVal() + v1;
+ }
+}
+
+//TEST_INPUT:set cparams = new Params { new Impl<Elem,Elem>{2.0, ubuffer(data=[1.0], stride = 4), ubuffer(data=[2.0], stride = 4)}, 1.0, ubuffer(data=[1.0], stride=4) }
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+
+struct Params
+{
+ ParameterBlock<Impl<Elem, Elem>> gFoo;
+ float v;
+ RWStructuredBuffer<float> buffer;
+}
+
+ConstantBuffer<Params> cparams;
+RWStructuredBuffer<float> outputBuffer;
+[numthreads(1, 1, 1)]
+void computeMain()
+{
+ // CHECK: 7.0
+ outputBuffer[0] = cparams.gFoo.getVal() + cparams.v + cparams.buffer[0];
+}
diff --git a/tests/language-feature/generics/generic-shader-object-cbuffer2.slang b/tests/language-feature/generics/generic-shader-object-cbuffer2.slang
new file mode 100644
index 000000000..57b175418
--- /dev/null
+++ b/tests/language-feature/generics/generic-shader-object-cbuffer2.slang
@@ -0,0 +1,46 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d11 -shaderobj -output-using-type
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d12 -shaderobj -output-using-type -use-dxil
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -shaderobj -output-using-type
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -cpu -shaderobj -output-using-type
+
+interface IFoo
+{
+ float getVal();
+}
+interface IElement
+{
+ float getElementVal();
+}
+
+struct Elem : IElement
+{
+ float x;
+ float getElementVal()
+ {
+ return x;
+ }
+}
+
+struct Impl<T1:IElement, T2:IElement> : IFoo
+{
+ float v1;
+ RWStructuredBuffer<T1> buffer0;
+ RWStructuredBuffer<T2> buffer1;
+
+ float getVal()
+ {
+ return buffer0[0].getElementVal() + buffer1[0].getElementVal() + v1;
+ }
+}
+//TEST_INPUT:set gFoo = new Impl<Elem,Elem>{2.0, ubuffer(data=[1.0], stride = 4), ubuffer(data=[2.0], stride = 4)}
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+//TEST_INPUT:set v = 1.0;
+
+[numthreads(1, 1, 1)]
+void computeMain(uniform ParameterBlock<Impl<Elem, Elem>> gFoo,
+ uniform float v,
+ uniform RWStructuredBuffer<float> outputBuffer)
+{
+ // CHECK: 6.0
+ outputBuffer[0] = gFoo.getVal() + v;
+}
diff --git a/tests/language-feature/generics/generic-shader-object.slang b/tests/language-feature/generics/generic-shader-object.slang
new file mode 100644
index 000000000..746a0d0a7
--- /dev/null
+++ b/tests/language-feature/generics/generic-shader-object.slang
@@ -0,0 +1,48 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d11 -shaderobj -output-using-type
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -d3d12 -shaderobj -output-using-type -use-dxil
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -shaderobj -output-using-type
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -cpu -shaderobj -output-using-type
+
+interface IFoo
+{
+ float getVal();
+}
+interface IElement
+{
+ float getElementVal();
+}
+
+struct Elem : IElement
+{
+ float x;
+ float getElementVal()
+ {
+ return x;
+ }
+}
+
+struct Impl<T1:IElement, T2:IElement> : IFoo
+{
+ RWStructuredBuffer<T1> buffer0;
+ RWStructuredBuffer<T2> buffer1;
+
+ float getVal()
+ {
+ return buffer0[0].getElementVal() + buffer1[0].getElementVal();
+ }
+}
+
+//TEST_INPUT:set gFoo = new Impl<Elem,Elem>{ubuffer(data=[1.0], stride = 4), ubuffer(data=[2.0], stride = 4)}
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+//TEST_INPUT:set v = 1.0;
+
+[numthreads(1, 1, 1)]
+void computeMain(
+ uniform ParameterBlock<Impl<Elem, Elem>> gFoo,
+ uniform float v,
+ uniform RWStructuredBuffer<float> outputBuffer
+)
+{
+ // CHECK: 4.0
+ outputBuffer[0] = gFoo.getVal() + v;
+}
diff --git a/tests/reflection/default-space.slang.expected b/tests/reflection/default-space.slang.expected
index 5ba17790c..2667ae96e 100644
--- a/tests/reflection/default-space.slang.expected
+++ b/tests/reflection/default-space.slang.expected
@@ -14,7 +14,7 @@ standard output = {
},
{
"name": "b",
- "binding": {"kind": "registerSpace", "index": 0},
+ "binding": {"kind": "subElementRegisterSpace", "index": 0},
"type": {
"kind": "parameterBlock",
"elementType": {
@@ -32,7 +32,7 @@ standard output = {
]
},
"containerVarLayout": {
- "binding": {"kind": "registerSpace", "index": 0}
+ "binding": {"kind": "subElementRegisterSpace", "index": 0}
},
"elementVarLayout": {
"type": {
diff --git a/tests/reflection/mix-explicit-and-implicit-spaces.slang.expected b/tests/reflection/mix-explicit-and-implicit-spaces.slang.expected
index 63fe23551..36943df02 100644
--- a/tests/reflection/mix-explicit-and-implicit-spaces.slang.expected
+++ b/tests/reflection/mix-explicit-and-implicit-spaces.slang.expected
@@ -6,7 +6,7 @@ standard output = {
"parameters": [
{
"name": "a",
- "binding": {"kind": "registerSpace", "index": 0},
+ "binding": {"kind": "subElementRegisterSpace", "index": 0},
"type": {
"kind": "parameterBlock",
"elementType": {
@@ -26,7 +26,7 @@ standard output = {
"containerVarLayout": {
"bindings": [
{"kind": "constantBuffer", "index": 0},
- {"kind": "registerSpace", "index": 0}
+ {"kind": "subElementRegisterSpace", "index": 0}
]
},
"elementVarLayout": {
@@ -50,7 +50,7 @@ standard output = {
},
{
"name": "b",
- "binding": {"kind": "registerSpace", "index": 1},
+ "binding": {"kind": "subElementRegisterSpace", "index": 1},
"type": {
"kind": "parameterBlock",
"elementType": {
@@ -70,7 +70,7 @@ standard output = {
"containerVarLayout": {
"bindings": [
{"kind": "constantBuffer", "index": 0},
- {"kind": "registerSpace", "index": 0}
+ {"kind": "subElementRegisterSpace", "index": 0}
]
},
"elementVarLayout": {
@@ -94,7 +94,7 @@ standard output = {
},
{
"name": "c",
- "binding": {"kind": "registerSpace", "index": 2},
+ "binding": {"kind": "subElementRegisterSpace", "index": 2},
"type": {
"kind": "parameterBlock",
"elementType": {
@@ -114,7 +114,7 @@ standard output = {
"containerVarLayout": {
"bindings": [
{"kind": "constantBuffer", "index": 0},
- {"kind": "registerSpace", "index": 0}
+ {"kind": "subElementRegisterSpace", "index": 0}
]
},
"elementVarLayout": {
diff --git a/tests/reflection/parameter-block-explicit-space.slang.expected b/tests/reflection/parameter-block-explicit-space.slang.expected
index 1aa41519d..6a0c1467a 100644
--- a/tests/reflection/parameter-block-explicit-space.slang.expected
+++ b/tests/reflection/parameter-block-explicit-space.slang.expected
@@ -6,7 +6,7 @@ standard output = {
"parameters": [
{
"name": "a",
- "binding": {"kind": "registerSpace", "index": 2},
+ "binding": {"kind": "subElementRegisterSpace", "index": 2},
"type": {
"kind": "parameterBlock",
"elementType": {
@@ -53,7 +53,7 @@ standard output = {
"containerVarLayout": {
"bindings": [
{"kind": "constantBuffer", "index": 0},
- {"kind": "registerSpace", "index": 0}
+ {"kind": "subElementRegisterSpace", "index": 0}
]
},
"elementVarLayout": {
@@ -108,7 +108,7 @@ standard output = {
},
{
"name": "b",
- "binding": {"kind": "registerSpace", "index": 3},
+ "binding": {"kind": "subElementRegisterSpace", "index": 3},
"type": {
"kind": "parameterBlock",
"elementType": {
@@ -147,7 +147,7 @@ standard output = {
"containerVarLayout": {
"bindings": [
{"kind": "constantBuffer", "index": 0},
- {"kind": "registerSpace", "index": 0}
+ {"kind": "subElementRegisterSpace", "index": 0}
]
},
"elementVarLayout": {
diff --git a/tests/reflection/parameter-block.slang.2.expected b/tests/reflection/parameter-block.slang.2.expected
index e4bf9b6cb..fdcc428e9 100644
--- a/tests/reflection/parameter-block.slang.2.expected
+++ b/tests/reflection/parameter-block.slang.2.expected
@@ -6,7 +6,7 @@ standard output = {
"parameters": [
{
"name": "a",
- "binding": {"kind": "registerSpace", "index": 1},
+ "binding": {"kind": "subElementRegisterSpace", "index": 1},
"type": {
"kind": "parameterBlock",
"elementType": {
@@ -31,7 +31,7 @@ standard output = {
]
},
"containerVarLayout": {
- "binding": {"kind": "registerSpace", "index": 0}
+ "binding": {"kind": "subElementRegisterSpace", "index": 0}
},
"elementVarLayout": {
"type": {
diff --git a/tests/reflection/parameter-block.slang.expected b/tests/reflection/parameter-block.slang.expected
index 0909dc8cf..1d0feaa77 100644
--- a/tests/reflection/parameter-block.slang.expected
+++ b/tests/reflection/parameter-block.slang.expected
@@ -6,7 +6,7 @@ standard output = {
"parameters": [
{
"name": "a",
- "binding": {"kind": "registerSpace", "index": 1},
+ "binding": {"kind": "subElementRegisterSpace", "index": 1},
"type": {
"kind": "parameterBlock",
"elementType": {
@@ -31,7 +31,7 @@ standard output = {
]
},
"containerVarLayout": {
- "binding": {"kind": "registerSpace", "index": 0}
+ "binding": {"kind": "subElementRegisterSpace", "index": 0}
},
"elementVarLayout": {
"type": {
diff --git a/tests/reflection/unbounded-arrays.hlsl.1.expected b/tests/reflection/unbounded-arrays.hlsl.1.expected
index 60d894ba7..daa1cb789 100644
--- a/tests/reflection/unbounded-arrays.hlsl.1.expected
+++ b/tests/reflection/unbounded-arrays.hlsl.1.expected
@@ -65,7 +65,7 @@ standard output = {
},
{
"name": "ee",
- "binding": {"kind": "registerSpace", "index": 3, "count": 2},
+ "binding": {"kind": "subElementRegisterSpace", "index": 3, "count": 2},
"type": {
"kind": "array",
"elementCount": 0,