diff options
Diffstat (limited to 'tests/language-feature')
13 files changed, 541 insertions, 0 deletions
diff --git a/tests/language-feature/higher-order-functions/overload-different-param-count.slang b/tests/language-feature/higher-order-functions/overload-different-param-count.slang new file mode 100644 index 000000000..1af1b6706 --- /dev/null +++ b/tests/language-feature/higher-order-functions/overload-different-param-count.slang @@ -0,0 +1,59 @@ +//TEST:SIMPLE(filecheck=CHECK): -target glsl -entry computeMain -stage compute +// CHECK: main( +struct DiffMaterialData : IDifferentiable +{ + static const uint kMaterialParamCount = 20; + + // Material parameters. + float data[kMaterialParamCount]; + + [Differentiable] + __init() + { + [ForceUnroll] + for (uint i = 0; i < kMaterialParamCount; i++) + data[i] = 0.f; + } + + [Differentiable] + float read(inout uint offset) { return data[offset++]; } + + [Differentiable] + void read<let N : int>(out vector<float, N> value, inout uint offset) + { + [ForceUnroll] + for (uint i = 0; i < N; i++) + value[i] = read(offset); + } + + [Differentiable] + vector<float, N> read<let N : int>(inout uint offset) + { + vector<float, N> value; + this.read(value, offset); + return value; + } + + [mutating] + [Differentiable] + void write(float value, inout uint offset) { data[offset++] = value; } + + [mutating] + [Differentiable] + void write<let N : int>(vector<float, N> value, inout uint offset) + { + [ForceUnroll] + for (uint i = 0; i < N; i++) + this.write(value[i], offset); + } +}; + +RWStructuredBuffer<float3> outputBuffer; + +[numthreads(1,1,1)] +void computeMain() +{ + DiffMaterialData diffData; + uint offset = 0; + outputBuffer[0] = diffData.read<3>(offset); +}
\ No newline at end of file diff --git a/tests/language-feature/struct-field-initializers/struct-field-initializer-extension-inheritance.slang b/tests/language-feature/struct-field-initializers/struct-field-initializer-extension-inheritance.slang new file mode 100644 index 000000000..4af5f2847 --- /dev/null +++ b/tests/language-feature/struct-field-initializers/struct-field-initializer-extension-inheritance.slang @@ -0,0 +1,59 @@ +//TEST:SIMPLE(filecheck=CHECK): -target hlsl -stage compute -entry computeMain +RWStructuredBuffer<int> outputBuffer; + +//CHECK: error 30851 + +struct DefaultStructNoInit_base +{ + int data0 = 2; + int data1 = 2; +}; +extension DefaultStructNoInit_base +{ + __init(int indata) + { + //unused + } +} +struct DefaultStructNoInit : DefaultStructNoInit_base +{ + int dataInherit = 2; +}; + +struct DefaultStructWithInit_base +{ + int data0; + int data1 = 3; +}; +extension DefaultStructWithInit_base +{ + __init(int indata) + { + //unused + } + __init() + { + data0 = 3; + } +} +struct DefaultStructWithInit : DefaultStructWithInit_base +{ + int dataInherit = 3; +}; + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + DefaultStructNoInit noInit = DefaultStructNoInit(); + DefaultStructWithInit withInit = DefaultStructWithInit(); + // BUF: 1 + outputBuffer[0] = true + && noInit.data0 == 2 + && noInit.data1 == 2 + && noInit.dataInherit == 2 + + && withInit.data0 == 3 + && withInit.data1 == 3 + && withInit.dataInherit == 3 + ; +}
\ No newline at end of file diff --git a/tests/language-feature/struct-field-initializers/struct-field-initializer-extension.slang b/tests/language-feature/struct-field-initializers/struct-field-initializer-extension.slang new file mode 100644 index 000000000..1acfeeba7 --- /dev/null +++ b/tests/language-feature/struct-field-initializers/struct-field-initializer-extension.slang @@ -0,0 +1,45 @@ +//TEST:SIMPLE(filecheck=CHECK): -target hlsl -stage compute -entry computeMain +RWStructuredBuffer<int> outputBuffer; + +//CHECK: error 30851 + +struct DefaultStructNoInit +{ + int data0 = 2; + int data1 = 2; + +}; +extension DefaultStructNoInit +{ +} + +struct DefaultStructWithInit +{ + int data0; + int data1 = 3; + int data2; +}; +extension DefaultStructWithInit +{ + __init() + { + data0 = 3; + data2 = 3; + } +} + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + DefaultStructNoInit noInit = DefaultStructNoInit(); + DefaultStructWithInit withInit = DefaultStructWithInit(); + // BUF: 1 + outputBuffer[0] = true + && noInit.data0 == 2 + && noInit.data1 == 2 + + && withInit.data0 == 3 + && withInit.data1 == 3 + && withInit.data2 == 3 + ; +}
\ No newline at end of file diff --git a/tests/language-feature/struct-field-initializers/struct-field-initializer-import-target.slang b/tests/language-feature/struct-field-initializers/struct-field-initializer-import-target.slang new file mode 100644 index 000000000..23d1e3844 --- /dev/null +++ b/tests/language-feature/struct-field-initializers/struct-field-initializer-import-target.slang @@ -0,0 +1,9 @@ +// tested import struct for struct-field-initializer-import.slang +struct DefaultStructNoInit +{ + int data0 = 2; +}; +struct DefaultStructNoInit2 +{ + int data0; +};
\ No newline at end of file diff --git a/tests/language-feature/struct-field-initializers/struct-field-initializer-import.slang b/tests/language-feature/struct-field-initializers/struct-field-initializer-import.slang new file mode 100644 index 000000000..6c8b6fee1 --- /dev/null +++ b/tests/language-feature/struct-field-initializers/struct-field-initializer-import.slang @@ -0,0 +1,26 @@ +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -emit-spirv-directly +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-cpu -compute -entry computeMain +//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-dx12 -use-dxil -compute -entry computeMain + +//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer +import struct_field_initializer_import_target; +RWStructuredBuffer<int> outputBuffer; + +void modifyOut(out DefaultStructNoInit2 noInit2) +{ + noInit2.data0 = 2; +} + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + DefaultStructNoInit noInit; + DefaultStructNoInit2 noInit2; + modifyOut(noInit2); + // BUF: 1 + outputBuffer[0] = true + && noInit.data0 == 2 + && noInit2.data0 == 2 + ; +}
\ No newline at end of file diff --git a/tests/language-feature/struct-field-initializers/struct-field-initializer-inherited-chain.slang b/tests/language-feature/struct-field-initializers/struct-field-initializer-inherited-chain.slang new file mode 100644 index 000000000..ef21a452f --- /dev/null +++ b/tests/language-feature/struct-field-initializers/struct-field-initializer-inherited-chain.slang @@ -0,0 +1,53 @@ +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -emit-spirv-directly +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-cpu -compute -entry computeMain +//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-dx12 -use-dxil -compute -entry computeMain + +//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +static int myTwo = 2; +static int myThree = 1+2; + +struct DefaultStruct_bottom +{ + int data0 = 1; +}; +struct DefaultStruct_middle1 : DefaultStruct_bottom +{ + int data1 = 1; +}; +struct DefaultStruct_middle2 : DefaultStruct_middle1 +{ + int data2 = 1; +}; +struct DefaultStruct_top : DefaultStruct_middle2 +{ + int data3 = 1; +}; + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + DefaultStruct_bottom s1; + DefaultStruct_middle1 s2; + DefaultStruct_middle2 s3; + DefaultStruct_top s4; + + // BUF: 1 + outputBuffer[0] = true + && s1.data0 == 1 + + && s2.data0 == 1 + && s2.data1 == 1 + + && s3.data0 == 1 + && s3.data1 == 1 + && s3.data2 == 1 + + && s4.data0 == 1 + && s4.data1 == 1 + && s4.data2 == 1 + && s4.data3 == 1 + ; +}
\ No newline at end of file diff --git a/tests/language-feature/struct-field-initializers/struct-field-initializer-inherited.slang b/tests/language-feature/struct-field-initializers/struct-field-initializer-inherited.slang new file mode 100644 index 000000000..8edb98447 --- /dev/null +++ b/tests/language-feature/struct-field-initializers/struct-field-initializer-inherited.slang @@ -0,0 +1,66 @@ +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -emit-spirv-directly +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-cpu -compute -entry computeMain +//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-dx12 -use-dxil -compute -entry computeMain + +//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +static int myTwo = 2; +static int myThree = 1+2; + +struct DefaultStruct_base +{ + int data0 = 1; + int data1; + + __init() + { + data1 = 1; + } +}; +struct DefaultStruct1 : DefaultStruct_base +{ + int data2 = 1; +}; +struct DefaultStruct2 : DefaultStruct_base +{ + int data2 = 1; + __init() + { + if (data0 != 1) + { + data2 = 0; + } + } +}; +struct DefaultStruct3 : DefaultStruct_base +{ + __init() + { + } +}; +struct DefaultStruct4 : DefaultStruct_base +{ +}; +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + DefaultStruct1 s1; + DefaultStruct2 s2; + DefaultStruct3 s3; + DefaultStruct4 s4; + // BUF: 1 + outputBuffer[0] = true + && s1.data0 == 1 + && s1.data1 == 1 + && s1.data2 == 1 + && s2.data0 == 1 + && s2.data1 == 1 + && s2.data2 == 1 + && s3.data0 == 1 + && s3.data1 == 1 + && s4.data0 == 1 + && s4.data1 == 1 + ; +}
\ No newline at end of file diff --git a/tests/language-feature/struct-field-initializers/struct-field-initializer-init-extension-init-non-default.slang b/tests/language-feature/struct-field-initializers/struct-field-initializer-init-extension-init-non-default.slang new file mode 100644 index 000000000..2c6cfefac --- /dev/null +++ b/tests/language-feature/struct-field-initializers/struct-field-initializer-init-extension-init-non-default.slang @@ -0,0 +1,32 @@ +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -emit-spirv-directly +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-cpu -compute -entry computeMain +//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-dx12 -use-dxil -compute -entry computeMain + +//TEST_INPUT:ubuffer(data=[0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +struct DefaultStructWithInit +{ + int data0 = 3; + int data1 = 0; +}; +extension DefaultStructWithInit +{ + [mutating] + __init(int inData) + { + data1 = 3; + } +} + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + DefaultStructWithInit withInit = DefaultStructWithInit(5); + // BUF: 1 + outputBuffer[0] = true + && withInit.data0 == 3 + && withInit.data1 == 3 + ; +}
\ No newline at end of file diff --git a/tests/language-feature/struct-field-initializers/struct-field-initializer-init-inheritance-write-to-same.slang b/tests/language-feature/struct-field-initializers/struct-field-initializer-init-inheritance-write-to-same.slang new file mode 100644 index 000000000..eff3595f1 --- /dev/null +++ b/tests/language-feature/struct-field-initializers/struct-field-initializer-init-inheritance-write-to-same.slang @@ -0,0 +1,32 @@ +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -emit-spirv-directly +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-cpu -compute -entry computeMain +//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-dx12 -use-dxil -compute -entry computeMain + +//TEST_INPUT:ubuffer(data=[0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +struct DefaultStructWithInit_base +{ + int data0 = 3; + int data1 = 0; +}; + +struct DefaultStructWithInit : DefaultStructWithInit_base +{ + __init() + { + data1 = 3; + } +}; + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + DefaultStructWithInit withInit = DefaultStructWithInit(); + // BUF: 1 + outputBuffer[0] = true + && withInit.data0 == 3 + && withInit.data1 == 3 + ; +}
\ No newline at end of file diff --git a/tests/language-feature/struct-field-initializers/struct-field-initializer-init-parameter.slang b/tests/language-feature/struct-field-initializers/struct-field-initializer-init-parameter.slang new file mode 100644 index 000000000..02773c9fa --- /dev/null +++ b/tests/language-feature/struct-field-initializers/struct-field-initializer-init-parameter.slang @@ -0,0 +1,28 @@ +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -emit-spirv-directly +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-cpu -compute -entry computeMain +//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-dx12 -use-dxil -compute -entry computeMain + +//TEST_INPUT:ubuffer(data=[0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +struct DefaultStructWithInit +{ + int data0 = 3; + int data1 = 0; + __init(int inData) + { + data1 = 3; + } +}; + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + DefaultStructWithInit withInit = DefaultStructWithInit(5); + // BUF: 1 + outputBuffer[0] = true + && withInit.data0 == 3 + && withInit.data1 == 3 + ; +}
\ No newline at end of file diff --git a/tests/language-feature/struct-field-initializers/struct-field-initializer-static.slang b/tests/language-feature/struct-field-initializers/struct-field-initializer-static.slang new file mode 100644 index 000000000..7f0b0577f --- /dev/null +++ b/tests/language-feature/struct-field-initializers/struct-field-initializer-static.slang @@ -0,0 +1,32 @@ +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -emit-spirv-directly +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-cpu -compute -entry computeMain +//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-dx12 -use-dxil -compute -entry computeMain + +//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +struct DefaultStructNoInit_base +{ + static const int data0 = 2; + static int data1 = 2; + int data2 = 2; +}; + +struct DefaultStructNoInit : DefaultStructNoInit_base +{ + int data3 = 2; +}; + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + DefaultStructNoInit noInit; + // BUF: 1 + outputBuffer[0] = true + && noInit.data0 == 2 + && noInit.data1 == 2 + && noInit.data2 == 2 + && noInit.data3 == 2 + ; +}
\ No newline at end of file diff --git a/tests/language-feature/struct-field-initializers/struct-field-initializer.slang b/tests/language-feature/struct-field-initializers/struct-field-initializer.slang new file mode 100644 index 000000000..0a03644aa --- /dev/null +++ b/tests/language-feature/struct-field-initializers/struct-field-initializer.slang @@ -0,0 +1,60 @@ +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -emit-spirv-directly +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-cpu -compute -entry computeMain +//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-dx12 -use-dxil -compute -entry computeMain + +//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +static int myTwo = 2; +static int myThree = 1+2; + +struct DefaultStructNoInit +{ + int data0; + int data1 = myTwo; + int data2 = 2; +}; +struct DefaultStructWithInit +{ + int data0 = 3; + int data1 = myThree; + int data2; + __init() + { + data2 = 3; + } +}; +struct DefaultStructWithInit2 +{ + int data0 = 4; + int data1 = 1; + int data2 = 1; + __init() + { + data1 = 4; + data2 = 4; + } +}; +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + DefaultStructNoInit noInit = DefaultStructNoInit(); + noInit.data0 = 2; + DefaultStructWithInit withInit = DefaultStructWithInit(); + DefaultStructWithInit2 withInit2 = DefaultStructWithInit2(); + // BUF: 1 + outputBuffer[0] = true + && noInit.data0 == 2 + && noInit.data1 == 2 + && noInit.data2 == 2 + + && withInit.data0 == 3 + && withInit.data1 == 3 + && withInit.data2 == 3 + + && withInit2.data0 == 4 + && withInit2.data1 == 4 + && withInit2.data2 == 4 + ; +}
\ No newline at end of file diff --git a/tests/language-feature/struct-field-initializers/struct-field-no-initializer-complex-types.slang b/tests/language-feature/struct-field-initializers/struct-field-no-initializer-complex-types.slang new file mode 100644 index 000000000..a55c4725d --- /dev/null +++ b/tests/language-feature/struct-field-initializers/struct-field-no-initializer-complex-types.slang @@ -0,0 +1,40 @@ +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -emit-spirv-directly +//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-cpu -compute -entry computeMain +//TEST(smoke,compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-dx12 -use-dxil -compute -entry computeMain + +//TEST_INPUT:ubuffer(data=[0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +struct DefaultData +{ + static const int2 val = int2(0, 1); + float2 size; + float scale; + float bias; +}; + +extension DefaultData +{ + int someGet() + { + return val.x; + } +} + +int loadDefaultData(inout DefaultData noInit) +{ + outputBuffer[1] = 1; + return noInit.someGet(); +} + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + DefaultData noInit; + outputBuffer[0] = true + && loadDefaultData(noInit) == 0; + ; + // BUF: 1 + // BUF-NEXT: 1 +}
\ No newline at end of file |
