From 4976a2ef6a7e4c878088530ccd519906bce94187 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Sat, 20 Jul 2024 22:42:14 +0200 Subject: [PATCH] Change `DynamicBuffer` usage feature from b14ac354bbf76c7028e12e88d36af3c0bb9c7329 --- Source/Engine/Graphics/DynamicBuffer.cpp | 8 ++++---- Source/Engine/Graphics/DynamicBuffer.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/Engine/Graphics/DynamicBuffer.cpp b/Source/Engine/Graphics/DynamicBuffer.cpp index 9c5c06fae..8414d0a57 100644 --- a/Source/Engine/Graphics/DynamicBuffer.cpp +++ b/Source/Engine/Graphics/DynamicBuffer.cpp @@ -31,12 +31,12 @@ void DynamicBuffer::Flush(GPUContext* context) // Lazy-resize buffer if (_buffer == nullptr) _buffer = GPUDevice::Instance->CreateBuffer(_name); - if (_buffer->GetSize() < size) + if (_buffer->GetSize() < size || _buffer->GetDescription().Usage != Usage) { const int32 numElements = Math::AlignUp(static_cast((size / _stride) * 1.3f), 32); GPUBufferDescription desc; InitDesc(desc, numElements); - desc.Usage = SingleFrame ? GPUResourceUsage::Default : GPUResourceUsage::Dynamic; + desc.Usage = Usage; if (_buffer->Init(desc)) { LOG(Fatal, "Cannot setup dynamic buffer '{0}'! Size: {1}", _name, Utilities::BytesToText(size)); @@ -81,7 +81,7 @@ DynamicStructuredBuffer::DynamicStructuredBuffer(uint32 initialCapacity, uint32 : DynamicBuffer(initialCapacity, stride, name) , _isUnorderedAccess(isUnorderedAccess) { - SingleFrame = true; // The most common use-case is just for a single upload of data prepared by CPU + Usage = GPUResourceUsage::Default; // The most common use-case is just for a single upload of data prepared by CPU } void DynamicStructuredBuffer::InitDesc(GPUBufferDescription& desc, int32 numElements) @@ -94,7 +94,7 @@ DynamicTypedBuffer::DynamicTypedBuffer(uint32 initialCapacity, PixelFormat forma , _format(format) , _isUnorderedAccess(isUnorderedAccess) { - SingleFrame = true; // The most common use-case is just for a single upload of data prepared by CPU + Usage = GPUResourceUsage::Default; // The most common use-case is just for a single upload of data prepared by CPU } void DynamicTypedBuffer::InitDesc(GPUBufferDescription& desc, int32 numElements) diff --git a/Source/Engine/Graphics/DynamicBuffer.h b/Source/Engine/Graphics/DynamicBuffer.h index d859301e0..e00ffacbd 100644 --- a/Source/Engine/Graphics/DynamicBuffer.h +++ b/Source/Engine/Graphics/DynamicBuffer.h @@ -33,9 +33,9 @@ public: public: /// - /// True if buffer will be used once per-frame, otherwise it should support uploading data multiple times per-frame. If true 'GPUResourceUsage::Dynamic' will be used, otherwise 'GPUResourceUsage::Default'. + /// GPU usage of the resource. Use Dynamic for resources that can be updated multiple timers per-frame. /// - bool SingleFrame = false; + GPUResourceUsage Usage = GPUResourceUsage::Dynamic; /// /// The data container (raw bytes storage).