From 93af3c19e42aa1f05989b7070b6e63dc1521afd4 Mon Sep 17 00:00:00 2001 From: FakeMichau <49685661+FakeMichau@users.noreply.github.com> Date: Fri, 6 Sep 2024 01:36:16 +0200 Subject: [PATCH] Add DX11 and antilag class --- OptiScaler/nvapi/fakenvapi/antilag.h | 43 ++++++++++++++++++++++++++++ OptiScaler/nvapi/fakenvapi/nvapi.cpp | 18 +++--------- OptiScaler/nvapi/fakenvapi/nvapi.h | 4 +-- 3 files changed, 49 insertions(+), 16 deletions(-) create mode 100644 OptiScaler/nvapi/fakenvapi/antilag.h diff --git a/OptiScaler/nvapi/fakenvapi/antilag.h b/OptiScaler/nvapi/fakenvapi/antilag.h new file mode 100644 index 00000000..6e1854fd --- /dev/null +++ b/OptiScaler/nvapi/fakenvapi/antilag.h @@ -0,0 +1,43 @@ +#pragma once + +#include +#if defined __MINGW64__ || defined __MINGW32__ +#include "../include/d3d12.h" +#else +#include +#endif + +#include "../include/ffx_antilag2_dx12.h" +#include "../include/ffx_antilag2_dx11.h" + +class AntiLag { + AMD::AntiLag2DX12::Context context_dx12 = {}; + AMD::AntiLag2DX11::Context context_dx11 = {}; + + void init_dx12(ID3D12Device *pDevice) { + auto res = AMD::AntiLag2DX12::Initialize(&context_dx12, pDevice); + } + void init_dx11() { + auto res = AMD::AntiLag2DX11::Initialize(&context_dx11); + } + +public: + void init(IUnknown *pDevice) { + if (!context_dx12.m_pAntiLagAPI && !context_dx11.m_pAntiLagAPI) { + ID3D12Device* device = nullptr; + HRESULT hr = pDevice->QueryInterface(__uuidof(ID3D12Device), reinterpret_cast(&device)); + if (hr == S_OK) { + init_dx12(device); + } else { + init_dx11(); + } + } + } + + void update() { + if (context_dx12.m_pAntiLagAPI) + AMD::AntiLag2DX12::Update(&context_dx12, true, 0); + else + AMD::AntiLag2DX11::Update(&context_dx11, true, 0); + } +}; \ No newline at end of file diff --git a/OptiScaler/nvapi/fakenvapi/nvapi.cpp b/OptiScaler/nvapi/fakenvapi/nvapi.cpp index 6d0e0332..b6348713 100755 --- a/OptiScaler/nvapi/fakenvapi/nvapi.cpp +++ b/OptiScaler/nvapi/fakenvapi/nvapi.cpp @@ -310,14 +310,9 @@ namespace nvd { if (!pDev) return Error(); #if _MSC_VER - if (!al2_context.m_pAntiLagAPI) { - ID3D12Device* device = nullptr; - HRESULT hr = pDev->QueryInterface(__uuidof(ID3D12Device), reinterpret_cast(&device)); - auto res = AMD::AntiLag2DX12::Initialize(&al2_context, device); - log(std::format("AL2 Init: {}", S_OK == res)); - } + antilag_ctx.init(pDev); if (pSetLatencyMarkerParams->markerType == SIMULATION_START) { - AMD::AntiLag2DX12::Update(&al2_context, true, 0); + antilag_ctx.update(); } #endif return Ok(); @@ -327,13 +322,8 @@ namespace nvd { if (!pDevice) return Error(); #if _MSC_VER - if (!al2_context.m_pAntiLagAPI) { - ID3D12Device* device = nullptr; - HRESULT hr = pDevice->QueryInterface(__uuidof(ID3D12Device), reinterpret_cast(&device)); - auto res = AMD::AntiLag2DX12::Initialize(&al2_context, device); - log(std::format("AL2 Init: {}", S_OK == res)); - } - AMD::AntiLag2DX12::Update(&al2_context, true, 0); + antilag_ctx.init(pDevice); + antilag_ctx.update(); #endif return Ok(); } diff --git a/OptiScaler/nvapi/fakenvapi/nvapi.h b/OptiScaler/nvapi/fakenvapi/nvapi.h index e51a3f39..47695ef4 100755 --- a/OptiScaler/nvapi/fakenvapi/nvapi.h +++ b/OptiScaler/nvapi/fakenvapi/nvapi.h @@ -12,7 +12,7 @@ #include #if _MSC_VER -#include "../include/ffx_antilag2_dx12.h" +#include "antilag.h" #endif #include "util.h" @@ -31,7 +31,7 @@ namespace nvd { static UINT revisionId; #if _MSC_VER - static AMD::AntiLag2DX12::Context al2_context = {}; + static AntiLag antilag_ctx; #endif NvAPI_Status __cdecl NvAPI_Initialize();