diff options
| author | Yong He <yonghe@outlook.com> | 2024-03-07 13:19:44 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-07 13:19:44 -0800 |
| commit | 240727db40552180446c1f14acc371f690db10e4 (patch) | |
| tree | 45853db6e7405d37ab0ceafb8c1d5afb029de511 /source/slang/slang-lower-to-ir.cpp | |
| parent | af108c72894fdfb18438bd1c0cfb452b625cb6a6 (diff) | |
Uniformity analysis. (#3704)
* Uniformity analysis.
* Add [NonUniformReturn] decorations to some hlsl intrinsic functions.
Diffstat (limited to 'source/slang/slang-lower-to-ir.cpp')
| -rw-r--r-- | source/slang/slang-lower-to-ir.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp index 753b21589..146af452f 100644 --- a/source/slang/slang-lower-to-ir.cpp +++ b/source/slang/slang-lower-to-ir.cpp @@ -2187,6 +2187,10 @@ void addVarDecorations( { builder->addSemanticDecoration(inst, hlslSemantic->name.getContent()); } + else if (auto dynamicUniform = as<DynamicUniformModifier>(mod)) + { + builder->addDynamicUniformDecoration(inst); + } // TODO: what are other modifiers we need to propagate through? } if(auto t = composeGetters<IRMeshOutputType>(inst->getFullType(), &IROutTypeBase::getValueType)) @@ -8376,9 +8380,16 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> fieldKey, fieldType); - if (auto packOffsetModifier = fieldDecl->findModifier<HLSLPackOffsetSemantic>()) + for (auto mod : fieldDecl->modifiers) { - lowerPackOffsetModifier(fieldKey, packOffsetModifier); + if (auto packOffsetModifier = as<HLSLPackOffsetSemantic>(mod)) + { + lowerPackOffsetModifier(fieldKey, packOffsetModifier); + } + else if (auto dynamicUniformModifer = as<DynamicUniformModifier>(mod)) + { + subBuilder->addDynamicUniformDecoration(fieldKey); + } } } @@ -9669,6 +9680,8 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> getBuilder()->addRequireSPIRVVersionDecoration(irFunc, spvVersion->version); else if (auto cudasmVersion = as<RequiredCUDASMVersionModifier>(modifier)) getBuilder()->addRequireCUDASMVersionDecoration(irFunc, cudasmVersion->version); + else if (auto nonUniform= as<NonDynamicUniformAttribute>(modifier)) + getBuilder()->addDecoration(irFunc, kIROp_NonDynamicUniformReturnDecoration); } if (!isInline) |
