Commit Graph
365 Commits
Author SHA1 Message Date
Claude f7ca5ecbd6 Keep debug labels out of the ImGui passes in normal builds
Aurora's own debug groups only exist when AURORA_GFX_DEBUG_GROUPS is
defined, but the three ImGui passes (desktop overlay, host-frame overlay
and the headset settings panel) pushed and popped theirs in every build.
An Adreno 740 Android driver (512.676) faults in
vkCmdEndDebugUtilsLabelEXT on the first overlay pass (KartPad #321); the
Quest 3 uses the same GPU. Gate all three like the rest of Aurora.

Ported from chrissotraidis/wiicompiled (KartPad) 420b828, extended to the
two extra passes this fork has.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019rLZ24cFcqTNBmb4w2dpSq
2026-10-05 15:55:43 +00:00
Chris SotraidisandClaude Opus 5.5 c5f9ca3e2d Cache bounded DVD host file handles per thread
Ported from chrissotraidis/wiicompiled (KartPad) affabbd17756f2e38fb8679042895f287d666e18.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019rLZ24cFcqTNBmb4w2dpSq
2026-10-05 15:54:42 +00:00
Chris SotraidisandClaude Opus 5.5 8e9e905b85 Decode Yaz0 through guarded host buffers
Ported from chrissotraidis/wiicompiled (KartPad) 97cdc9a3609b6d3ad43009f76be17361b1a9e93a.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019rLZ24cFcqTNBmb4w2dpSq
2026-10-05 15:54:42 +00:00
Chris SotraidisandClaude Opus 5.5 03db602a05 Bulk-copy DVD DMA into non-executable guest RAM
Ported from chrissotraidis/wiicompiled (KartPad) ec14a0dddacbd1267de159215ba39d5f19633164.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019rLZ24cFcqTNBmb4w2dpSq
2026-10-05 15:54:41 +00:00
DarthMandClaude Opus 5.5 77333709ae Keep a TLS session that failed a write instead of deleting its socket
When an mbed TLS write timed out, SslWrite called DeleteWiiSocket, which
closed the game's socket and cleared its SSL slot while the game still
held both ids. A later SSL_NEW could then hand the same slot out under
the old id. Now a failed write marks the session failed and shuts the
host socket down; later reads, writes and handshakes on it fail until the
game tears the session down itself.

Ported from DarthMDev/Wiicompiled a2ecc0f (network_ssl.cpp part) and
fcf8646, both on upstream PR #258.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019rLZ24cFcqTNBmb4w2dpSq
2026-10-05 15:54:41 +00:00
mitch030504 cfd434fac8 Merge pull request #9 from mitch030504/claude/project-thread-lokepv
Port five small fixes from other WiiCompiled forks
2026-10-05 17:52:18 +02:00
Claude 93df677470 Fix the guest page size at compile time for the Steam Frame build
Every translated guest load and store tests RequiresCheckedAccess(). On
x86-64 and Windows that is a compile-time false, but on AArch64 it read
a global flag, which under PIE is a GOT load plus a byte load and a
branch on every access, re-read after every guest store. The flag is
only true on kernels with pages larger than 4 KiB.

The Steam Frame's SteamOS kernel uses 4 KiB pages (getconf PAGESIZE on
the headset reports 4096), so the native --headset steam_frame build now
folds the test away like x86-64 does. GuestFlat::Initialize checks the
page size at startup in that build and refuses to start with a clear
message if it is ever anything else. Android and other AArch64 builds
still probe at runtime.

Checked with clang --target=aarch64-linux-gnu -O2 -fPIE: a FlatRead32
loop loses both flag loads and the checked Memory::Read32 fallback.

