diff options
| author | Yong He <yonghe@outlook.com> | 2024-11-19 09:03:48 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-19 09:03:48 -0800 |
| commit | fa917fedc89287778eef65a62413ff09d1065d97 (patch) | |
| tree | 6ed3a8e5b6560aef8c3f1a8f6ac1f82ed486496e /source | |
| parent | 75d65d36608cf4653490f0a04a17d1ee057b47a6 (diff) | |
Fix specialization constant miscompile in glsl mode. (#5568)
Co-authored-by: Ellie Hermaszewska <ellieh@nvidia.com>
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-check-decl.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp index fb27614d0..07d5dd1fa 100644 --- a/source/slang/slang-check-decl.cpp +++ b/source/slang/slang-check-decl.cpp @@ -1709,6 +1709,18 @@ void SemanticsDeclHeaderVisitor::maybeApplyLayoutModifier(VarDeclBase* varDecl) } } +bool isSpecializationConstant(VarDeclBase* varDecl) +{ + for (auto modifier : varDecl->modifiers) + { + if (as<SpecializationConstantAttribute>(modifier)) + return true; + if (as<VkConstantIdAttribute>(modifier)) + return true; + } + return false; +} + void SemanticsDeclHeaderVisitor::checkVarDeclCommon(VarDeclBase* varDecl) { // A variable that didn't have an explicit type written must @@ -1943,7 +1955,7 @@ void SemanticsDeclHeaderVisitor::checkVarDeclCommon(VarDeclBase* varDecl) // without any `uniform` modifiers as true global variables by default. if (!varDecl->findModifier<HLSLUniformModifier>() && !varDecl->findModifier<InModifier>() && !varDecl->findModifier<OutModifier>() && - !varDecl->findModifier<GLSLBufferModifier>()) + !varDecl->findModifier<GLSLBufferModifier>() && !isSpecializationConstant(varDecl)) { if (!isUniformParameterType(varDecl->type)) { |
