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-check-modifier.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-check-modifier.cpp')
| -rw-r--r-- | source/slang/slang-check-modifier.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/source/slang/slang-check-modifier.cpp b/source/slang/slang-check-modifier.cpp index 61f3f1196..2d5f6aad7 100644 --- a/source/slang/slang-check-modifier.cpp +++ b/source/slang/slang-check-modifier.cpp @@ -918,6 +918,40 @@ namespace Slang // See SemanticsDeclHeaderVisitor::checkExtensionExternVarAttribute. } } + + if (auto packOffsetModifier = as<HLSLPackOffsetSemantic>(m)) + { + if (!packOffsetModifier->registerName.getContent().startsWith("c")) + { + getSink()->diagnose(packOffsetModifier, Diagnostics::unknownRegisterClass, packOffsetModifier->registerName); + return m; + } + auto uniformOffset = stringToInt(packOffsetModifier->registerName.getContent().tail(1)) * 16; + if (packOffsetModifier->componentMask.getContentLength()) + { + switch (packOffsetModifier->componentMask.getContent()[0]) + { + case 'x': + uniformOffset += 0; + break; + case 'y': + uniformOffset += 4; + break; + case 'z': + uniformOffset += 8; + break; + case 'w': + uniformOffset += 12; + break; + default: + getSink()->diagnose(packOffsetModifier, Diagnostics::invalidComponentMask, packOffsetModifier->componentMask); + break; + } + } + packOffsetModifier->uniformOffset = uniformOffset; + return packOffsetModifier; + } + // Default behavior is to leave things as they are, // and assume that modifiers are mostly already checked. // |
