diff options
| author | Yong He <yonghe@outlook.com> | 2023-05-02 20:29:38 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-02 20:29:38 -0700 |
| commit | d52376a65f37fcbbb67428b917fd3819436b6dfb (patch) | |
| tree | da25b3c9a00bd003b1970b4a6c4eb38eccf62aa1 /source/slang/slang-lower-to-ir.cpp | |
| parent | 55291b0bf6d729fcbaf75a01926da7da8975b8e9 (diff) | |
Various dxc/fxc compatibility fixes. (#2863)
* Various dxc/fxc compatibility fixes.
* Cleanup.
* Fix test cases.
* Fix comments.
---------
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-lower-to-ir.cpp')
| -rw-r--r-- | source/slang/slang-lower-to-ir.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp index 1511615ed..de2d5aff2 100644 --- a/source/slang/slang-lower-to-ir.cpp +++ b/source/slang/slang-lower-to-ir.cpp @@ -7648,6 +7648,11 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> irAggType, fieldKey, fieldType); + + if (auto packOffsetModifier = fieldDecl->findModifier<HLSLPackOffsetSemantic>()) + { + lowerPackOffsetModifier(fieldKey, packOffsetModifier); + } } // There may be members not handled by the above logic (e.g., @@ -7663,6 +7668,36 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> return LoweredValInfo::simple(finishOuterGenerics(subBuilder, irAggType, outerGeneric)); } + void lowerPackOffsetModifier(IRInst* inst, HLSLPackOffsetSemantic* semantic) + { + auto builder = getBuilder(); + int registerOffset = stringToInt(semantic->registerName.getName()->text.getUnownedSlice().tail(1)); + int componentOffset = 0; + if (semantic->componentMask.getContentLength() != 0) + { + switch (semantic->componentMask.getContent()[0]) + { + case 'x': + componentOffset = 0; + break; + case 'y': + componentOffset = 1; + break; + case 'z': + componentOffset = 2; + break; + case 'w': + componentOffset = 3; + break; + } + } + builder->addDecoration( + inst, + kIROp_PackOffsetDecoration, + builder->getIntValue(builder->getIntType(), registerOffset), + builder->getIntValue(builder->getIntType(), componentOffset)); + } + void lowerRayPayloadAccessModifier(IRInst* inst, RayPayloadAccessSemantic* semantic, IROp op) { auto builder = getBuilder(); |
