diff options
| author | Ronan <ro.cailleau@gmail.com> | 2025-05-09 21:34:08 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-09 12:34:08 -0700 |
| commit | dbf05f8dca79d7bb166038652d968554d486c9fd (patch) | |
| tree | 432a19bebdfd0c1062c5e062542eae4e7880f79d /tests/language-feature/extensions | |
| parent | 5e5c08dc5ddf7989faf2f9f8ad76e260ba6385d7 (diff) | |
Fixed name mangling of generic extensions (#6671)
* Fixed name mangling of generic extensions
* Added tests for generic extensions linking.
- Disabled bugs/gh-6331.slang since it now triggers an assertion error revealed by the new version of the mangler.
* Re-enabled test gh-6331 (fixed by a5efbb1b775afb2f6b29b37d39947c41744bb005)
---------
Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'tests/language-feature/extensions')
| -rw-r--r-- | tests/language-feature/extensions/generic-extension-3.slang | 42 | ||||
| -rw-r--r-- | tests/language-feature/extensions/generic-extension-4.slang | 58 |
2 files changed, 100 insertions, 0 deletions
diff --git a/tests/language-feature/extensions/generic-extension-3.slang b/tests/language-feature/extensions/generic-extension-3.slang new file mode 100644 index 000000000..358c3facd --- /dev/null +++ b/tests/language-feature/extensions/generic-extension-3.slang @@ -0,0 +1,42 @@ +// Test that multiple functions from different extensions are properly linked. + +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj +interface IValuable +{ + int getValue(); +}; + +__generic <Int : __BuiltinIntegerType> +extension Int : IValuable +{ + int getValue() + { + return 0; + } +}; + +__generic <Float : __BuiltinFloatingPointType> +extension Float : IValuable +{ + int getValue() + { + return 1; + } +}; + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +[shader("compute")] +[numthreads(1, 1, 1)] +void computeMain() +{ + uint i = 0; + float f = float(i) / float(10); + + // CHECK: 0 + outputBuffer[0] = i.getValue(); + + // CHECK: 1 + outputBuffer[1] = f.getValue(); +}
\ No newline at end of file diff --git a/tests/language-feature/extensions/generic-extension-4.slang b/tests/language-feature/extensions/generic-extension-4.slang new file mode 100644 index 000000000..61e1c1386 --- /dev/null +++ b/tests/language-feature/extensions/generic-extension-4.slang @@ -0,0 +1,58 @@ +// Test that multiple functions from different extensions are properly linked through their respective witness table. + +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj +interface IValuableImpl +{ + int getValue(); +} + +interface IValuable +{ + associatedtype Impl : IValuableImpl; + Impl getImpl(); +}; + +__generic <Int : __BuiltinIntegerType> +extension Int : IValuableImpl +{ + int getValue() + { + return 0; + } +}; + +__generic <Float : __BuiltinFloatingPointType> +extension Float : IValuableImpl +{ + int getValue() + { + return 1; + } +}; + +__generic <ValuableImpl : IValuableImpl> +extension ValuableImpl : IValuable +{ + typealias Impl = ValuableImpl; + ValuableImpl getImpl() + { + return this; + } +}; + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +[shader("compute")] +[numthreads(1, 1, 1)] +void computeMain() +{ + uint i = 0; + float f = float(i) / float(10); + + // CHECK: 0 + outputBuffer[0] = i.getImpl().getValue(); + + // CHECK: 1 + outputBuffer[1] = f.getImpl().getValue(); +}
\ No newline at end of file |
