Commit Graph
100 Commits
Author SHA1 Message Date
lucannez64 27553d8874 Fix Metal VSync propagation to window swap intervals 2026-10-19 01:10:03 +02:00
Kalah 240cbc462d Merge pull request #79 from lucannez64/fix/replace-shared-identity
Provision a platform identity on setup and replace the shared serial/UUID on update
2026-10-19 00:22:48 +02:00
lucannez64andClaude Opus 5.5 c8cbb1ffe7 install-runtime.sh: provision a platform identity for new prefixes
When install-runtime.sh creates the prefix (first-time setup, regular or
Nix), it now runs configure-darling-platform.py --provision --write once
the runtime is stopped, so each new install gets its own synthetic serial,
MLB, UUID and ROM. A prefix counts as new the same way Darling decides it:
the directory did not exist before the first `darling shell`. Existing
prefixes keep their identity on reinstall and update.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 00:22:07 +02:00
lucannez64andClaude Opus 5.5 d443e631c2 update.sh: replace the shared serial and UUID automatically
Older setups shipped serial C02ZL0GVMD6N and UUID
6F3B2A1E-8C4D-4E5F-9A7B-1D2C3E4F5A6B to every install. After installing,
update.sh now runs configure-darling-platform.py --replace-known-defaults,
which provisions the prefix only when its saved identity still has one of
those values. Other custom values (imported serials/UUIDs, model, board,
manufacturer, ROM, MLB) are kept; prefixes with no saved identity or only
custom values are not touched.

