diff options
| author | Ellie Hermaszewska <ellieh@nvidia.com> | 2025-07-01 23:36:02 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-01 23:36:02 +0800 |
| commit | c94ca1692e101df87215232e87fa7edadc1a7b05 (patch) | |
| tree | d84c5b27af4d88cd5bdd71358bc2434e8f47a1ce /include | |
| parent | d50c3f34a2eda5bf5e278c78d32cc9923fd83b82 (diff) | |
Allow Link time constant array length sizing, warn on unsupported functionality (#7067)
* Add link time array layout test
* Add link time constant array size compilation test
* Link time constant array size test
* Allow getting link time array size
Closes https://github.com/shader-slang/slang/issues/6753
* format
* Switch to SIMPLE test and check output
* Implement without binary api changes
* diagnose on link time constant sized array
* fix test
---------
Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/slang-deprecated.h | 10 | ||||
| -rw-r--r-- | include/slang.h | 11 |
2 files changed, 18 insertions, 3 deletions
diff --git a/include/slang-deprecated.h b/include/slang-deprecated.h index 2ae91c6d8..f210e8c48 100644 --- a/include/slang-deprecated.h +++ b/include/slang-deprecated.h @@ -478,9 +478,19 @@ extern "C" If the size of a type cannot be statically computed, perhaps because it depends on a generic parameter that has not been bound to a specific value, this function returns zero. + + Use spReflectionType_GetSpecializedElementCount if the size is dependent on + a link time constant */ SLANG_API size_t spReflectionType_GetElementCount(SlangReflectionType* type); + /** The same as spReflectionType_GetElementCount except it takes into account specialization + * information from the given reflection info + */ + SLANG_API size_t spReflectionType_GetSpecializedElementCount( + SlangReflectionType* type, + SlangReflection* reflection); + SLANG_API SlangReflectionType* spReflectionType_GetElementType(SlangReflectionType* type); SLANG_API unsigned int spReflectionType_GetRowCount(SlangReflectionType* type); diff --git a/include/slang.h b/include/slang.h index 782c4a082..4a3af7de1 100644 --- a/include/slang.h +++ b/include/slang.h @@ -2291,9 +2291,9 @@ struct TypeReflection } // only useful if `getKind() == Kind::Array` - size_t getElementCount() + size_t getElementCount(SlangReflection* reflection = nullptr) { - return spReflectionType_GetElementCount((SlangReflectionType*)this); + return spReflectionType_GetSpecializedElementCount((SlangReflectionType*)this, reflection); } size_t getTotalArrayElementCount() @@ -2454,6 +2454,8 @@ enum class BindingType : SlangBindingTypeIntegral ExtMask = SLANG_BINDING_TYPE_EXT_MASK, }; +struct ShaderReflection; + struct TypeLayoutReflection { TypeReflection* getType() @@ -2543,7 +2545,10 @@ struct TypeLayoutReflection } // only useful if `getKind() == Kind::Array` - size_t getElementCount() { return getType()->getElementCount(); } + size_t getElementCount(ShaderReflection* reflection = nullptr) + { + return getType()->getElementCount((SlangReflection*)reflection); + } size_t getTotalArrayElementCount() { return getType()->getTotalArrayElementCount(); } |
