diff options
| -rw-r--r-- | source/slang/slang-mangle.cpp | 18 | ||||
| -rw-r--r-- | tests/bugs/array-size-static-const-2.slang | 33 | ||||
| -rw-r--r-- | tests/bugs/array-size-static-const-2.slang.expected.txt | 5 |
3 files changed, 56 insertions, 0 deletions
diff --git a/source/slang/slang-mangle.cpp b/source/slang/slang-mangle.cpp index a7d047a0c..2386e9f5a 100644 --- a/source/slang/slang-mangle.cpp +++ b/source/slang/slang-mangle.cpp @@ -287,6 +287,24 @@ namespace Slang emitRaw(context, "k"); emit(context, (UInt) constantIntVal->value); } + else if (auto funcCallIntVal = dynamicCast<FuncCallIntVal>(val)) + { + emitRaw(context, "KC"); + emit(context, funcCallIntVal->args.getCount()); + emitName(context, funcCallIntVal->funcDeclRef.getName()); + for (Index i = 0; i < funcCallIntVal->args.getCount(); i++) + emitVal(context, funcCallIntVal->args[i]); + } + else if (auto lookupIntVal = dynamicCast<WitnessLookupIntVal>(val)) + { + emitRaw(context, "KL"); + emitVal(context, lookupIntVal->witness); + emitName(context, lookupIntVal->key->getName()); + } + else if (auto polynomialIntVal = dynamicCast<PolynomialIntVal>(val)) + { + emitRaw(context, "KX"); + } else { SLANG_UNEXPECTED("unimplemented case in mangling"); diff --git a/tests/bugs/array-size-static-const-2.slang b/tests/bugs/array-size-static-const-2.slang new file mode 100644 index 000000000..f7aa00b97 --- /dev/null +++ b/tests/bugs/array-size-static-const-2.slang @@ -0,0 +1,33 @@ +// array-size-static-const-2.hlsl +//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> +{ + static const int HalfN = N > 1? N / A.M : 1; + T sum(T arr[HalfN]) + { + T rs = T(0); + 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> obj; + outputBuffer[0] = obj.sum(arr); +}
\ No newline at end of file diff --git a/tests/bugs/array-size-static-const-2.slang.expected.txt b/tests/bugs/array-size-static-const-2.slang.expected.txt new file mode 100644 index 000000000..ae5bfa02a --- /dev/null +++ b/tests/bugs/array-size-static-const-2.slang.expected.txt @@ -0,0 +1,5 @@ +type: uint32_t +3 +0 +0 +0 |
