Add GPUResourceUsage.Staging for both CPU read/write access
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user