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/language-feature | |
| 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/language-feature')
3 files changed, 147 insertions, 0 deletions
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; +} |
