Enable GPU-based validation layer if possible, add dummy ID3D12Debug1

This commit is contained in:
baldurk
2016-09-16 13:17:44 +02:00
parent b8a5d1e33a
commit d9a7e43573
+32 -2
View File
@@ -39,7 +39,7 @@ ID3DDevice *GetD3D12DeviceIfAlloc(IUnknown *dev)
}
// dummy class to present to the user, while we maintain control
class WrappedID3D12Debug : public RefCounter12<ID3D12Debug>, public ID3D12Debug
class WrappedID3D12Debug : public RefCounter12<ID3D12Debug>, public ID3D12Debug, public ID3D12Debug1
{
public:
WrappedID3D12Debug() : RefCounter12(NULL) {}
@@ -62,13 +62,23 @@ public:
AddRef();
return S_OK;
}
if(riid == __uuidof(ID3D12Debug1))
{
*ppvObject = (ID3D12Debug1 *)this;
AddRef();
return S_OK;
}
return RefCounter12::QueryInterface(riid, ppvObject);
return E_NOINTERFACE;
}
//////////////////////////////
// Implement ID3D12Debug
virtual void STDMETHODCALLTYPE EnableDebugLayer() {}
//////////////////////////////
// Implement ID3D12Debug1
virtual void STDMETHODCALLTYPE SetEnableGPUBasedValidation(BOOL Enable) {}
virtual void STDMETHODCALLTYPE SetEnableSynchronizedCommandQueueValidation(BOOL Enable) {}
};
class D3D12Hook : LibraryHook
@@ -199,9 +209,29 @@ private:
HRESULT hr = getfn(__uuidof(ID3D12Debug), (void **)&debug);
if(SUCCEEDED(hr) && debug)
{
debug->EnableDebugLayer();
RDCDEBUG("Enabling debug layer");
ID3D12Debug1 *debug1 = NULL;
hr = debug->QueryInterface(__uuidof(ID3D12Debug1), (void **)&debug1);
if(SUCCEEDED(hr) && debug1)
{
RDCDEBUG("Enabling GPU-based validation");
debug1->SetEnableGPUBasedValidation(true);
SAFE_RELEASE(debug1);
}
else
{
RDCDEBUG("GPU-based validation not available");
}
}
else
{
RDCERR("Couldn't enable debug layer: %x", hr);
}
SAFE_RELEASE(debug);
}