Fix crash on descriptor update with out-of-bounds descriptor count data.
Update MoltenVK version to 1.2.1.
This commit is contained in:
parent
67d59ae3ee
commit
0287a3242c
@ -13,6 +13,15 @@ Copyright (c) 2015-2022 [The Brenwill Workshop Ltd.](http://www.brenwill.com)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MoltenVK 1.2.1
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Released TBD
|
||||||
|
|
||||||
|
- Fix crash on descriptor update with out-of-bounds descriptor count data.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MoltenVK 1.2.0
|
MoltenVK 1.2.0
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ typedef unsigned long MTLArgumentBuffersTier;
|
|||||||
*/
|
*/
|
||||||
#define MVK_VERSION_MAJOR 1
|
#define MVK_VERSION_MAJOR 1
|
||||||
#define MVK_VERSION_MINOR 2
|
#define MVK_VERSION_MINOR 2
|
||||||
#define MVK_VERSION_PATCH 0
|
#define MVK_VERSION_PATCH 1
|
||||||
|
|
||||||
#define MVK_MAKE_VERSION(major, minor, patch) (((major) * 10000) + ((minor) * 100) + (patch))
|
#define MVK_MAKE_VERSION(major, minor, patch) (((major) * 10000) + ((minor) * 100) + (patch))
|
||||||
#define MVK_VERSION MVK_MAKE_VERSION(MVK_VERSION_MAJOR, MVK_VERSION_MINOR, MVK_VERSION_PATCH)
|
#define MVK_VERSION MVK_MAKE_VERSION(MVK_VERSION_MAJOR, MVK_VERSION_MINOR, MVK_VERSION_PATCH)
|
||||||
|
@ -305,7 +305,7 @@ void MVKDescriptorSet::write(const DescriptorAction* pDescriptorAction,
|
|||||||
writeDescriptorAt(pDescriptorAction->dstArrayElement);
|
writeDescriptorAt(pDescriptorAction->dstArrayElement);
|
||||||
} else {
|
} else {
|
||||||
uint32_t descStartIdx = _layout->getDescriptorIndex(pDescriptorAction->dstBinding, pDescriptorAction->dstArrayElement);
|
uint32_t descStartIdx = _layout->getDescriptorIndex(pDescriptorAction->dstBinding, pDescriptorAction->dstArrayElement);
|
||||||
uint32_t elemCnt = pDescriptorAction->descriptorCount;
|
uint32_t elemCnt = std::min(pDescriptorAction->descriptorCount, (uint32_t)_descriptors.size() - descStartIdx);
|
||||||
for (uint32_t elemIdx = 0; elemIdx < elemCnt; elemIdx++) {
|
for (uint32_t elemIdx = 0; elemIdx < elemCnt; elemIdx++) {
|
||||||
uint32_t descIdx = descStartIdx + elemIdx;
|
uint32_t descIdx = descStartIdx + elemIdx;
|
||||||
writeDescriptorAt(elemIdx);
|
writeDescriptorAt(elemIdx);
|
||||||
@ -321,7 +321,6 @@ void MVKDescriptorSet::read(const VkCopyDescriptorSet* pDescriptorCopy,
|
|||||||
|
|
||||||
MVKDescriptorSetLayoutBinding* mvkDSLBind = _layout->getBinding(pDescriptorCopy->srcBinding);
|
MVKDescriptorSetLayoutBinding* mvkDSLBind = _layout->getBinding(pDescriptorCopy->srcBinding);
|
||||||
VkDescriptorType descType = mvkDSLBind->getDescriptorType();
|
VkDescriptorType descType = mvkDSLBind->getDescriptorType();
|
||||||
uint32_t descCnt = pDescriptorCopy->descriptorCount;
|
|
||||||
if (descType == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT) {
|
if (descType == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT) {
|
||||||
// For inline buffers srcArrayElement is a byte offset
|
// For inline buffers srcArrayElement is a byte offset
|
||||||
MVKDescriptor* mvkDesc = getDescriptor(pDescriptorCopy->srcBinding);
|
MVKDescriptor* mvkDesc = getDescriptor(pDescriptorCopy->srcBinding);
|
||||||
@ -330,6 +329,7 @@ void MVKDescriptorSet::read(const VkCopyDescriptorSet* pDescriptorCopy,
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
uint32_t srcStartIdx = _layout->getDescriptorIndex(pDescriptorCopy->srcBinding, pDescriptorCopy->srcArrayElement);
|
uint32_t srcStartIdx = _layout->getDescriptorIndex(pDescriptorCopy->srcBinding, pDescriptorCopy->srcArrayElement);
|
||||||
|
uint32_t descCnt = std::min(pDescriptorCopy->descriptorCount, (uint32_t)_descriptors.size() - srcStartIdx);
|
||||||
for (uint32_t descIdx = 0; descIdx < descCnt; descIdx++) {
|
for (uint32_t descIdx = 0; descIdx < descCnt; descIdx++) {
|
||||||
MVKDescriptor* mvkDesc = _descriptors[srcStartIdx + descIdx];
|
MVKDescriptor* mvkDesc = _descriptors[srcStartIdx + descIdx];
|
||||||
if (mvkDesc->getDescriptorType() == descType) {
|
if (mvkDesc->getDescriptorType() == descType) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user