From 5571b2c7312321da27768a8e5207fb62f0a85d95 Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Sun, 26 Aug 2018 16:59:56 -0700 Subject: Fixed issue with buffer view offset in VK backend --- Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp | 4 ++-- Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'Graphics/GraphicsEngineVulkan') diff --git a/Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp index f31af180..ce0e8f4b 100644 --- a/Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/BufferVkImpl.cpp @@ -483,8 +483,8 @@ VulkanUtilities::BufferViewWrapper BufferVkImpl::CreateView(struct BufferViewDes DEV_CHECK_ERR(ViewDesc.Format.ValueType != VT_UNDEFINED, "Undefined format"); ViewCI.format = TypeToVkFormat(ViewDesc.Format.ValueType, ViewDesc.Format.NumComponents, ViewDesc.Format.IsNormalized); } - ViewCI.offset = ViewDesc.ByteOffset; - ViewCI.range = ViewDesc.ByteWidth; // size in bytes of the buffer view + ViewCI.offset = ViewDesc.ByteOffset; // offset in bytes from the base address of the buffer + ViewCI.range = ViewDesc.ByteWidth; // size in bytes of the buffer view const auto& LogicalDevice = m_pDevice->GetLogicalDevice(); BuffView = LogicalDevice.CreateBufferView(ViewCI, ViewDesc.Name); diff --git a/Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp b/Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp index 82039178..32a1d588 100644 --- a/Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp +++ b/Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp @@ -238,7 +238,8 @@ VkDescriptorBufferInfo ShaderResourceCacheVk::Resource::GetStorageBufferDescript VERIFY(Type == SPIRVShaderResourceAttribs::ResourceType::StorageBuffer, "Storage buffer resource is expected"); auto* pBuffViewVk = pObject.RawPtr(); - VERIFY_EXPR(pBuffViewVk->GetDesc().ViewType == BUFFER_VIEW_UNORDERED_ACCESS); + const auto& ViewDesc = pBuffViewVk->GetDesc(); + VERIFY_EXPR(ViewDesc.ViewType == BUFFER_VIEW_UNORDERED_ACCESS); auto* pBuffVk = pBuffViewVk->GetBufferVk(); // VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC descriptor type @@ -249,8 +250,8 @@ VkDescriptorBufferInfo ShaderResourceCacheVk::Resource::GetStorageBufferDescript DescrBuffInfo.buffer = pBuffVk->GetVkBuffer(); // If descriptorType is VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the offset member // of each element of pBufferInfo must be a multiple of VkPhysicalDeviceLimits::minStorageBufferOffsetAlignment (13.2.4) - DescrBuffInfo.offset = 0; - DescrBuffInfo.range = pBuffVk->GetDesc().uiSizeInBytes; + DescrBuffInfo.offset = ViewDesc.ByteOffset; + DescrBuffInfo.range = ViewDesc.ByteWidth; return DescrBuffInfo; } -- cgit v1.2.3