diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm index 0dd865f23..975f6db4c 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm @@ -525,9 +525,9 @@ supportedProps11.maxMultiviewViewCount = 32; supportedProps11.maxMultiviewInstanceIndex = canUseInstancingForMultiview() ? uintMax / 32 : uintMax; supportedProps11.protectedNoFault = false; - supportedProps11.maxPerSetDescriptors = 4 * (_metalFeatures.maxPerStageBufferCount + + supportedProps11.maxPerSetDescriptors = max(4 * (_metalFeatures.maxPerStageBufferCount + _metalFeatures.maxPerStageTextureCount + - _metalFeatures.maxPerStageSamplerCount); + _metalFeatures.maxPerStageSamplerCount), 1024u); supportedProps11.maxMemoryAllocationSize = _metalFeatures.maxMTLBufferSize; // Create a SSOT for these Vulkan 1.2 properties, which can be queried via two mechanisms here. @@ -3499,7 +3499,9 @@ static uint32_t mvkGetEntryProperty(io_registry_entry_t entry, CFStringRef prope for (uint32_t i = 0; i < pCreateInfo->bindingCount; i++) { descriptorCount += pCreateInfo->pBindings[i].descriptorCount; } - pSupport->supported = (descriptorCount < ((_physicalDevice->_metalFeatures.maxPerStageBufferCount + _physicalDevice->_metalFeatures.maxPerStageTextureCount + _physicalDevice->_metalFeatures.maxPerStageSamplerCount) * 2)); + pSupport->supported = (descriptorCount < max(4 * (_physicalDevice->_metalFeatures.maxPerStageBufferCount + + _physicalDevice->_metalFeatures.maxPerStageTextureCount + + _physicalDevice->_metalFeatures.maxPerStageSamplerCount), 1024u)); // Check whether the layout has a variable-count descriptor, and if so, whether we can support it. for (auto* next = (VkBaseOutStructure*)pSupport->pNext; next; next = next->pNext) {