rename some methods

fix gow ragnarok overlay menu issue with rtss
add logs
This commit is contained in:
cdozdil
2024-09-20 00:31:47 +03:00
parent 6326d1435e
commit b076a2eca2
+102 -65
View File
@@ -94,10 +94,10 @@ static void RenderImGui_DX12(IDXGISwapChain* pSwapChain);
static void DeatachAllHooks();
static void hkCreateSampler(ID3D12Device* device, const D3D12_SAMPLER_DESC* pDesc, D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
static HRESULT hkCreateSamplerState(ID3D11Device* This, const D3D11_SAMPLER_DESC* pSamplerDesc, ID3D11SamplerState** ppSamplerState);
static HRESULT detEnumAdapters(IDXGIFactory* This, UINT Adapter, IUnknown** ppAdapter);
static HRESULT detEnumAdapters1(IDXGIFactory1* This, UINT Adapter, IUnknown** ppAdapter);
static HRESULT detEnumAdapterByLuid(IDXGIFactory4* This, LUID AdapterLuid, REFIID riid, IUnknown** ppvAdapter);
static HRESULT detEnumAdapterByGpuPreference(IDXGIFactory6* This, UINT Adapter, DXGI_GPU_PREFERENCE GpuPreference, REFIID riid, IUnknown** ppvAdapter);
static HRESULT hkEnumAdapters(IDXGIFactory* This, UINT Adapter, IUnknown** ppAdapter);
static HRESULT hkEnumAdapters1(IDXGIFactory1* This, UINT Adapter, IUnknown** ppAdapter);
static HRESULT hkEnumAdapterByLuid(IDXGIFactory4* This, LUID AdapterLuid, REFIID riid, IUnknown** ppvAdapter);
static HRESULT hkEnumAdapterByGpuPreference(IDXGIFactory6* This, UINT Adapter, DXGI_GPU_PREFERENCE GpuPreference, REFIID riid, IUnknown** ppvAdapter);
static int GetCorrectDXGIFormat(int eCurrentFormat)
{
@@ -157,6 +157,8 @@ static void CleanupRenderTargetDx12(bool clearQueue)
if (!_isInited || !_dx12Device)
return;
LOG_FUNC();
for (UINT i = 0; i < NUM_BACK_BUFFERS; ++i)
{
if (g_mainRenderTargetResource[i])
@@ -267,8 +269,7 @@ static void CleanupRenderTargetDx11(bool shutDown)
static void CleanupRenderTarget(bool clearQueue, HWND hWnd)
{
if (hWnd != Util::GetProcessWindow())
return;
LOG_FUNC();
if (clearQueue)
currentSCCommandQueue = nullptr;
@@ -279,16 +280,30 @@ static void CleanupRenderTarget(bool clearQueue, HWND hWnd)
CleanupRenderTargetDx12(clearQueue);
// Releasing RTSS D3D11on12 device
if (clearQueue && GetModuleHandle(L"RTSSHooks64.dll") != nullptr && d3d11on12Device != nullptr)
if (clearQueue && d3d11on12Device != nullptr && GetModuleHandle(L"RTSSHooks64.dll") != nullptr)
{
LOG_DEBUG("Releasing D3d11on12 device");
d3d11on12Device->Release();
d3d11on12Device = nullptr;
}
}
static HRESULT Present(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags, const DXGI_PRESENT_PARAMETERS* pPresentParameters, IUnknown* pDevice, HWND hWnd)
{
LOG_FUNC();
HRESULT presentResult;
if (hWnd != Util::GetProcessWindow())
{
if (pPresentParameters == nullptr)
presentResult = pSwapChain->Present(SyncInterval, Flags);
else
presentResult = ((IDXGISwapChain1*)pSwapChain)->Present1(SyncInterval, Flags, pPresentParameters);
LOG_FUNC_RESULT(presentResult);
return presentResult;
}
ID3D12CommandQueue* cq = nullptr;
ID3D11Device* device = nullptr;
ID3D12Device* device12 = nullptr;
@@ -296,22 +311,48 @@ static HRESULT Present(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags
// try to obtain directx objects and find the path
if (pDevice->QueryInterface(IID_PPV_ARGS(&device)) == S_OK)
{
LOG_DEBUG("_dx11Device");
if (!_dx11Device)
LOG_DEBUG("D3D11Device captured");
_dx11Device = true;
}
else if (pDevice->QueryInterface(IID_PPV_ARGS(&cq)) == S_OK)
{
LOG_DEBUG("dx12 queue");
if (!_dx12Device)
LOG_DEBUG("D3D12CommandQueue captured");
currentSCCommandQueue = pDevice;
if (cq->GetDevice(IID_PPV_ARGS(&device12)) == S_OK)
{
LOG_DEBUG("_dx12Device");
if (!_dx12Device)
LOG_DEBUG("D3D12Device captured");
_dx12Device = true;
}
}
// DXVK check, it's here because of upscaler time calculations
if (Config::Instance()->IsRunningOnDXVK)
{
if (cq != nullptr)
cq->Release();
if (device != nullptr)
device->Release();
if (device12 != nullptr)
device12->Release();
if (pPresentParameters == nullptr)
presentResult = pSwapChain->Present(SyncInterval, Flags);
else
presentResult = ((IDXGISwapChain1*)pSwapChain)->Present1(SyncInterval, Flags, pPresentParameters);
LOG_FUNC_RESULT(presentResult);
return presentResult;
}
// Upscaler GPU time computation
if (ImGuiOverlayDx::dx12UpscaleTrig && ImGuiOverlayDx::readbackBuffer != nullptr && ImGuiOverlayDx::queryHeap != nullptr && cq != nullptr)
{
@@ -369,29 +410,6 @@ static HRESULT Present(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags
ImGuiOverlayDx::currentFrameIndex = (ImGuiOverlayDx::currentFrameIndex + 1) % ImGuiOverlayDx::QUERY_BUFFER_COUNT;
}
// DXVK & process hWnd check
if (Config::Instance()->IsRunningOnDXVK || hWnd != Util::GetProcessWindow())
{
if (cq != nullptr)
cq->Release();
if (device != nullptr)
device->Release();
if (device12 != nullptr)
device12->Release();
if (pPresentParameters == nullptr)
{
return pSwapChain->Present(SyncInterval, Flags);
}
else
{
auto sc1 = (IDXGISwapChain1*)pSwapChain;
return sc1->Present1(SyncInterval, Flags, pPresentParameters);
}
}
// Process window handle changed, update base
if (ImGuiOverlayBase::Handle() != hWnd)
{
@@ -401,6 +419,8 @@ static HRESULT Present(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags
ImGuiOverlayBase::Shutdown();
ImGuiOverlayBase::Init(hWnd);
_isInited = false;
}
// Init
@@ -469,16 +489,10 @@ static HRESULT Present(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags
RenderImGui_DX12(pSwapChain);
// swapchain present
HRESULT presentResult;
if (pPresentParameters == nullptr)
{
presentResult = pSwapChain->Present(SyncInterval, Flags);
}
else
{
auto sc1 = (IDXGISwapChain1*)pSwapChain;
presentResult = sc1->Present1(SyncInterval, Flags, pPresentParameters);
}
presentResult = ((IDXGISwapChain1*)pSwapChain)->Present1(SyncInterval, Flags, pPresentParameters);
// dx11 multi thread safety
if (_dx11Device && dx11MultiThread != nullptr)
@@ -521,11 +535,13 @@ static void CheckAdapter(IUnknown* unkAdapter)
void* dxvkAdapter = nullptr;
if (adapterOk && adapter->QueryInterface(guid, &dxvkAdapter) == S_OK)
{
Config::Instance()->IsRunningOnDXVK = dxvkAdapter != nullptr;
((IDXGIAdapter*)dxvkAdapter)->Release();
}
adapter->Release();
if (adapterOk)
adapter->Release();
}
static void AttachToFactory(IUnknown* unkFactory)
@@ -540,7 +556,7 @@ static void AttachToFactory(IUnknown* unkFactory)
ptrEnumAdapters = (PFN_EnumAdapters2)pVTable[7];
DetourAttach(&(PVOID&)ptrEnumAdapters, detEnumAdapters);
DetourAttach(&(PVOID&)ptrEnumAdapters, hkEnumAdapters);
DetourTransactionCommit();
@@ -555,7 +571,7 @@ static void AttachToFactory(IUnknown* unkFactory)
ptrEnumAdapters1 = (PFN_EnumAdapters12)pVTable[12];
DetourAttach(&(PVOID&)ptrEnumAdapters1, detEnumAdapters1);
DetourAttach(&(PVOID&)ptrEnumAdapters1, hkEnumAdapters1);
DetourTransactionCommit();
@@ -570,7 +586,7 @@ static void AttachToFactory(IUnknown* unkFactory)
ptrEnumAdapterByLuid = (PFN_EnumAdapterByLuid2)pVTable[26];
DetourAttach(&(PVOID&)ptrEnumAdapterByLuid, detEnumAdapterByLuid);
DetourAttach(&(PVOID&)ptrEnumAdapterByLuid, hkEnumAdapterByLuid);
DetourTransactionCommit();
@@ -585,7 +601,7 @@ static void AttachToFactory(IUnknown* unkFactory)
ptrEnumAdapterByGpuPreference = (PFN_EnumAdapterByGpuPreference2)pVTable[29];
DetourAttach(&(PVOID&)ptrEnumAdapterByGpuPreference, detEnumAdapterByGpuPreference);
DetourAttach(&(PVOID&)ptrEnumAdapterByGpuPreference, hkEnumAdapterByGpuPreference);
DetourTransactionCommit();
@@ -635,10 +651,15 @@ static HRESULT hkCreateSwapChain(IDXGIFactory* pFactory, IUnknown* pDevice, DXGI
}
}
Config::Instance()->ScreenWidth = pDesc->BufferDesc.Width;
Config::Instance()->ScreenHeight = pDesc->BufferDesc.Height;
LOG_DEBUG("Width: {0}, Height: {1}, Format: {2:X}, Count: {3}, Windowed: {4}", pDesc->BufferDesc.Width, pDesc->BufferDesc.Height, (UINT)pDesc->BufferDesc.Format, pDesc->BufferCount, pDesc->Windowed);
LOG_DEBUG("created new swapchain: {0:X}, hWnd", (UINT64)*ppSwapChain, (UINT64)pDesc->OutputWindow);
if (Util::GetProcessWindow() == pDesc->OutputWindow)
{
Config::Instance()->ScreenWidth = pDesc->BufferDesc.Width;
Config::Instance()->ScreenHeight = pDesc->BufferDesc.Height;
}
LOG_DEBUG("created new swapchain: {0:X}, hWnd: {1:X}", (UINT64)*ppSwapChain, (UINT64)pDesc->OutputWindow);
*ppSwapChain = new WrappedIDXGISwapChain4(real == nullptr ? *ppSwapChain : real, pDevice, pDesc->OutputWindow, Present, CleanupRenderTarget);
LOG_DEBUG("created new WrappedIDXGISwapChain4: {0:X}, pDevice: {1:X}", (UINT64)*ppSwapChain, (UINT64)pDevice);
}
@@ -647,7 +668,7 @@ static HRESULT hkCreateSwapChain(IDXGIFactory* pFactory, IUnknown* pDevice, DXGI
}
static HRESULT hkCreateSwapChainForHwnd(IDXGIFactory* pCommandQueue, IUnknown* pDevice, HWND hWnd, const DXGI_SWAP_CHAIN_DESC1* pDesc,
const DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pFullscreenDesc, IDXGIOutput* pRestrictToOutput, IDXGISwapChain1** ppSwapChain)
const DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pFullscreenDesc, IDXGIOutput* pRestrictToOutput, IDXGISwapChain1** ppSwapChain)
{
LOG_FUNC();
@@ -690,10 +711,15 @@ static HRESULT hkCreateSwapChainForHwnd(IDXGIFactory* pCommandQueue, IUnknown* p
}
}
Config::Instance()->ScreenWidth = pDesc->Width;
Config::Instance()->ScreenHeight = pDesc->Height;
LOG_DEBUG("Width: {0}, Height: {1}, Format: {2:X}, Count: {3}, Flags: {4:X}", pDesc->Width, pDesc->Height, (UINT)pDesc->Format, pDesc->BufferCount, pDesc->Flags);
LOG_DEBUG("created new swapchain: {0:X}", (UINT64)*ppSwapChain);
if (Util::GetProcessWindow() == hWnd)
{
Config::Instance()->ScreenWidth = pDesc->Width;
Config::Instance()->ScreenHeight = pDesc->Height;
}
LOG_DEBUG("created new swapchain: {0:X}, hWnd: {1:X}", (UINT64)*ppSwapChain, (UINT64)hWnd);
*ppSwapChain = new WrappedIDXGISwapChain4(real == nullptr ? *ppSwapChain : real, pDevice, hWnd, Present, CleanupRenderTarget);
LOG_DEBUG("created new WrappedIDXGISwapChain4: {0:X}, pDevice: {1:X}", (UINT64)*ppSwapChain, (UINT64)pDevice);
}
@@ -824,7 +850,7 @@ static HRESULT hkCreateDXGIFactory2(UINT Flags, REFIID riid, IDXGIFactory2** ppF
return result;
}
static HRESULT detEnumAdapterByGpuPreference(IDXGIFactory6* This, UINT Adapter, DXGI_GPU_PREFERENCE GpuPreference, REFIID riid, IUnknown** ppvAdapter)
static HRESULT hkEnumAdapterByGpuPreference(IDXGIFactory6* This, UINT Adapter, DXGI_GPU_PREFERENCE GpuPreference, REFIID riid, IUnknown** ppvAdapter)
{
auto result = ptrEnumAdapterByGpuPreference(This, Adapter, GpuPreference, riid, ppvAdapter);
@@ -834,7 +860,7 @@ static HRESULT detEnumAdapterByGpuPreference(IDXGIFactory6* This, UINT Adapter,
return result;
}
static HRESULT detEnumAdapterByLuid(IDXGIFactory4* This, LUID AdapterLuid, REFIID riid, IUnknown** ppvAdapter)
static HRESULT hkEnumAdapterByLuid(IDXGIFactory4* This, LUID AdapterLuid, REFIID riid, IUnknown** ppvAdapter)
{
auto result = ptrEnumAdapterByLuid(This, AdapterLuid, riid, ppvAdapter);
@@ -844,7 +870,7 @@ static HRESULT detEnumAdapterByLuid(IDXGIFactory4* This, LUID AdapterLuid, REFII
return result;
}
static HRESULT detEnumAdapters1(IDXGIFactory1* This, UINT Adapter, IUnknown** ppAdapter)
static HRESULT hkEnumAdapters1(IDXGIFactory1* This, UINT Adapter, IUnknown** ppAdapter)
{
auto result = ptrEnumAdapters1(This, Adapter, ppAdapter);
@@ -854,7 +880,7 @@ static HRESULT detEnumAdapters1(IDXGIFactory1* This, UINT Adapter, IUnknown** pp
return result;
}
static HRESULT detEnumAdapters(IDXGIFactory* This, UINT Adapter, IUnknown** ppAdapter)
static HRESULT hkEnumAdapters(IDXGIFactory* This, UINT Adapter, IUnknown** ppAdapter)
{
auto result = ptrEnumAdapters(This, Adapter, ppAdapter);
@@ -917,7 +943,7 @@ static void HookToDevice(ID3D11Device* InDevice)
}
static HRESULT hkD3D11On12CreateDevice(IUnknown* pDevice, UINT Flags, D3D_FEATURE_LEVEL* pFeatureLevels, UINT FeatureLevels, IUnknown** ppCommandQueues,
UINT NumQueues, UINT NodeMask, ID3D11Device** ppDevice, ID3D11DeviceContext** ppImmediateContext, D3D_FEATURE_LEVEL* pChosenFeatureLevel)
UINT NumQueues, UINT NodeMask, ID3D11Device** ppDevice, ID3D11DeviceContext** ppImmediateContext, D3D_FEATURE_LEVEL* pChosenFeatureLevel)
{
LOG_FUNC();
@@ -936,8 +962,6 @@ static HRESULT hkD3D11On12CreateDevice(IUnknown* pDevice, UINT Flags, D3D_FEATUR
{
LOG_INFO("Device captured, CommandQueue: {0:X}", (UINT64)*ppCommandQueues);
d3d11on12Device = *ppDevice;
d3d11on12Device->AddRef();
HookToDevice(d3d11on12Device);
}
@@ -947,7 +971,7 @@ static HRESULT hkD3D11On12CreateDevice(IUnknown* pDevice, UINT Flags, D3D_FEATUR
}
static HRESULT hkD3D11CreateDevice(IDXGIAdapter* pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, CONST D3D_FEATURE_LEVEL* pFeatureLevels,
UINT FeatureLevels, UINT SDKVersion, ID3D11Device** ppDevice, D3D_FEATURE_LEVEL* pFeatureLevel, ID3D11DeviceContext** ppImmediateContext)
UINT FeatureLevels, UINT SDKVersion, ID3D11Device** ppDevice, D3D_FEATURE_LEVEL* pFeatureLevel, ID3D11DeviceContext** ppImmediateContext)
{
LOG_FUNC();
@@ -1004,10 +1028,23 @@ static HRESULT hkD3D11CreateDeviceAndSwapChain(IDXGIAdapter* pAdapter, D3D_DRIVE
}
}
Config::Instance()->ScreenWidth = pSwapChainDesc->BufferDesc.Width;
Config::Instance()->ScreenHeight = pSwapChainDesc->BufferDesc.Height;
if (pSwapChainDesc != nullptr)
{
LOG_DEBUG("Width: {0}, Height: {1}, Format: {2:X}, Count: {3}, Windowed: {4}", pSwapChainDesc->BufferDesc.Width, pSwapChainDesc->BufferDesc.Height, (UINT)pSwapChainDesc->BufferDesc.Format, pSwapChainDesc->BufferCount, pSwapChainDesc->Windowed);
if (Util::GetProcessWindow() == pSwapChainDesc->OutputWindow)
{
Config::Instance()->ScreenWidth = pSwapChainDesc->BufferDesc.Width;
Config::Instance()->ScreenHeight = pSwapChainDesc->BufferDesc.Height;
}
LOG_DEBUG("created new swapchain: {0:X}, hWnd: {1:X}", (UINT64)buffer, (UINT64)pSwapChainDesc->OutputWindow);
}
else
{
LOG_DEBUG("created new swapchain: {0:X}", (UINT64)buffer);
}
LOG_DEBUG("created new swapchain: {0:X}, hWnd", (UINT64)buffer, (UINT64)pSwapChainDesc->OutputWindow);
*ppSwapChain = new WrappedIDXGISwapChain4(real == nullptr ? buffer : real, d3d11Device, pSwapChainDesc->OutputWindow, Present, CleanupRenderTarget);
LOG_DEBUG("created new WrappedIDXGISwapChain4: {0:X}, pDevice: {1:X}", (UINT64)buffer, (UINT64)d3d11Device);
}
@@ -1129,7 +1166,7 @@ static HRESULT hkCreateSamplerState(ID3D11Device* This, const D3D11_SAMPLER_DESC
}
newDesc.MipLODBias = pSamplerDesc->MipLODBias;
if (newDesc.MipLODBias < 0.0f)
{
if (Config::Instance()->MipmapBiasOverride.has_value())