From e9c176371534c3691a2f3553a79f719c65fe57c3 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 21 Nov 2022 15:50:23 +0000 Subject: [PATCH] Only provide instance divisors for per-instance vertex attributes --- renderdoc/driver/vulkan/vk_shader_cache.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_shader_cache.cpp b/renderdoc/driver/vulkan/vk_shader_cache.cpp index fa2f2f070..d5340fa9e 100644 --- a/renderdoc/driver/vulkan/vk_shader_cache.cpp +++ b/renderdoc/driver/vulkan/vk_shader_cache.cpp @@ -643,16 +643,23 @@ void VulkanShaderCache::MakeGraphicsPipelineInfo(VkGraphicsPipelineCreateInfo &p if(m_pDriver->GetExtensions(GetRecord(m_Device)).ext_EXT_vertex_attribute_divisor) { vertexDivisor.pVertexBindingDivisors = vibindDivisors; - vertexDivisor.vertexBindingDivisorCount = vi.vertexBindingDescriptionCount; + vertexDivisor.vertexBindingDivisorCount = 0; for(uint32_t i = 0; i < vi.vertexBindingDescriptionCount; i++) { - vibindDivisors[i].binding = i; - vibindDivisors[i].divisor = pipeInfo.vertexBindings[i].instanceDivisor; + if(pipeInfo.vertexBindings[i].perInstance) + { + uint32_t instIdx = vertexDivisor.vertexBindingDivisorCount++; + vibindDivisors[instIdx].binding = i; + vibindDivisors[instIdx].divisor = pipeInfo.vertexBindings[i].instanceDivisor; + } } - vertexDivisor.pNext = vi.pNext; - vi.pNext = &vertexDivisor; + if(vertexDivisor.vertexBindingDivisorCount > 0) + { + vertexDivisor.pNext = vi.pNext; + vi.pNext = &vertexDivisor; + } } RDCASSERT(ARRAY_COUNT(viattr) >= pipeInfo.vertexAttrs.size());