mirror of
https://github.com/lucannez64/darling-lol.git
synced 2026-10-26 19:47:42 +00:00
Allocate League's Metal drawables in VRAM
League sets framebufferOnly=NO on its CAMetalLayer, and QuartzCore read that as needing host-visible coherent memory, so the game's final render target and the linear image handed to OpenGL both lived in system RAM (type 2 on the RX 6600) and crossed PCIe every frame. framebufferOnly=NO only lets Metal sample or blit the texture: nothing maps either image (replaceRegion aborts, getBytes is a stub, Indium maps only Shared/Managed buffers). Drawables now take the first allowed DEVICE_LOCAL type whatever framebufferOnly says; the guest file /tmp/metal-no-drawable-vram restores the old placement. metal-device.log shows drawable-vram=on and storage=vram. A native EGL/RADV test exported the drawable's linear image from VRAM and imported it into GL with no errors and identical pixels. In a practice-tool baron fight on the RX 6600 with the same champion it ran about 20 FPS faster and the same when idle; not yet measured in an ARAM. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
e1c8107b59
commit
197b794111
3 files changed
+54
-23
No files matched your search
@@ -193,7 +193,7 @@ The log also lists the selected device's memory heaps and types, and one line th
|
||||
[MetalDevice] pid=… memory alloc kind=texture storage=private typeBits=0x… type=1 flags=0x1(DEVICE_LOCAL) heap=0 heapDeviceLocal=yes firstFit=0 flags=0x0(none) heap=1 heapDeviceLocal=no changed=yes
|
||||
```
|
||||
|
||||
Resources only the GPU uses (`private`, `memoryless`, and `framebufferOnly` drawables) take the first allowed `DEVICE_LOCAL` type. Before 2026-10-16 they took the first allowed type (`firstFit`), which on NVIDIA can be system RAM; `changed=yes` marks where the two differ. `shared` and `managed` resources keep the first host-visible type. On the RX 6600 (RADV) type 0 is `DEVICE_LOCAL`, so nothing changes there.
|
||||
Resources only the GPU uses (`private`, `memoryless`, and drawables, including League's `framebufferOnly`-off ones unless `/tmp/metal-no-drawable-vram` exists) take the first allowed `DEVICE_LOCAL` type. Before 2026-10-16 they took the first allowed type (`firstFit`), which on NVIDIA can be system RAM; `changed=yes` marks where the two differ. `shared` and `managed` resources keep the first host-visible type. On the RX 6600 (RADV) type 0 is `DEVICE_LOCAL`, so nothing changes there.
|
||||
|
||||
The first import of a drawable into the presenting OpenGL context, and the first semaphore import, are logged too; later ones only when they fail (at most five):
|
||||
|
||||
|
||||
Reference in new issue
Block a user