Add **GPU Memory profiler** to Editor

This commit is contained in:
Wojciech Figat
2022-12-08 16:30:37 +01:00
parent f2c594569d
commit df82a0f5d0
47 changed files with 548 additions and 195 deletions

View File

@@ -1299,25 +1299,23 @@ void GPUContextDX12::CopyResource(GPUResource* dstResource, GPUResource* srcReso
auto dstResourceDX12 = dynamic_cast<ResourceOwnerDX12*>(dstResource);
auto srcResourceDX12 = dynamic_cast<ResourceOwnerDX12*>(srcResource);
auto dstBufferDX12 = dynamic_cast<GPUBufferDX12*>(dstResource);
auto srcBufferDX12 = dynamic_cast<GPUBufferDX12*>(srcResource);
auto dstTextureDX12 = dynamic_cast<GPUTextureDX12*>(dstResource);
auto srcTextureDX12 = dynamic_cast<GPUTextureDX12*>(srcResource);
SetResourceState(dstResourceDX12, D3D12_RESOURCE_STATE_COPY_DEST);
SetResourceState(srcResourceDX12, D3D12_RESOURCE_STATE_COPY_SOURCE);
flushRBs();
auto srcType = srcResource->GetObjectType();
auto dstType = dstResource->GetObjectType();
// Buffer -> Buffer
if (srcType == GPUResource::ObjectType::Buffer && dstType == GPUResource::ObjectType::Buffer)
if (srcBufferDX12 && dstBufferDX12)
{
_commandList->CopyResource(dstResourceDX12->GetResource(), srcResourceDX12->GetResource());
}
// Texture -> Texture
else if (srcType == GPUResource::ObjectType::Texture && dstType == GPUResource::ObjectType::Texture)
else if (srcTextureDX12 && dstTextureDX12)
{
auto dstTextureDX12 = static_cast<GPUTextureDX12*>(dstResource);
auto srcTextureDX12 = static_cast<GPUTextureDX12*>(srcResource);
if (dstTextureDX12->IsStaging())
{
// Staging Texture -> Staging Texture
@@ -1388,32 +1386,26 @@ void GPUContextDX12::CopySubresource(GPUResource* dstResource, uint32 dstSubreso
{
ASSERT(dstResource && srcResource);
auto srcType = srcResource->GetObjectType();
auto dstType = dstResource->GetObjectType();
auto dstResourceDX12 = dynamic_cast<ResourceOwnerDX12*>(dstResource);
auto srcResourceDX12 = dynamic_cast<ResourceOwnerDX12*>(srcResource);
auto dstBufferDX12 = dynamic_cast<GPUBufferDX12*>(dstResource);
auto srcBufferDX12 = dynamic_cast<GPUBufferDX12*>(srcResource);
auto dstTextureDX12 = dynamic_cast<GPUTextureDX12*>(dstResource);
auto srcTextureDX12 = dynamic_cast<GPUTextureDX12*>(srcResource);
SetResourceState(dstResourceDX12, D3D12_RESOURCE_STATE_COPY_DEST);
SetResourceState(srcResourceDX12, D3D12_RESOURCE_STATE_COPY_SOURCE);
flushRBs();
// Buffer -> Buffer
if (srcType == GPUResource::ObjectType::Buffer && dstType == GPUResource::ObjectType::Buffer)
if (srcBufferDX12 && dstBufferDX12)
{
auto dstBufferDX12 = dynamic_cast<ResourceOwnerDX12*>(dstResource);
auto srcBufferDX12 = dynamic_cast<ResourceOwnerDX12*>(srcResource);
SetResourceState(dstBufferDX12, D3D12_RESOURCE_STATE_COPY_DEST);
SetResourceState(srcBufferDX12, D3D12_RESOURCE_STATE_COPY_SOURCE);
flushRBs();
uint64 bytesCount = srcResource->GetMemoryUsage();
_commandList->CopyBufferRegion(dstBufferDX12->GetResource(), 0, srcBufferDX12->GetResource(), 0, bytesCount);
}
// Texture -> Texture
else if (srcType == GPUResource::ObjectType::Texture && dstType == GPUResource::ObjectType::Texture)
else if (srcTextureDX12 && dstTextureDX12)
{
auto dstTextureDX12 = static_cast<GPUTextureDX12*>(dstResource);
auto srcTextureDX12 = static_cast<GPUTextureDX12*>(srcResource);
SetResourceState(dstTextureDX12, D3D12_RESOURCE_STATE_COPY_DEST);
SetResourceState(srcTextureDX12, D3D12_RESOURCE_STATE_COPY_SOURCE);
flushRBs();
if (srcTextureDX12->IsStaging() || dstTextureDX12->IsStaging())
{
Log::NotImplementedException(TEXT("Copy region of staging resources is not supported yet."));