From 6aca3813c4ccc496c0f9b2db293acb546aa11d2d Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 1 Nov 2023 21:42:12 -0700 Subject: Parameter binding and gfx fixes. (#3302) * Parameter binding and gfx fixes. * Add diagnostics on entry point parameters. * Fix. --------- Co-authored-by: Yong He --- .../generics/generic-shader-object-cbuffer.slang | 53 ++++++++++++++++++++++ .../generics/generic-shader-object-cbuffer2.slang | 46 +++++++++++++++++++ .../generics/generic-shader-object.slang | 48 ++++++++++++++++++++ 3 files changed, 147 insertions(+) create mode 100644 tests/language-feature/generics/generic-shader-object-cbuffer.slang create mode 100644 tests/language-feature/generics/generic-shader-object-cbuffer2.slang create mode 100644 tests/language-feature/generics/generic-shader-object.slang (limited to 'tests/language-feature') 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 : IFoo +{ + float v1; + RWStructuredBuffer buffer0; + RWStructuredBuffer buffer1; + + float getVal() + { + return buffer0[0].getElementVal() + buffer1[0].getElementVal() + v1; + } +} + +//TEST_INPUT:set cparams = new Params { new Impl{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> gFoo; + float v; + RWStructuredBuffer buffer; +} + +ConstantBuffer cparams; +RWStructuredBuffer 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 : IFoo +{ + float v1; + RWStructuredBuffer buffer0; + RWStructuredBuffer buffer1; + + float getVal() + { + return buffer0[0].getElementVal() + buffer1[0].getElementVal() + v1; + } +} +//TEST_INPUT:set gFoo = new Impl{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> gFoo, + uniform float v, + uniform RWStructuredBuffer 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 : IFoo +{ + RWStructuredBuffer buffer0; + RWStructuredBuffer buffer1; + + float getVal() + { + return buffer0[0].getElementVal() + buffer1[0].getElementVal(); + } +} + +//TEST_INPUT:set gFoo = new Impl{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> gFoo, + uniform float v, + uniform RWStructuredBuffer outputBuffer +) +{ + // CHECK: 4.0 + outputBuffer[0] = gFoo.getVal() + v; +} -- cgit v1.2.3