[GPU] Move debug cvars to a new TOML block, misc cleanup

native_2x_msaa is now debug_msaa_4x_as_2x, hopefully clearing up any user ambiguity.
This commit is contained in:
goldislead
2026-08-15 17:25:07 -07:00
committed by Radosław Gliński
parent 907d92bf8c
commit 0d395ce9ab
12 changed files with 42 additions and 42 deletions

View File

@@ -32,18 +32,18 @@ DEFINE_bool(
"Only does anything in debug builds, if set will log every write to a gpu "
"register done by a guest. Does not log writes that are done by the CP on "
"its own, just ones the guest makes or instructs it to make.",
"GPU");
"Logging");
DEFINE_bool(disassemble_pm4, false,
"Only does anything in debug builds, if set will disassemble and "
"log all PM4 packets sent to the CP.",
"GPU");
"Logging");
DEFINE_bool(
log_ringbuffer_kickoff_initiator_bts, false,
"Only does anything in debug builds, if set will log the pseudo-stacktrace "
"of the guest thread that wrote the new read position.",
"GPU");
"Logging");
DEFINE_bool(clear_memory_page_state, false,
"Refresh state of memory pages to enable gpu written data. (Use "

View File

@@ -36,7 +36,7 @@ DEFINE_bool(
native_stencil_value_output_d3d12_intel, false,
"Allow stencil reference output usage on Direct3D 12 on Intel GPUs - not "
"working on UHD Graphics 630 as of March 2021 (driver 27.20.0100.8336).",
"GPU");
"GPU.Debug");
// TODO(Triang3l): Make ROV the default when it's optimized better (for
// instance, using static shader modifications to pass render target
// parameters).
@@ -483,7 +483,7 @@ bool D3D12RenderTargetCache::Initialize() {
// Check if 2x MSAA is supported or needs to be emulated with 4x MSAA
// instead.
if (cvars::native_2x_msaa) {
if (!cvars::debug_msaa_4x_as_2x) {
msaa_2x_supported_ = true;
static constexpr DXGI_FORMAT kRenderTargetDXGIFormats[] = {
DXGI_FORMAT_R16G16B16A16_FLOAT,

View File

@@ -34,7 +34,7 @@ DEFINE_bool(
"this prevents corruption of other render targets located after the "
"current ones in the EDRAM by lossy range ownership transfers done for "
"those draws.",
"GPU");
"GPU.Debug");
DEFINE_bool(
execute_unclipped_draw_vs_on_cpu_with_scissor, false,
"Don't restrict the usage of execute_unclipped_draw_vs_on_cpu to only "
@@ -45,7 +45,7 @@ DEFINE_bool(
"Enabling this may cause excessive processing of vertices on the CPU, as "
"some games draw rectangles (for their UI, for instance) without clipping, "
"but with a proper scissor rectangle.",
"GPU");
"GPU.Debug");
namespace xe {
namespace gpu {

View File

@@ -29,11 +29,11 @@ DEFINE_bool(dxbc_switch, true,
"(possibly the shader compiler tries to flatten them). On Intel "
"HD Graphics, this is ignored because of a crash with the switch "
"instruction.",
"GPU");
"GPU.Debug");
DEFINE_bool(dxbc_source_map, false,
"Disassemble Xenos instructions as comments in the resulting DXBC "
"for debugging.",
"GPU");
"GPU.Debug");
namespace xe {
namespace gpu {

View File

@@ -10,13 +10,13 @@
#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");
"Prefix path for GPU trace files.", "GPU.Debug");
DEFINE_bool(trace_gpu_stream, false, "Trace all GPU packets.", "GPU.Debug");
DEFINE_path(
dump_shaders, "",
"For shader debugging, path to dump GPU shaders to as they are compiled.",
"GPU");
"GPU.Debug");
DEFINE_bool(vsync, true, "Enable VSYNC.", "GPU");
@@ -43,7 +43,7 @@ DEFINE_bool(
"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");
"GPU.Debug");
// Extremely bright screen borders in 4D5307E6.
// Reading between texels with half-pixel offset in 58410954.
@@ -57,7 +57,7 @@ DEFINE_bool(
"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");
"GPU.Debug");
DEFINE_int32(occlusion_query_fake_lower_threshold, 80,
"Lower end of the fake sample count value written on "
@@ -104,7 +104,7 @@ DEFINE_int32(anisotropic_override, -1,
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");
"GPU.Debug");
DEFINE_bool(gpu_3d_to_2d_texture, true,
"Handle shaders that sample 3D textures as 2D by creating a 2D "

View File

@@ -34,7 +34,7 @@ DEFINE_bool(
store_shaders, true,
"Store shaders persistently and load them when loading games to avoid "
"runtime spikes and freezes when playing the game not for the first time.",
"GPU");
"GPU.Debug");
namespace xe {
namespace gpu {

View File

@@ -30,13 +30,13 @@ DEFINE_bool(
"For host graphics API downlevel support testing only, force CPU "
"conversion of triangle fans to triangle lists even if the host supports "
"triangle fan primitives natively.",
"GPU");
"GPU.Debug");
DEFINE_bool(
force_convert_line_loops_to_strips, false,
"For host graphics API downlevel support testing only, force CPU "
"conversion of line loops to line strips even if the host supports line "
"loop primitives natively.",
"GPU");
"GPU.Debug");
DEFINE_bool(
force_convert_quad_lists_to_triangle_lists, false,
"For host graphics API downlevel support testing only, force CPU "
@@ -44,14 +44,14 @@ DEFINE_bool(
"list primitives natively or via geometry shader emulation.\n"
"May also be useful for graphics debugging when the debugger doesn't "
"display the geometry generated by geometry shaders properly.",
"GPU");
"GPU.Debug");
DEFINE_bool(
ignore_32bit_vertex_index_support, false,
"For host graphics API downlevel testing only (useful only for Qualcomm "
"Adreno 4xx-level host GPU testing), force indirection or pre-masking and "
"pre-swapping of 32-bit vertex indices as if the host only supports 24-bit "
"indices.",
"GPU");
"GPU.Debug");
// TODO(Triang3l): More investigation of the cache threshold as cache lookups
// and insertions require global critical region locking, and insertions also
// require protecting pages. At 1024, the cache only made the performance worse
@@ -64,7 +64,7 @@ DEFINE_int32(
"Setting this to a very high value may result in excessive CPU processing, "
"while a very low value may result in excessive locking and lookups.\n"
"Negative values disable caching.",
"GPU");
"GPU.Debug");
namespace xe {
namespace gpu {

View File

@@ -21,6 +21,12 @@
#include "xenia/gpu/registers.h"
#include "xenia/gpu/xenos.h"
DEFINE_bool(
debug_msaa_4x_as_2x, false,
"Use 4x MSAA with 2 samples instead of native 2x MSAA when available. "
"For scalability testing on host GPU APIs where 2x is not mandatory. MSAA "
"will be of a similar or worse quality and use more memory.",
"GPU.Debug");
DEFINE_bool(
depth_transfer_not_equal_test, true,
"When transferring data between depth render targets, use the \"not "
@@ -33,7 +39,7 @@ DEFINE_bool(
"beneficial to subsequent rendering, while setting this to false may "
"reduce bandwidth usage during transfers as the previous depth won't need "
"to be read.",
"GPU");
"GPU.Debug");
// Lossless round trip: 545407F2.
// Lossy round trip with the "greater or equal" test afterwards: 4D530919.
// Lossy round trip with the "equal" test afterwards: 535107F5, 565507EF.
@@ -163,7 +169,7 @@ DEFINE_bool(
"Greatly increases accuracy for this format, but may result in render "
"target copying costs if the game switches between 8_8_8_8_GAMMA and "
"8_8_8_8 views for the same EDRAM render target.",
"GPU");
"GPU.Debug");
DEFINE_bool(
mrt_edram_used_range_clamp_to_min, true,
"With host render targets, if multiple render targets are bound, estimate "
@@ -173,14 +179,7 @@ DEFINE_bool(
"Has effect primarily on draws without viewport clipping.\n"
"Setting this to false results in higher accuracy in rare cases, but may "
"increase the amount of copying that needs to be done sometimes.",
"GPU");
DEFINE_bool(
native_2x_msaa, true,
"Use host 2x MSAA when available. Can be disabled for scalability testing "
"on host GPU APIs where 2x is not mandatory, in this case, 2 samples of 4x "
"MSAA will be used instead (with similar or worse quality and higher "
"memory usage).",
"GPU");
"GPU.Debug");
DEFINE_bool(
native_stencil_value_output, true,
"Use pixel shader stencil reference output where available for purposes "
@@ -193,7 +192,7 @@ DEFINE_bool(
"When the host can only support 16_16 and 16_16_16_16 render targets as "
"-1...1, remap -32...32 to -1...1 to use the full possible range of "
"values, at the expense of multiplicative blending correctness.",
"GPU");
"GPU.Debug");
// Enabled by default as the GPU is overall usually the bottleneck when the
// pixel shader interlock render backend implementation is used, anything that
// may improve GPU performance is favorable.
@@ -206,7 +205,7 @@ DEFINE_bool(
"needed when the ownership of a EDRAM range is changed.\n"
"If this is enabled, excessive barriers may be eliminated when switching "
"between different render targets in separate EDRAM locations.",
"GPU");
"GPU.Debug");
namespace xe {
namespace gpu {

View File

@@ -28,12 +28,12 @@
#include "xenia/gpu/shader.h"
#include "xenia/gpu/xenos.h"
DECLARE_bool(debug_msaa_4x_as_2x);
DECLARE_bool(depth_transfer_not_equal_test);
DECLARE_bool(depth_float24_round);
DECLARE_bool(depth_float24_convert_in_pixel_shader);
DECLARE_bool(draw_resolution_scaled_texture_offsets);
DECLARE_bool(gamma_render_target_as_unorm16);
DECLARE_bool(native_2x_msaa);
DECLARE_bool(native_stencil_value_output);
DECLARE_bool(snorm16_render_target_full_range);

View File

@@ -40,17 +40,17 @@ DEFINE_uint32(
texture_cache_memory_limit_soft, 384,
"Maximum host texture memory usage (in megabytes) above which old textures "
"will be destroyed.",
"GPU");
"GPU.Debug");
DEFINE_uint32(
texture_cache_memory_limit_soft_lifetime, 30,
"Seconds a texture should be unused to be considered old enough to be "
"deleted if texture memory usage exceeds texture_cache_memory_limit_soft.",
"GPU");
"GPU.Debug");
DEFINE_uint32(
texture_cache_memory_limit_hard, 768,
"Maximum host texture memory usage (in megabytes) above which textures "
"will be destroyed as soon as possible.",
"GPU");
"GPU.Debug");
DEFINE_uint32(
texture_cache_memory_limit_render_to_texture, 24,
"Part of the host texture memory budget (in megabytes) that will be scaled "
@@ -60,11 +60,11 @@ DEFINE_uint32(
"render-to-texture (resolve) targets and 384 - 24 = 360 MB of regular "
"textures - so with 2x2 resolution scaling, the soft limit will be 360 + "
"96 MB, and with 3x3, it will be 360 + 216 MB.",
"GPU");
"GPU.Debug");
DEFINE_bool(tiled_shared_memory, true,
"Enable tiled/sparse resources for efficient large address space "
"support. Disable for graphics debugger compatibility.",
"GPU");
"GPU.Debug");
namespace xe {
namespace gpu {

View File

@@ -35,8 +35,9 @@
#pragma clang diagnostic pop
#endif
DEFINE_path(target_trace_file, "", "Specifies the trace file to load.", "GPU");
DEFINE_path(trace_dump_path, "", "Output path for dumped files.", "GPU");
DEFINE_path(target_trace_file, "", "Specifies the trace file to load.",
"GPU.Debug");
DEFINE_path(trace_dump_path, "", "Output path for dumped files.", "GPU.Debug");
namespace xe {
namespace gpu {

View File

@@ -265,7 +265,7 @@ bool VulkanRenderTargetCache::Initialize(uint32_t shared_memory_binding_count) {
// 2x MSAA support.
// TODO(Triang3l): Handle sampledImageIntegerSampleCounts 4 not supported in
// transfers.
if (cvars::native_2x_msaa) {
if (!cvars::debug_msaa_4x_as_2x) {
// Multisampled integer sampled images are optional in Vulkan and in Xenia.
msaa_2x_attachments_supported_ =
(device_properties.framebufferColorSampleCounts &