From 69255e812289851d08d806f8a9b26bc8d901f10e Mon Sep 17 00:00:00 2001 From: Chip Davis Date: Thu, 17 Sep 2020 12:43:23 -0500 Subject: [PATCH] MVKGraphicsPipeline: Fix applying divisors to instanced vertex attributes. Use the Vulkan binding index to check that the binding is used. Previously, we were erroneously using the Metal binding index. This allows vertex binding divisor info to actually be used, and fixes some tests in the CTS. Fixes #1041. --- MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm index 0f7e1cb98..0a0ddc3f7 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm @@ -1139,8 +1139,8 @@ static VkFormat mvkFormatFromOutput(const SPIRVShaderOutput& output) { vbCnt = pVertexInputDivisorState->vertexBindingDivisorCount; for (uint32_t i = 0; i < vbCnt; i++) { const VkVertexInputBindingDivisorDescriptionEXT* pVKVB = &pVertexInputDivisorState->pVertexBindingDivisors[i]; - uint32_t vbIdx = getMetalBufferIndexForVertexAttributeBinding(pVKVB->binding); - if (shaderContext.isVertexBufferUsed(vbIdx)) { + if (shaderContext.isVertexBufferUsed(pVKVB->binding)) { + uint32_t vbIdx = getMetalBufferIndexForVertexAttributeBinding(pVKVB->binding); if ((NSUInteger)inputDesc.layouts[vbIdx].stepFunction == MTLStepFunctionPerInstance || (NSUInteger)inputDesc.layouts[vbIdx].stepFunction == MTLStepFunctionThreadPositionInGridY) { if (pVKVB->divisor == 0)