Optimize MemoryView::SetName (#4052)

* Optimize MemoryView SetName
Added a second version that uses wstring_view instead of string_view so that no temporaries need to be created when passing in a string literal that's already a wstring.

Signed-off-by: Mike Balfour <82224783+mbalfour-amzn@users.noreply.github.com>

* Changed to use SetPrivateData

Signed-off-by: Mike Balfour <82224783+mbalfour-amzn@users.noreply.github.com>
This commit is contained in:
Mike Balfour
2021-09-10 14:37:32 -05:00
committed by GitHub
parent 141cb55903
commit 2629216e46
8 changed files with 24 additions and 8 deletions
@@ -19,6 +19,7 @@
#include <wrl.h>
#include <d3dx12.h>
#include <d3dcommon.h>
// This define is enabled if LY_PIX_ENABLED is enabled during configure. You can use LY_PIX_PATH to point where pix is downloaded.
// Enabling this define will allow the runtime code to add PIX markers which will help with pix and renderdoc gpu captures
@@ -10,4 +10,5 @@ set(LY_BUILD_DEPENDENCIES
PRIVATE
d3d12
dxgi
dxguid
)
@@ -51,7 +51,7 @@ namespace AZ
if (memoryView.IsValid())
{
heapMemoryUsage.m_residentInBytes += m_descriptor.m_pageSizeInBytes;
memoryView.SetName("BufferPage");
memoryView.SetName(L"BufferPage");
}
else
{
@@ -7,6 +7,7 @@
*/
#include <RHI/MemoryView.h>
#include <AzCore/Casting/numeric_cast.h>
#include <AzCore/Debug/EventTrace.h>
#include <AzCore/std/string/string.h>
#include <AzCore/std/string/conversions.h>
@@ -95,7 +96,17 @@ namespace AZ
{
AZStd::wstring wname;
AZStd::to_wstring(wname, name);
m_memoryAllocation.m_memory->SetName(wname.data());
m_memoryAllocation.m_memory->SetPrivateData(
WKPDID_D3DDebugObjectNameW, aznumeric_cast<unsigned int>(wname.size() * sizeof(wchar_t)), wname.data());
}
}
void MemoryView::SetName(const AZStd::wstring_view& name)
{
if (m_memoryAllocation.m_memory)
{
m_memoryAllocation.m_memory->SetPrivateData(
WKPDID_D3DDebugObjectNameW, aznumeric_cast<unsigned int>(name.size() * sizeof(wchar_t)), name.data());
}
}
@@ -77,6 +77,9 @@ namespace AZ
/// Sets the name of the ID3D12Resource.
void SetName(const AZStd::string_view& name);
/// Sets the name of the ID3D12Resource.
void SetName(const AZStd::wstring_view& name);
private:
void Construct();
@@ -83,7 +83,7 @@ namespace AZ
AZ_Assert(resultCode == RHI::ResultCode::Success, "failed to create BLAS scratch buffer");
MemoryView& scratchMemoryView = static_cast<Buffer*>(buffers.m_scratchBuffer.get())->GetMemoryView();
scratchMemoryView.SetName("BLAS Scratch");
scratchMemoryView.SetName(L"BLAS Scratch");
// create BLAS buffer
buffers.m_blasBuffer = RHI::Factory::Get().CreateBuffer();
@@ -98,7 +98,7 @@ namespace AZ
AZ_Assert(resultCode == RHI::ResultCode::Success, "failed to create BLAS buffer");
MemoryView& blasMemoryView = static_cast<Buffer*>(buffers.m_blasBuffer.get())->GetMemoryView();
blasMemoryView.SetName("BLAS");
blasMemoryView.SetName(L"BLAS");
#endif
return RHI::ResultCode::Success;
}
@@ -72,7 +72,7 @@ namespace AZ
AZ_Assert(resultCode == RHI::ResultCode::Success, "failed to create shader table buffer");
MemoryView& shaderTableMemoryView = static_cast<Buffer*>(shaderTableBuffer.get())->GetMemoryView();
shaderTableMemoryView.SetName("RayTracingShaderTable");
shaderTableMemoryView.SetName(L"RayTracingShaderTable");
// copy records
RHI::BufferMapResponse mapResponse;
@@ -66,7 +66,7 @@ namespace AZ
AZ_Assert(resultCode == RHI::ResultCode::Success, "failed to create TLAS instances buffer");
MemoryView& tlasInstancesMemoryView = static_cast<Buffer*>(buffers.m_tlasInstancesBuffer.get())->GetMemoryView();
tlasInstancesMemoryView.SetName("TLAS Instance");
tlasInstancesMemoryView.SetName(L"TLAS Instance");
RHI::BufferMapResponse mapResponse;
resultCode = bufferPools.GetTlasInstancesBufferPool()->MapBuffer(RHI::BufferMapRequest(*buffers.m_tlasInstancesBuffer, 0, instanceDescsSizeInBytes), mapResponse);
@@ -130,7 +130,7 @@ namespace AZ
AZ_Assert(resultCode == RHI::ResultCode::Success, "failed to create TLAS scratch buffer");
MemoryView& scratchMemoryView = static_cast<Buffer*>(buffers.m_scratchBuffer.get())->GetMemoryView();
scratchMemoryView.SetName("TLAS Scratch");
scratchMemoryView.SetName(L"TLAS Scratch");
// create TLAS buffer
buffers.m_tlasBuffer = RHI::Factory::Get().CreateBuffer();
@@ -145,7 +145,7 @@ namespace AZ
AZ_Assert(resultCode == RHI::ResultCode::Success, "failed to create TLAS buffer");
MemoryView& tlasMemoryView = static_cast<Buffer*>(buffers.m_tlasBuffer.get())->GetMemoryView();
tlasMemoryView.SetName("TLAS");
tlasMemoryView.SetName(L"TLAS");
#endif
return RHI::ResultCode::Success;
}