summaryrefslogtreecommitdiff
path: root/source/slang/slang-lower-to-ir.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-03-07 13:19:44 -0800
committerGitHub <noreply@github.com>2024-03-07 13:19:44 -0800
commit240727db40552180446c1f14acc371f690db10e4 (patch)
tree45853db6e7405d37ab0ceafb8c1d5afb029de511 /source/slang/slang-lower-to-ir.cpp
parentaf108c72894fdfb18438bd1c0cfb452b625cb6a6 (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.cpp17
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)