Add **GPU Memory profiler** to Editor
This commit is contained in:
@@ -190,9 +190,9 @@ public:
|
||||
public:
|
||||
|
||||
// [GPUResourceDX12]
|
||||
ResourceType GetResourceType() const override
|
||||
GPUResourceType GetResourceType() const override
|
||||
{
|
||||
return ResourceType::Descriptor;
|
||||
return GPUResourceType::Descriptor;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
@@ -128,9 +128,9 @@ void DescriptorHeapWithSlotsDX12::ReleaseSlot(uint32 index)
|
||||
value &= ~mask;
|
||||
}
|
||||
|
||||
GPUResource::ResourceType DescriptorHeapWithSlotsDX12::GetResourceType() const
|
||||
GPUResourceType DescriptorHeapWithSlotsDX12::GetResourceType() const
|
||||
{
|
||||
return ResourceType::Descriptor;
|
||||
return GPUResourceType::Descriptor;
|
||||
}
|
||||
|
||||
DescriptorHeapPoolDX12::DescriptorHeapPoolDX12(GPUDeviceDX12* device, D3D12_DESCRIPTOR_HEAP_TYPE type, uint32 descriptorsCountPerHeap, bool shaderVisible)
|
||||
|
||||
@@ -87,7 +87,7 @@ public:
|
||||
public:
|
||||
|
||||
// [GPUResourceDX12]
|
||||
ResourceType GetResourceType() const final override;
|
||||
GPUResourceType GetResourceType() const final override;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -170,9 +170,9 @@ public:
|
||||
public:
|
||||
|
||||
// [GPUResourceDX12]
|
||||
ResourceType GetResourceType() const final override
|
||||
GPUResourceType GetResourceType() const final override
|
||||
{
|
||||
return ResourceType::Descriptor;
|
||||
return GPUResourceType::Descriptor;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
@@ -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."));
|
||||
|
||||
@@ -56,9 +56,9 @@ public:
|
||||
public:
|
||||
|
||||
// [GPUResourceDX12]
|
||||
ResourceType GetResourceType() const final override
|
||||
GPUResourceType GetResourceType() const final override
|
||||
{
|
||||
return ResourceType::Buffer;
|
||||
return GPUResourceType::Buffer;
|
||||
}
|
||||
|
||||
// [ResourceOwnerDX12]
|
||||
|
||||
@@ -87,7 +87,7 @@ namespace DescriptorSet
|
||||
return ShaderStage::Geometry;
|
||||
default:
|
||||
CRASH;
|
||||
return static_cast<ShaderStage>(ShaderStage_Count);
|
||||
return (ShaderStage)ShaderStage_Count;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "GPUBufferVulkan.h"
|
||||
#include "GPUContextVulkan.h"
|
||||
#include "RenderToolsVulkan.h"
|
||||
#include "Engine/Core/Log.h"
|
||||
#include "Engine/Threading/Threading.h"
|
||||
#include "Engine/Graphics/Async/Tasks/GPUUploadBufferTask.h"
|
||||
|
||||
|
||||
@@ -1493,17 +1493,13 @@ void GPUContextVulkan::CopyResource(GPUResource* dstResource, GPUResource* srcRe
|
||||
if (cmdBuffer->IsInsideRenderPass())
|
||||
EndRenderPass();
|
||||
|
||||
auto dstTextureVulkan = static_cast<GPUTextureVulkan*>(dstResource);
|
||||
auto srcTextureVulkan = static_cast<GPUTextureVulkan*>(srcResource);
|
||||
|
||||
auto dstBufferVulkan = static_cast<GPUBufferVulkan*>(dstResource);
|
||||
auto srcBufferVulkan = static_cast<GPUBufferVulkan*>(srcResource);
|
||||
|
||||
const auto srcType = srcResource->GetObjectType();
|
||||
const auto dstType = dstResource->GetObjectType();
|
||||
auto dstTextureVulkan = dynamic_cast<GPUTextureVulkan*>(dstResource);
|
||||
auto srcTextureVulkan = dynamic_cast<GPUTextureVulkan*>(srcResource);
|
||||
auto dstBufferVulkan = dynamic_cast<GPUBufferVulkan*>(dstResource);
|
||||
auto srcBufferVulkan = dynamic_cast<GPUBufferVulkan*>(srcResource);
|
||||
|
||||
// Buffer -> Buffer
|
||||
if (srcType == GPUResource::ObjectType::Buffer && dstType == GPUResource::ObjectType::Buffer)
|
||||
if (srcBufferVulkan && dstBufferVulkan)
|
||||
{
|
||||
// Transition resources
|
||||
AddBufferBarrier(dstBufferVulkan, VK_ACCESS_TRANSFER_WRITE_BIT);
|
||||
@@ -1519,7 +1515,7 @@ void GPUContextVulkan::CopyResource(GPUResource* dstResource, GPUResource* srcRe
|
||||
vkCmdCopyBuffer(cmdBuffer->GetHandle(), srcBufferVulkan->GetHandle(), dstBufferVulkan->GetHandle(), 1, &bufferCopy);
|
||||
}
|
||||
// Texture -> Texture
|
||||
else if (srcType == GPUResource::ObjectType::Texture && dstType == GPUResource::ObjectType::Texture)
|
||||
else if (srcTextureVulkan && dstTextureVulkan)
|
||||
{
|
||||
if (dstTextureVulkan->IsStaging())
|
||||
{
|
||||
@@ -1632,17 +1628,13 @@ void GPUContextVulkan::CopySubresource(GPUResource* dstResource, uint32 dstSubre
|
||||
if (cmdBuffer->IsInsideRenderPass())
|
||||
EndRenderPass();
|
||||
|
||||
auto dstTextureVulkan = static_cast<GPUTextureVulkan*>(dstResource);
|
||||
auto srcTextureVulkan = static_cast<GPUTextureVulkan*>(srcResource);
|
||||
|
||||
auto dstBufferVulkan = static_cast<GPUBufferVulkan*>(dstResource);
|
||||
auto srcBufferVulkan = static_cast<GPUBufferVulkan*>(srcResource);
|
||||
|
||||
auto srcType = srcResource->GetObjectType();
|
||||
auto dstType = dstResource->GetObjectType();
|
||||
auto dstTextureVulkan = dynamic_cast<GPUTextureVulkan*>(dstResource);
|
||||
auto srcTextureVulkan = dynamic_cast<GPUTextureVulkan*>(srcResource);
|
||||
auto dstBufferVulkan = dynamic_cast<GPUBufferVulkan*>(dstResource);
|
||||
auto srcBufferVulkan = dynamic_cast<GPUBufferVulkan*>(srcResource);
|
||||
|
||||
// Buffer -> Buffer
|
||||
if (srcType == GPUResource::ObjectType::Buffer && dstType == GPUResource::ObjectType::Buffer)
|
||||
if (srcBufferVulkan && dstBufferVulkan)
|
||||
{
|
||||
ASSERT(dstSubresource == 0 && srcSubresource == 0);
|
||||
|
||||
@@ -1660,7 +1652,7 @@ void GPUContextVulkan::CopySubresource(GPUResource* dstResource, uint32 dstSubre
|
||||
vkCmdCopyBuffer(cmdBuffer->GetHandle(), srcBufferVulkan->GetHandle(), dstBufferVulkan->GetHandle(), 1, &bufferCopy);
|
||||
}
|
||||
// Texture -> Texture
|
||||
else if (srcType == GPUResource::ObjectType::Texture && dstType == GPUResource::ObjectType::Texture)
|
||||
else if (srcTextureVulkan && dstTextureVulkan)
|
||||
{
|
||||
const int32 dstMipMaps = dstTextureVulkan->MipLevels();
|
||||
const int32 dstMipIndex = dstSubresource % dstMipMaps;
|
||||
|
||||
@@ -67,9 +67,9 @@ public:
|
||||
public:
|
||||
|
||||
// [GPUResourceVulkan]
|
||||
ResourceType GetResourceType() const final override
|
||||
GPUResourceType GetResourceType() const final override
|
||||
{
|
||||
return ResourceType::Buffer;
|
||||
return GPUResourceType::Buffer;
|
||||
}
|
||||
|
||||
// [ResourceOwnerVulkan]
|
||||
|
||||
Reference in New Issue
Block a user