Commit graph

109 commits

Author SHA1 Message Date
MiTHRAL
6fcc96de18 netcode-revival: fix SetRelay deadlock + grant multiplayer privileges
Some checks are pending
Lint & Format Check / Format Check (push) Waiting to run
- Deadlock: SetRelay held the transport mutex while join()ing the receive
  thread, which needs the mutex to observe running_ and exit. With the 200ms
  recv timeout the thread woke and hit the lock -> a room/server change froze
  the game (every room keystroke reconnects the transport). StopThread now
  detaches the thread under the lock and joins WITHOUT it.
- XamUserCheckPrivilege denied everything, which is the gate the game's
  'create a party' flow checks (multiplayer sessions); grant requested
  privileges so the P2P session flow opens, and log the mask.
2026-08-28 13:52:20 -04:00
MiTHRAL
3229aa3632 netcode-revival: report LIVE sign-in by default
Some checks are pending
Lint & Format Check / Format Check (push) Waiting to run
The game gates its online/team flow on XamUserGetSigninState == 2 ('make a
team', 'connect to EA Nation' refused with error 1245 otherwise). rexglue
only returned 2 when user_live_signed_in was set, which defaulted to false,
so the game never opened its P2P session/invite flow. Default the cvar to
true so the netcode revival can reach the session code.
2026-08-28 13:38:11 -04:00
MiTHRAL
3ec27d115b netcode-revival: receive timeout on the relay transport socket
Some checks are pending
Lint & Format Check / Format Check (push) Waiting to run
The Run thread blocked in recvfrom with no SO_RCVTIMEO, so when there was no
inbound game traffic the 4s heartbeat never fired (the relay swept the
silent transport client after ~8s) AND StopLocked()'s join() deadlocked
SetRelay on a room change (hanging the ghost network loop). A 200ms receive
timeout wakes the loop regularly: the heartbeat keeps the transport alive
and shutdown/room-change joins complete promptly.
2026-08-28 13:28:58 -04:00
MiTHRAL
01fe706c13 netcode-revival: pack the relay wire structs + heartbeat + transport logging
- #pragma pack(push,1) on the wire structs (the relay's proto is packed; the
  transport's were not, which would inflate sizes and corrupt every datagram)
  plus static_asserts pinning sizes to 7/31/1410/25/801.
- Heartbeat re-JOIN every 4s so the relay never times the transport out.
- REXLOG info for connect/join/session-reply so the flow is observable.
2026-08-28 02:14:19 -04:00
MiTHRAL
bf3635d7ad netcode-revival: relay transport for the game's netcode (Phase 1b)
Some checks are pending
Lint & Format Check / Format Check (push) Waiting to run
Route the game's own RakNet UDP through the ghost relay so real internet
peers can play, with the server as a pure relay/NAT stabilizer:

- XNetTransport: a rexglue relay client (joins the same relay + room as the
  ghost client), a receive thread, and:
  - SendGame(): wraps a datagram addressed to a virtual 10.80.0.x peer in a
    relay Game payload and sends it OUTBOUND to the relay (no inbound
    reachability / port forwarding needed).
  - QuerySessions()/Sessions(): discovery - the room members that
    XNetQosLookup reports to the game's session search.
  - Receive injection: relayed Game payloads are pushed into the game's
    registered sockets via XSocket::QueuePacket.
- XSocket: SendTo() to a virtual address routes through the transport;
  RecvFrom() drains queued relayed packets first; sockets register with the
  transport on Initialize.
- XNetQosLookup: queries the relay and returns the room's members as
  discovered sessions (with their virtual addresses), signaling completion.
- XNetGetTitleXnAddr identity now shares one source of truth with the
  transport (same 10.80.0.x).

Wire structs are minimal copies of the game's ghost protocol (kept
dependency-free); the relay's version check refuses mismatches.
2026-08-28 02:11:24 -04:00
MiTHRAL
767bd6e4bc netcode-revival: implement XNet session/address layer (Phase 0)
Some checks are pending
Lint & Format Check / Format Check (push) Waiting to run
Make the game's RakNet-based netcode reach the session flow instead of
hard-failing on stubbed/looping XNet APIs:

- XNetGetTitleXnAddr: stable per-machine virtual identity (10.80.0.x +
  unique 6-byte abEnet from the profile XUID) - RakNet needs non-zero,
  per-machine MAC bytes for its GUID (zero broke RakPeer::Startup; identical
  MACs collide GUIDs).
- XNetXnAddrToInAddr / XNetInAddrToXnAddr / XNetServerToInAddr /
  XNetXnAddrToMachineId / XNetInAddrToString: resolve our virtual addresses
  instead of returning failure / '666.666.666.666'.
- XNetQosListen: accept session advertisement (was X_ERROR_FUNCTION_FAILED).
- XNetQosLookup: return success + empty XNQOS + signal completion (Phase 1
  wires the relay registry so it returns real sessions).
- XNetCreateKey/RegisterKey/UnregisterKey: generate/accept session keys.
- XNetConnect / XNetGetConnectStatus: report established.
- getsockopt: real basic reads (SO_* / TCP_NODELAY) off the native socket.
- XNetSetSystemLinkPort: accept.

Phase 1 (relay transport + session registry) builds on this.
2026-08-28 01:54:51 -04:00
MiTHRAL
395e1ce67d netcode-revival foundation: fix cvar registry teardown SIOF + imgui RasterizerGamma
Some checks are pending
Lint & Format Check / Format Check (push) Waiting to run
- cvar.cpp: the static FlagRegistrar destructors run during __cxa_finalize
  and touch the registry after its function-local statics are destroyed
  (static destruction-order fiasco) - the codegen tool segfaults at exit.
  Leak the registry/mutex/index so teardown order cannot bite.
- imgui_drawer.cpp: drop ImFontConfig::RasterizerGamma assignments (removed
  from imgui); keeps the build working with the modern imgui a fresh
  submodule checkout provides (the pinned imgui commit no longer exists).
