Retail runs as WoW.exe; DXVK section names are case-sensitive, so HDR was not applied to retail.
#3 fix(env): match retail WoW.exe in the HDR DXVK sections
M README.md +2 -1
| @@ -55,7 +55,8 @@ bnetctl clean -a # Full purge (cache, prefix, desktop entry, data) | |||
| 55 | 55 | ## HDR on Wayland | |
| 56 | 56 | ||
| 57 | 57 | HDR is enabled automatically for native Wayland only for `WowClassic.exe`, | |
| 58 | - | `Wow.exe`, `WowClassicT.exe`, and `WowT.exe`, using per-executable | |
| 58 | + | `Wow.exe`, `WoW.exe` (retail), `WowClassicT.exe`, `WowT.exe`, and `WoWT.exe` | |
| 59 | + | (DXVK matches executable names case-sensitively), using per-executable | |
| 59 | 60 | `dxgi.enableHDR = True` sections in `DXVK_CONFIG`. This avoids exposing HDR to | |
| 60 | 61 | Battle.net's Chromium/CEF launcher. It requires **Wine >= 11.19**, an HDR-capable | |
| 61 | 62 | compositor with HDR enabled, and an HDR-capable monitor/game. | |
| @@ -55,7 +55,8 @@ bnetctl clean -a # Full purge (cache, prefix, desktop entry, data) | |||||
| 55 | ## HDR on Wayland | 55 | ## HDR on Wayland | ||
| 56 | 56 | ||||
| 57 | HDR is enabled automatically for native Wayland only for `WowClassic.exe`, | 57 | HDR is enabled automatically for native Wayland only for `WowClassic.exe`, | ||
| 58 | - | `Wow.exe`, `WowClassicT.exe`, and `WowT.exe`, using per-executable | 58 | + | `Wow.exe`, `WoW.exe` (retail), `WowClassicT.exe`, `WowT.exe`, and `WoWT.exe` |
| 59 | + | (DXVK matches executable names case-sensitively), using per-executable | |||
| 59 | `dxgi.enableHDR = True` sections in `DXVK_CONFIG`. This avoids exposing HDR to | 60 | `dxgi.enableHDR = True` sections in `DXVK_CONFIG`. This avoids exposing HDR to | ||
| 60 | Battle.net's Chromium/CEF launcher. It requires **Wine >= 11.19**, an HDR-capable | 61 | Battle.net's Chromium/CEF launcher. It requires **Wine >= 11.19**, an HDR-capable | ||
| 61 | compositor with HDR enabled, and an HDR-capable monitor/game. | 62 | compositor with HDR enabled, and an HDR-capable monitor/game. | ||
M internal/adapters/env/gpu.go +3 -2
| @@ -93,8 +93,9 @@ func BuildGPUEnvForDisplay(driver DisplayDriver) *domain.WineEnv { | |||
| 93 | 93 | } | |
| 94 | 94 | ||
| 95 | 95 | // wowHDRConfig uses DXVK's semicolon-separated config lines. Each section | |
| 96 | - | // matches an exact executable name, keeping HDR away from Battle.net's CEF. | |
| 97 | - | const wowHDRConfig = "[WowClassic.exe];dxgi.enableHDR = True;[Wow.exe];dxgi.enableHDR = True;[WowClassicT.exe];dxgi.enableHDR = True;[WowT.exe];dxgi.enableHDR = True" | |
| 96 | + | // matches an exact, case-sensitive executable name, keeping HDR away from | |
| 97 | + | // Battle.net's CEF. Retail starts as WoW.exe, other clients as Wow*.exe. | |
| 98 | + | const wowHDRConfig = "[WowClassic.exe];dxgi.enableHDR = True;[Wow.exe];dxgi.enableHDR = True;[WoW.exe];dxgi.enableHDR = True;[WowClassicT.exe];dxgi.enableHDR = True;[WowT.exe];dxgi.enableHDR = True;[WoWT.exe];dxgi.enableHDR = True" | |
| 98 | 99 | ||
| 99 | 100 | // BuildGPUEnvForDisplayHDR applies the launch HDR policy. | |
| 100 | 101 | func BuildGPUEnvForDisplayHDR(driver DisplayDriver, noHDR bool) *domain.WineEnv { | |
| @@ -93,8 +93,9 @@ func BuildGPUEnvForDisplay(driver DisplayDriver) *domain.WineEnv { | |||||
| 93 | } | 93 | } | ||
| 94 | 94 | ||||
| 95 | // wowHDRConfig uses DXVK's semicolon-separated config lines. Each section | 95 | // wowHDRConfig uses DXVK's semicolon-separated config lines. Each section | ||
| 96 | - | // matches an exact executable name, keeping HDR away from Battle.net's CEF. | 96 | + | // matches an exact, case-sensitive executable name, keeping HDR away from |
| 97 | - | const wowHDRConfig = "[WowClassic.exe];dxgi.enableHDR = True;[Wow.exe];dxgi.enableHDR = True;[WowClassicT.exe];dxgi.enableHDR = True;[WowT.exe];dxgi.enableHDR = True" | 97 | + | // Battle.net's CEF. Retail starts as WoW.exe, other clients as Wow*.exe. |
| 98 | + | const wowHDRConfig = "[WowClassic.exe];dxgi.enableHDR = True;[Wow.exe];dxgi.enableHDR = True;[WoW.exe];dxgi.enableHDR = True;[WowClassicT.exe];dxgi.enableHDR = True;[WowT.exe];dxgi.enableHDR = True;[WoWT.exe];dxgi.enableHDR = True" | |||
| 98 | 99 | ||||
| 99 | // BuildGPUEnvForDisplayHDR applies the launch HDR policy. | 100 | // BuildGPUEnvForDisplayHDR applies the launch HDR policy. | ||
| 100 | func BuildGPUEnvForDisplayHDR(driver DisplayDriver, noHDR bool) *domain.WineEnv { | 101 | func BuildGPUEnvForDisplayHDR(driver DisplayDriver, noHDR bool) *domain.WineEnv { | ||
M internal/adapters/env/hdr_test.go +1 -1
| @@ -61,7 +61,7 @@ func TestHDRPolicy(t *testing.T) { | |||
| 61 | 61 | func str(s string) *string { return &s } | |
| 62 | 62 | ||
| 63 | 63 | func TestHDRPreservesUserConfig(t *testing.T) { | |
| 64 | - | const entries = "[WowClassic.exe];dxgi.enableHDR = True;[Wow.exe];dxgi.enableHDR = True;[WowClassicT.exe];dxgi.enableHDR = True;[WowT.exe];dxgi.enableHDR = True" | |
| 64 | + | const entries = "[WowClassic.exe];dxgi.enableHDR = True;[Wow.exe];dxgi.enableHDR = True;[WoW.exe];dxgi.enableHDR = True;[WowClassicT.exe];dxgi.enableHDR = True;[WowT.exe];dxgi.enableHDR = True;[WoWT.exe];dxgi.enableHDR = True" | |
| 65 | 65 | for _, userConfig := range []string{"", "dxgi.maxFrameLatency = 1", "[Battle.net.exe];dxgi.enableHDR = False", "[Other.exe];dxgi.syncInterval = 0;"} { | |
| 66 | 66 | t.Run(userConfig, func(t *testing.T) { | |
| 67 | 67 | t.Setenv("DXVK_CONFIG", userConfig) | |
| @@ -61,7 +61,7 @@ func TestHDRPolicy(t *testing.T) { | |||||
| 61 | func str(s string) *string { return &s } | 61 | func str(s string) *string { return &s } | ||
| 62 | 62 | ||||
| 63 | func TestHDRPreservesUserConfig(t *testing.T) { | 63 | func TestHDRPreservesUserConfig(t *testing.T) { | ||
| 64 | - | const entries = "[WowClassic.exe];dxgi.enableHDR = True;[Wow.exe];dxgi.enableHDR = True;[WowClassicT.exe];dxgi.enableHDR = True;[WowT.exe];dxgi.enableHDR = True" | 64 | + | const entries = "[WowClassic.exe];dxgi.enableHDR = True;[Wow.exe];dxgi.enableHDR = True;[WoW.exe];dxgi.enableHDR = True;[WowClassicT.exe];dxgi.enableHDR = True;[WowT.exe];dxgi.enableHDR = True;[WoWT.exe];dxgi.enableHDR = True" |
| 65 | for _, userConfig := range []string{"", "dxgi.maxFrameLatency = 1", "[Battle.net.exe];dxgi.enableHDR = False", "[Other.exe];dxgi.syncInterval = 0;"} { | 65 | for _, userConfig := range []string{"", "dxgi.maxFrameLatency = 1", "[Battle.net.exe];dxgi.enableHDR = False", "[Other.exe];dxgi.syncInterval = 0;"} { | ||
| 66 | t.Run(userConfig, func(t *testing.T) { | 66 | t.Run(userConfig, func(t *testing.T) { | ||
| 67 | t.Setenv("DXVK_CONFIG", userConfig) | 67 | t.Setenv("DXVK_CONFIG", userConfig) | ||
Comments00 unresolved
no comments yet.