diff --git a/src/d3d12/D3D12_Hooks.cpp b/src/d3d12/D3D12_Hooks.cpp index a90a3886..6d696faa 100644 --- a/src/d3d12/D3D12_Hooks.cpp +++ b/src/d3d12/D3D12_Hooks.cpp @@ -4,7 +4,6 @@ #include "D3D12.h" #include "reverse/Addresses.h" -#include "reverse/RenderContext.h" #include @@ -23,8 +22,6 @@ void* D3D12::CRenderNode_Present_InternalPresent(int32_t* apDeviceIndex, uint8_t { auto& d3d12 = CET::Get().GetD3D12(); - const auto* pContext = RenderContext::GetInstance(); - auto* pSwapChain = pContext->devices[*apDeviceIndex - 1].pSwapChain; if (d3d12.m_initialized) d3d12.Update(); else @@ -34,8 +31,9 @@ void* D3D12::CRenderNode_Present_InternalPresent(int32_t* apDeviceIndex, uint8_t // DX12 does not work on Windows 8 and 8.1 so we should be safe with this check if (IsWindows8OrGreater()) { - d3d12.m_pCommandQueue = pContext->pDirectQueue; - d3d12.m_pdxgiSwapChain = pSwapChain; + const auto& deviceData = RED4ext::GpuApi::GetDeviceData(); + d3d12.m_pCommandQueue = deviceData.directCommandQueue; + d3d12.m_pdxgiSwapChain = deviceData.swapChains.GetData(*apDeviceIndex).swapChain; d3d12.Initialize(); } else diff --git a/src/reverse/Addresses.h b/src/reverse/Addresses.h index 0a377b00..d4ae16e7 100644 --- a/src/reverse/Addresses.h +++ b/src/reverse/Addresses.h @@ -28,7 +28,6 @@ constexpr uint32_t CPhotoMode_SetRecordID = 4241565651UL; // #pragma endregion #pragma region CRenderGlobal -constexpr uint32_t CRenderGlobal_InstanceOffset = 1239944840UL; // constexpr uint32_t CRenderGlobal_Resize = 239671909UL; // GpuApi::ResizeBackbuffer constexpr uint32_t CRenderGlobal_Shutdown = 3192982283UL; // #pragma endregion diff --git a/src/reverse/RenderContext.cpp b/src/reverse/RenderContext.cpp deleted file mode 100644 index 5412dbdc..00000000 --- a/src/reverse/RenderContext.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include - -#include "RenderContext.h" -#include "Addresses.h" - -RenderContext* RenderContext::GetInstance() noexcept -{ - static RED4ext::UniversalRelocPtr s_instance(CyberEngineTweaks::AddressHashes::CRenderGlobal_InstanceOffset); - return *s_instance.GetAddr(); -} diff --git a/src/reverse/RenderContext.h b/src/reverse/RenderContext.h deleted file mode 100644 index 6699c400..00000000 --- a/src/reverse/RenderContext.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -struct RenderContext -{ - struct Device - { - IDXGISwapChain4* pSwapChain; - uint8_t pad8[0xB0 - 0x8]; - }; - - RenderContext() = delete; - ~RenderContext() = delete; - - static RenderContext* GetInstance() noexcept; - - uint8_t pad0[0xC97F38]; - Device devices[0x30]; // Count unknown, it is at least 0x20 - uint8_t pad[0x13BC4D0 - (0xC97F38 + sizeof(devices))]; - ID3D12CommandQueue* pDirectQueue; // 0x13BC4D0 -}; - -static_assert(sizeof(RenderContext::Device) == 0xB0); -static_assert(offsetof(RenderContext, devices) == 0xC97F38); -static_assert(offsetof(RenderContext, pDirectQueue) == 0x13BC4D0); \ No newline at end of file diff --git a/src/stdafx.h b/src/stdafx.h index 2add06f0..bbabd661 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -16,6 +16,7 @@ #include #include "RED4ext/GameApplication.hpp" #include +#include #include #include #include diff --git a/vendor/RED4ext.SDK b/vendor/RED4ext.SDK index c1c08c47..9900dd1f 160000 --- a/vendor/RED4ext.SDK +++ b/vendor/RED4ext.SDK @@ -1 +1 @@ -Subproject commit c1c08c4762d5e05e396c390dce354e1979fcdc48 +Subproject commit 9900dd1f4394f391a91e950172ce8c2e3a0d849c diff --git a/xmake.lua b/xmake.lua index 576aee4a..f50f7e76 100644 --- a/xmake.lua +++ b/xmake.lua @@ -61,6 +61,8 @@ target("RED4ext.SDK") set_group("vendor") add_headerfiles("vendor/RED4ext.SDK/include/**.hpp") add_includedirs("vendor/RED4ext.SDK/include/", { public = true }) + add_headerfiles("vendor/RED4ext.SDK/vendor/D3D12MemAlloc/**.h") + add_includedirs("vendor/RED4ext.SDK/vendor/D3D12MemAlloc/", { public = true }) on_install(function() end) target("cyber_engine_tweaks")