System Requirements, AMD FSR 3.1 / 4 & xc2.ini Reference
Hardware floor enforced by XC2-Setup’s pre-flight check, plus how to configure internal resolution (up to 3040x1710), AMD FSR 3.1 / FSR 4 upscaling, Frame Generation, and thread scheduling in xc2.ini.
- CPU: x86-64 with AVX2 (
x86-64-v3) - GPU: Vulkan 1.3 +
VK_EXT_external_memory_host - Max internal res:
~3040x1710 - Upscalers: FSR 1, FSR 3.1.6 & FSR 4.1.2

Minimum & recommended PC hardware requirements
Before extracting any files, Stage 1 of XC2-Setup runs a hardware check on your CPU, GPU, operating system, and target disk. If any mandatory feature is missing, setup stops immediately with a single diagnostic message:
| Component | Minimum Requirement (Enforced by Setup) | Recommended for 60–120+ FPS & High Resolution |
|---|---|---|
| Operating System | Windows 10 (64-bit) or later · Linux kernel 6.7+ with glibc 2.34+ (Ubuntu 22.04+, Debian 12+, Fedora 35+, SteamOS 3) | Windows 11 23H2/24H2 or Linux 6.8+ with recent Mesa RADV / NVIDIA drivers |
| CPU | x86-64 processor with AVX2 instruction set (compiled with -march=x86-64-v3) | 6-core / 12-thread or faster modern desktop/laptop CPU (24-core completes first build in ~8 min) |
| GPU & Vulkan | Vulkan 1.3 capable GPU supporting VK_EXT_external_memory_host | Discrete NVIDIA GeForce RTX 30/40 series or AMD Radeon RX 6000/7000/9000 series (4 GiB+ VRAM) |
| System Memory | 8 GB RAM (machines under 12 GB with an iGPU default to memory = import) | 16 GB+ dual-channel RAM (allows memory = mirror with ~1.3 GiB mirror buffer budget) |
| Storage Space | ~25 GiB free during setup (~20 GiB after setup finishes) | NVMe SSD for fast multi-threaded BKTR RomFS merge and shader cache reads |
Internal resolution, 3D render scale & AMD FSR 3.1 / FSR 4
Xenoblade Chronicles 2 renders on Switch at 1280x720 with dynamic 3D resolution scaling and temporal anti-aliasing (TAA). XC2 Recomp gives you three independent resolution and upscaling stages in the F1 → Display menu or under [display] in xc2.ini:
- Game Resolution (
output_res): The internal canvas size at which the game draws its picture and UI. Starts at1280x720and scales up to roughly3040x1710(larger values are automatically clamped down to fit the game’s texture heap and memory pool budget). Read at game start. - 3D Render Scale (
render_scale): Controls the 3D scene resolution relative tooutput_res. Set togame(uses XC2’s dynamic resolution scaler) or a fixed percentage from25to100. For supersampling, setoutput_reshigher thanwindow_size. Read at game start. - Upscaling & Frame Generation:
- Window Spatial Upscaler (
upscaler = fsr): Uses AMD FSR 1 (withsharpness = 80, 0–100) orbilinearwhenever your window size (e.g.,1920x1080or2560x1440) is larger thanoutput_res. Changes apply immediately. - Temporal Upscaler (
fsr3 = 1): Replaces the game’s native TAA and dynamic scaling with AMD FidelityFX SDK 2.4 viaamd_fidelityfx_loader_vk.dllandamd_fidelityfx_upscaler_vk.dll. Withfsr_version = auto, the runtime selects AMD FSR 4.1.2 on Radeon RX 6000 and newer GPUs with current drivers, and AMD FSR 3.1.6 on all other Vulkan GPUs (NVIDIA, Intel, older AMD). You can also pinfsr_version = 4or3. - AMD FSR Frame Generation (
frame_gen = 1): Inserts an interpolated frame between each pair of rendered frames usingamd_fidelityfx_framegeneration_vk.dll(requiresfsr3 = 1; best used whenfps_limitis set to roughly half of your monitor’s refresh rate). - OptiScaler compatibility: If you prefer using OptiScaler instead of the built-in FidelityFX loader, remove
amd_fidelityfx_loader_vk.dllfrom the game folder so the runtime falls back to theamd_fidelityfx_vk.dllshim installed by OptiScaler.
- Window Spatial Upscaler (
Complete xc2.ini configuration reference
Copy xc2.ini.example to xc2.ini next to xc2.exe and uncomment any key to override its default. Every key can also be overridden via an uppercase XC2_<KEY> environment variable (for example, XC2_FPS_LIMIT=120):
| Section & Key | Default | Accepted Values & Engineering Behavior |
|---|---|---|
[frame rate]fps_limit | 60 | 30, 40, 45, 60, 90, 120, 144, any integer 30–360, or display. Applies live while the game runs. |
cutscene_30 | 1 | 1 locks cutscenes and movies to 30 FPS as on Switch; 0 runs them at fps_limit. Read at start. |
[display]device_profile | auto | auto (selects deck on Steam Deck), desktop, or deck (defaults to 1280x800 fullscreen, fifo vsync, fps_limit = 40). |
vk_present | mailbox | mailbox (low-latency tear-free when driver supports it), fifo (standard VSync), or immediate. |
window_size / fullscreen | 1920x1080 / 0 | Window client area in pixels (640x360 to 7680x4320) and borderless fullscreen toggle (F11 saves to xc2.ini). |
output_res / render_scale | 1280x720 / game | Internal game resolution (up to ~3040x1710) and 3D scene percentage (game dynamic or 25–100). Read at start. |
upscaler / sharpness | fsr / 80 | Window scaler (fsr for FSR 1 or bilinear) and sharpening strength (0–100). Applies live. |
fsr3 / fsr_version / frame_gen | 0 / auto / 0 | AMD FSR 3.1.6 / 4.1.2 temporal upscaler and FSR Frame Generation toggles. Applies live. |
perf_overlay | off | Top-right HUD readout: off, fps, or full (FPS + mean and longest frame time). Cycled in-game with F10 or L3 + R3. |
[performance]core_float | 1 | Allows job worker threads pinned to virtual core 1 to run on any of the three virtual cores. Boosts Goldmouth covered market streaming from ~65 FPS to ~95 FPS on an RTX 4070 Laptop. |
free_cores / async_preempt | 0 / 1 | free_cores = 1 lifts the 1-thread-per-virtual-core console gate; async_preempt = 1 interrupts guest threads when higher-priority work waits. |
memory / frame_guard | auto / auto | mirror copies GPU-read buffers at submit time (~1.3 GiB extra RAM, prevents prop flickering above 30 FPS); import shares host memory directly (~25% slower due to frame_guard; default on Linux and iGPUs < 12 GB RAM). |
lod_guard / feedback_snap | 1 / 1 | lod_guard = 1 waits for LOD data writes before GPU reads; feedback_snap = 1 snapshots self-sampled render targets to prevent flickering cloud sea lines on AMD GPUs. |
astc / gpl | auto / 1 | ASTC texture decoding (native, gpu compute shader, or cpu) and Vulkan Graphics Pipeline Library (auto-disabled on AMD RDNA 1/2 drivers). |
Recommended PC controllers
XC2 Recomp uses SDL3 controller input with automatic Nintendo, Xbox and PlayStation button prompt generation (plus custom rumble curve and Xbox impulse trigger options):
| Controller | Best For in XC2 Recomp | Hardware Advantage | Link |
|---|---|---|---|
| 8BitDo Ultimate 2 Wireless | Nintendo layout & Windows/Deck dock | Zero-drift TMR sticks, charging dock, native Switch/XInput mode toggle | View on Amazon |
| GameSir Cyclone 2 | 1000 Hz Blade combo canceling | TMR sticks, micro-switch ABXY buttons and 1000 Hz wireless dongle | View on Amazon |
| Sony DualSense | PlayStation button prompts | Automatic PlayStation icon rendering in XC2 tutorials and Driver Arts HUD | View on Amazon |
| Xbox Wireless Controller | Xbox prompts & impulse triggers | Supports rumble_triggers = 1 in xc2.ini with redrawn Xbox button glyphs | View on Amazon |
As an Amazon Associate, this site earns from qualifying purchases.



Common questions
Why does RenderDoc fail to launch with XC2 Recomp?
As documented in docs/controls.md, RenderDoc hides the VK_EXT_external_memory_host Vulkan extension when attached, which runtime/vk_memory.c requires for guest memory pool imports. Until a copy-based pool fallback is added, Vulkan device creation fails under RenderDoc.
Should I use memory = mirror or memory = import in xc2.ini?
Leave memory = auto on most machines. On Windows with a discrete GPU or 12 GB+ of system RAM, auto picks mirror, which uses ~1.3 GiB of extra RAM so the GPU can render one frame behind without waiting (replay_async = 1) and without props sliding above 30 FPS. If your system is tight on RAM or VRAM, set memory = import to save 1.3 GiB at the cost of roughly 25% lower framerate.