__TOC__

= How to use =
# Run xenia if you haven't before.
# [https://social.technet.microsoft.com/wiki/contents/articles/1784.windows-how-to-view-file-name-extensions.aspx Show file name extensions in Explorer].
# Go to <code>Documents\Xenia</code> and open <code>xenia.config.toml</code> in a text editor like [https://notepad-plus-plus.org/download/ Notepad++].
#* The config should be saved while Xenia is closed to prevent it from being overwritten.
#* If a <code>portable.txt</code> file is present in the same directory as xenia.exe it will be in the same directory as xenia.exe.
#* Per-game configs go in <code>config\TitleID.config.toml</code>. Note that '''per-game configs are highly unstable''', only very few options can be changed from it safely or at all, as most emulator subsystems are initialized before per-game configs are loaded.
# For launchers/frontends like [https://github.com/quinton-ashley/bottlenose Bottlenose] you can use the <code>--config</code> launch parameter to specify what config to use.
#* To launch specific games, add the path to the game before the launch options. For example: <code>xenia.exe path/to/game/default.xex --vsync=false</code>

= Master =
== Run games as full/activated ==
{|
! <code>license_mask</code> =
! <code>#</code>
|-
| Deactivated/trial/demo mode (''default'')
| <code>0</code>
|-
| Activated/full mode
| <code>-1</code> or <code>1</code>
|}

== Game language ==
{|
! <code>user_language</code> =
!align="center"| <code>#</code>
|-
| EN (English, ''default'')
|align="center"| <code>1</code>
|-
| JA (Japanese/日本語)
|align="center"| <code>2</code>
|-
| DE (German/Deutsche)
|align="center"| <code>3</code>
|-
| FR (French/Français)
|align="center"| <code>4</code>
|-
| ES (Spanish/Español)
|align="center"| <code>5</code>
|-
| IT (Italian/Italiano)
|align="center"| <code>6</code>
|-
| KO (Korean/한국어)
|align="center"| <code>7</code>
|-
| ZH (Traditional Chinese/繁體中文)
|align="center"| <code>8</code>
|-
| PT (Portuguese/Português)
|align="center"| <code>9</code>
|-
| PL (Polish/Polski)
|align="center"| <code>11</code>
|-
| RU (Russian/русский)
|align="center"| <code>12</code>
|-
| SV (Swedish/Svenska)
|align="center"| <code>13</code>
|-
| TR (Turkish/Türk)
|align="center"| <code>14</code>
|-
| NB (Norwegian/Norsk)
|align="center"| <code>15</code>
|-
| NL (Dutch/Nederlands)
|align="center"| <code>16</code>
|-
| ZH (Simplified Chinese/简体中文)
|align="center"| <code>17</code>
|}

== GPU ==
=== Direct3D 12 ===
==== Screen tearing ====
{|
! <code>d3d12_allow_variable_refresh_rate_and_tearing</code> =
! <code>bool</code>
|-
| On (''default'', supports variable refresh rate)
| <code>true</code>
|-
| Off (increases input lag, may break variable refresh rate)
| <code>false</code>
|}

