diff options
| author | Darren Wihandi <65404740+fairywreath@users.noreply.github.com> | 2025-03-13 06:28:03 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-13 18:28:03 +0800 |
| commit | 395302d2404e3429f3cdfa406e89fa76bc0d444b (patch) | |
| tree | 0114009e9573cd94007dc3c4c1dfcad844cc33f8 /source/slang/slang-lower-to-ir.cpp | |
| parent | ee1995ba397c4f670c991aeeb05d3fcaaebb6771 (diff) | |
Add mesh shader output topology checks (#6592)
* initial wip
* more wip
* add test
* add unexpected for invalid target
* fixups and improve error message
* fixups and improve error message
* remove incorrect comment
---------
Co-authored-by: Ellie Hermaszewska <ellieh@nvidia.com>
Diffstat (limited to 'source/slang/slang-lower-to-ir.cpp')
| -rw-r--r-- | source/slang/slang-lower-to-ir.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp index e43f99b1e..775986a9a 100644 --- a/source/slang/slang-lower-to-ir.cpp +++ b/source/slang/slang-lower-to-ir.cpp @@ -14,6 +14,7 @@ #include "slang-ir-constexpr.h" #include "slang-ir-dce.h" #include "slang-ir-diff-call.h" +#include "slang-ir-entry-point-decorations.h" #include "slang-ir-inline.h" #include "slang-ir-insert-debug-value-store.h" #include "slang-ir-insts.h" @@ -10673,7 +10674,18 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> else if (auto outputTopAttr = as<OutputTopologyAttribute>(modifier)) { IRStringLit* stringLit = _getStringLitFromAttribute(getBuilder(), outputTopAttr); - getBuilder()->addDecoration(irFunc, kIROp_OutputTopologyDecoration, stringLit); + const auto topologyType = + convertOutputTopologyStringToEnum(stringLit->getStringSlice()); + IRInst* topologyTypeInst = getBuilder()->getIntValue( + getBuilder()->getIntType(), + IRIntegerValue(topologyType)); + + auto outputTopologyDecoration = getBuilder()->addDecoration( + irFunc, + kIROp_OutputTopologyDecoration, + stringLit, + topologyTypeInst); + outputTopologyDecoration->sourceLoc = outputTopAttr->loc; } else if (auto maxTessFactortAttr = as<MaxTessFactorAttribute>(modifier)) { |
