summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2019-01-27 00:08:17 -0800
committerYong He <yonghe@google.com>2019-01-28 10:50:05 -0800
commit9812963c52eb6312546f600804bb642a38dcfe64 (patch)
tree589be4c5b1f9e74da86caa6bd5be6a4f13083b15 /source
parentf2579a60a3de45d5f48f1e1433ba736647988e8e (diff)
Fix type legalization to correctly handle empty struct fields.
Diffstat (limited to 'source')
-rw-r--r--source/slang/legalize-types.cpp41
1 files changed, 13 insertions, 28 deletions
diff --git a/source/slang/legalize-types.cpp b/source/slang/legalize-types.cpp
index 858dbd95c..30590c02d 100644
--- a/source/slang/legalize-types.cpp
+++ b/source/slang/legalize-types.cpp
@@ -785,17 +785,15 @@ LegalType legalizeTypeImpl(
auto legalElementType = legalizeType(context,
uniformBufferType->getElementType());
- switch (legalElementType.flavor)
- {
- case LegalType::Flavor::simple:
- return LegalType::simple(type);
-
- default:
- return createLegalUniformBufferType(
+ // Note that even when legalElementType.flavor == Simple
+ // we still need to create a new uniform buffer type
+ // from `legalElementType` instead of `type`
+ // because the `legalElementType` may still differ from `type`
+ // if `type` contains empty structs.
+ return createLegalUniformBufferType(
context,
uniformBufferType,
legalElementType);
- }
}
else if (isResourceType(type))
@@ -898,27 +896,14 @@ LegalType legalizeTypeImpl(
context,
arrayType->getElementType());
- switch (legalElementType.flavor)
- {
- case LegalType::Flavor::simple:
- // Element type didn't need to be legalized, so
- // we can just use this type as-is.
- return LegalType::simple(type);
-
- default:
- {
- ArrayLegalTypeWrapper wrapper;
- wrapper.arrayType = arrayType;
-
- return wrapLegalType(
- context,
- legalElementType,
- &wrapper,
- &wrapper);
- }
- break;
- }
+ ArrayLegalTypeWrapper wrapper;
+ wrapper.arrayType = arrayType;
+ return wrapLegalType(
+ context,
+ legalElementType,
+ &wrapper,
+ &wrapper);
}
return LegalType::simple(type);