summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-05-31 04:18:56 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-05-31 04:18:56 +0000
commitd4853af6c2ea79251b65aff5fad3992c6c8818f3 (patch)
treea39f33dcaafd28d8ee9d3e588a3237ac8022cba9 /Graphics/GraphicsEngineVulkan
parentAdded initial size of the dynamic heap in vulkan to creation attribs (diff)
downloadDiligentCore-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.h6
-rw-r--r--Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp13
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