2
這個程序:D3D12不可避免的泄漏報告
#include <d3d12.h>
#pragma comment(lib,"d3d12")
int main()
{
ID3D12Debug *pDebug = NULL;
D3D12GetDebugInterface(__uuidof(ID3D12Debug),(void**)&pDebug);
pDebug->EnableDebugLayer();
pDebug->Release();
ID3D12Device *pDev = NULL;
D3D12CreateDevice(NULL,D3D_FEATURE_LEVEL_12_1,__uuidof(ID3D12Device),(void**)&pDev);
ID3D12DebugDevice *pDebugDevice = NULL;
pDev->QueryInterface(&pDebugDevice);
pDev->Release();
pDebugDevice->ReportLiveDeviceObjects(D3D12_RLDO_DETAIL);
pDebugDevice->Release();
}
給出了這樣的調試輸出:
D3D12 WARNING: Live ID3D12Device at 0x000C6BA8, Refcount: 2 [ STATE_CREATION WARNING #274: LIVE_DEVICE]
D3D12 WARNING: Live ID3D12RootSignature at 0x000E62E8, Refcount: 0, IntRef: 2 [ STATE_CREATION WARNING #577: LIVE_ROOTSIGNATURE]
D3D12 WARNING: Live ID3D12PipelineState at 0x0011C3C8, Refcount: 0, IntRef: 1 [ STATE_CREATION WARNING #572: LIVE_PIPELINESTATE]
D3D12 WARNING: Live ID3D12PipelineState at 0x001421D8, Refcount: 0, IntRef: 1 [ STATE_CREATION WARNING #572: LIVE_PIPELINESTATE]
D3D12 WARNING: Live ID3D12Resource at 0x00138FF8, Refcount: 0, IntRef: 1 [ STATE_CREATION WARNING #575: LIVE_RESOURCE]
D3D12 WARNING: Live ID3D12Heap at 0x00144DD8, Refcount: 0, IntRef: 1 [ STATE_CREATION WARNING #579: LIVE_HEAP]
調試設備報告,我創建的D3D12裝置還活着即使我釋放。我知道這確實是真的,因爲調試設備本身實際上是保持D3D12設備活着的唯一剩餘引用,但從我的角度來看,這不是泄漏,因爲我正確地發佈了我的D3D12設備。這只是對我的程序輸出的污染,給出了我的代碼中存在錯誤的錯誤提示。
我的問題是:我確實在這裏做錯了什麼?或者在D3D12調試設備的報告工作方式中這是一種不好的行爲?任何想法如何解決它?
謝謝!
'D3D12_RLDO_IGNORE_INTERNAL'標誌只刪除了提及的內部對象,但D3D12Device本身仍然被報告爲泄漏。 但是,您在示例中使用的DXGI方法完美無缺。謝謝Chuck! –