From d957dd8082d00fac7bcb3d776273d3f92f475e2e Mon Sep 17 00:00:00 2001 From: mdagois Date: Fri, 19 Jul 2024 11:45:10 +0900 Subject: [PATCH] Fix to barriers in VulkanBuffer (#7979) Co-authored-by: Powei Feng --- filament/backend/src/vulkan/VulkanBuffer.cpp | 3 +++ filament/backend/src/vulkan/VulkanBuffer.h | 1 + 2 files changed, 4 insertions(+) diff --git a/filament/backend/src/vulkan/VulkanBuffer.cpp b/filament/backend/src/vulkan/VulkanBuffer.cpp index dc5c88ea01..af42625a89 100644 --- a/filament/backend/src/vulkan/VulkanBuffer.cpp +++ b/filament/backend/src/vulkan/VulkanBuffer.cpp @@ -28,6 +28,7 @@ VulkanBuffer::VulkanBuffer(VmaAllocator allocator, VulkanStagePool& stagePool, : mAllocator(allocator), mStagePool(stagePool), mUsage(usage), + mUpdatedOffset(0), mUpdatedBytes(0) { // for now make sure that only 1 bit is set in usage // (because loadFromCpu() assumes that somewhat) @@ -80,6 +81,7 @@ void VulkanBuffer::loadFromCpu(VkCommandBuffer cmdbuf, const void* cpuData, uint .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .buffer = mGpuBuffer, + .offset = mUpdatedOffset, .size = mUpdatedBytes, }; vkCmdPipelineBarrier(cmdbuf, srcStage, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 1, @@ -93,6 +95,7 @@ void VulkanBuffer::loadFromCpu(VkCommandBuffer cmdbuf, const void* cpuData, uint }; vkCmdCopyBuffer(cmdbuf, stage->buffer, mGpuBuffer, 1, ®ion); + mUpdatedOffset = byteOffset; mUpdatedBytes = numBytes; // Firstly, ensure that the copy finishes before the next draw call. diff --git a/filament/backend/src/vulkan/VulkanBuffer.h b/filament/backend/src/vulkan/VulkanBuffer.h index e496f930db..65edd82e5c 100644 --- a/filament/backend/src/vulkan/VulkanBuffer.h +++ b/filament/backend/src/vulkan/VulkanBuffer.h @@ -42,6 +42,7 @@ private: VmaAllocation mGpuMemory = VK_NULL_HANDLE; VkBuffer mGpuBuffer = VK_NULL_HANDLE; VkBufferUsageFlags mUsage = {}; + uint32_t mUpdatedOffset = 0; uint32_t mUpdatedBytes = 0; };