mirror of
https://github.com/lucannez64/darling-lol.git
synced 2026-10-26 19:47:42 +00:00
fix(launcher): keep Mesa's shader cache on the host
Mesa derives its shader disk cache from $HOME. Inside the guest that is
/Users/<user>, which does not exist on the host filesystem, so Mesa could not
create the cache and disabled it, once per process:
Failed to create /Users/<user> for shader cache (Permission denied)---disabling
One launcher log contained 212 of those lines, and no shader compiled by one
process was reused by another process or by the next start: the client and the
game recompiled every shader on every launch, spending CPU at startup for no
gain.
Mesa is host code loaded into the guest and reads MESA_SHADER_CACHE_DIR verbatim,
so point it at a host directory; Mesa creates mesa_shader_cache/ (client and game
shaders) and radv_builtin_shaders/ below it. A non-empty value from the caller is
preserved, and a directory that cannot be created leaves the previous behaviour
instead of ending the launch.
Observed on a Radeon RX 550 with radv: no shader-cache failure after the change,
and 434 files / 5.6 MB written during one client start, still growing while the
client ran. The cache is reused from the second start on, which lowers the
client's CPU use while it starts; the startup-time gain itself has not been
measured separately.
This commit is contained in:
1 parent
d24f26ee63
commit
efc92dfb04
2 files changed
+38
No files matched your search
@@ -57,6 +57,34 @@ The old kernel library returned success for Darwin allocator free/reuse hints wi
|
||||
|
||||
Build/install the kernel library using [the incremental update steps](SETUP.md#updating-an-existing-runtime), then perform the manual restart when finished playing. Linux 5.14+ is required. Do not kill client helpers as an attempted memory optimization during play.
|
||||
|
||||
## Shaders are recompiled on every start
|
||||
|
||||
Mesa resolves its shader disk cache below `$HOME`. Inside the guest, `$HOME` is
|
||||
`/Users/<user>`, which does not exist on the host filesystem, so Mesa cannot create the
|
||||
cache and disables it, once per process:
|
||||
|
||||
```
|
||||
Failed to create /Users/<user> for shader cache (Permission denied)---disabling
|
||||
```
|
||||
|
||||
One launcher log without the fix contained 212 of these lines, and no shader compiled by
|
||||
one process was reused by another process or by the next start: the client and the game
|
||||
recompiled every shader, on every launch. Mesa is host code loaded into the guest and
|
||||
reads `MESA_SHADER_CACHE_DIR` verbatim, so the launcher now passes a host directory:
|
||||
|
||||
```sh
|
||||
MESA_SHADER_CACHE_DIR=${XDG_CACHE_HOME:-${HOME:-$prefix_dir}/.cache}/darling-lol # launcher default
|
||||
```
|
||||
|
||||
Mesa creates `mesa_shader_cache/` (client and game shaders) and `radv_builtin_shaders/`
|
||||
below it. With the change, one client start logged no shader-cache failure and wrote 434
|
||||
files / 5.6 MB, still growing while the client ran (Radeon RX 550, radv). Set
|
||||
`MESA_SHADER_CACHE_DIR` yourself to move the cache, for example to another disk: the
|
||||
launcher preserves a non-empty value, and a directory that cannot be created leaves the
|
||||
previous behaviour. Reusing the cache removes the repeated compilation; the startup-time
|
||||
gain has not been measured separately. Cache entries are keyed by driver and GPU, so a
|
||||
driver update recompiles once and caches again.
|
||||
|
||||
## Installer exits, cannot write temporary files, or Install appears idle
|
||||
|
||||
Use `sh scripts/installer.sh euw` (or your supported region). The first-time launcher must omit the installed client's `--app-root` and pass `--skip-to-install`; the normal wrapper now does this. It also selects `league_of_legends` so the product installation UI appears after login.
|
||||
|
||||
Reference in new issue
Block a user