From b342b80267829e10aa415dd17a5b9a72928da45d Mon Sep 17 00:00:00 2001 From: XxJSONDeruloxX Date: Sun, 19 Apr 2026 12:15:34 -0400 Subject: fix: drop nvngx.dll remote binary and all shipping/staging references The nvngx.dll bundled from the OptiScaler v0.7.8-pre0 nightly was the real NVIDIA DLSS 3.10.3 production runtime (47 MB). Inspection of its PE export table showed it is missing 18 NVSDK_NGX_* symbols introduced in DLSS SDK 3.1+ that every modern DLSS-enabled title calls at init: NVSDK_NGX_D3D12_AllocateParameters / DestroyParameters NVSDK_NGX_D3D12_GetCapabilityParameters / GetParameters NVSDK_NGX_D3D12_Init_with_ProjectID / Init_ProjectID NVSDK_NGX_UpdateFeature (plus D3D11 and Vulkan equivalents) OptiScaler 0.9.0-final's own NGX proxy layer exports all of these and handles all NGX interception internally. Shipping the bare NVIDIA DLL alongside it caused export-not-found failures on Proton when any code path bypassed OptiScaler's hooks and resolved directly against the file. The OptiScaler 0.9.0-final release notes also explicitly advise Linux users to delete nvngx.dll when upgrading. Changes: - package.json: remove nvngx.dll from remote_binary download list - main.py SUPPORT_FILES: remove nvngx.dll (no longer staged to fgmod/) - main.py extract_static_optiscaler: remove nvngx.dll from additional_files; add explanatory comment for future reference - main.py check_fgmod_path: remove nvngx.dll from required-file check - fgmod.sh: remove the cp line that deployed nvngx.dll into game dirs nvngx.dll is intentionally kept in INJECTOR_FILENAMES (main.py) and in the fgmod.sh pre-patch rm and fgmod-uninstaller.sh cleanup so that any copy placed by a previous plugin version is swept from game directories on the next patch or uninstall. --- defaults/assets/fgmod.sh | 1 - main.py | 10 ++++++---- package.json | 5 ----- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/defaults/assets/fgmod.sh b/defaults/assets/fgmod.sh index decb981..8d0b77b 100755 --- a/defaults/assets/fgmod.sh +++ b/defaults/assets/fgmod.sh @@ -183,7 +183,6 @@ cp -f "$fgmod_path/amd_fidelityfx_dx12.dll" "$exe_folder_path/" || true cp -f "$fgmod_path/amd_fidelityfx_framegeneration_dx12.dll" "$exe_folder_path/" || true cp -f "$fgmod_path/amd_fidelityfx_upscaler_dx12.dll" "$exe_folder_path/" || true cp -f "$fgmod_path/amd_fidelityfx_vk.dll" "$exe_folder_path/" || true -cp -f "$fgmod_path/nvngx.dll" "$exe_folder_path/" || true # === Nukem FG Mod Files (now in fgmod directory) === cp -f "$fgmod_path/dlssg_to_fsr3_amd_is_better.dll" "$exe_folder_path/" || true diff --git a/main.py b/main.py index fbd50e6..47ec20b 100644 --- a/main.py +++ b/main.py @@ -48,7 +48,6 @@ SUPPORT_FILES = [ "amd_fidelityfx_framegeneration_dx12.dll", "amd_fidelityfx_upscaler_dx12.dll", "amd_fidelityfx_vk.dll", - "nvngx.dll", "dlssg_to_fsr3_amd_is_better.dll", "fakenvapi.dll", "fakenvapi.ini", @@ -346,8 +345,12 @@ class Plugin: # Copy additional individual files from bin directory # Note: v0.9.0-final includes dlssg_to_fsr3_amd_is_better.dll, fakenvapi.dll, and fakenvapi.ini in the 7z # Only copy files that aren't already in the archive (separate remote binaries) + # nvngx.dll is intentionally excluded: it was a stale DLSS 3.10.3 stub from a + # pre-0.9 nightly that is missing DLSS 3.1+ exports (AllocateParameters, + # GetCapabilityParameters, Init_with_ProjectID, etc.) present in OptiScaler + # 0.9.0-final's own NGX proxy layer. OptiScaler handles all NGX interception + # internally; the bare nvidia DLL caused export-not-found failures on Proton. additional_files = [ - "nvngx.dll", # nvidia dll from streamline sdk, not bundled in opti "OptiPatcher_v0.30.asi" # ASI plugin for OptiScaler spoofing ] @@ -511,8 +514,7 @@ class Plugin: "OptiScaler.ini", "dlssg_to_fsr3_amd_is_better.dll", "fakenvapi.dll", # v0.9.0-final includes fakenvapi.dll in archive - "fakenvapi.ini", - "nvngx.dll", + "fakenvapi.ini", "amd_fidelityfx_dx12.dll", "amd_fidelityfx_framegeneration_dx12.dll", "amd_fidelityfx_upscaler_dx12.dll", diff --git a/package.json b/package.json index 618c88c..b48d9cd 100644 --- a/package.json +++ b/package.json @@ -66,11 +66,6 @@ "sha256hash": "c4afb71d179894ac68874d48295e101fedb0dd8e10bcec29163760465706267c", "url": "https://github.com/optiscaler/OptiPatcher/releases/download/v0.30/OptiPatcher_v0.30.asi", "name": "OptiPatcher_v0.30.asi" - }, - { - "sha256hash": "1d75e7c1f37f966517f625aa3cc9602ff89d42ad2a7fcbdfa5fc91dab4674149", - "url": "https://github.com/xXJSONDeruloXx/OptiScaler-Bleeding-Edge/releases/download/OptiScaler_v0.7.8-pre0_20250816_unsigned_dll-13b2b5d0/nvngx.dll", - "name": "nvngx.dll" } ] } -- cgit v1.2.3 From 2371546f12cdac39a484e4d9c53a4b9165b0de0a Mon Sep 17 00:00:00 2001 From: XxJSONDeruloxX Date: Sun, 19 Apr 2026 12:20:09 -0400 Subject: bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b48d9cd..97167c8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "decky-framegen", - "version": "0.15.1", + "version": "0.15.2", "description": "This plugin installs and manages OptiScaler, a tool that enhances upscaling and enables frame generation in a range of DirectX 12 games.", "type": "module", "scripts": { -- cgit v1.2.3 From fdcfd1035aeee76da7efca00fd1aca1898d48ef1 Mon Sep 17 00:00:00 2001 From: XxJSONDeruloxX Date: Sun, 19 Apr 2026 12:25:10 -0400 Subject: fix: correct OptiScaler 0.9.0-final download URL and sha256 The release tag is v0.9.0, not v0.9. The previous commit (7fb070e) updated the sha256 to match the 9-byte 404 response body returned by the /v0.9/ URL rather than the actual archive, so the Decky CLI was validating a 'Not Found' stub and bundling it. This caused a completely non-functional plugin that silently failed to extract OptiScaler at install time. Fix: - URL: .../v0.9/... -> .../v0.9.0/... - hash: 0019dfc4... (sha256 of 404 body) -> a988ce2c... (sha256 of real archive) --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 97167c8..1075322 100644 --- a/package.json +++ b/package.json @@ -53,8 +53,8 @@ "remote_binary": [ { - "sha256hash": "0019dfc4b32d63c1392aa264aed2253c1e0c2fb09216f8e2cc269bbfb8bb49b5", - "url": "https://github.com/optiscaler/OptiScaler/releases/download/v0.9/Optiscaler_0.9.0-final.20260401._AF.7z", + "sha256hash": "a988ce2c0a86bba58a6313659d1ed2ab78f994dbdfab246394a2e4293ac68010", + "url": "https://github.com/optiscaler/OptiScaler/releases/download/v0.9.0/Optiscaler_0.9.0-final.20260401._AF.7z", "name": "Optiscaler_0.9.0-final.20260401._AF.7z" }, { -- cgit v1.2.3