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
Macro view of a handheld mainboard PCB and multi-core GPU silicon package
AVX2 CPU and Vulkan 1.3 VK_EXT_external_memory_host pipeline

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:

ComponentMinimum Requirement (Enforced by Setup)Recommended for 60–120+ FPS & High Resolution
Operating SystemWindows 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
CPUx86-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 & VulkanVulkan 1.3 capable GPU supporting VK_EXT_external_memory_hostDiscrete NVIDIA GeForce RTX 30/40 series or AMD Radeon RX 6000/7000/9000 series (4 GiB+ VRAM)
System Memory8 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:

  1. Game Resolution (output_res): The internal canvas size at which the game draws its picture and UI. Starts at 1280x720 and scales up to roughly 3040x1710 (larger values are automatically clamped down to fit the game’s texture heap and memory pool budget). Read at game start.
  2. 3D Render Scale (render_scale): Controls the 3D scene resolution relative to output_res. Set to game (uses XC2’s dynamic resolution scaler) or a fixed percentage from 25 to 100. For supersampling, set output_res higher than window_size. Read at game start.
  3. Upscaling & Frame Generation:
    • Window Spatial Upscaler (upscaler = fsr): Uses AMD FSR 1 (with sharpness = 80, 0–100) or bilinear whenever your window size (e.g., 1920x1080 or 2560x1440) is larger than output_res. Changes apply immediately.
    • Temporal Upscaler (fsr3 = 1): Replaces the game’s native TAA and dynamic scaling with AMD FidelityFX SDK 2.4 via amd_fidelityfx_loader_vk.dll and amd_fidelityfx_upscaler_vk.dll. With fsr_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 pin fsr_version = 4 or 3.
    • AMD FSR Frame Generation (frame_gen = 1): Inserts an interpolated frame between each pair of rendered frames using amd_fidelityfx_framegeneration_vk.dll (requires fsr3 = 1; best used when fps_limit is 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.dll from the game folder so the runtime falls back to the amd_fidelityfx_vk.dll shim installed by OptiScaler.

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 & KeyDefaultAccepted Values & Engineering Behavior
[frame rate]
fps_limit
6030, 40, 45, 60, 90, 120, 144, any integer 30–360, or display. Applies live while the game runs.
cutscene_3011 locks cutscenes and movies to 30 FPS as on Switch; 0 runs them at fps_limit. Read at start.
[display]
device_profile
autoauto (selects deck on Steam Deck), desktop, or deck (defaults to 1280x800 fullscreen, fifo vsync, fps_limit = 40).
vk_presentmailboxmailbox (low-latency tear-free when driver supports it), fifo (standard VSync), or immediate.
window_size / fullscreen1920x1080 / 0Window client area in pixels (640x360 to 7680x4320) and borderless fullscreen toggle (F11 saves to xc2.ini).
output_res / render_scale1280x720 / gameInternal game resolution (up to ~3040x1710) and 3D scene percentage (game dynamic or 25–100). Read at start.
upscaler / sharpnessfsr / 80Window scaler (fsr for FSR 1 or bilinear) and sharpening strength (0–100). Applies live.
fsr3 / fsr_version / frame_gen0 / auto / 0AMD FSR 3.1.6 / 4.1.2 temporal upscaler and FSR Frame Generation toggles. Applies live.
perf_overlayoffTop-right HUD readout: off, fps, or full (FPS + mean and longest frame time). Cycled in-game with F10 or L3 + R3.
[performance]
core_float
1Allows 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_preempt0 / 1free_cores = 1 lifts the 1-thread-per-virtual-core console gate; async_preempt = 1 interrupts guest threads when higher-priority work waits.
memory / frame_guardauto / automirror 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_snap1 / 1lod_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 / gplauto / 1ASTC texture decoding (native, gpu compute shader, or cpu) and Vulkan Graphics Pipeline Library (auto-disabled on AMD RDNA 1/2 drivers).

XC2 Recomp uses SDL3 controller input with automatic Nintendo, Xbox and PlayStation button prompt generation (plus custom rumble curve and Xbox impulse trigger options):

ControllerBest For in XC2 RecompHardware AdvantageLink
8BitDo Ultimate 2 WirelessNintendo layout & Windows/Deck dockZero-drift TMR sticks, charging dock, native Switch/XInput mode toggleView on Amazon
GameSir Cyclone 21000 Hz Blade combo cancelingTMR sticks, micro-switch ABXY buttons and 1000 Hz wireless dongleView on Amazon
Sony DualSensePlayStation button promptsAutomatic PlayStation icon rendering in XC2 tutorials and Driver Arts HUDView on Amazon
Xbox Wireless ControllerXbox prompts & impulse triggersSupports rumble_triggers = 1 in xc2.ini with redrawn Xbox button glyphsView on Amazon

As an Amazon Associate, this site earns from qualifying purchases.

Mountain peaks rising above a dense sea of clouds at sunrise
Karst peaks emerging above a morning sea of clouds, echoing the Cloud Sea Titans of Alrest
Natural green emerald crystal prism embedded in dark mineral matrix
Hexagonal emerald crystal prism in matrix, echoing the Aegis Core Crystal geometry
Desktop gaming PC workstation with dual monitors and tempered glass chassis
Windows 10/11 x64 desktop workstation for Vulkan 1.3, AMD FSR 3.1/4 and 3040x1710 internal rendering

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.