summaryrefslogtreecommitdiffstats
path: root/tools/gfx/vulkan
diff options
context:
space:
mode:
authorskallweitNV <64953474+skallweitNV@users.noreply.github.com>2024-05-14 00:39:49 +0200
committerGitHub <noreply@github.com>2024-05-13 15:39:49 -0700
commit9f23046138629f78995d54a7722ad6749bd84db9 (patch)
tree25ac343566f896cae547046ac7e960441874ec00 /tools/gfx/vulkan
parent04d3dd51125182767d90c318895a6232ec4ee750 (diff)
[gfx] specify resource view buffer range in bytes (#4149)
* refactor gfx buffer range to use byte range * create buffer view with zero struct stride for ClearUnorderedAccessViewUint/Float * create buffer descriptors on demand * avoid copying gfx.dll --------- Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'tools/gfx/vulkan')
-rw-r--r--tools/gfx/vulkan/vk-command-encoder.cpp22
-rw-r--r--tools/gfx/vulkan/vk-device.cpp22
2 files changed, 8 insertions, 36 deletions
diff --git a/tools/gfx/vulkan/vk-command-encoder.cpp b/tools/gfx/vulkan/vk-command-encoder.cpp
index d0fc0a4fd..568b49179 100644
--- a/tools/gfx/vulkan/vk-command-encoder.cpp
+++ b/tools/gfx/vulkan/vk-command-encoder.cpp
@@ -665,19 +665,10 @@ void ResourceCommandEncoder::_clearBuffer(
VkBuffer buffer, uint64_t bufferSize, const IResourceView::Desc& desc, uint32_t clearValue)
{
auto& api = m_commandBuffer->m_renderer->m_api;
-
- FormatInfo info = {};
- gfxGetFormatInfo(desc.format, &info);
- auto texelSize = info.blockSizeInBytes;
- auto elementCount = desc.bufferRange.elementCount;
- auto clearStart = (uint64_t)desc.bufferRange.firstElement * texelSize;
- auto clearSize = bufferSize - clearStart;
- if (elementCount != 0)
- {
- clearSize = (uint64_t)elementCount * texelSize;
- }
+ auto clearOffset = desc.bufferRange.offset;
+ auto clearSize = desc.bufferRange.size == 0 ? bufferSize - clearOffset : desc.bufferRange.size;
api.vkCmdFillBuffer(
- m_commandBuffer->m_commandBuffer, buffer, clearStart, clearSize, clearValue);
+ m_commandBuffer->m_commandBuffer, buffer, clearOffset, clearSize, clearValue);
}
void ResourceCommandEncoder::clearResourceView(
@@ -724,13 +715,10 @@ void ResourceCommandEncoder::clearResourceView(
clearValue->color.uintValues[2] == clearValue->color.uintValues[0] &&
clearValue->color.uintValues[3] == clearValue->color.uintValues[0]);
auto viewImpl = static_cast<PlainBufferResourceViewImpl*>(viewImplBase);
- uint64_t clearStart = viewImpl->m_desc.bufferRange.firstElement;
- uint64_t clearSize = viewImpl->m_desc.bufferRange.elementCount;
-
+ uint64_t clearStart = viewImpl->m_desc.bufferRange.offset;
+ uint64_t clearSize = viewImpl->m_desc.bufferRange.size;
if (clearSize == 0)
clearSize = viewImpl->m_buffer->getDesc()->sizeInBytes - clearStart;
- if (viewImpl->m_desc.bufferElementSize != 0)
- clearSize *= viewImpl->m_desc.bufferElementSize;
api.vkCmdFillBuffer(
m_commandBuffer->m_commandBuffer,
viewImpl->m_buffer->m_buffer.m_buffer,
diff --git a/tools/gfx/vulkan/vk-device.cpp b/tools/gfx/vulkan/vk-device.cpp
index b3124231d..03165f606 100644
--- a/tools/gfx/vulkan/vk-device.cpp
+++ b/tools/gfx/vulkan/vk-device.cpp
@@ -2189,26 +2189,10 @@ Result DeviceImpl::createBufferView(
{
auto resourceImpl = (BufferResourceImpl*)buffer;
- // TODO: These should come from the `ResourceView::Desc`
- auto stride = desc.bufferElementSize;
- if (stride == 0)
- {
- if (desc.format == Format::Unknown)
- {
- stride = 1;
- }
- else
- {
- FormatInfo info;
- gfxGetFormatInfo(desc.format, &info);
- stride = info.blockSizeInBytes;
- assert(info.pixelsPerBlock == 1);
- }
- }
- VkDeviceSize offset = (VkDeviceSize)desc.bufferRange.firstElement * stride;
- VkDeviceSize size = desc.bufferRange.elementCount == 0
+ VkDeviceSize offset = (VkDeviceSize)desc.bufferRange.offset;
+ VkDeviceSize size = desc.bufferRange.size == 0
? (buffer ? resourceImpl->getDesc()->sizeInBytes : 0)
- : (VkDeviceSize)desc.bufferRange.elementCount * stride;
+ : (VkDeviceSize)desc.bufferRange.size;
// There are two different cases we need to think about for buffers.
//