diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2020-08-23 04:09:19 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2020-08-23 04:09:19 +0000 |
| commit | ecd121c0335f62b921a66c570b10410120801227 (patch) | |
| tree | 87430b25cbcd83e5e63d6265ba6e41362c7e2573 /Graphics/GraphicsEngineVulkan | |
| parent | Added USAGE_UNIFIED usage type (API 240066) (diff) | |
| download | DiligentCore-ecd121c0335f62b921a66c570b10410120801227.tar.gz DiligentCore-ecd121c0335f62b921a66c570b10410120801227.zip | |
Implemented mapping of unified buffers in Vulkan backend
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/include/BufferVkImpl.hpp | 4 | ||||
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp | 7 | ||||
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/src/DeviceContextVkImpl.cpp | 11 |
3 files changed, 10 insertions, 12 deletions
diff --git a/Graphics/GraphicsEngineVulkan/include/BufferVkImpl.hpp b/Graphics/GraphicsEngineVulkan/include/BufferVkImpl.hpp index a54fe6bc..8d1c187d 100644 --- a/Graphics/GraphicsEngineVulkan/include/BufferVkImpl.hpp +++ b/Graphics/GraphicsEngineVulkan/include/BufferVkImpl.hpp @@ -111,9 +111,9 @@ public: return (GetAccessFlags() & AccessFlags) == AccessFlags; } - void* GetStagingCPUAddress() + void* GetCPUAddress() { - VERIFY_EXPR(m_Desc.Usage == USAGE_STAGING); + VERIFY_EXPR(m_Desc.Usage == USAGE_STAGING || m_Desc.Usage == USAGE_UNIFIED); return reinterpret_cast<Uint8*>(m_MemoryAllocation.Page->GetCPUMemory()) + m_BufferMemoryAlignedOffset; } diff --git a/Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp index 9ff268dd..3e3419b6 100644 --- a/Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp @@ -248,12 +248,9 @@ BufferVkImpl::BufferVkImpl(IReferenceCounters* pRefCounters, if ((MemoryPropFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0) { // Memory is directly accessible by CPU - auto AlignedMemOffset = Align(VkDeviceSize{m_MemoryAllocation.UnalignedOffset}, MemReqs.alignment); - VERIFY_EXPR(m_MemoryAllocation.Size >= MemReqs.size + (AlignedMemOffset - m_MemoryAllocation.UnalignedOffset)); - auto* pData = reinterpret_cast<uint8_t*>(m_MemoryAllocation.Page->GetCPUMemory()); VERIFY_EXPR(pData != nullptr); - memcpy(pData + AlignedMemOffset, pBuffData->pData, pBuffData->DataSize); + memcpy(pData + m_BufferMemoryAlignedOffset, pBuffData->pData, pBuffData->DataSize); if ((MemoryPropFlags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) == 0) { @@ -263,7 +260,7 @@ BufferVkImpl::BufferVkImpl(IReferenceCounters* pRefCounters, FlushRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE; FlushRange.pNext = nullptr; FlushRange.memory = m_MemoryAllocation.Page->GetVkMemory(); - FlushRange.offset = AlignedMemOffset; + FlushRange.offset = m_BufferMemoryAlignedOffset; FlushRange.size = MemReqs.size; LogicalDevice.FlushMappedMemoryRanges(1, &FlushRange); } diff --git a/Graphics/GraphicsEngineVulkan/src/DeviceContextVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/DeviceContextVkImpl.cpp index 619ec23c..2221b6b9 100644 --- a/Graphics/GraphicsEngineVulkan/src/DeviceContextVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/DeviceContextVkImpl.cpp @@ -1417,7 +1417,8 @@ void DeviceContextVkImpl::MapBuffer(IBuffer* pBuffer, MAP_TYPE MapType, MAP_FLAG if (MapType == MAP_READ) { - DEV_CHECK_ERR(BuffDesc.Usage == USAGE_STAGING, "Buffer must be created as USAGE_STAGING to be mapped for reading"); + DEV_CHECK_ERR(BuffDesc.Usage == USAGE_STAGING || BuffDesc.Usage == USAGE_UNIFIED, + "Buffer must be created as USAGE_STAGING or USAGE_UNIFIED to be mapped for reading"); if ((MapFlags & MAP_FLAG_DO_NOT_WAIT) == 0) { @@ -1426,13 +1427,13 @@ void DeviceContextVkImpl::MapBuffer(IBuffer* pBuffer, MAP_TYPE MapType, MAP_FLAG "access and use MAP_FLAG_DO_NOT_WAIT flag."); } - pMappedData = pBufferVk->GetStagingCPUAddress(); + pMappedData = pBufferVk->GetCPUAddress(); } else if (MapType == MAP_WRITE) { - if (BuffDesc.Usage == USAGE_STAGING) + if (BuffDesc.Usage == USAGE_STAGING || BuffDesc.Usage == USAGE_UNIFIED) { - pMappedData = pBufferVk->GetStagingCPUAddress(); + pMappedData = pBufferVk->GetCPUAddress(); } else if (BuffDesc.Usage == USAGE_DYNAMIC) { @@ -1472,7 +1473,7 @@ void DeviceContextVkImpl::MapBuffer(IBuffer* pBuffer, MAP_TYPE MapType, MAP_FLAG } else { - LOG_ERROR("Only USAGE_DYNAMIC and USAGE_STAGING Vk buffers can be mapped for writing"); + LOG_ERROR("Only USAGE_DYNAMIC, USAGE_STAGING and USAGE_UNIFIED Vulkan buffers can be mapped for writing"); } } else if (MapType == MAP_READ_WRITE) |
