From d4853af6c2ea79251b65aff5fad3992c6c8818f3 Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Wed, 30 May 2018 21:18:56 -0700 Subject: Added transitioning VK buffers before copying initial data --- .../include/VulkanUtilities/VulkanCommandBuffer.h | 6 +++--- Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp | 13 ++++--------- 2 files changed, 7 insertions(+), 12 deletions(-) (limited to 'Graphics/GraphicsEngineVulkan') diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBuffer.h b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBuffer.h index 22fa8286..3f589451 100644 --- a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBuffer.h +++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBuffer.h @@ -300,13 +300,13 @@ namespace VulkanUtilities VkBuffer Buffer, VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask, - VkPipelineStageFlags SrcStages, - VkPipelineStageFlags DestStages); + VkPipelineStageFlags SrcStages = 0, + VkPipelineStageFlags DestStages = 0); void BufferMemoryBarrier(VkBuffer Buffer, VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask, - VkPipelineStageFlags SrcStages = 0, + VkPipelineStageFlags SrcStages = 0, VkPipelineStageFlags DestStages = 0) { VERIFY_EXPR(m_VkCmdBuffer != VK_NULL_HANDLE); diff --git a/Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp index 70612b05..d157afb8 100644 --- a/Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp @@ -31,6 +31,7 @@ #include "EngineMemory.h" #include "StringTools.h" #include "VulkanUtilities/VulkanDebug.h" +#include "VulkanUtilities/VulkanCommandBuffer.h" namespace Diligent { @@ -144,8 +145,6 @@ BufferVkImpl :: BufferVkImpl(IReferenceCounters *pRefCounters, if( bInitializeBuffer ) { - m_AccessFlags = VK_ACCESS_TRANSFER_WRITE_BIT; - VkBufferCreateInfo VkStaginBuffCI = VkBuffCI; VkStaginBuffCI.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; @@ -194,13 +193,9 @@ BufferVkImpl :: BufferVkImpl(IReferenceCounters *pRefCounters, auto vkCmdBuff = pRenderDeviceVk->AllocateCommandBuffer("Transient cmd buff to copy staging data to a device buffer"); -#if 0 - // copy data to the intermediate upload heap and then schedule a copy from the upload heap to the default buffer - VERIFY_EXPR(m_UsageState == Vk_RESOURCE_STATE_COPY_DEST); -#endif - // We MUST NOT call TransitionResource() from here, because - // it will call AddRef() and potentially Release(), while - // the object is not constructed yet + VulkanUtilities::VulkanCommandBuffer::BufferMemoryBarrier(vkCmdBuff, StagingBuffer, 0, VK_ACCESS_TRANSFER_READ_BIT); + m_AccessFlags = VK_ACCESS_TRANSFER_WRITE_BIT; + VulkanUtilities::VulkanCommandBuffer::BufferMemoryBarrier(vkCmdBuff, m_VulkanBuffer, 0, m_AccessFlags); // Copy commands MUST be recorded outside of a render pass instance. This is OK here // as copy will be the only command in the cmd buffer -- cgit v1.2.3