Follows the finding from nx-mod/wiicompiled-nx 18ef16f6, which made the
flag hidden instead; a compile-time constant removes it entirely.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018NKSMYZU43wUfYtm1sxGsC
2026-10-05 15:22:17 +00:00
Claude 8f725001de Refill WC24 bootstrap files that were left empty
Bootstrap seeding only created missing files, so a WC24 file that had
been emptied (nwc24dl.bin, nwc24fl.bin, misc.bin) stayed at zero bytes
on every boot. WC24 rejects a zero-length download or friend list and
MKW reports that as a save error, which matters now that #7 lets KD
open while offline. A file is re-copied only when it is empty and the
payload's copy is not, so player data is never replaced.

Adapted from nx-mod/wiicompiled-nx d0149e66. That version falls through
to copy_file with copy_options::none, which fails on the existing empty
file; this one overwrites in that case only.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018NKSMYZU43wUfYtm1sxGsC
2026-10-05 15:20:02 +00:00
Claude e49ec771c3 Add NEON forms of the AX mix kernels
On arm64 the AXWii mix (ramped mix-add, volume envelope, aux returns
and the big-endian bus marshalling) ran the scalar loops, since only an
AVX2 form existed. The Neon forms do eight 16-bit samples per step as
two int32x4 halves and keep the scalar loops for the tail.

