DX11 + Luma (FF7 Remake): crash in Dx11wDx12 texture copy since 0.9.3 — regression from 0.9.2a #1225

Open
opened 2026-10-18 21:54:06 +00:00 by Dio94 · 2 comments
Dio94 commented 2026-10-18 21:54:06 +00:00 (Migrated from github.com)

Game name and version:

FINAL FANTASY VII REMAKE INTERGRADE (Steam), DX11 mode (-dx11 launch option, required by Luma)

Mods and mod versions used

  • OptiScaler v0.9.3-final (51e9fed) → crashes. Also tested: 0.9.4-final (7534ad0) → crashes; 0.9.1-final (e37180c) and 0.9.2a-final (d675411) → upscaling works
  • Luma for FF7 Remake v2.6 (Nexus mod 1974), loaded by ReShade 6.8.0.1
  • FFVIIHook (xinput1_3.dll), used to load Engine.ini with dynamic resolution, so the DLSS input is ~1707x960 → 2560x1440
  • Ultimate ASI Loader x64 as winmm.dll, loading ReShade.asi (Luma's dxgi.dll renamed) + OptiScaler.asi
  • No fakenvapi, no Nukem's (tested both, removing them changed nothing)

GPU

RTX 3070 (driver 617.14)

OS

Win 11

Used automated or manual install?

  • Automated
  • Manual

If on AMD/Intel and Automated, used DLSS inputs?

  • Yes
  • No

Upscaler inputs: DLSS, selected in Luma's menu (the game has no native upscaler, Luma replaces TAA). OptiScaler overlay shows D3D11 | FSR3 w/Dx12 3.1.5 | Input: DLSS | Spoof: Off on 0.9.1/0.9.2a.

Did you check the Wiki and Compatibility List?

  • Yes
  • No

The FF7 Remake Intergrade wiki page (tested on 0.9.1, RX 9070XT) matches what works for me on 0.9.1. Method 3 (Luma dxgi.dll + Opti as winmm.dll) made both Luma upscalers fail to init on my setup. Method 2 (ASI Loader) works.

Please describe the issue and steps to reproduce it

Summary: regression since 0.9.3. With Luma's DLSS input on DX11, 0.9.1/0.9.2a upscale fine but OptiFG is "Unsupported API". 0.9.3/0.9.4 expose OptiFG on DX11, but crash as soon as Luma's DLSS is enabled, before any FG is turned on. 0.9.3's changelog lists "Some Luma mod behaviour changes".

Version Upscaling with Luma DLSS input OptiFG on DX11
0.9.1 works Unsupported API
0.9.2a works Unsupported API
0.9.3 crash available
0.9.4 crash available

Same ini for all: Dx11Upscaler=fsr31_12, FGInput=nofg, UseDelayedInit=true, AutoExposure=true, DisableReactiveMask=true, Dxgi=false, LoadReshade=false.

Steps:

  1. Launch with -dx11, Luma Super Resolution = FSR 3 (works), load a save
  2. Switch Luma Super Resolution to DLSS
  3. Instant crash on 0.9.3/0.9.4: EXCEPTION_ACCESS_VIOLATION reading address 0x00000000 in OptiScaler.asi, called from Luma's addon, RHIThread

Trace log always ends at:

FSR31FeatureDx11on12::Evaluate Input Resolution: 1536x864
IFeature_Dx11wDx12::ProcessDx11Textures Color exist..

In one 0.9.4 run it went one step further:

IFeature_Dx11wDx12::CopyTextureFrom11To12 CreateTexture2D error: -7785fffb (DXGI_ERROR_DEVICE_REMOVED)
FSR31FeatureDx11on12::Evaluate Can't process Dx11 textures!

Also tried on 0.9.4 (no change):

  • CreateD3D12DeviceForLuma true/false, UseDelayedInit=true, DontUseNTShared=false
  • Dx11Upscaler=dlss → device removed (0x887A0005)
  • Dx11Upscaler=fsr31 (native DX11) → device removed after the first Evaluate when AutoExposure isn't forced (Luma
#### Game name and version: FINAL FANTASY VII REMAKE INTERGRADE (Steam), DX11 mode (`-dx11` launch option, required by Luma) #### Mods and mod versions used - OptiScaler v0.9.3-final (51e9fed) → crashes. Also tested: 0.9.4-final (7534ad0) → crashes; 0.9.1-final (e37180c) and 0.9.2a-final (d675411) → upscaling works - Luma for FF7 Remake v2.6 (Nexus mod 1974), loaded by ReShade 6.8.0.1 - FFVIIHook (`xinput1_3.dll`), used to load `Engine.ini` with dynamic resolution, so the DLSS input is ~1707x960 → 2560x1440 - Ultimate ASI Loader x64 as `winmm.dll`, loading `ReShade.asi` (Luma's dxgi.dll renamed) + `OptiScaler.asi` - No fakenvapi, no Nukem's (tested both, removing them changed nothing) #### GPU RTX 3070 (driver 617.14) #### OS Win 11 #### Used automated or manual install? - [ ] Automated - [x] Manual If on AMD/Intel and Automated, **used DLSS inputs**? - [ ] Yes - [ ] No Upscaler inputs: **DLSS**, selected in Luma's menu (the game has no native upscaler, Luma replaces TAA). OptiScaler overlay shows `D3D11 | FSR3 w/Dx12 3.1.5 | Input: DLSS | Spoof: Off` on 0.9.1/0.9.2a. #### Did you check the [Wiki](https://github.com/optiscaler/OptiScaler/wiki) and [Compatibility List](https://github.com/optiscaler/OptiScaler/wiki/Compatibility-List)? - [x] Yes - [ ] No The FF7 Remake Intergrade wiki page (tested on 0.9.1, RX 9070XT) matches what works for me on 0.9.1. Method 3 (Luma `dxgi.dll` + Opti as `winmm.dll`) made both Luma upscalers fail to init on my setup. Method 2 (ASI Loader) works. #### Please describe the issue and steps to reproduce it **Summary:** regression since 0.9.3. With Luma's DLSS input on DX11, 0.9.1/0.9.2a upscale fine but OptiFG is "Unsupported API". 0.9.3/0.9.4 expose OptiFG on DX11, but crash as soon as Luma's DLSS is enabled, before any FG is turned on. 0.9.3's changelog lists "Some Luma mod behaviour changes". | Version | Upscaling with Luma DLSS input | OptiFG on DX11 | |---|---|---| | 0.9.1 | works | Unsupported API | | 0.9.2a | works | Unsupported API | | 0.9.3 | crash | available | | 0.9.4 | crash | available | Same ini for all: `Dx11Upscaler=fsr31_12`, `FGInput=nofg`, `UseDelayedInit=true`, `AutoExposure=true`, `DisableReactiveMask=true`, `Dxgi=false`, `LoadReshade=false`. **Steps:** 1. Launch with `-dx11`, Luma Super Resolution = FSR 3 (works), load a save 2. Switch Luma Super Resolution to DLSS 3. Instant crash on 0.9.3/0.9.4: `EXCEPTION_ACCESS_VIOLATION reading address 0x00000000` in OptiScaler.asi, called from Luma's addon, RHIThread Trace log always ends at: ``` FSR31FeatureDx11on12::Evaluate Input Resolution: 1536x864 IFeature_Dx11wDx12::ProcessDx11Textures Color exist.. ``` In one 0.9.4 run it went one step further: ``` IFeature_Dx11wDx12::CopyTextureFrom11To12 CreateTexture2D error: -7785fffb (DXGI_ERROR_DEVICE_REMOVED) FSR31FeatureDx11on12::Evaluate Can't process Dx11 textures! ``` **Also tried on 0.9.4 (no change):** - `CreateD3D12DeviceForLuma` true/false, `UseDelayedInit=true`, `DontUseNTShared=false` - `Dx11Upscaler=dlss` → device removed (0x887A0005) - `Dx11Upscaler=fsr31` (native DX11) → device removed after the first Evaluate when AutoExposure isn't forced (Luma
Dio94 commented 2026-10-18 23:09:22 +00:00 (Migrated from github.com)

Root cause found: d1a89662 (DX11 NGX re-init keeps a stale device). Already fixed on master by c59238d2

TL;DR: the crash is a regression from d1a89662. It is already fixed on master by c59238d2 "Added device check for preventing DLSS re-init" (2026-07-27), but that commit is not in any tagged release yet, so 0.9.3 and 0.9.4 still crash with Luma. A local equivalent patch on top of v0.9.4 was confirmed working in game (details below). Until the next release, a nightly/master build should fix it for Luma users.

Setup: FF7 Remake (UE4, -dx11), Luma v2.6 (ReShade addon) emitting NGX DLSS D3D11 calls, OptiScaler as OptiScaler.asi, Dx11Upscaler=fsr31_12. RTX 3070, driver 617.14.

Symptom (0.9.3 / 0.9.4): EXCEPTION_ACCESS_VIOLATION reading 0x0 on the RHI thread, called from the Luma addon. Last log line is IFeature_Dx11wDx12::ProcessDx11Textures Color exist.., sometimes preceded by CopyTextureFrom11To12 CreateTexture2D error -7785fffb (DXGI_ERROR_DEVICE_REMOVED). 0.9.2 works.

Bisect

git bisect v0.9.2 (good) → v0.9.3 (bad), every build tested in game:

Commit Result
93aaa812 Clean up RestoreComputeRoot code bad
2b75adbb Added Korean PoE exe names for quirks bad
16775cd5 Fix CreateBufferResource return value good
c74a3f3a Fix Nvidia NVSDK init path order good
dc204882 A small optimisation for DAS good
e3167184 Bump version (resource.h only) bad

→ first bad commit: d1a89662 "Standardize NVSDK Init code between APIs"

Cause

d1a89662 added this to NVSDK_NGX_D3D11_Init_Ext:

if (State::Instance().NvngxDx11Inited)
{
    LOG_WARN("NVNGX already inited");
    return NVSDK_NGX_Result_Success;
}

Luma calls the NGX D3D11 init three times, with three different ID3D11Devices. Before d1a89662, each call updated D3D11Device / State::currentD3D11Device / UpscalerTimeDx11::Init. Now only the first device is kept. By the time the upscaler runs, that device is gone, which produces the DEVICE_REMOVED error and then the null read.

0.9.3 log: one Init_Ext AppId: 4919, then NVNGX already inited twice. 0.9.2 log: Init_Ext AppId: 4919 three times.

Fix

Keep the early return only when the device is null or unchanged:

if (State::Instance().NvngxDx11Inited)
{
    // Some callers (e.g. Luma) re-init with a new device, keeping the old one leads to device removed
    if (InDevice == nullptr || InDevice == D3D11Device)
    {
        LOG_WARN("NVNGX already inited, device: {:X}", (size_t) InDevice);
        return NVSDK_NGX_Result_Success;
    }

    LOG_WARN("NVNGX already inited but device changed: {:X} -> {:X}, re-initing", (size_t) D3D11Device,
             (size_t) InDevice);
}

Tested on top of v0.9.4: Luma DLSS → FSR 3.1 (fsr31_12) works again, no crash. Log with the patch:

Init_Ext NVNGX already inited but device changed: 2691614BD90 -> 26976C8CE40, re-initing
Init_Ext NVNGX already inited but device changed: 26976C8CE40 -> 269E1F16AA0, re-initing

Note: OptiFG remains unavailable here ("Unsupported API"). That is expected, since OptiFG is gated on state.api != DX11 and FG swapchain creation requires a D3D12 command queue. It is not part of this regression.

## Root cause found: d1a89662 (DX11 NGX re-init keeps a stale device). Already fixed on master by c59238d2 **TL;DR:** the crash is a regression from d1a89662. It is already fixed on `master` by c59238d2 "Added device check for preventing DLSS re-init" (2026-07-27), but that commit is not in any tagged release yet, so 0.9.3 and 0.9.4 still crash with Luma. A local equivalent patch on top of v0.9.4 was confirmed working in game (details below). Until the next release, a nightly/master build should fix it for Luma users. **Setup:** FF7 Remake (UE4, `-dx11`), Luma v2.6 (ReShade addon) emitting NGX DLSS D3D11 calls, OptiScaler as `OptiScaler.asi`, `Dx11Upscaler=fsr31_12`. RTX 3070, driver 617.14. **Symptom (0.9.3 / 0.9.4):** `EXCEPTION_ACCESS_VIOLATION reading 0x0` on the RHI thread, called from the Luma addon. Last log line is `IFeature_Dx11wDx12::ProcessDx11Textures Color exist..`, sometimes preceded by `CopyTextureFrom11To12 CreateTexture2D error -7785fffb` (DXGI_ERROR_DEVICE_REMOVED). 0.9.2 works. ### Bisect `git bisect` v0.9.2 (good) → v0.9.3 (bad), every build tested in game: | Commit | Result | |---|---| | 93aaa812 Clean up RestoreComputeRoot code | bad | | 2b75adbb Added Korean PoE exe names for quirks | bad | | 16775cd5 Fix CreateBufferResource return value | good | | c74a3f3a Fix Nvidia NVSDK init path order | good | | dc204882 A small optimisation for DAS | good | | e3167184 Bump version (resource.h only) | bad | → first bad commit: **d1a89662 "Standardize NVSDK Init code between APIs"** ### Cause d1a89662 added this to `NVSDK_NGX_D3D11_Init_Ext`: ```cpp if (State::Instance().NvngxDx11Inited) { LOG_WARN("NVNGX already inited"); return NVSDK_NGX_Result_Success; } ``` Luma calls the NGX D3D11 init **three times, with three different `ID3D11Device`s**. Before d1a89662, each call updated `D3D11Device` / `State::currentD3D11Device` / `UpscalerTimeDx11::Init`. Now only the first device is kept. By the time the upscaler runs, that device is gone, which produces the DEVICE_REMOVED error and then the null read. 0.9.3 log: one `Init_Ext AppId: 4919`, then `NVNGX already inited` twice. 0.9.2 log: `Init_Ext AppId: 4919` three times. ### Fix Keep the early return only when the device is null or unchanged: ```cpp if (State::Instance().NvngxDx11Inited) { // Some callers (e.g. Luma) re-init with a new device, keeping the old one leads to device removed if (InDevice == nullptr || InDevice == D3D11Device) { LOG_WARN("NVNGX already inited, device: {:X}", (size_t) InDevice); return NVSDK_NGX_Result_Success; } LOG_WARN("NVNGX already inited but device changed: {:X} -> {:X}, re-initing", (size_t) D3D11Device, (size_t) InDevice); } ``` Tested on top of v0.9.4: Luma DLSS → FSR 3.1 (fsr31_12) works again, no crash. Log with the patch: ``` Init_Ext NVNGX already inited but device changed: 2691614BD90 -> 26976C8CE40, re-initing Init_Ext NVNGX already inited but device changed: 26976C8CE40 -> 269E1F16AA0, re-initing ``` Note: OptiFG remains unavailable here ("Unsupported API"). That is expected, since OptiFG is gated on `state.api != DX11` and FG swapchain creation requires a D3D12 command queue. It is not part of this regression.
Dio94 commented 2026-10-19 00:04:39 +00:00 (Migrated from github.com)

Update: tested current master with Luma, works (and OptiFG on DX11 does too)

Correction to my previous comment: OptiFG is available on DX11 on master, it's only missing from 0.9.4. It was added in 3fc6c8c3 (DX11 FG, upscaler inputs), and 12ec9011 added the experimental DX11 HUDFix.

Build: master @ ede3ae39, Release x64. FF7 Remake -dx11, Luma v2.6, RTX 3070, driver 617.14.
Settings: Dx11Upscaler=ffx_12 (renamed from fsr31_12), FGInput=upscaler, FGOutput=fsrfg, AutoExposure=true, DisableReactiveMask=true, UseDelayedInit=true, NVCP VSync on.

  • Upscaling with Luma's DLSS input works and the crash is gone, so c59238d2 fixes this issue.
  • OptiFG (Upscaler) → FSR FG works in DX11. Toggling it at runtime is fine and FPS goes up noticeably.
  • DX11 HUDFix: helps with HUD and text, some glitches remain (expected for an experimental feature).
  • Stutter: present with and without FG, also with file logging disabled. It looks game-side (UE4 DX11), FG just makes it more visible.

Two side issues seen on master:

  1. AntiLag 2 error spam on NVIDIA: about 28k lines of AmdExtAntiLagApi::UpdateAntiLagState set_async_marker result: LowLatencyUpdateFail, roughly two per frame. It seems to come from FSR FG's frame-type signaling (signalFgFrameType) being handled as AntiLag 2 input with no low-latency context (no Reflex in this DX11 game, LowLatencyInput/Output=auto).
  2. Crash on game exit: 0xc0000005 in nvwgf2umx.dll (NVIDIA D3D11 UMD, offset 0x694f37) about 3 s after the FG swapchain is released cleanly (Destroy Ffx Swapchain Result: 0, Real swapchain released, refCount: 0). It never happens during gameplay.

As far as I'm concerned, this issue can be closed once a release includes c59238d2. I can share full logs if needed.

### Update: tested current master with Luma, works (and OptiFG on DX11 does too) Correction to my previous comment: OptiFG **is** available on DX11 on master, it's only missing from 0.9.4. It was added in 3fc6c8c3 (DX11 FG, upscaler inputs), and 12ec9011 added the experimental DX11 HUDFix. **Build:** master @ ede3ae39, Release x64. FF7 Remake `-dx11`, Luma v2.6, RTX 3070, driver 617.14. **Settings:** `Dx11Upscaler=ffx_12` (renamed from `fsr31_12`), `FGInput=upscaler`, `FGOutput=fsrfg`, `AutoExposure=true`, `DisableReactiveMask=true`, `UseDelayedInit=true`, NVCP VSync on. - **Upscaling** with Luma's DLSS input works and the crash is gone, so c59238d2 fixes this issue. - **OptiFG (Upscaler) → FSR FG** works in DX11. Toggling it at runtime is fine and FPS goes up noticeably. - **DX11 HUDFix:** helps with HUD and text, some glitches remain (expected for an experimental feature). - **Stutter:** present with and without FG, also with file logging disabled. It looks game-side (UE4 DX11), FG just makes it more visible. Two side issues seen on master: 1. **AntiLag 2 error spam on NVIDIA:** about 28k lines of `AmdExtAntiLagApi::UpdateAntiLagState set_async_marker result: LowLatencyUpdateFail`, roughly two per frame. It seems to come from FSR FG's frame-type signaling (`signalFgFrameType`) being handled as AntiLag 2 input with no low-latency context (no Reflex in this DX11 game, `LowLatencyInput/Output=auto`). 2. **Crash on game exit:** `0xc0000005` in `nvwgf2umx.dll` (NVIDIA D3D11 UMD, offset `0x694f37`) about 3 s after the FG swapchain is released cleanly (`Destroy Ffx Swapchain Result: 0`, `Real swapchain released, refCount: 0`). It never happens during gameplay. As far as I'm concerned, this issue can be closed once a release includes c59238d2. I can share full logs if needed.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
roman/OptiScaler2#1225
No description provided.