diff --git a/src/rendering/vulkan/renderer/vk_renderpass.cpp b/src/rendering/vulkan/renderer/vk_renderpass.cpp index f773f8527e..bb62a7a406 100644 --- a/src/rendering/vulkan/renderer/vk_renderpass.cpp +++ b/src/rendering/vulkan/renderer/vk_renderpass.cpp @@ -93,6 +93,11 @@ int VkRenderPassManager::GetVertexFormat(int numBindingPoints, int numAttributes return (int)VertexFormats.size() - 1; } +VkVertexFormat *VkRenderPassManager::GetVertexFormat(int index) +{ + return &VertexFormats[index]; +} + void VkRenderPassManager::CreateDynamicSetLayout() { DescriptorSetLayoutBuilder builder; @@ -289,7 +294,7 @@ std::unique_ptr VkRenderPassSetup::CreatePipeline(const VkPipeli builder.addVertexShader(program->vert.get()); builder.addFragmentShader(program->frag.get()); - const VkVertexFormat &vfmt = fb->GetRenderPassManager()->VertexFormats[key.VertexFormat]; + const VkVertexFormat &vfmt = *fb->GetRenderPassManager()->GetVertexFormat(key.VertexFormat); for (int i = 0; i < vfmt.NumBindingPoints; i++) builder.addVertexBufferBinding(i, vfmt.Stride); diff --git a/src/rendering/vulkan/renderer/vk_renderpass.h b/src/rendering/vulkan/renderer/vk_renderpass.h index 877a752d12..85c89266d7 100644 --- a/src/rendering/vulkan/renderer/vk_renderpass.h +++ b/src/rendering/vulkan/renderer/vk_renderpass.h @@ -88,6 +88,8 @@ public: VkRenderPassSetup *GetRenderPass(const VkRenderPassKey &key); int GetVertexFormat(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute *attrs); + VkVertexFormat *GetVertexFormat(int index); + std::unique_ptr AllocateTextureDescriptorSet(int numLayers); VulkanPipelineLayout* GetPipelineLayout(int numLayers); @@ -96,8 +98,6 @@ public: std::unique_ptr DynamicSet; - std::vector VertexFormats; - private: void CreateDynamicSetLayout(); void CreateDescriptorPool(); @@ -111,4 +111,5 @@ private: std::unique_ptr DynamicDescriptorPool; std::vector> TextureSetLayouts; std::vector> PipelineLayouts; + std::vector VertexFormats; }; diff --git a/src/rendering/vulkan/renderer/vk_renderstate.cpp b/src/rendering/vulkan/renderer/vk_renderstate.cpp index 1f5bc52036..1e7167baf0 100644 --- a/src/rendering/vulkan/renderer/vk_renderstate.cpp +++ b/src/rendering/vulkan/renderer/vk_renderstate.cpp @@ -314,7 +314,7 @@ void VkRenderState::ApplyStreamData() auto fb = GetVulkanFrameBuffer(); auto passManager = fb->GetRenderPassManager(); - mStreamData.useVertexData = passManager->VertexFormats[static_cast(mVertexBuffer)->VertexFormat].UseVertexData; + mStreamData.useVertexData = passManager->GetVertexFormat(static_cast(mVertexBuffer)->VertexFormat)->UseVertexData; if (mMaterial.mMaterial && mMaterial.mMaterial->tex) mStreamData.timer = static_cast((double)(screen->FrameTime - firstFrame) * (double)mMaterial.mMaterial->tex->shaderspeed / 1000.); @@ -385,9 +385,9 @@ void VkRenderState::ApplyVertexBuffers() if ((mVertexBuffer != mLastVertexBuffer || mVertexOffsets[0] != mLastVertexOffsets[0] || mVertexOffsets[1] != mLastVertexOffsets[1]) && mVertexBuffer) { auto vkbuf = static_cast(mVertexBuffer); - const auto &format = GetVulkanFrameBuffer()->GetRenderPassManager()->VertexFormats[vkbuf->VertexFormat]; + const VkVertexFormat *format = GetVulkanFrameBuffer()->GetRenderPassManager()->GetVertexFormat(vkbuf->VertexFormat); VkBuffer vertexBuffers[2] = { vkbuf->mBuffer->buffer, vkbuf->mBuffer->buffer }; - VkDeviceSize offsets[] = { mVertexOffsets[0] * format.Stride, mVertexOffsets[1] * format.Stride }; + VkDeviceSize offsets[] = { mVertexOffsets[0] * format->Stride, mVertexOffsets[1] * format->Stride }; mCommandBuffer->bindVertexBuffers(0, 2, vertexBuffers, offsets); mLastVertexBuffer = mVertexBuffer; mLastVertexOffsets[0] = mVertexOffsets[0];