detached b61b91f

#3 fix(env): match retail WoW.exe in the HDR DXVK sections

state
merged · b61b91f · fast-forward
branch
fix/hdr-exe-case → main
opened
bnema ·
updated

Retail runs as WoW.exe; DXVK section names are case-sensitive, so HDR was not applied to retail.

CommitSubjectAuthorDateSignatureStatus
b61b91ffix(env): match retail WoW.exe in the HDR DXVK sectionsbrice GPG Verified

Checks 0

no checks

3 files · +6 -4
no checks
M README.md +2 -1
@@ -55,7 +55,8 @@ bnetctl clean -a # Full purge (cache, prefix, desktop entry, data)
5555 ## HDR on Wayland
5656
5757 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
5960 `dxgi.enableHDR = True` sections in `DXVK_CONFIG`. This avoids exposing HDR to
6061 Battle.net's Chromium/CEF launcher. It requires **Wine >= 11.19**, an HDR-capable
6162 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 Wayland55 ## 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-executable58+`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 to60 `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-capable61 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 {
9393 }
9494
9595 // 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"
9899
99100 // BuildGPUEnvForDisplayHDR applies the launch HDR policy.
100101 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 section95 // 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) {
6161 func str(s string) *string { return &s }
6262
6363 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"
6565 for _, userConfig := range []string{"", "dxgi.maxFrameLatency = 1", "[Battle.net.exe];dxgi.enableHDR = False", "[Other.exe];dxgi.syncInterval = 0;"} {
6666 t.Run(userConfig, func(t *testing.T) {
6767 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.

    Keyboard shortcuts

    Single-key shortcuts are on. ctrl k and esc work whatever this says.

    ctrl k :
    go to a section, branch, tag, file or repository
    ?
    this list
    j k
    move the row cursor down / up
    enter
    open the row under the cursor; on Files, a directory opens or closes in place
    ↑ ↓ ← → home end
    in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
    l h
    on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. On pages with a side panel: into the panel (on a merge request, its files) / back to the content; there j k move between its controls
    g g G
    first / last row
    /
    filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
    b
    switch branch or tag
    g s g f g c g b g m g i g r g a
    tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
    g h
    home
    w
    wide mode: use the whole width of the screen, or not (remembered)
    y
    copy a permalink pinned to the commit; in a file, click a line number to select it, shift-click for a range
    d u x
    diff: split / unified / collapse or expand all
    e E
    diff: the whole file in view / every file, with the lines the hunks hide
    n
    merge request: next note in the diff
    l
    merge request: the list of files (j k move, enter opens, esc back)
    M
    merge request: the merge menu; there 1–3 pick the mode, D deletes the branch, enter merges
    R
    merge request: mark the head read
    esc
    close a dialog, leave a field

    Branches 2

    Tags 2

    ↑↓ moveenter openesc close