2026-08-28 01:48:05 -04:00
mchughalex
7eb0faf778 ui: guarantee progress when shrinking a wizard info row value
Some checks failed
Lint & Format Check / Format Check (push) Has been cancelled
2026-07-24 20:47:39 +01:00
mchughalex
8ea87c6d4b ui: log the build title at startup 2026-07-24 19:54:03 +01:00
mchughalex
3b0328da62 core: never create executable host memory for guest pages 2026-07-24 19:40:35 +01:00
mchughalex
5aa8c4c727 system: embed a version resource in the windows runtime library 2026-07-24 19:40:35 +01:00
mchughalex
593f8774f6 vulkan: allow non-bit-exact render target transfers behind an opt-in cvar 2026-07-24 19:39:33 +01:00
mchughalex
9100b278b7 ui: measure guest FPS as frame intervals per second 2026-07-24 13:33:44 +01:00
mchughalex
ae6ea8e925 ui: scale the auto frame cap margin with the display refresh rate 2026-07-24 13:33:44 +01:00
mchughalex
79761cbdd5 ui: log guest present cadence statistics behind a debug cvar 2026-07-22 19:50:53 +01:00
mchughalex
134a1c8f5e graphics: include cstddef for size_t in native_rhi.h 2026-07-22 12:59:38 +01:00
mchughalex
41dd2d5cb4 d3d12: batch submissions to frame end while native output suppresses emulated draws 2026-07-21 13:24:29 +01:00
mchughalex
17caf72bdd graphics: attribute native-pass GPU time to per-stage profile buckets 2026-07-21 12:31:10 +01:00
mchughalex
95d2792585 ui: keep the plain ambient-occlusion and anti-aliasing labels 2026-07-21 12:06:19 +01:00
mchughalex
a3032e0e13 ui: technique-first labels for PCSS shadows, GTAO, MSAA, V-Sync and VRR 2026-07-21 12:05:12 +01:00
mchughalex
9cb923735e ui: name the PCSS technique and its cost in the soft-shadows description 2026-07-21 12:02:40 +01:00
mchughalex
f8da2d0900 core: block instead of yield-spinning in the timer queue dispatch thread 2026-07-21 11:35:49 +01:00
mchughalex
3e842e62a6 system: resolve user-facing paths against the app root so a macOS bundle keeps them beside the .app 2026-07-21 11:01:12 +01:00
mchughalex
705b78f53e system: flush logs and _Exit on quit for macOS and Linux instead of tearing down under live guest threads 2026-07-21 10:33:27 +01:00
mchughalex
f3089c790f d3d12: log the process VRAM usage and budget from the native RHI 2026-07-21 10:21:32 +01:00
mchughalex
f7d808a426 vulkan: use 64 MB VMA blocks so evicted cache memory returns to the OS 2026-07-21 10:21:32 +01:00
mchughalex
7cfe51d80d input: reconcile mouse-button binds released outside the window 2026-07-21 10:10:56 +01:00
mchughalex
8b50844a34 ui: controller input backend row in the settings menu 2026-07-21 10:10:56 +01:00
mchughalex
fb392e48f6 gpu: apply the half-pixel offset in host pixels under resolution scaling to fix resolve-boundary seams 2026-07-21 10:10:56 +01:00
mchughalex
f00a126494 system: keep the process heap lock unowned across close-time guest thread suspension and make the forced-exit watchdog heap-free 2026-07-21 09:14:58 +01:00
mchughalex
4972095c49 vulkan: overflow the native-RHI constant ring into fence-retired regions 2026-07-21 09:04:15 +01:00
mchughalex
540e20ef2a d3d12: release retired native-RHI resources on a dedicated thread 2026-07-21 06:06:18 +01:00
mchughalex
a50f2c8a43 graphics: tighten retirement drain budgets and surface frame-maintenance timing 2026-07-21 05:51:30 +01:00
mchughalex
2a234c6b7c vulkan: default the scaled-resolve texture-load fast paths off 2026-07-21 05:24:35 +01:00
mchughalex
aa0f046ecf graphics: cut native-RHI churn stalls (batched view retirement, bounded drains, buffer bind classes, rebind skip) 2026-07-21 05:24:35 +01:00
mchughalex
7466d3c75e ui: forced-exit watchdog on window close for every platform 2026-07-21 03:31:06 +01:00
mchughalex
1cd0113ff2 graphics: wide guest output for native ultrawide, drop the emulated Hor+ classifier 2026-07-20 00:36:07 +01:00
mchughalex
66c42a571c ui: modifier chord support in the keybind registry 2026-07-20 00:08:07 +01:00
mchughalex
8642f6fe12 build: use a plain ASCII hyphen in the unsupported-architecture message 2026-07-19 23:37:10 +01:00
mchughalex
8130e534bc system: per-content-type root overrides in ContentManager 2026-07-19 23:18:43 +01:00
mchughalex
9181630ece graphics: suppress emulated draws by default while native output is active 2026-07-19 23:00:15 +01:00
mchughalex
09e6b66685 ui: note the renderer indicator's auto-show in its settings row 2026-07-19 22:59:34 +01:00
mchughalex
2365c9784e core, ui, graphics: quiet debug defaults, log session pruning, settings persistence fixes 2026-07-19 22:45:28 +01:00
mchughalex
b6c738c8e1 graphics: on-disk cache for runtime-compiled shader bytecode 2026-07-19 19:50:31 +01:00
mchughalex
4a6e9afacb ui: bloom and volumetric lighting settings rows 2026-07-19 19:50:22 +01:00
mchughalex
9f91f90d60 graphics: runtime backend selection for dual-backend builds 2026-07-19 19:40:18 +01:00
mchughalex
fbd4e06a34 ui: enhanced sun-shadow settings rows 2026-07-19 18:57:39 +01:00
mchughalex
f8cbe94367 graphics: rate-limit the targeted preview-resolve readbacks 2026-07-19 18:57:28 +01:00
mchughalex
b4d018c405 ui: draw distance and world streaming settings rows 2026-07-19 18:23:58 +01:00
mchughalex
8007e4238a settings: scale the advanced cvar overlay with the display 2026-07-19 15:39:56 +01:00