Files
Xenia-Canary/src/xenia/gpu/gpu_flags.cc
Herman S. 5845f3437b [GPU] Async shader compilation for D3D12 and Vulkan
Adds async_shader_compilation cvar (default true) that forces new
pipelines to be created async from the main thread, skips draws entirely
on D3D12 and on vulkan replaces pixel shader with placeholder until the
real one is ready. Causes some visual artifacts on first load but
greatly reduces load times and stutter.
2026-03-10 00:24:26 +09:00

106 lines
4.6 KiB
C++

/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2020 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/gpu/gpu_flags.h"
DEFINE_path(trace_gpu_prefix, "scratch/gpu/",
"Prefix path for GPU trace files.", "GPU");
DEFINE_bool(trace_gpu_stream, false, "Trace all GPU packets.", "GPU");
DEFINE_path(
dump_shaders, "",
"For shader debugging, path to dump GPU shaders to as they are compiled.",
"GPU");
DEFINE_bool(vsync, true, "Enable VSYNC.", "GPU");
DEFINE_uint64(framerate_limit, 0,
"Maximum frames per second. 0 = Unlimited frames.\n"
"Defaults to 60, when set to 0, and VSYNC is enabled.",
"GPU");
UPDATE_from_uint64(framerate_limit, 2024, 8, 31, 20, 60);
DEFINE_bool(
gpu_allow_invalid_fetch_constants, true,
"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.",
"GPU");
DEFINE_bool(
gpu_allow_invalid_upload_range, false,
"Allows games to read data from pages that are marked as no access.",
"GPU");
DEFINE_bool(
non_seamless_cube_map, true,
"Disable filtering between cube map faces near edges where possible "
"(Vulkan with VK_EXT_non_seamless_cube_map) to reproduce the Direct3D 9 "
"behavior.",
"GPU");
// Extremely bright screen borders in 4D5307E6.
// Reading between texels with half-pixel offset in 58410954.
DEFINE_bool(
half_pixel_offset, true,
"Enable support of vertex half-pixel offset (D3D9 PA_SU_VTX_CNTL "
"PIX_CENTER). Generally games are aware of the half-pixel offset, and "
"having this enabled is the correct behavior (disabling this may "
"significantly break post-processing in some games), but in certain games "
"it might have been ignored, resulting in slight blurriness of UI "
"textures, for instance, when they are read between texels rather than "
"at texel centers, or the leftmost/topmost pixels may not be fully covered "
"when MSAA is used with fullscreen passes.",
"GPU");
DEFINE_int32(query_occlusion_sample_lower_threshold, 80,
"If set to -1 no sample counts are written, games may hang. Else, "
"the sample count of every tile will be incremented on every "
"EVENT_WRITE_ZPD by this number. Setting this to 0 means "
"everything is reported as occluded.",
"GPU");
DEFINE_int32(
query_occlusion_sample_upper_threshold, 100,
"Set to higher number than query_occlusion_sample_lower_threshold. This "
"value is ignored if query_occlusion_sample_lower_threshold is set to -1.",
"GPU");
DEFINE_int32(anisotropic_override, -1,
"Forces anisotropic filtering (AF) for eligible textures.\n"
"Higher values keep textures sharper at oblique angles at the "
"cost of GPU bandwidth, though most GPUs handle up to 16x fine.\n"
"In rare cases, forcing AF can introduce visual artifacts.\n"
" -1 = No override\n"
" 0 = Disable anisotropic filtering\n"
" 1 = Force 1x anisotropic filtering\n"
" 2 = Force 2x anisotropic filtering\n"
" 3 = Force 4x anisotropic filtering\n"
" 4 = Force 8x anisotropic filtering\n"
" 5 = Force 16x anisotropic filtering",
"GPU");
DEFINE_bool(no_discard_stencil_in_transfer_pipelines, false,
"Skip stencil bit discard in render target transfer pipelines. "
"May improve performance on some GPUs.",
"GPU");
DEFINE_bool(gpu_3d_to_2d_texture, true,
"Handle shaders that sample 3D textures as 2D by creating a 2D "
"texture from slice 0 of the guest memory.",
"GPU");
DEFINE_bool(
async_shader_compilation, true,
"Compile shaders and create pipelines asynchronously in background "
"threads. "
"Eliminates shader compilation stutter but may cause brief rendering "
"artifacts while pipelines are being created. When disabled, pipelines are "
"created synchronously which causes stutter but no visual artifacts.",
"GPU");