diff options
| author | Yong He <yonghe@outlook.com> | 2023-11-01 21:42:12 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-01 21:42:12 -0700 |
| commit | 6aca3813c4ccc496c0f9b2db293acb546aa11d2d (patch) | |
| tree | 5281f0ac62946787db90409c1ab3da5ed3f0fc5c /tests | |
| parent | 532c4322c9d9ab2c95a5bb573c89062456b59236 (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')
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, |
