diff options
| -rw-r--r-- | source/slang/slang-check-decl.cpp | 3 | ||||
| -rw-r--r-- | tests/bugs/array-size-groupshared.slang | 42 | ||||
| -rw-r--r-- | tests/bugs/array-size-groupshared.slang.expected.txt | 5 |
3 files changed, 50 insertions, 0 deletions
diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp index 3779f48e3..580ad8402 100644 --- a/source/slang/slang-check-decl.cpp +++ b/source/slang/slang-check-decl.cpp @@ -642,6 +642,9 @@ namespace Slang } else if( auto genericValueParamDecl = as<GenericValueParamDecl>(mm) ) { + if (semantics) + ensureDecl(semantics, genericValueParamDecl, DeclCheckState::ReadyForLookup); + args.add(astBuilder->getOrCreate<GenericParamIntVal>( genericValueParamDecl->getType(), genericValueParamDecl, outerSubst)); diff --git a/tests/bugs/array-size-groupshared.slang b/tests/bugs/array-size-groupshared.slang new file mode 100644 index 000000000..1acda0292 --- /dev/null +++ b/tests/bugs/array-size-groupshared.slang @@ -0,0 +1,42 @@ +// array-size-group-shared.slang +//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<uint> outputBuffer; + +interface IA +{ + static const int M; +} +struct B : IA +{ + static const int M = 2; +} +struct GenType<T : __BuiltinIntegerType, A: IA, let N : int, let M : int> +{ + static const int HalfN = N > 1? N / A.M : 1; + static const int P = M + N; + [ForceInline] + Ref<uint> weights(int index) + { + static groupshared uint w[P]; + return w[index]; + } + T sum(T arr[HalfN]) + { + T rs = T(0); + for (int i = 0; i < P; i++) + weights(i) = i; + for (int i = 0; i < HalfN; i++) + rs += arr[i]; + return rs; + } +} + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + int arr[2] = { 1, 2 }; + GenType<int, B, 4, 2> obj; + outputBuffer[0] = obj.sum(arr); +}
\ No newline at end of file diff --git a/tests/bugs/array-size-groupshared.slang.expected.txt b/tests/bugs/array-size-groupshared.slang.expected.txt new file mode 100644 index 000000000..ae5bfa02a --- /dev/null +++ b/tests/bugs/array-size-groupshared.slang.expected.txt @@ -0,0 +1,5 @@ +type: uint32_t +3 +0 +0 +0 |
