Merge pull request #1803 from KhronosGroup/fix-1802
Correctly reflect declared buffer size for out of order members.
diff --git a/spirv_cross_containers.hpp b/spirv_cross_containers.hpp
index a027250..506b069 100644
--- a/spirv_cross_containers.hpp
+++ b/spirv_cross_containers.hpp
@@ -327,8 +327,8 @@
void reserve(size_t count) SPIRV_CROSS_NOEXCEPT
{
- if ((count > std::numeric_limits<size_t>::max() / sizeof(T)) ||
- (count > std::numeric_limits<size_t>::max() / 2))
+ if ((count > (std::numeric_limits<size_t>::max)() / sizeof(T)) ||
+ (count > (std::numeric_limits<size_t>::max)() / 2))
{
// Only way this should ever happen is with garbage input, terminate.
std::terminate();
diff --git a/spirv_msl.cpp b/spirv_msl.cpp
index c1ec1d1..9a15409 100644
--- a/spirv_msl.cpp
+++ b/spirv_msl.cpp
@@ -2251,7 +2251,7 @@
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationComponent, comp);
mark_location_as_used_by_shader(locn, get<SPIRType>(type_id), storage);
}
- else if (is_builtin && is_tessellation_shader() && inputs_by_builtin.count(builtin))
+ else if (is_builtin && is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin))
{
uint32_t locn = inputs_by_builtin[builtin].location;
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
@@ -2416,7 +2416,7 @@
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationComponent, comp);
mark_location_as_used_by_shader(locn, *usable_type, storage);
}
- else if (is_builtin && is_tessellation_shader() && inputs_by_builtin.count(builtin))
+ else if (is_builtin && is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin))
{
uint32_t locn = inputs_by_builtin[builtin].location + i;
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
@@ -2589,7 +2589,7 @@
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
mark_location_as_used_by_shader(locn, *usable_type, storage);
}
- else if (is_builtin && is_tessellation_shader() && inputs_by_builtin.count(builtin))
+ else if (is_builtin && is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin))
{
uint32_t locn = inputs_by_builtin[builtin].location + i;
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
@@ -2780,7 +2780,7 @@
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
mark_location_as_used_by_shader(locn, get<SPIRType>(mbr_type_id), storage);
}
- else if (is_builtin && is_tessellation_shader() && inputs_by_builtin.count(builtin))
+ else if (is_builtin && is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin))
{
uint32_t locn = 0;
auto builtin_itr = inputs_by_builtin.find(builtin);