#pragma once #include #define WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料 #include #include //for d3d12 //------------------------------------------------------------------------------------------------------------ // 为了调试加入下面的内联函数和宏定义,为每个接口对象设置名称,方便查看调试输出 #if defined(_DEBUG) inline void GRS_SetD3D12DebugName(ID3D12Object* pObject, LPCWSTR name) { pObject->SetName(name); } inline void GRS_SetD3D12DebugNameIndexed(ID3D12Object* pObject, LPCWSTR name, UINT index) { WCHAR _DebugName[MAX_PATH] = {}; if (SUCCEEDED(StringCchPrintfW(_DebugName, _countof(_DebugName), L"%s[%u]", name, index))) { pObject->SetName(_DebugName); } } #else inline void GRS_SetD3D12DebugName(ID3D12Object*, LPCWSTR) { } inline void GRS_SetD3D12DebugNameIndexed(ID3D12Object*, LPCWSTR, UINT) { } #endif #define GRS_SET_D3D12_DEBUGNAME(x) GRS_SetD3D12DebugName(x, L#x) #define GRS_SET_D3D12_DEBUGNAME_INDEXED(x, n) GRS_SetD3D12DebugNameIndexed(x[n], L#x, n) #define GRS_SET_D3D12_DEBUGNAME_COMPTR(x) GRS_SetD3D12DebugName(x.Get(), L#x) #define GRS_SET_D3D12_DEBUGNAME_INDEXED_COMPTR(x, n) GRS_SetD3D12DebugNameIndexed(x[n].Get(), L#x, n) #if defined(_DEBUG) inline void GRS_SetDXGIDebugName(IDXGIObject* pObject, LPCWSTR name) { size_t szLen = 0; StringCchLengthW(name, MAX_PATH, &szLen); pObject->SetPrivateData(WKPDID_D3DDebugObjectName, static_cast(szLen - 1), name); } inline void GRS_SetDXGIDebugNameIndexed(IDXGIObject* pObject, LPCWSTR name, UINT index) { size_t szLen = 0; WCHAR _DebugName[MAX_PATH] = {}; if (SUCCEEDED(StringCchPrintfW(_DebugName, _countof(_DebugName), L"%s[%u]", name, index))) { StringCchLengthW(_DebugName, _countof(_DebugName), &szLen); pObject->SetPrivateData(WKPDID_D3DDebugObjectName, static_cast(szLen), _DebugName); } } #else inline void GRS_SetDXGIDebugName(IDXGIObject*, LPCWSTR) { } inline void GRS_SetDXGIDebugNameIndexed(IDXGIObject*, LPCWSTR, UINT) { } #endif #define GRS_SET_DXGI_DEBUGNAME(x) GRS_SetDXGIDebugName(x, L#x) #define GRS_SET_DXGI_DEBUGNAME_INDEXED(x, n) GRS_SetDXGIDebugNameIndexed(x[n], L#x, n) #define GRS_SET_DXGI_DEBUGNAME_COMPTR(x) GRS_SetDXGIDebugName(x.Get(), L#x) #define GRS_SET_DXGI_DEBUGNAME_INDEXED_COMPTR(x, n) GRS_SetDXGIDebugNameIndexed(x[n].Get(), L#x, n) //------------------------------------------------------------------------------------------------------------