GUIDES / COMMUNITY FIELD GUIDE

Browser, WebGPU & Resolution Settings

Understand WebGPU, native versus scaled resolution, cross-origin isolation, and the limits of the author's PS2 Web Recomp performance reports.

Documentation-based guide. Reviewed against the cited source revision. These instructions have not been independently tested by this community.

This guide follows the project README and a review of the browser runtime source at the listed commit. Source-code observations below describe the checks the page implements; we have not independently run those checks or tested the browser matrix. Browser availability changes, so record your actual browser version rather than treating its name as a compatibility or performance guarantee.

Pass the runtime’s startup checks

WebGPU is only one browser requirement. The pinned web/shell.html checks all of the following before enabling its Start action:

Runtime check What the source checks
Cross-origin isolation window.crossOriginIsolated must be true.
WebAssembly JSPI WebAssembly.Suspending must be available as a function.
WebAssembly exception handling A small module using try_table must validate.
WebAssembly tail calls A small module using a tail call must validate.
WebAssembly SIMD A small module using SIMD must validate.

These are source-code-derived requirements, separate from the README’s performance reports. A browser can expose WebGPU and still fail another gate. The runtime lists missing conditions and labels the Start action as unsupported when a gate fails.

If that happens, copy the exact missing-feature message and the browser version. Use the supplied local server for the isolation requirement, as described below. The WebAssembly checks also depend on browser implementation; the required server headers cannot add a missing WebAssembly feature. No tested Safari, Firefox, or mobile-browser version matrix is established by this community.

Start with the GPU renderer

The project uses WebGPU compute shaders for its Graphics Synthesizer renderer. The README identifies Chrome and Edge on Windows and macOS as having WebGPU support. That is the author’s guidance for this source snapshot, not confirmation that every release of either browser passes all the startup checks above. It says WebGPU is disabled by default in Chrome and Chromium on Linux for the setup it describes.

For Linux, the author’s documented procedure is to enable chrome://flags/#enable-unsafe-webgpu and chrome://flags/#enable-vulkan, then restart the browser. These are experimental browser settings. Treat the instructions as version-dependent and record any changed flags in a report; the reviewed source provides no browser version number.

If no usable WebGPU adapter is found, the page falls back to a software renderer. The author considers that useful for menus and too slow for 3D gameplay. Reaching a menu through this fallback does not establish that hardware rendering is working.

Choose an internal resolution

The renderer supports one, two, or three times native internal resolution. The resolution selector reloads the page. Export a memory-card backup before making setup changes, and save your in-game progress before a reload.

For a useful comparison, start at 1×, reach the same scene, and then repeat at a higher scale. Keep the browser, power conditions, and game scene consistent. Record the scale explicitly: a reported frame rate without a scene and resolution cannot support a meaningful comparison.

Author’s documented scene Internal resolution Author’s reported result
Gran Turismo 4, PAL race 2× native 50 fps
God of War II, heavy combat 1× native 60 fps
God of War II, combat context 2× native 48–60 fps

The source attributes these browser results to Chrome on a laptop with integrated graphics. It does not name the CPU, GPU model, operating system, browser version, exact track or combat sequence, or pixel dimensions. These are author reports, not independent benchmarks or promised results for your machine. See each game record for its full evidence boundary.

Serve the page with the required headers

The runtime uses SharedArrayBuffer for threads. The author’s hosting instructions require:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

The provided scripts/serve.py sends both headers and handles the HTTP Range requests used to stream the disc. Follow Getting Started for its command. A general static file server may not have the same behavior. These requirements apply to the generated game runtime, rather than this static community documentation site.

Record a graphics problem

On dual-GPU laptops, the author notes that a canvas rendered on the discrete GPU may fail to display. The page includes adapter selection and a 2D-canvas copy fallback for that case; this is a documented mitigation, not a guarantee for every GPU.

When reporting a blank display, corruption, or low frame rate, include the GPU model, browser version, resolution scale, exact scene, console output, and whether WebGPU was available. Keep historical implementation bugs separate from a current reproduction. The troubleshooting page explains that distinction, and the browser check checks WebGPU and the required WebAssembly features on this device.

Sources & verification

Evidence: Project author documentation. This community has not independently run the game or verified these instructions.

Source checked:
Version basis: ebf86d3b8fa915d38cb070bfd70b6b41669816d5

These notes describe the reviewed source revision. Newer upstream changes may require different steps. Suggest a correction with evidence.