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

@@ -120,6 +120,7 @@ bool GPUBufferDX12::OnInit()
switch (_desc.Usage)
{
case GPUResourceUsage::StagingUpload:
case GPUResourceUsage::Staging:
heapProperties.Type = D3D12_HEAP_TYPE_UPLOAD;
break;
case GPUResourceUsage::StagingReadback:
@@ -152,7 +153,7 @@ bool GPUBufferDX12::OnInit()
// But if we are doing it during update or from the other thread we have to register resource data upload job.
// In both cases options.InitData data have to exist for a few next frames.
if (_desc.Usage == GPUResourceUsage::StagingUpload)
if (_desc.Usage == GPUResourceUsage::StagingUpload || _desc.Usage == GPUResourceUsage::Staging)
{
// Modify staging resource data now
SetData(_desc.InitData, _desc.Size);

View File

@@ -28,6 +28,7 @@ namespace RenderToolsDX
{
case GPUResourceUsage::Dynamic:
return D3D11_USAGE_DYNAMIC;
case GPUResourceUsage::Staging:
case GPUResourceUsage::StagingUpload:
case GPUResourceUsage::StagingReadback:
return D3D11_USAGE_STAGING;
@@ -47,6 +48,8 @@ namespace RenderToolsDX
{
case GPUResourceUsage::Dynamic:
return D3D11_CPU_ACCESS_WRITE;
case GPUResourceUsage::Staging:
return D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
case GPUResourceUsage::StagingReadback:
return D3D11_CPU_ACCESS_READ;
case GPUResourceUsage::StagingUpload:

View File

@@ -128,6 +128,9 @@ bool GPUBufferVulkan::OnInit()
case GPUResourceUsage::StagingReadback:
allocInfo.usage = VMA_MEMORY_USAGE_GPU_TO_CPU;
break;
case GPUResourceUsage::Staging:
allocInfo.usage = VMA_MEMORY_USAGE_CPU_COPY;
break;
default:
allocInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
}