Remove the ability to enable/disable hooks

* This wasn't very well supported after D3D11 anyway, and modern tools
  (VSGD/PIX/etc) don't respect D3DPERF_SetOptions which was the only route that
  actually needed to globally enable/disable hooks.
* D3D11CreateDevices's flag still works to prevent hooking.
This commit is contained in:
baldurk
2018-06-26 11:49:33 +01:00
parent 73e1f7e770
commit b47ce7d413
13 changed files with 31 additions and 122 deletions
+24 -39
View File
@@ -107,7 +107,6 @@ public:
{
LibraryHooks::GetInstance().RegisterHook(DLL_NAME, this);
m_HasHooks = false;
m_EnabledHooks = true;
m_InsideCreate = false;
}
@@ -158,14 +157,11 @@ public:
return false;
m_HasHooks = true;
m_EnabledHooks = true;
return true;
}
void EnableHooks(const char *libName, bool enable) { m_EnabledHooks = enable; }
void OptionsUpdated(const char *libName) {}
bool UseHooks() { return (d3d11hooks.m_HasHooks && d3d11hooks.m_EnabledHooks); }
static HRESULT CreateWrappedDeviceAndSwapChain(
__in_opt IDXGIAdapter *pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags,
__in_ecount_opt(FeatureLevels) CONST D3D_FEATURE_LEVEL *pFeatureLevels, UINT FeatureLevels,
@@ -182,7 +178,6 @@ private:
static D3D11Hook d3d11hooks;
bool m_HasHooks;
bool m_EnabledHooks;
Hook<PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN> CreateDeviceAndSwapChain;
Hook<PFN_D3D11_CREATE_DEVICE> CreateDevice;
@@ -247,16 +242,13 @@ private:
RDCDEBUG("In replay app");
}
if(m_EnabledHooks)
if(!reading && RenderDoc::Inst().GetCaptureOptions().apiValidation)
{
if(!reading && RenderDoc::Inst().GetCaptureOptions().apiValidation)
{
Flags |= D3D11_CREATE_DEVICE_DEBUG;
}
else
{
Flags &= ~D3D11_CREATE_DEVICE_DEBUG;
}
Flags |= D3D11_CREATE_DEVICE_DEBUG;
}
else
{
Flags &= ~D3D11_CREATE_DEVICE_DEBUG;
}
DXGI_SWAP_CHAIN_DESC swapDesc;
@@ -268,7 +260,7 @@ private:
pUsedSwapDesc = &swapDesc;
}
if(pUsedSwapDesc && m_EnabledHooks && !RenderDoc::Inst().GetCaptureOptions().allowFullscreen)
if(pUsedSwapDesc && !RenderDoc::Inst().GetCaptureOptions().allowFullscreen)
{
pUsedSwapDesc->Windowed = TRUE;
}
@@ -316,9 +308,9 @@ private:
if(suppress && !reading)
{
RDCDEBUG("Application requested not to be hooked.");
RDCLOG("Application requested not to be hooked.");
}
else if(SUCCEEDED(ret) && m_EnabledHooks && ppDevice)
else if(SUCCEEDED(ret) && ppDevice)
{
WrapDevice(ppDevice, DriverType, Flags, SDKVersion, FeatureLevels, pFeatureLevels,
ppImmediateContext, ppSwapChain, pSwapChainDesc);
@@ -430,16 +422,13 @@ private:
RDCDEBUG("In replay app");
}
if(d3d11hooks.m_EnabledHooks)
if(!reading && RenderDoc::Inst().GetCaptureOptions().apiValidation)
{
if(!reading && RenderDoc::Inst().GetCaptureOptions().apiValidation)
{
Flags |= D3D11_CREATE_DEVICE_DEBUG;
}
else
{
Flags &= ~D3D11_CREATE_DEVICE_DEBUG;
}
Flags |= D3D11_CREATE_DEVICE_DEBUG;
}
else
{
Flags &= ~D3D11_CREATE_DEVICE_DEBUG;
}
RDCDEBUG("Calling real createdevice...");
@@ -458,7 +447,7 @@ private:
{
RDCDEBUG("Application requested not to be hooked.");
}
else if(SUCCEEDED(ret) && d3d11hooks.m_EnabledHooks && ppDevice)
else if(SUCCEEDED(ret) && ppDevice)
{
d3d11hooks.WrapDevice(ppDevice, DriverType, Flags, SDKVersion, FeatureLevels, pFeatureLevels,
ppImmediateContext, NULL, NULL);
@@ -491,16 +480,13 @@ private:
RDCDEBUG("In replay app");
}
if(d3d11hooks.m_EnabledHooks)
if(!reading && RenderDoc::Inst().GetCaptureOptions().apiValidation)
{
if(!reading && RenderDoc::Inst().GetCaptureOptions().apiValidation)
{
Flags |= D3D11_CREATE_DEVICE_DEBUG;
}
else
{
Flags &= ~D3D11_CREATE_DEVICE_DEBUG;
}
Flags |= D3D11_CREATE_DEVICE_DEBUG;
}
else
{
Flags &= ~D3D11_CREATE_DEVICE_DEBUG;
}
DXGI_SWAP_CHAIN_DESC swapDesc;
@@ -512,8 +498,7 @@ private:
pUsedSwapDesc = &swapDesc;
}
if(pUsedSwapDesc && d3d11hooks.m_EnabledHooks &&
!RenderDoc::Inst().GetCaptureOptions().allowFullscreen)
if(pUsedSwapDesc && !RenderDoc::Inst().GetCaptureOptions().allowFullscreen)
{
pUsedSwapDesc->Windowed = TRUE;
}
@@ -534,7 +519,7 @@ private:
{
RDCDEBUG("Application requested not to be hooked.");
}
else if(SUCCEEDED(ret) && d3d11hooks.m_EnabledHooks && ppDevice)
else if(SUCCEEDED(ret) && ppDevice)
{
d3d11hooks.WrapDevice(ppDevice, DriverType, Flags, SDKVersion, FeatureLevels, pFeatureLevels,
ppImmediateContext, ppSwapChain, pSwapChainDesc);
+2 -7
View File
@@ -92,7 +92,6 @@ public:
{
LibraryHooks::GetInstance().RegisterHook(DLL_NAME, this);
m_HasHooks = false;
m_EnabledHooks = true;
m_InsideCreate = false;
}
@@ -119,14 +118,11 @@ public:
return false;
m_HasHooks = true;
m_EnabledHooks = true;
return true;
}
void EnableHooks(const char *libName, bool enable) { m_EnabledHooks = enable; }
void OptionsUpdated(const char *libName) {}
bool UseHooks() { return (d3d12hooks.m_HasHooks && d3d12hooks.m_EnabledHooks); }
static HRESULT CreateWrappedDevice(IUnknown *pAdapter, D3D_FEATURE_LEVEL MinimumFeatureLevel,
REFIID riid, void **ppDevice)
{
@@ -137,7 +133,6 @@ private:
static D3D12Hook d3d12hooks;
bool m_HasHooks;
bool m_EnabledHooks;
Hook<PFN_D3D12_GET_DEBUG_INTERFACE> GetDebugInterface;
Hook<PFN_D3D12_CREATE_DEVICE> CreateDevice;
@@ -201,7 +196,7 @@ private:
#if ENABLED(RDOC_DEVEL)
RenderDoc::Inst().IsReplayApp() ||
#endif
(m_EnabledHooks && !reading && RenderDoc::Inst().GetCaptureOptions().apiValidation);
(!reading && RenderDoc::Inst().GetCaptureOptions().apiValidation);
if(EnableDebugLayer)
{
@@ -275,7 +270,7 @@ private:
RDCDEBUG("Called real createdevice... HRESULT: %s", ToStr(ret).c_str());
if(SUCCEEDED(ret) && m_EnabledHooks && ppDevice)
if(SUCCEEDED(ret) && ppDevice)
{
RDCDEBUG("succeeded and hooking.");
-4
View File
@@ -37,7 +37,6 @@ public:
{
LibraryHooks::GetInstance().RegisterHook(DLL_NAME, this);
m_HasHooks = false;
m_EnabledHooks = true;
}
bool CreateHooks(const char *libName)
@@ -50,18 +49,15 @@ public:
return false;
m_HasHooks = true;
m_EnabledHooks = true;
return true;
}
void EnableHooks(const char *libName, bool enable) { m_EnabledHooks = enable; }
void OptionsUpdated(const char *libName) {}
private:
static D3D8Hook d3d8hooks;
bool m_HasHooks;
bool m_EnabledHooks;
Hook<PFN_D3D8_CREATE> Create8;
+2 -22
View File
@@ -46,7 +46,6 @@ public:
{
LibraryHooks::GetInstance().RegisterHook(DLL_NAME, this);
m_HasHooks = false;
m_EnabledHooks = true;
}
bool CreateHooks(const char *libName)
@@ -65,18 +64,15 @@ public:
return false;
m_HasHooks = true;
m_EnabledHooks = true;
return true;
}
void EnableHooks(const char *libName, bool enable) { m_EnabledHooks = enable; }
void OptionsUpdated(const char *libName) {}
private:
static D3D9Hook d3d9hooks;
bool m_HasHooks;
bool m_EnabledHooks;
// D3DPERF api
Hook<PFN_BEGIN_EVENT> PERF_BeginEvent;
@@ -114,26 +110,10 @@ private:
static void WINAPI PERF_SetOptions_hook(DWORD dwOptions)
{
if(dwOptions & 1)
{
RDCDEBUG("Application requested not to be hooked.");
LibraryHooks::GetInstance().EnableHooks(false);
}
else
{
LibraryHooks::GetInstance().EnableHooks(true);
}
}
static DWORD WINAPI PERF_GetStatus_hook()
{
if(d3d9hooks.m_HasHooks && d3d9hooks.m_EnabledHooks)
{
return 1;
}
return 0;
RDCLOG("Application requested not to be hooked via D3DPERF_SetOptions: no longer supported.");
}
static DWORD WINAPI PERF_GetStatus_hook() { return 1; }
static IDirect3D9 *WINAPI Create9_hook(UINT SDKVersion)
{
RDCLOG("App creating d3d9 %x", SDKVersion);
+3 -8
View File
@@ -77,7 +77,6 @@ public:
DXGIHook()
{
LibraryHooks::GetInstance().RegisterHook(DLL_NAME, this);
m_EnabledHooks = true;
m_HasHooks = false;
}
@@ -96,14 +95,11 @@ public:
return false;
m_HasHooks = true;
m_EnabledHooks = true;
return true;
}
void EnableHooks(const char *libName, bool enable) { m_EnabledHooks = enable; }
void OptionsUpdated(const char *libName) {}
bool UseHooks() { return (dxgihooks.m_HasHooks && dxgihooks.m_EnabledHooks); }
static HRESULT CreateWrappedFactory1(REFIID riid, void **ppFactory)
{
if(dxgihooks.m_HasHooks)
@@ -172,7 +168,6 @@ private:
static DXGIHook dxgihooks;
bool m_HasHooks;
bool m_EnabledHooks;
RenderDocAnalysis m_RenderDocAnalysis;
@@ -188,7 +183,7 @@ private:
*ppFactory = NULL;
HRESULT ret = dxgihooks.CreateDXGIFactory()(riid, ppFactory);
if(SUCCEEDED(ret) && dxgihooks.m_EnabledHooks)
if(SUCCEEDED(ret))
RefCountDXGIObject::HandleWrap(riid, ppFactory);
return ret;
@@ -200,7 +195,7 @@ private:
*ppFactory = NULL;
HRESULT ret = dxgihooks.CreateDXGIFactory1()(riid, ppFactory);
if(SUCCEEDED(ret) && dxgihooks.m_EnabledHooks)
if(SUCCEEDED(ret))
RefCountDXGIObject::HandleWrap(riid, ppFactory);
return ret;
@@ -212,7 +207,7 @@ private:
*ppFactory = NULL;
HRESULT ret = dxgihooks.CreateDXGIFactory2()(Flags, riid, ppFactory);
if(SUCCEEDED(ret) && dxgihooks.m_EnabledHooks)
if(SUCCEEDED(ret))
RefCountDXGIObject::HandleWrap(riid, ppFactory);
return ret;
-1
View File
@@ -39,7 +39,6 @@ public:
OpenGLHook() {}
~OpenGLHook() {}
bool CreateHooks(const char *libName) { return false; }
void EnableHooks(const char *libName, bool enable) {}
void OptionsUpdated(const char *libName) {}
virtual GLWindowingData MakeContext(GLWindowingData share)
{
-6
View File
@@ -43,7 +43,6 @@ public:
m_GLDriver = NULL;
m_EnabledHooks = true;
m_PopulatedHooks = false;
}
~EGLHook()
@@ -55,7 +54,6 @@ public:
bool CreateHooks(const char *libName);
void EnableHooks(const char *libName, bool enable) { m_EnabledHooks = enable; }
void OptionsUpdated(const char *libName) {}
void PopulateEGLFunctions()
{
@@ -179,7 +177,6 @@ public:
bool m_PopulatedHooks;
bool m_HasHooks;
bool m_EnabledHooks;
bool SetupHooks()
{
@@ -415,9 +412,6 @@ void EGLHook::libHooked(void *realLib)
bool EGLHook::CreateHooks(const char *libName)
{
if(!m_EnabledHooks)
return false;
if(libName)
{
// register our hooked functions for PLT hooking on android
-6
View File
@@ -55,7 +55,6 @@ public:
m_GLDriver = NULL;
m_EnabledHooks = true;
m_PopulatedHooks = false;
}
~OpenGLHook()
@@ -67,9 +66,6 @@ public:
bool CreateHooks(const char *libName)
{
if(!m_EnabledHooks)
return false;
if(libName)
PosixHookLibrary("libGL.so", &libHooked);
@@ -83,7 +79,6 @@ public:
return true;
}
void EnableHooks(const char *libName, bool enable) { m_EnabledHooks = enable; }
void OptionsUpdated(const char *libName) {}
// see callsite in glXSwapBuffers for explanation of why this is necessary
XID UnwrapGLXWindow(XID id)
@@ -395,7 +390,6 @@ public:
bool m_PopulatedHooks;
bool m_HasHooks;
bool m_EnabledHooks;
bool SetupHooks()
{
-6
View File
@@ -675,7 +675,6 @@ public:
m_HaveContextCreation = false;
m_EnabledHooks = true;
m_PopulatedHooks = false;
m_CreatingContext = false;
@@ -685,9 +684,6 @@ public:
~OpenGLHook() { delete m_GLDriver; }
bool CreateHooks(const char *libName)
{
if(!m_EnabledHooks)
return false;
bool success = SetupHooks();
if(!success)
@@ -698,7 +694,6 @@ public:
return true;
}
void EnableHooks(const char *libName, bool enable) { m_EnabledHooks = enable; }
void OptionsUpdated(const char *libName) {}
static OpenGLHook glhooks;
@@ -1370,7 +1365,6 @@ private:
bool m_PopulatedHooks;
bool m_HasHooks;
bool m_EnabledHooks;
set<HGLRC> m_Contexts;
-9
View File
@@ -60,15 +60,6 @@ class VulkanHook : LibraryHook
return true;
}
void EnableHooks(const char *libName, bool enable)
{
// set the env var to 0 to disable the implicit layer
Process::RegisterEnvironmentModification(EnvironmentModification(
EnvMod::Set, EnvSep::NoSep, "ENABLE_VULKAN_RENDERDOC_CAPTURE", enable ? "1" : "0"));
Process::ApplyEnvironmentModification();
}
void OptionsUpdated(const char *libName)
{
if(RenderDoc::Inst().GetCaptureOptions().apiValidation)
-8
View File
@@ -58,14 +58,6 @@ void LibraryHooks::RemoveHooks()
HOOKS_REMOVE();
}
void LibraryHooks::EnableHooks(bool enable)
{
RDCDEBUG("%s hooks!", enable ? "Enabling" : "Disabling");
for(auto it = m_Hooks.begin(); it != m_Hooks.end(); ++it)
it->second->EnableHooks(it->first, enable);
}
void LibraryHooks::OptionsUpdated()
{
for(auto it = m_Hooks.begin(); it != m_Hooks.end(); ++it)
-2
View File
@@ -83,7 +83,6 @@ private:
struct LibraryHook
{
virtual bool CreateHooks(const char *libName) = 0;
virtual void EnableHooks(const char *libName, bool enable) = 0;
virtual void OptionsUpdated(const char *libName) = 0;
};
@@ -98,7 +97,6 @@ public:
void RegisterHook(const char *libName, LibraryHook *hook);
void CreateHooks();
void OptionsUpdated();
void EnableHooks(bool enable);
void RemoveHooks();
private:
-4
View File
@@ -76,7 +76,6 @@ public:
SysHook()
{
LibraryHooks::GetInstance().RegisterHook(DLL_NAME, this);
m_EnabledHooks = true;
m_HasHooks = false;
m_WSARefCount = 1;
}
@@ -138,18 +137,15 @@ public:
return false;
m_HasHooks = true;
m_EnabledHooks = true;
return true;
}
void EnableHooks(const char *libName, bool enable) { m_EnabledHooks = enable; }
void OptionsUpdated(const char *libName) {}
private:
static SysHook syshooks;
bool m_HasHooks;
bool m_EnabledHooks;
int m_WSARefCount;
uint64_t m_RecurseSlot = 0;