__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 ==
=== D3D12 ===
==== Render target path ====
[https://github.com/xenia-project/xenia/wiki/ROV What is ROV (rasterizer-ordered views)?]

Leave this option blank for auto-selection.

{|
! <code>render_target_path_d3d12</code> =
! <code>string</code>
|-
| RTV ''(recommended for speed)''
| <code>rtv</code>
|-
| ROV ''(if available, for higher accuracy in certain cases)''
| <code>rov</code>
|}

==== Resolution scaling ====
This is a hack, and as such, '''bugs should be expected'''.

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 ====
* This is needed for certain games, including but not limited to:
** https://github.com/xenia-project/game-compatibility/issues?q=is%3Aopen+is%3Aissue+label%3Agpu-readback

{|
! <code>d3d12_readback_resolve</code> =
! <code>bool</code>
|-
| Off (''default'')
| <code>false</code>
|-
| On (''slower'')
| <code>true</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.

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

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

* ''This won’t improve the framerate if your PC can’t handle running the game at it’s native FPS.''
* Games that speed up have the [https://github.com/xenia-project/game-compatibility/issues?q=is%3Aopen+is%3Aissue+label%3Avsync-off-speedup vsync-off-speedup] label.

==== 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) ==
{|
! <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>
|}

*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.

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

* Certain games require this to set be set to false to work around crashes. This includes, but isn't limited to:
** https://github.com/xenia-project/game-compatibility/issues?q=is%3Aopen+is%3Aissue+label%3Arequires_protect_zero_false

=== Break on unimplemented instruction ===
{|
! <code>break_on_unimplemented_instruction</code> =
! <code>bool</code>
|-
| True ''(default)''
| <code>true</code>
|-
| False (hack, needed for certain games)
| <code>false</code>
|}
* Certain games require this to set be set to false to work around crashes. This includes, but isn't limited to:
** https://github.com/xenia-project/game-compatibility/issues?q=is%3Aopen+is%3Aissue+label%3Acpu-unimplemented-instruction

= 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 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 ===
* Certain games require this to set be set to true to work around visual bugs. This includes, but isn't limited to:
** https://github.com/xenia-project/game-compatibility/issues?q=is%3Aopen+is%3Aissue+label%3Arequires_d3d12_clear_memory_page_state_true

{|
! <code>d3d12_clear_memory_page_state</code> =
! <code>bool</code>
|-
| Default
| <code>false</code>
|-
| Worsens performance, but can help reduce visual anomalies like polygon explosions or corrupted textures.
| <code>true</code>
|}
