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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user