provision() also drops a standalone system-id or provisioning_UDID derived
from the shared UUID instead of keeping it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 00:17:22 +02:00
Kalah 003daa7fc3 Merge pull request #78 from lucannez64/fix/close-client-cooldown-boot
close-league-client-in-game: don't block closes right after boot
2026-10-18 23:20:24 +02:00
lucannez64andClaude Opus 5.5 87484f0385 close-league-client-in-game: don't block closes right after boot
last_close started at 0.0 and the cooldown compares it with
time.monotonic(), which counts from boot. For the first 30 s of uptime
every close was refused as "in cooldown". That made the tests flaky on
freshly booted CI runners (seen on PR #76). Use None for "never closed".

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 23:16:18 +02:00
Kalah f4f01dae12 Merge pull request #73 from PolarSeeker77/fix/x11-transparent-windows
X11: give transparent windows an alpha visual, float translucent splash windows
2026-10-18 20:57:01 +02:00
Kalah 4ff2f11c26 Merge branch 'main' into fix/x11-transparent-windows 2026-10-18 20:56:29 +02:00
Kalah 0b02889968 Merge pull request #72 from 3AvisD/fix/close-league-client-in-game
fix(launcher): close the League client UI while a match runs
2026-10-18 20:56:18 +02:00
Kalah 9ac63c6c6a Merge pull request #71 from 3AvisD/fix/mesa-shader-cache
fix(launcher): keep Mesa's shader cache on the host
2026-10-18 20:56:15 +02:00
lucannez64andClaude Opus 5.5 9f62aa3ce0 close-league-client-in-game: start the idle clock only after a client was seen
A long patch or login can keep the League client closed for more than ten
minutes after launch; the helper then left before the first match.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 20:48:43 +02:00
Kalah f400b86de1 Merge pull request #70 from DavidutzDev/feat/prefix-location
Add darling-lol --set-prefix to keep the prefix on another drive
2026-10-18 19:14:32 +02:00
lucannez64andClaude Sonnet 5.5 20d8320bf6 Make --set-prefix safe against data loss
Stage a cross-filesystem copy in a private directory instead of deleting a
pre-existing PATH.partial, reject destinations inside the overlay work
directory, save the new path before deleting the old prefix, and verify that
the target keeps user.* xattrs before and after copying. Add tests.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-18 19:04:30 +02:00
lucannez64 640f31d148 Merge remote-tracking branch 'origin/main' into pr70 2026-10-18 19:03:04 +02:00
Kalah e8b9b2027c Merge pull request #63 from PolarSeeker77/fix/x11-drag-and-drop
Drag and drop on X11: run drags in-process so CEF/Electron pages don't freeze
2026-10-18 19:00:20 +02:00
lucannez64andClaude Sonnet 5.5 7ef148c76e Add standalone X11 drag-and-drop check for PR #63
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-18 18:59:43 +02:00
Kalah 1e38e01cb1 Merge branch 'main' into fix/x11-drag-and-drop 2026-10-18 18:21:33 +02:00
Kalah 6044e838cc Merge pull request #64 from DavidutzDev/feat/stop-and-signal-cleanup
Stop Darling on Ctrl+C, terminal hangup and darling-lol --stop
2026-10-18 18:15:32 +02:00
Kalah 8b5ba48feb Merge pull request #62 from DavidutzDev/fix/nixos-nvidia-egl-paths
fix(nix): let EGL find NixOS GPU drivers in the FHS environment
2026-10-18 18:15:29 +02:00
Kalah dd6a4fad78 Merge branch 'main' into feat/stop-and-signal-cleanup 2026-10-18 18:15:02 +02:00
Kalah 551beb4436 Merge branch 'main' into fix/nixos-nvidia-egl-paths 2026-10-18 18:15:00 +02:00
Kalah c2a12b2eb9 Merge pull request #68 from lucannez64/pr61/system-profiler-overview
system_profiler: hardware and software overviews from IOKit and sysctl
2026-10-18 17:33:03 +02:00
lucannez64 b53b963997 Merge remote-tracking branch 'origin/main' into pr61/system-profiler-overview
# Conflicts:
#	.github/workflows/source-check.yml
2026-10-18 17:32:11 +02:00
Kalah d377452460 Merge pull request #67 from lucannez64/pr61/metal-device-fixes
Metal: device edge-case fixes and a MacBookPro16,1 GPU name for Riot
2026-10-18 17:32:05 +02:00
lucannez64 fd0d01e813 Merge remote-tracking branch 'origin/main' into pr61/metal-device-fixes
# Conflicts:
#	.github/workflows/source-check.yml
2026-10-18 17:31:14 +02:00
Kalah 95a15b774b Merge pull request #66 from lucannez64/pr61/host-env-filter
Add an opt-in filter for host desktop-session variables
2026-10-18 17:31:06 +02:00
Kalah 1b7332b70a Merge branch 'main' into pr61/host-env-filter 2026-10-18 17:30:23 +02:00
Kalah c9f1bb0f4d Merge pull request #65 from lucannez64/pr61/close-inherited-fds
Close inherited host file descriptors before starting the guest
2026-10-18 17:30:12 +02:00
lucannez64andClaude Opus 5.5 29e35b6a93 Report the MacBookPro16,1 GPU name for Riot on AMD and Intel hosts
With DARLING_METAL_MAC_GPU_NAME=1, MTLDevice.name is the GPU the
MacBookPro16,1 that IOKit reports shipped with, from the host's vendor:
"AMD Radeon Pro 5500M" (vendor 0x1002) or "Intel UHD Graphics 630"
(0x8086). NVIDIA keeps its own name so the game never takes another
vendor's driver paths. recommendedMaxWorkingSetSize and every other value
stay the host's, which was the risky part of #61's identity.

The Riot launcher turns it on by default (0 or empty turns it off); other
Darling apps keep the host name. DARLING_METAL_GPU_NAME still wins.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 17:24:49 +02:00
beb64a4271 Report hardware and software overviews from IOKit and sysctl in system_profiler
system_profiler now answers SPHardwareDataType and SPSoftwareDataType (and
lists them in -listDataTypes). Model, serial number, platform UUID and
provisioning UDID come from IOKit's IOPlatformExpertDevice via ioreg; CPU,
cache and memory from sysctl; the OS version from sw_vers and uname. A
field the guest does not provide is left out.

#61 instead read a separate darling-smbios.conf written by a new
generator (gen-darling-smbios.py), with hardcoded fallbacks (an Intel Core
i9, macOS 14.7, SIP enabled). iokitd reads darling-platform.plist, so
system_profiler and IOKit could report different serials and models on the
same prefix, and the generator overwrote identities imported with
configure-darling-platform.py. Reading the guest's own APIs keeps a single
source of truth: configure-darling-platform.py remains the only way to set
or provision an identity, and it is still never run by install or launch.

tests/test_system_profiler.py runs the script under sh with stub guest
commands and runs in CI.

Split from #61.

Co-authored-by: DevWebeloper <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 17:17:05 +02:00
e66bd9a394 Fix Metal device edge cases; keep reporting the host GPU
From #61, without the default "AMD Radeon Pro 5500M" / 4 GB identity: the
host GPU's name and Vulkan working set stay the default for every app, and
the existing DARLING_METAL_GPU_NAME and DARLING_METAL_VRAM_MB overrides
remain the opt-in. Reporting 4 GB on a 2 GB card invites allocation
failures, and under-reports larger cards.

Kept from #61:
- registryID returns MTLDeviceInfo::kDefaultRegistryID instead of 0; a
  real Mac never reports 0 and apps key devices by it.
- Vertex buffer layout and attribute arrays release the old item after
  retiring it; the retire step read the item after the release could free it.
- newDepthStencilState, newSamplerState and the device name return nil (or
  the fallback name) when Indium throws, instead of unwinding through
  Objective-C.
- MTLDepthStencilGetIndium is declared only with DARLING_METAL_ENABLED.
- The replaceRegion trace probes at most `width` bytes, which stays inside
  the first row for every pixel format.

metal.patch is regenerated in its existing file order, so the diff is
these changes only. tests/test_metal_device_info.py compiles the host
check against MTLDeviceInfo.h as shipped in the patch and runs in CI.

Split from #61.

Co-authored-by: DevWebeloper <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 17:14:47 +02:00
41b5b6fc0f Add an opt-in filter for host desktop-session variables
RCLOL_FILTER_HOST_ENV=1 makes exec-guest.py drop host session metadata
(WAYLAND_DISPLAY, XDG_SESSION_*, XDG_CURRENT_DESKTOP, GNOME/KDE/GDM,
systemd, SSH agent, terminal, toolkit, Flatpak/Snap/AppImage, exported
shell functions) and set SHELL to the guest's /bin/zsh. It is off by
default; RCLOL_KEEP_HOST_ENV lists names to keep anyway.

Unlike the denylist in #61, the filter runs after the launcher sets its
GPU tuning, keeps everything Darling and the host graphics and audio
libraries read (DISPLAY, XAUTHORITY, XDG_RUNTIME_DIR and the XDG base
directories, D-Bus, PulseAudio/PipeWire/ALSA, DRI_PRIME, MESA_*, __GL_*,
__NV_*, VK_*, LD_PRELOAD for gamemoderun, LD_LIBRARY_PATH), and lives in
one place instead of three.

tests/test_exec_guest.py runs in CI; the launcher check also verifies
that MESA_NO_ERROR=1 and __GL_THREADED_OPTIMIZATIONS=0 reach the guest
with the filter on.

Split from #61.

Co-authored-by: DevWebeloper <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 17:13:24 +02:00
6d3e870346 Close inherited host file descriptors before starting the guest
A terminal, IDE or service manager can leave descriptors open in the
launcher, and the guest inherited all of them. tools/exec-guest.py closes
every descriptor above stderr and then execs the guest command.

A shell loop over /proc/self/fd cannot do this portably: dash only parses
single-digit descriptors in redirections, so "exec 10>&-" runs a command
named 10 and ends the launcher on Debian and Ubuntu.

The launcher offline check now leaks descriptors 3, 4, 12 and 200 into the
launcher and asserts the guest sees only 0, 1 and 2. It runs in CI.

Split from #61.

Co-authored-by: DevWebeloper <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 17:11:36 +02:00
Kalah c943a19606 Merge pull request #58 from DavidutzDev/fix/chromium-temp-dir
fix(launcher): give Chromium a usable temp directory ("Not Found" client page)
2026-10-18 15:19:45 +02:00
lucannez64 0830f08c3f Merge remote-tracking branch 'origin/main' into fix/pr58-docs 2026-10-18 15:19:05 +02:00
Kalah 9d55ef33ac Merge pull request #57 from DavidutzDev/fix/nvidia-580-threaded-egl
fix(nvidia): keep threaded optimizations off for driver 580 (Pascal black screen)
2026-10-18 15:18:21 +02:00
lucannez64 b6edef300f docs(launcher): scope Chromium temp failures and use standalone checks 2026-10-18 15:17:46 +02:00
Kalah b478010eb7 Merge pull request #27 from dnsouzadev/fix/riot-session-crashes-download-recovery
Fix Riot session crashes, stalled downloads and hidden client launches
2026-10-18 14:41:48 +02:00
lucannez64 c58fe4b1c5 fix(test): let Darling initialize the private session prefix 2026-10-18 14:38:15 +02:00
lucannez64 bffe884b5c Merge remote-tracking branch 'origin/main' into fix/pr27-reviewed 2026-10-18 14:30:00 +02:00
Kalah cd0f041ffb Merge pull request #51 from SypherrDev/perf/nvidia-ioctl-reduction
perf(indium): cut NVIDIA driver calls per frame (lazy event-loop wake-ups, tunable submit batching)
2026-10-18 14:28:16 +02:00
lucannez64 195255dd5e fix(indium): preserve device field offsets and clarify tuning defaults 2026-10-18 14:27:41 +02:00
lucannez64 e7a08f21cb test(cfnetwork): scope probe overlays after private-prefix startup 2026-10-18 14:20:40 +02:00
lucannez64 0a1d303cd0 chore(manifest): record CFNetwork session patch ownership 2026-10-18 14:18:35 +02:00
lucannez64andSypherrDev 593ab1a077 perf(indium): rebase lazy wakeups and batch tuning onto current polling
Keep the merged per-device completion budget, bounded parsing, idle blocking and timeout accounting. Scope the registration/blocking handshake to each device, restrict live batch windows to the timer resolution, and test registration interleavings, spin-disabled polling, shutdown, opt-out and independent devices with actual patched methods.

Co-authored-by: SypherrDev <[email protected]>
2026-10-18 14:17:35 +02:00
lucannez64 1d4f7fae0c fix(cfnetwork): preserve shared sessions and delegate-queue completions
Ignore both invalidation methods on the shared session; deliver task completion through the owning session delegate queue. Extend the standalone probe to exercise singleton reuse and a suspended custom queue. Require stable old-client process identities and complete window data before optional recovery, and continue launch after shutdown failures.
2026-10-18 14:16:32 +02:00
Kalah e019bba727 Merge pull request #54 from hamzajer/fix/ubuntu-24.04-build-and-coretext-name
Fix darlingserver build on Ubuntu 24.04 and implement CTFontCopyLocalizedName
2026-10-18 14:03:00 +02:00
lucannez64 b18726cfe3 Merge remote-tracking branch 'origin/main' into fix/pr54-update 2026-10-18 14:02:24 +02:00
Kalah 2e2a741911 Merge pull request #29 from pirrandi/fix/nvidia-support
fix(nvidia): CPU readback, native resize signals and bounded completion polling
2026-10-18 14:00:57 +02:00
lucannez64andPirrandi dceee00d10 fix(nvidia): retain readback, resize and bounded completion fixes
Rebuild the remaining NVIDIA changes on current main, preserving the merged visual, draw-buffer, descriptor ownership and mixed Metal-tree fixes. Scope native-thread forwarding to resize notifications and make completion polling per device, bounded and part of the caller timeout budget.

Co-authored-by: Pirrandi <[email protected]>
2026-10-18 13:59:49 +02:00
Kalah cb628a23f1 Merge pull request #56 from nicolai455/review/nix-packaging
feat(nix): add experimental rootless package with guided setup and desktop launcher
2026-10-18 13:55:38 +02:00
lucannez64 3e67d946c6 test(nix): cover region routing, stable readiness and lost terminals 2026-10-18 13:54:18 +02:00
Kalah 2cb353c785 Merge pull request #52 from lucannez64/lucannez64-patch-1
Update README with contact info and project goals
2026-10-18 00:11:57 +02:00
Kalah caa4719241 Update README with contact info and project goals
Added contact information for job opportunities and clarified project goals regarding Linux compatibility.
2026-10-18 00:11:42 +02:00
Kalah 4b2a93cda8 Merge pull request #47 from lucannez64/fix/pr41-deferred
Implement deferred shell, CPU, registry and platform configuration fixes
2026-10-17 23:41:10 +02:00
Kalah f8923a5399 Merge branch 'main' into fix/pr41-deferred 2026-10-17 23:40:55 +02:00
Kalah a6c119ed0e Merge pull request #44 from lucannez64/fix/pr41-compatibility
Extract tested runtime compatibility fixes from #41
2026-10-17 23:40:44 +02:00
Kalah 792b24c896 Merge branch 'main' into fix/pr41-compatibility 2026-10-17 23:40:22 +02:00
lucannez64 91eaf21175 Add stable opt-in per-prefix identity provisioning 2026-10-17 23:38:49 +02:00
lucannez64 b6302bb2c6 Implement bounded registry APIs and opt-in platform configuration 2026-10-17 23:32:01 +02:00
lucannez64 9fe7ce1f3c Fix shell stream ownership and CPU frequency units 2026-10-17 23:31:23 +02:00
Kalah 880f21aa4f Merge pull request #45 from lucannez64/lucannez64-patch-1
Add warning about 3-Day Suspension and project takedown
2026-10-17 23:17:58 +02:00
Kalah 9aee21212a Add warning about 3-Day Suspension and project takedown 2026-10-17 23:17:35 +02:00
lucannez64 de3bbe94b1 Extract runtime compatibility fixes from PR 41 2026-10-17 23:04:23 +02:00
Kalah 4c31367530 Merge pull request #42 from nicolai455/fix/setup-runtime-safety
fix(setup): use consistent runtime paths and reject incomplete installs
2026-10-17 22:58:37 +02:00
lucannez64 d4dcd31a21 Merge main into setup runtime safety, preserving certificate setup 2026-10-17 22:56:34 +02:00
Kalah 5dd00ed1ae Merge pull request #43 from lucannez64/test-batch-2
Merge tested runtime, GPU reporting, certificate, and frame-wait fixes
2026-10-17 22:55:17 +02:00
lucannez64 f1dc596c5b Bound submit-worker drains to work already queued 2026-10-17 22:54:50 +02:00
lucannez64 3264ca86fa Test merge root certificates 2026-10-17 21:08:12 +02:00
lucannez64 9330765f94 Test merge metal device name 2026-10-17 21:08:12 +02:00
lucannez64andClaude Opus 5.5 52a6dae432 Build Darling's system root store from the host CA bundle
Security reads the system trust domain from
/System/Library/Keychains/SystemRootCertificates.keychain and
SystemTrustSettings.plist (TrustSettingsSchema.h). Darling ships neither, so
SecTrustSettingsCopyCertificates(kSecTrustSettingsDomainSystem) returns
errSecNoTrustSettings (-25263); Chromium's known_roots_mac and Riot's
CertBundle then report that they cannot read the system roots.

ensure-darling-root-certificates.py parses each host root with a minimal DER
walker and writes the trust record keyed by the uppercase SHA-1, with the
encoded issuer Name, the serial INTEGER's content octets, modDate and an
empty (unrestricted) trustSettings array. The keychain is built with the
guest security tool in one darling shell, in a private temporary directory,
and published from inside the guest so a running Darling sees it, falling
back to the host when the guest cannot write the directory. A digest stamp
skips later runs without starting Darling. The launcher warns and continues
on failure; install-runtime.sh runs it before stopping Darling.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 21:03:32 +02:00
lucannez64andClaude Opus 5.5 40f7a650d1 Report the host GPU name and VRAM from MTLDevice
-[MTLDevice name] returned "Darling Indium Device" for every GPU. It now
returns the selected Vulkan device's name in macOS Metal style: the
trailing driver note in brackets and the (R)/(TM) marks are removed, and
NVIDIA names are unchanged. The name is never replaced with another
vendor's. recommendedMaxWorkingSetSize is the device-local heap size on
discrete GPUs and all heaps on integrated/CPU devices, with the old 1 GiB
as fallback. Both are computed once per device.

hasUnifiedMemory stays YES by default: synchronizeResource:/
synchronizeTexture: are missing and Private buffers created with data
abort in Indium, so reporting NO on discrete GPUs would send apps down
unimplemented paths. DARLING_METAL_HOST_UNIFIED_MEMORY=1 opts in to the
GPU-type answer. DARLING_METAL_GPU_NAME and DARLING_METAL_VRAM_MB
override the name and working set.

The cleaning logic lives in private-include/Metal/MTLDeviceInfo.h and is
covered by the host check tools/test-metal-device-info.cpp. Metal now
links indium_private for the Vulkan properties, and the runtime build
script adds Indium's private headers before compiling MTLDevice.mm.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 20:49:42 +02:00
Kalah 845aee22d2 Merge pull request #33 from ztancrell/fix/installer-region-codes
Map LAN, LAS and OCE to Riot's installer codes
2026-10-17 20:37:20 +02:00
lucannez64 2b0e18010b Test merge #37 2026-10-17 20:36:55 +02:00
lucannez64 9c112e44d0 Test merge #32 2026-10-17 20:36:54 +02:00
lucannez64 4cd94f27e7 Test merge #36 2026-10-17 20:36:54 +02:00
lucannez64 0a9940272b Test merge #25 2026-10-17 20:36:53 +02:00
Kalah 545f83f8b4 Merge branch 'main' into fix/installer-region-codes 2026-10-17 20:36:32 +02:00
lucannez64andClaude Opus 5.5 03d88631df Merge PR #22 NVIDIA black screen fix onto #20 compositor changes
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 20:28:58 +02:00
Kalah 5334b41915 Merge pull request #20 from lucannez64/fix/metal-iosurface-drawable-starvation
Fix Metal drawable starvation in mixed IOSurface layer trees
2026-10-17 20:27:49 +02:00
lucannez64 fc57385c68 Keep Metal presentation active in mixed IOSurface layer trees 2026-10-17 01:06:50 +02:00
Kalah e490e2e353 Merge pull request #19 from lucannez64/pr16-fixes-v2
Integrate runtime fixes with fullscreen and visible-cursor repairs
2026-10-17 00:27:45 +02:00
lucannez64 698d295b6d Merge PR #18 visible-cursor tracking with serial-aware mouse warps 2026-10-17 00:26:47 +02:00
lucannez64 44faf79bd8 Merge PR #15 fullscreen transitions with runtime review fixes 2026-10-17 00:26:09 +02:00
lucannez64 6c742155e9 Fix runtime safety, Xorg mouse synchronization and fullscreen startup 2026-10-17 00:25:34 +02:00
lucannez64 ed9cc8310a Restore X11 fullscreen requests for monitor-sized borderless windows
Port the fullscreen policy omitted when adapting PR #12. Track requested fullscreen state across frame and style changes, exclude unmanaged windows, and use EWMH REMOVE when leaving fullscreen.

Extend the native geometry probe and document passive tracing for the reported vertical click offset, whose cause remains unconfirmed.
2026-10-16 17:13:11 +02:00
Kalah 8453c07ca9 Merge pull request #14 from ztancrell/screen-size-display-modes
Return a real physical size from CGDisplayScreenSize; never return NULL display modes
2026-10-16 16:59:22 +02:00
lucannez64 b1b97e4d1d Handle EDID DTV aspect ratios in physical display size 2026-10-16 16:57:55 +02:00
lucannez64andMaka d89a303ebe Fix X11 primary-monitor coordinates without changing fullscreen policy
Adapt the geometry fix from PR #12 to the current relative-mouse implementation. Keep display IDs independent of primary-first screen ordering, translate window and pointer coordinates consistently, and invalidate geometry on both RandR event types.

Handle failed RandR snapshots and free EDID data. Add isolated native geometry regression coverage and use the configured SDK when linking the X11 probe.

Validated all 30 component patches, the X11 and CoreGraphics builds, six native geometry groups, and the existing relative-mouse checks. The user confirmed the installed fix works on 2026-10-16.

Co-authored-by: Maka <[email protected]>
2026-10-16 15:52:42 +02:00
lucannez64andClaude Opus 5.5 70fd5fdebd Emulate macOS relative mouse mode in the X11 backend and skip redundant cursor updates
CGAssociateMouseAndMouseCursorPosition(false) used to warp the pointer to the
window center, freeze the reported position there and treat the game's own
CGWarpMouseCursorPosition calls as motion. On Xwayland, which ignores warps
while the cursor is visible, this left League's cursor stuck in the middle.
The backend now keeps a frozen virtual cursor: physical motion only produces
deltas (deltaY positive downwards), application warps move the virtual cursor
and their echoes are dropped, mouseLocation returns it, and the pointer is only
warped back where the server honours warps. The grab no longer uses the
invalid FocusChangeMask and is released and retaken across focus changes.

setCursor: no longer re-sends XDefineCursor/XFlush when the window already has
that cursor; League set it about 190 times per second.

Also carries the opt-in input trace (/tmp/rclol-input-trace in the guest).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 15:14:06 +02:00
lucannez64 937e632bcf Prepare nested Metal layers before compositing
Traverse the layer tree before compositing so nested Metal layers consume queued drawables and recycle their pool. Add a nested presentation probe covering pool reuse and Vulkan-to-OpenGL pixel readback.
2026-10-16 13:55:09 +02:00
lucannez64 3d03548b54 Avoid blocking X11 cursor updates on a server round trip 2026-10-16 13:44:11 +02:00
lucannez64andClaude Sonnet 5.5 6d5d04ff71 Use optimal tiling for the drawable GL import on NVIDIA
NVIDIA's GL rejects GL_LINEAR_TILING_EXT with GL_INVALID_VALUE, so the
linear internal image could not be imported and the window stayed black.
Pick the tiling by GL_VENDOR; other drivers keep linear.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-16 11:16:53 +02:00
lucannez64andClaude Sonnet 5.5 0b555fa54d Implement flashWindow in the X11 backend so attention requests don't abort the UX
NSApplication's attention timer calls -[CGWindow flashWindow], which X11Window
did not override; the base class raised an uncaught abstract-invocation
exception and LeagueClientUx aborted (and restarted every ~50s). Mark the
window as demanding attention through _NET_WM_STATE instead.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-16 10:17:29 +02:00
lucannez64andClaude Opus 5.5 f7eef7d88a Make the CFHost cancel probe wait for delivery and reject completed lookups
Wait up to 2 s for the cancellation callback instead of one 50 ms run-loop
pass, count only callbacks without stored addresses so a completed lookup
cannot pass as a cancellation, print the failing stage, and have the runner
require the exact success line since Darling can exit zero after a trap.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 09:09:28 +02:00
lucannez64andClaude Sonnet 5.5 b6c87c9f4b Add announcement to README
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-16 09:02:14 +02:00
lucannez64andClaude Opus 5.5 908f88bad7 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]>
2026-10-16 02:17:51 +02:00
lucannez64andClaude Opus 5.5 6d06adf71a Skip ROCm's private LLVM when configuring Iridium
find_package(LLVM CONFIG) also searches <prefix>/llvm/lib/cmake/llvm for
every PATH entry, before the system prefixes. With /opt/rocm/bin on PATH
it found ROCm's LLVM 22.0.0git, whose llvm-config reports no shared
library, and 4e88b79's fallback to the llvm-config on PATH then rejected
the system LLVM 23 because its major differs from the ROCm headers, so a
fresh configure failed (issue #1).

Before find_package, keep LLVM_DIR only if the llvm-config next to it
reports a shared library; otherwise, or when LLVM_DIR is unset, use the
llvm-config on PATH that does and take its --cmakedir. A working pinned
LLVM_DIR is left alone.

Checked with a fake ROCm prefix on PATH: plain find_package picks it;
the new code picks /usr/lib/cmake/llvm (LLVM 23) on a fresh configure,
replaces a cached ROCm LLVM_DIR, and keeps a working cached
/usr/lib64/cmake/llvm. A standalone configure of Indium with the fake
ROCm on PATH completes with the system LLVM.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 02:07:33 +02:00
lucannez64andClaude Opus 5.5 60ebfda63f Prefer VRAM for GPU-only Metal memory and mark the GL import dedicated
Indium and QuartzCore took the first memory type a resource allowed. The
Vulkan spec orders a type with no flags before every DEVICE_LOCAL type,
and NVIDIA exposes such system-RAM types, so on NVIDIA private buffers,
textures and framebufferOnly drawables could land in system RAM. They
now take the first allowed DEVICE_LOCAL type and fall back to the old
choice; shared and managed resources are unchanged.

The drawable's exported image is a dedicated Vulkan allocation, but the
OpenGL import never set GL_DEDICATED_MEMORY_OBJECT_EXT, which
EXT_external_objects requires. Mesa ignores it; it is the suspected
cause of the black screen on NVIDIA in issue #3. The import's GL errors
were never checked (reportGLErrors is compiled out), so a failure was
silent.

/tmp/metal-device.log now lists the selected device's memory heaps and
types, the memory type chosen per resource kind (with the old choice and
changed=yes/no), and the result of the first drawable and semaphore
imports into OpenGL (later ones only on failure).

Practice match on the RX 6600: all choices changed=no, import
dedicated=yes with no GL errors, semaphore ok, match=yes. Not run on
NVIDIA.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 02:04:43 +02:00
lucannez64andClaude Sonnet 5.5 4e88b797fd Fall back to a matching llvm-config when the cached LLVM_DIR is stale
A leftover LLVM_DIR can point at a removed LLVM whose llvm-config exists
but whose library is gone, which made configure fail on LLVM 23 hosts.
Try the tools-dir llvm-config, then the one on PATH, and accept only one
that matches the header major and reports a shared library.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-16 00:41:15 +02:00