The header part of rooklz's 43463622; its other changes are left out.
A new test checks every vector form against the scalar loops at every
tail length and at the ramp and clamp extremes; it passes under
qemu-aarch64 (NEON), with -mavx2 and with neither.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018NKSMYZU43wUfYtm1sxGsC
2026-10-05 15:18:43 +00:00
Claude db8afbb3a9 Don't write depth while the Z compare is off
On the hardware (and in Dolphin) GXSetZMode with the compare disabled
leaves the Z buffer alone even when the update bit is set. Aurora still
wrote depth, so a full-screen quad drawn that way (the darkening during
Stormship's lightning, for one) marked the whole screen nearest and
every depth-tested draw after it failed until it faded.

Ported from BlackAndBlue95/Strikers-WiiCompiled 369ec992. The pipeline
cache key already includes depthUpdate, so no cache version bump.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018NKSMYZU43wUfYtm1sxGsC
2026-10-05 15:16:25 +00:00
Claude 755fb0e332 Save Config.toml through a temporary file and rename
The in-game settings bar rewrote Config.toml in place with a truncating
open, so a crash or a full SD card mid-save could leave it empty or cut
short. Settings are now written beside the file and renamed over it, and
a file that exists but can't be read is no longer rewritten from nothing.

Ported from BlackAndBlue95/Strikers-WiiCompiled 435daf3e (the
runtime_config.h part only).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018NKSMYZU43wUfYtm1sxGsC
2026-10-05 15:16:02 +00:00
mitch030504 f2f4f081c8 Merge pull request #8 from mitch030504/claude/project-thread-by97b7
Port upstream renderer fixes and stop spinning on staging buffer maps
2026-10-05 15:48:16 +02:00
Claude 897899a5f9 Sleep instead of spinning while waiting for a staging buffer
When the GPU is two frames behind, begin_frame waits for the next
staging buffer's MapAsync. It used to spin on ProcessEvents, holding a
whole core busy for as long as the GPU took. It now calls ProcessEvents,
checks for device loss, then sleeps on a condition variable until the
map callback lands or 1 ms passes.

The map state also carries a generation, so a callback from a request
that shutdown or a rotation already retired can no longer mark the
current buffer mapped or unmapped.

From upstream patchzyy/Wiicompiled 6f14bde (#244, KartPad batch).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg7mB8ogCWmp9GH19Uc82B
2026-10-05 13:35:51 +00:00
Claude c8220c0c11 Report graphics startup failures instead of aborting
When no backend could create a window and a WebGPU device, aurora hit
an ASSERT and the process aborted with only SDL's last error in the log.
Keep the first adapter, device or window error, return it from
aurora_initialize with a new initializationStatus, and have the runtime
throw it so the existing fatal popup and fatal log record the reason.

ImGui shutdown now skips backends that never initialized, so the
shutdown that follows a failed start does not crash.

From upstream patchzyy/Wiicompiled 6f14bde (#244, KartPad batch).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg7mB8ogCWmp9GH19Uc82B
2026-10-05 13:33:43 +00:00
Claude c91c1b289c Allow copying out of the EFB copy source snapshot
When a copy with clear snapshots its source, the plain-copy path reads
the snapshot with CopyTextureToTexture, but the snapshot texture was
created without CopySrc usage.

From upstream patchzyy/Wiicompiled 6f14bde (#244, KartPad batch).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg7mB8ogCWmp9GH19Uc82B
2026-10-05 13:31:09 +00:00
Claude a23fd087ee Fix native EFB readback blits on BGRA surfaces and their Y clamp
The shared blit shader clamps the sampled Y to flags.z..w, but the
native readback uniform set flags.w to 0, so every row sampled row 0.
The blit pipeline was also built only for the surface format, while the
readback draws into an RGBA8 texture; on a BGRA surface (the usual
Linux/Vulkan choice) the pipeline and attachment formats disagree, which
release builds no longer catch because Dawn validation is skipped.

Build blit pipelines for RGBA8, BGRA8 and the surface format, and pick
one by destination format. The Quest 1 simple blit path is unchanged.

From upstream patchzyy/Wiicompiled 6f14bde (#244, KartPad batch).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg7mB8ogCWmp9GH19Uc82B
2026-10-05 13:31:08 +00:00
Claude 4407013d61 Check TEV register packing by content instead of uniform size
The test expected one extra TEV register to grow the uniform by exactly
16 bytes, but the allocation is alignment-rounded, so it failed on the
fork's baseline. Build the uniform and check that the register and the
K color after it are packed next to each other instead.

From upstream patchzyy/Wiicompiled 6f14bde (#244, KartPad batch).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg7mB8ogCWmp9GH19Uc82B
2026-10-05 13:29:26 +00:00
Claude 20ef08b3b8 Decode the first GEN_MODE write even when it is all zeros
The BP register cache skips writes equal to the cached value, and the
cache starts at zero. A cold GEN_MODE write of zero (one TEV stage, no
culling, no channels or texgens) was therefore dropped, leaving the
decoded state at zero TEV stages until some other GEN_MODE value arrived.
Seed the cache's register ID byte so the first write always decodes.

From upstream patchzyy/Wiicompiled 6f14bde (#244, KartPad batch).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg7mB8ogCWmp9GH19Uc82B
2026-10-05 13:29:26 +00:00
Claude b361ecd54c Stop draws from merging or reading past their own vertices
Incomplete primitives no longer emit indices: quads drop a one- or
two-vertex tail and draw a three-vertex tail as a triangle, triangle
lists ignore leftover vertices, and fans or strips under three vertices
emit nothing. Draws with no complete primitive are skipped. Previously an
incomplete quad indexed vertices that belonged to the next merged draw,
or past the end of the buffer.

Merging now stops before the 16-bit index offset would wrap, never folds
triangles into a single-instance line or point draw, and breaks after
GXInvalidateVtxCache or a vertex-format switch, so the next draw uploads
fresh arrays and uses its own format's shader.

From upstream patchzyy/Wiicompiled 6f14bde (#244, KartPad batch).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg7mB8ogCWmp9GH19Uc82B
2026-10-05 13:29:17 +00:00
Claude c12b6b7d99 Treat pipeline cache rows with inconsistent sizes as misses
Dawn asks for a blob's size before allocating and copying it. A row whose
stored length, declared size or zstd frame size disagree, or whose
compression flag is unknown, made it allocate the declared size and copy
or decompress past the stored blob. Such rows are now logged and skipped.

From upstream patchzyy/Wiicompiled 6f14bde (#244, KartPad 70951022).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg7mB8ogCWmp9GH19Uc82B
2026-10-05 13:17:48 +00:00
Claude 5bf1904ca8 Lock the video render mode against concurrent readers
VIConfigure writes the mode on the game side while the GX thread, the
frame worker and the window code read its size. The resize request is
made after the lock is released.

From upstream patchzyy/Wiicompiled 6f14bde (#244).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg7mB8ogCWmp9GH19Uc82B
2026-10-05 13:17:48 +00:00
Claude a0f97d307d Read packed three-byte vertex attributes without touching the next word
load_u24 and raw_fetch_u8_3 read a whole 32-bit word pair even when the
three bytes sit in the first word, so an attribute at the end of its
binding read past it. Release builds disable Dawn's robustness, so that
read isn't clamped.

From upstream patchzyy/Wiicompiled 6f14bde (#244, KartPad 0f6b274).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg7mB8ogCWmp9GH19Uc82B
2026-10-05 13:17:47 +00:00
Claude 491d39503e Wake every pipeline waiter when shader work is queued or promoted
Compiler workers and renderer waiters share g_pipelineCv. notify_one could
wake a renderer thread instead of a compiler, leaving a queued pipeline
until some later wake-up; with skip_unready_pipelines its draws stay
missing that much longer. Promoting a background build to priority now
wakes the workers too.

From upstream patchzyy/Wiicompiled 6f14bde (#244, KartPad 956d811e).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg7mB8ogCWmp9GH19Uc82B
2026-10-05 13:17:47 +00:00
mitch030504 a132a82952 Merge pull request #7 from mitch030504/claude/project-thread-ix2nko
Port upstream game fixes: Linux TLS, saves across drives, controllers, alarms
2026-10-05 15:15:42 +02:00
Claude cfb9623e83 Bundle the TLS root certificates in the Android app
The mbed TLS path looks for cacert.pem in the runtime resources folder on
Android, the same place as dsp_coef.bin.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011tcyLz63pXjoYEwsFjfg8F
2026-10-05 12:58:11 +00:00
Claude 35e045f9f7 Port the runtime and translator fixes from upstream's KartPad batch
From patchzyy/Wiicompiled 6f14bde (#244), runtime and translator parts only:
- Keep KD and NCD devices available while networking is off; only IP and
  SSL need the network.
- Run RFLiIsWorking's alarm pump in a private interrupt context so callback
  register writes don't clobber the caller, and release the alarm recursion
  guard before rescheduling.
- Share one LR continuation dispatch per translated function when it has
  several continuation calls.

The renderer half of that commit is left out: it conflicts with the stereo
renderer, and upstream reverted part of it (e409d9f) for stutters.

(cherry picked from part of commit 6f14bde26a4ed6390d4f18e1b3a9c1be6819d589)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011tcyLz63pXjoYEwsFjfg8F
2026-10-05 12:58:10 +00:00
dorPXP 504ea792da Add TLS support for non-Windows devices (#144)
* Implement real TLS for non-Windows via vendored mbed TLS

Windows gets TLS for the guest network HLE's SSL ioctlvs for free from
Schannel; every other platform fell into a stub that always returned
failure, meaning any HTTPS-based network feature (WFC login, fetching
the Retro-WFC payload) silently could not work at all on those
platforms regardless of server availability.

Vendors mbed TLS 3.6.7 LTS under runtime/third_party/mbedtls (same
convention as Crypto++/pugixml - a real source checkout, not a
submodule/FetchContent download) and a standard Mozilla CA bundle
(runtime/assets/certs/cacert.pem, via curl.se's redistribution) copied
next to the built product the same way dsp_coef.bin already is.

Verified against real HTTPS servers: a valid certificate completes the
handshake and an HTTP round-trip; a known-expired certificate is
correctly rejected with a real X509 verification failure, not silently
accepted.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qmdewk7VfVVJTfCVd2WStu

* Fix TLS handshake hang and partial-write truncation on non-Windows

Add a POSIX socket timeout to match Windows' existing 15s one, plus a
deadline on the handshake retry loop itself, so a peer that accepts the
TCP connection but never sends TLS data can no longer hang the thread
forever. Also fix SslWrite to loop on partial mbedTLS writes instead of
returning the first partial count, and add mbedTLS to
THIRD-PARTY-NOTICES.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Fetch mbedTLS from a pinned, checksum-verified release instead of vendoring it

Replace the committed mbedTLS source tree with a CMake FetchContent download
of the official mbedtls-3.6.7 release tarball, verified against its signed
SHA-256, matching how aurora-main's own dependencies (SDL, zlib, etc.) are
pulled in. Ships the compiled dependency instead of ~280 tracked upstream
files. CA bundle packaging and THIRD-PARTY-NOTICES.md coverage are unchanged.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Limit the mbedTLS dependency to the platforms that use it

The FetchContent block ran on every platform, including Windows, whose builds
configure with FETCHCONTENT_FULLY_DISCONNECTED=ON against the offline
dependency set from Launcher/Prepare-Dependencies.ps1 - which has no
mkw_mbedtls_upstream entry, so a clean Windows configure failed. Windows
compiles the Schannel path (network_ssl.cpp is `#ifndef _WIN32` for mbed TLS)
and never links mbed TLS, so nothing needs preparing there: the fetch, the
linkage and the cacert.pem copy are now guarded to non-Windows, while the
mkw::mbedtls alias stays defined everywhere so the link lines in
PublicProducts.cmake remain platform-independent.

Also copy cacert.pem alongside the installed executable in the Linux and macOS
publication paths (Launcher/local-build.sh and Launcher/macos/publish-app.command),
which already copied the other runtime assets but left the TLS root bundle in
the build directory, so published builds could not verify any certificate.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Harden mbed TLS socket I/O handling

* delete wii socket

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: patchzyy <64382339+patchzyy@users.noreply.github.com>
(cherry picked from commit b59e035b872752df8bfc637bba79689c12abf292)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011tcyLz63pXjoYEwsFjfg8F
2026-10-05 12:56:13 +00:00
patchzyy f87732d0ad add bltl (#254)
(cherry picked from commit 583e702547d0347d4634d48a314fc8dd3de75db2)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011tcyLz63pXjoYEwsFjfg8F
2026-10-05 12:56:13 +00:00
Michael G 152c4f5f38 Fix controller mapping platform, player index sync, and socket errors (#251)
* Fix macOS controller platform, sync player indices, and preserve socket send error

- Preserve captured socket send error across diagnostic logging in network_socket.cpp
- Use SDL_GetPlatform() instead of hardcoded Windows in controller mapping wizard
- Synchronize Aurora and SDL player indices on port assignment and clear in pad.cpp
- Auto-assign Player 1 on macOS when unconfigured in input.cpp

* fix(input): refine macOS port 0 assignment and persistence logic

- Persist port 0 preference for newly connected controller even if already assigned player index 0
- Verify controller has no preference on other ports before assigning to port 0

(cherry picked from commit 85f250155f8f397c1c463dc51dd4dc2707371d06)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011tcyLz63pXjoYEwsFjfg8F
2026-10-05 12:56:12 +00:00
Daan Vervacke 794b715d31 [Linux] Handle NAND moves across mount points (#212)
* Fix NAND moves across mount points

* Harden cross-mount NAND move fallback

* Preserve directory copy on NAND move cleanup failure

* Clarify NAND move cleanup behavior

* Use exclusive scratch paths for NAND moves

* Copy NAND move directories into reserved destination

* Publish NAND move directories without replacement

(cherry picked from commit 83463764b8acda394e058b0c689a10b8561fc380)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011tcyLz63pXjoYEwsFjfg8F
2026-10-05 12:56:12 +00:00
mitch030504 a532ffa6f3 Merge pull request #6 from mitch030504/claude/project-thread-asqg38
Port Retro Rewind install, adaptive resolution and a scene-load crash fix from VR-PLUS
2026-10-05 14:45:27 +02:00
mitch030504 ced586d159 Merge branch 'openxr-work' into claude/project-thread-asqg38 2026-10-05 14:45:11 +02:00
mitch030504 f038958c6f Merge pull request #5 from mitch030504/claude/frame-diagnostics
Add a Steam Frame diagnostics script
2026-10-05 14:38:32 +02:00
Claude 94bfc555c8 Add adaptive resolution for the immersive eyes
[vr] adaptive_resolution (off by default, in the VR tab) lowers the
race's eye resolution by 10% steps, down to 70%, while new eye frames
fall below 85% of the game's 60 FPS, and raises it again after three
seconds on time. Adapted from heurazy/Wiicompiled_VR-PLUS.

The eyes render into the top-left corner of the full swapchain image
and the projection layer shows only that corner, so the compositor
upscales them and no swapchain is recreated, unlike render_scale. The
Linux same-device bridge now copies an eye smaller than its target;
the Quest's bridge and layer already did. The PC's D3D12 path copies
whole eyes, so the setting is not offered on Windows.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sabhzu6VgoWcHtpSk4C9KZ
2026-10-05 12:35:26 +00:00
Claude 00034b17fc Install script: build and install Retro Rewind with --retro-rewind
The Steam Frame install script built only the base game. With
--retro-rewind it now fetches the Retro Rewind pack from Retro Rewind's
update server, as the Quest app and Wheel Wizard do: the full download
once, then each published update and its deletions. It also fetches the
Retro-WFC payload online play needs, builds both products from one
translation, copies the pack beside the disc on the Frame, sets
[paths] retro_rewind_root and adds RetroRewind to the Steam library.
--retro-rewind-pack uses a RetroRewind6 folder the player already has.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sabhzu6VgoWcHtpSk4C9KZ
2026-10-05 12:35:26 +00:00
Claude 6b0251e6d6 Keep the position descriptor that GXClearVtxDesc leaves set
Nintendo's GXClearVtxDesc, and Aurora's, keep GX_VA_POS at GX_DIRECT. The
HLE mirror cleared it to GX_NONE, so the next draw could publish no
position attribute and abort shader generation while a scene loads.
Keep the mirror in step, and give the shader a zero position if a
stream still arrives without one.

Ported from heurazy/Wiicompiled_VR-PLUS (c2b2500).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sabhzu6VgoWcHtpSk4C9KZ
2026-10-05 12:27:23 +00:00
Claude 89e1dee867 frame-diagnostics: say more in the summary
Whether the game is running, the executable's date when the log has no
version, and why the pacing section is empty.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Si2P8og5nXduJ4xdh9GzG
2026-10-05 12:22:20 +00:00
Claude 92fb438c24 Add a Steam Frame diagnostics script
Launcher/frame-diagnostics.sh collects the newest run logs and crash files,
Config.toml, the install, SteamVR logs and OpenXR runtime, GPU/Vulkan info
and system state from the Frame over SSH into one .tar.gz, with a
summary.txt that checks the README's startup steps.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Si2P8og5nXduJ4xdh9GzG
2026-10-05 12:20:36 +00:00
mitch030504 56b853d5ef Merge pull request #4 from mitch030504/claude/peaceful-keller-2ek99b
Add the frame-beta-2 release notes
2026-10-05 09:34:24 +02:00
Claude 9bad7123de Add the frame-beta-2 release notes
The second beta brings the one-command installer and the README quick
start; the game and Dawn are unchanged since frame-beta-1. The release
workflow's manual run now defaults to this tag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
frame-beta-2
2026-10-05 07:31:01 +00:00
mitch030504 16c4e703dd Merge pull request #3 from mitch030504/claude/peaceful-keller-2ek99b
README quick start with a one-command Steam Frame installer; drop docs/steam-frame.md
2026-10-05 09:30:10 +02:00
Claude 1a42dfc382 Install script: take a .zip or .7z holding the disc image
An archive is recognised by its first bytes, unpacked into the work dir
with whichever unpacker the machine has (7-Zip, bsdtar, unzip, Python's
zipfile, or bsdtar in a container of the machine's own architecture), and
every file in it is offered to nodtool, largest first. The RMCP01 image
wins; another region's disc is passed on so the ID check names it. The
unpacked files are removed once the disc is extracted, or when no disc is
found.

Tested each unpacker with zip and 7z archives holding an RVZ in a
subfolder, an archive holding NTSC and PAL images, an NTSC-only one, one
with no disc, a password-protected zip and truncated archives.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
2026-10-05 07:13:56 +00:00
Claude e223ad511d Install script: check the disc's ID and accept more disc layouts
Tested with a synthetic RMCP01 Wii disc built with nod and converted to
encrypted ISO, WBFS and RVZ: all three extract, and main.dol and
StaticR.rel come out byte-identical. nodtool reads the format from the
file, so a misnamed image works too.

- Stop before building unless boot.bin says RMCP01, naming the release
  (RMCE01 and the like) when it is another region; a wrong extraction in
  the work dir is removed so the next run starts clean.
- Accept extracted folders whose partition sits in a subfolder (DATA/).
- Explain unreadable files (a .zip, say) instead of nodtool's bare error.
- Extract quietly: the real disc has thousands of files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
2026-10-05 07:05:26 +00:00
Claude 06861dbb9a Add a Steam Frame install script and base the quick start on it
Launcher/steam-frame-install.sh does the whole quick start in one command:
it downloads the newest release (or builds the tree it is in), extracts the
disc with nodtool, builds in a long-lived Debian ARM64 container (podman or
docker, under qemu on x86_64), copies the game and disc to the Frame over
SSH (or locally with --frame local), points Config.toml at the disc, and
registers the game with Steam through Valve's devkit tools when present.
Running it again updates: only changed source files are replaced, so the
build recompiles just those and Dawn is reused.

The README's quick start now runs the script; the manual steps move to a
"Building by hand" section.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
2026-10-05 06:42:45 +00:00
Claude 3a027d71dc Base the quick start on releases instead of a git clone
The quick start, the on-Frame build and updates now download a release's
source tarball. Updates copy only the files whose content changed (rsync -c),
which stamps them with the current time: unpacking over the source would
restore commit dates that can be older than the last build, and the build
would skip the changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
2026-10-05 06:30:59 +00:00
Claude 0a3bcc99bd Fold the Steam Frame guide into the README, with a quick start
docs/steam-frame.md is gone. The README now opens with a quick start that
goes from the disc to playing (emulation setup, disc extraction, the
container build, installing with Frame Control, updating), and carries what
the guide held that a player or contributor needs: recommended settings, the
Frame controller map, known issues, troubleshooting (log lines, the pacing
line, crash backtraces), building on the Frame or with Docker (including
Unraid's qemu registration), how the native build works and why the Android
flavour cannot show a picture. Links to the old guide point at the README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
2026-10-05 06:22:35 +00:00
mitch030504 26c8305c80 Merge pull request #2 from mitch030504/claude/peaceful-keller-2ek99b
Steam Frame beta: device fixes, 120 Hz pacing, README and release
frame-beta-1
2026-10-05 08:18:41 +02:00
Claude 6baf85bf10 Give the synthetic recompilation test a stand-in for func_801284B4
ax_effects.cpp calls the guest function func_801284B4 directly, since
upstream commit e7b670b, but the synthetic DOL test never generated a
stand-in for it, so its Windows runtime link failed with an undefined
symbol. This was hidden on openxr-work, where the workflow had not run.
The list now covers every guest function the runtime calls directly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
2026-10-05 06:13:10 +00:00
Claude d119b4206a Declare the repeat-frames checkbox state outside the standalone block
The checkbox is drawn on every platform, but its variable was declared
only under MKW_VR_STANDALONE, so the Windows runtime failed to compile
(settings_overlay.cpp: use of undeclared identifier 'g_vrRepeatFrames').

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
2026-10-05 05:42:39 +00:00
Claude 58ceaf6f9c Let the Steam Frame release run by hand, creating its tag
Tags cannot always be pushed from where a release is prepared. Run from the
Actions tab, the workflow creates the tag on the run's commit through
gh release create --target instead of requiring a pushed tag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
2026-10-05 05:32:03 +00:00