==== Render target path ====
{|
! <code>render_target_path_d3d12</code> =
! <code>string</code>
|-
| Auto-selection (''default'')
| <code>""</code>
|-
| RTV (recommended for speed)
| <code>"rtv"</code>
|-
| ROV (if available, for higher accuracy in certain cases) <small>[https://github.com/xenia-canary/xenia-canary/wiki/ROV What is ROV (rasterizer-ordered views)?]</small>
| <code>"rov"</code>
|}

==== Resolution scaling ====
This is a hack, and as such, '''bugs should be expected when changed from the default'''.

===== Horizontal scale (X) =====
{|
! <code>draw_resolution_scale_x</code> =
! <code>#</code>
|-
| 1x (''default'', 1280x)
| <code>1</code>
|-
| 2x (2560x)
| <code>2</code>
|-
| 3x (3840x)
| <code>3</code>
|-
| 4x (5120x)
| <code>4</code>
|-
| 5x (6400x)
| <code>5</code>
|-
| 6x (7680x)
| <code>6</code>
|-
| 7x (8960x)
| <code>7</code>
|}

===== Vertical scale (Y) =====
{|
! <code>draw_resolution_scale_y</code> =
! <code>#</code>
|-
| 1x (''default'', x720)
| <code>1</code>
|-
| 2x (x1440)
| <code>2</code>
|-
| 3x (x2160)
| <code>3</code>
|-
| 4x (x2880)
| <code>4</code>
|-
| 5x (x3600)
| <code>5</code>
|-
| 6x (x4320)
| <code>6</code>
|-
| 7x (x5040)
| <code>7</code>
|}

==== CPU readback after render target resolving ====
* Games that require this have the [https://github.com/xenia-project/game-compatibility/issues?q=is%3Aopen+is%3Aissue+label%3Agpu-readback gpu-readback] label.

{|
! <code>d3d12_readback_resolve</code> =
! <code>bool</code>
|-
| Off (''default'')
| <code>false</code>
|-
| On (slower)
| <code>true</code>
|}

==== Queue priority ====
Setting this higher than default may improve performance.

{|
! <code>d3d12_queue_priority</code> =
! <code>#</code>
|-
| Normal (''default'')
| <code>0</code>
|-
| High (''recommended for speed'')
| <code>1</code>
|-
| Global realtime ''(requires running Xenia as administrator)''
| <code>2</code>
|}

=== Vulkan ===
==== Render target path ====
{|
! <code>render_target_path_vulkan</code> =
! <code>string</code>
|-
| Auto-selection (''default'')
| <code>""</code>
|-
| FB (''recommended for speed'')
| <code>"fbo"</code>
|-
| FSI ''(if available, for higher accuracy in certain cases)''
| <code>"fsi"</code>
|}

==== Present mode ====
Sorted by priority. (i.e. if the first doesn't work then the next is tried, and so on.)

{|
! <code>vulkan_allow_present_mode_immediate</code> =
! <code>bool</code>
|-
| On (''default'', supports variable refresh rate)
| <code>true</code>
|-
| Off (no tearing, may break variable refresh rate)
| <code>false</code>
|}

{|
! <code>vulkan_allow_present_mode_mailbox</code> =
! <code>bool</code>
|-
| On (''default'', disables screen tearing if other present modes are disabled)
| <code>true</code>
|-
| Off
| <code>false</code>
|}

{|
! <code>vulkan_allow_present_mode_fifo_relaxed</code> =
! <code>bool</code>
|-
| On (''default'')
| <code>true</code>
|-
| Off (no tearing unless below display refresh rate)
| <code>false</code>
|}

=== Misc ===
==== Allow invalid fetch constants ====
Allow texture and vertex fetch constants with invalid type - generally unsafe because the constant may contain completely invalid values, but may be used to bypass fetch constant type errors in certain games until the real reason why they're invalid is found.

Games that require this have the [https://github.com/xenia-project/game-compatibility/issues?q=is%3Aopen+is%3Aissue+label%3Agpu-invalid-fetch-constants gpu-invalid-fetch-constants] label.

{|
! <code>gpu_allow_invalid_fetch_constants</code> =
! <code>bool</code>
|-
| Off (''default'')
| <code>false</code>
|-
| On (hack)
| <code>true</code>
|}

==== Vsync ====
* '''This does not affect tearing.''' For that, see the following:
** ''[https://github.com/xenia-canary/xenia-canary/wiki/Options#screen-tearing Screen tearing]'' for D3D12
** ''[https://github.com/xenia-canary/xenia-canary/wiki/Options#user-content-Present_mode Present mode]'' for Vulkan
* ''Disabling this won’t improve the framerate if your PC can’t handle running the game at it’s native FPS.''
* Games that speed up with this disabled have the [https://github.com/xenia-project/game-compatibility/issues?q=is%3Aopen+is%3Aissue+label%3Avsync-off-speedup vsync-off-speedup] label.

{|
! <code>vsync</code> =
! <code>bool</code>
|-
| On (''default'')
| <code>true</code>
|-
| Off (uncaps FPS, can cause speedup)
| <code>false</code>
|}

==== Black bars (letterboxing/pillarboxing) ====
{|
! <code>present_letterbox</code> =
! <code>bool</code>
|-
| On (no stretching, ''default'')
| <code>true</code>
|-
| Off (stretching, required for aspect ratio patches)
| <code>false</code>
|}

==== Renderer/Backend ====
{|
! <code>gpu</code> =
! <code>string</code>
|-
| Any (''default'', '''recommended''')
| <code>"any"</code>
|-
| Direct3D 12
| <code>"d3d12"</code>
|-
| <s>Vulkan ('''not''' recommended)</s>
| <s><code>"vulkan"</code></s>
|-
| Null ''(blank/nothing)''
| <code>"null"</code>
|}

== HID (Input) ==
*When using SDL: If your game controller is not mapped correctly, [https://github.com/gabomdq/SDL_GameControllerDB/blob/master/gamecontrollerdb.txt download gamecontrollerdb.txt] and place it in the folder next to your Xenia executable.

{|
! <code>hid</code> =
! <code>string</code>
|-
| Any (''default'')
| <code>"any"</code>
|-
| SDL2* (needed for non-XInput controllers, '''DOES NOT REQUIRE DLL''')
| <code>"sdl"</code>
|-
| XInput
| <code>"xinput"</code>
|-
| Keyboard
| <code>"winkey"</code>
|}

== Hacks ==
=== Protect zero ===
* Games that require this to be false have the [https://github.com/xenia-project/game-compatibility/issues?q=is%3Aopen+is%3Aissue+label%3Arequires-protect-zero-false requires-protect-zero-false] label.

{|
! <code>protect_zero</code> =
! <code>bool</code>
|-
| True (''default'')
| <code>true</code>
|-
| False (hack, needed for certain games)
| <code>false</code>
|}

=== Break on unimplemented instruction ===
* Games that require this to be false have the [https://github.com/xenia-project/game-compatibility/issues?q=is%3Aopen+is%3Aissue+label%3Acpu-unimplemented-instruction cpu-unimplemented-instruction] label.

{|
! <code>break_on_unimplemented_instruction</code> =
! <code>bool</code>
|-
| True (''default'')
| <code>true</code>
|-
| False (hack, needed for certain games)
| <code>false</code>
|}

= Canary =
Newer Canary versions always have the config in the same place as the executable.

{|
! Description
! Filename
|-
| Executable
| <code>xenia_canary.exe</code> (older builds are called <code>xenia-canary.exe</code>)
|-
| config
| <code>xenia-canary-config.toml</code>
|}

== Video ==
=== Vsync interval ===
If a game speeds up when [https://github.com/xenia-canary/xenia-canary/wiki/Options#vsync vsync] is disabled this will also affect game speed.

{|
! <code>vsync_interval</code> =
! <code>#</code> (frametime in milliseconds)
|-
| x1 (60 FPS, ''default'')
| <code>16</code>
|-
| x2 (120 FPS; 60 FPS for 30 FPS games)
| <code>8</code>
|}

=== Internal display resolution ===
This is the same as changing the resolution on a real Xbox 360, and as such '''DOES NOT WORK WITH ALL GAMES!'''

{|
! <code>internal_display_resolution</code>
! <code>#</code>
|-
| 640x576
| <code>1</code>
|-
| 720x480
| <code>2</code>
|-
| 720x476
| <code>3</code>
|-
| 800x600
| <code>4</code>
|-
| 848x480
| <code>5</code>
|-
| 1024x768
| <code>6</code>
|-
| 1152x864
| <code>7</code>
|-
| 1280x720 (''default'')
| <code>8</code>
|-
| 1280x768
| <code>9</code>
|-
| 1280x960
| <code>10</code>
|-
| 1280x1024
| <code>11</code>
|-
| 1360x768
| <code>12</code>
|-
| 1440x900
| <code>13</code>
|-
| 1680x1050
| <code>14</code>
|-
| 1920x540
| <code>15</code>
|-
| 1920x1080 '''!ONCE AGAIN, THIS IS NOT GUARANTEED TO WORK!'''
| <code>16</code>
|}

=== avpack (video mode) ===
{|
! <code>avpack</code> =
! <code>#</code>
|-
| HDMI (''default'')
| <code>8</code>
|-
| TV PAL-60
| <code>7</code>
|-
| VGA
| <code>6</code>
|-
| PAL-60 Composite/S-Video
| <code>5</code>
|-
| HDMI+A
| <code>4</code>
|-
| 480p Component(HD)
| <code>3</code>
|-
| PAL-60 SCART
| <code>2</code>
|-
| <s>Unused</s>
| <s><code>1</code></s>
|-
| PAL-60 Component(SD)
| <code>0</code>
|}

== Hacks ==
=== Max queued frames ===
Allows changing max buffered audio frames to reduce audio delay.

{|
! <code>apu_max_queued_frames</code> =
! <code>#</code> ''(16 minimum)''
|-
| Default
| <code>64</code>
|}

=== Clear GPU cache ===
* Games that require this to be true have the [https://github.com/xenia-project/game-compatibility/issues?q=is%3Aopen+is%3Aissue+label%3Arequires_clear_memory_page_state_true requires_clear_memory_page_state_true] label.

{|
! <code>clear_memory_page_state</code> =
! <code>bool</code>
|-
| Off (''default'')
| <code>false</code>
|-
| On (worsens performance, but can help reduce visual anomalies like polygon explosions or corrupted textures.)
| <code>true</code>
|}
