diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2018-05-31 04:18:56 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2018-05-31 04:18:56 +0000 |
| commit | d4853af6c2ea79251b65aff5fad3992c6c8818f3 (patch) | |
| tree | a39f33dcaafd28d8ee9d3e588a3237ac8022cba9 /Graphics/GraphicsEngineVulkan | |
| parent | Added initial size of the dynamic heap in vulkan to creation attribs (diff) | |
| download | DiligentCore-d4853af6c2ea79251b65aff5fad3992c6c8818f3.tar.gz DiligentCore-d4853af6c2ea79251b65aff5fad3992c6c8818f3.zip | |
Added transitioning VK buffers before copying initial data
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanCommandBuffer.h | 6 | ||||
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp | 13 |
2 files changed, 7 insertions, 12 deletions
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 |
