Add GPUResourceUsage.Staging for both CPU read/write access

This commit is contained in:
Wojtek Figat
2025-01-30 20:39:04 +01:00
parent f11306af24
commit 44fae3838e
12 changed files with 89 additions and 21 deletions

View File

@@ -71,6 +71,15 @@ GPUBufferDescription GPUBufferDescription::ToStagingReadback() const
return desc;
}
GPUBufferDescription GPUBufferDescription::ToStaging() const
{
auto desc = *this;
desc.Usage = GPUResourceUsage::Staging;
desc.Flags = GPUBufferFlags::None;
desc.InitData = nullptr;
return desc;
}
bool GPUBufferDescription::Equals(const GPUBufferDescription& other) const
{
return Size == other.Size
@@ -123,6 +132,16 @@ GPUBuffer::GPUBuffer()
_desc.Size = 0;
}
bool GPUBuffer::IsStaging() const
{
return _desc.Usage == GPUResourceUsage::StagingReadback || _desc.Usage == GPUResourceUsage::StagingUpload || _desc.Usage == GPUResourceUsage::Staging;
}
bool GPUBuffer::IsDynamic() const
{
return _desc.Usage == GPUResourceUsage::Dynamic;
}
bool GPUBuffer::Init(const GPUBufferDescription& desc)
{
ASSERT(Math::IsInRange<uint32>(desc.Size, 1, MAX_int32)
@@ -215,7 +234,7 @@ bool GPUBuffer::DownloadData(BytesContainer& result)
LOG(Warning, "Cannot download GPU buffer data from an empty buffer.");
return true;
}
if (_desc.Usage == GPUResourceUsage::StagingReadback || _desc.Usage == GPUResourceUsage::Dynamic)
if (_desc.Usage == GPUResourceUsage::StagingReadback || _desc.Usage == GPUResourceUsage::Dynamic || _desc.Usage == GPUResourceUsage::Staging)
{
// Use faster path for staging resources
return GetData(result);