diff options
| author | kaizhangNV <149626564+kaizhangNV@users.noreply.github.com> | 2025-03-26 14:42:30 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-26 12:42:30 -0700 |
| commit | b3deec2001ea34e20e9a6af8ddf5cf3866cafac0 (patch) | |
| tree | 68052183f6c2d3b610a34027e5911113c1506414 /source/slang/slang-legalize-types.cpp | |
| parent | 05f24d294917a2599d635fe2e53b75cdca26cfdd (diff) | |
Eliminate empty struct on metal target (#6603)
* Eliminate empty struct on metal target
Close 6573.
We previously disabled the type legalization for ParameterBlock on
Metal, but Metal doesn't allow empty struct in the argument buffer
which is mapped from ParameterBlock, so we will need legalizeEmptyTypes
on Metal target.
* update test
* update function name
Diffstat (limited to 'source/slang/slang-legalize-types.cpp')
| -rw-r--r-- | source/slang/slang-legalize-types.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/source/slang/slang-legalize-types.cpp b/source/slang/slang-legalize-types.cpp index e26475522..cc2c12d42 100644 --- a/source/slang/slang-legalize-types.cpp +++ b/source/slang/slang-legalize-types.cpp @@ -1211,11 +1211,15 @@ LegalType legalizeTypeImpl(TypeLegalizationContext* context, IRType* type) LegalType legalElementType; if (isMetalTarget(context->targetProgram->getTargetReq()) && - as<IRParameterBlockType>(uniformBufferType)) + as<IRParameterBlockType>(uniformBufferType) && + !context->shouldLegalizeParameterBlockElementType()) { // On Metal, we do not need to legalize the element type of // a parameter block because we can translate it directly into // an argument buffer. + // + // But we do need empty type legalized for Metal, because Metal doesn't + // allow empty struct in argument buffer. legalElementType = LegalType::simple(originalElementType); } else |
