2013-01-13 08:25:41 +01:00
|
|
|
/**
|
|
|
|
|
******************************************************************************
|
|
|
|
|
* Xenia : Xbox 360 Emulator Research Project *
|
|
|
|
|
******************************************************************************
|
2020-03-02 16:37:11 +01:00
|
|
|
* Copyright 2020 Ben Vanik. All rights reserved. *
|
2013-01-13 08:25:41 +01:00
|
|
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
|
|
|
|
******************************************************************************
|
|
|
|
|
*/
|
|
|
|
|
|
2015-06-27 20:25:45 +02:00
|
|
|
#include "xenia/gpu/gpu_flags.h"
|
2013-01-13 08:25:41 +01:00
|
|
|
|
2020-03-02 16:37:11 +01:00
|
|
|
DEFINE_path(trace_gpu_prefix, "scratch/gpu/",
|
|
|
|
|
"Prefix path for GPU trace files.", "GPU");
|
2019-04-17 21:49:29 +02:00
|
|
|
DEFINE_bool(trace_gpu_stream, false, "Trace all GPU packets.", "GPU");
|
2015-02-20 16:47:06 +01:00
|
|
|
|
2020-03-02 16:37:11 +01:00
|
|
|
DEFINE_path(
|
2020-03-21 17:21:00 +01:00
|
|
|
dump_shaders, "",
|
|
|
|
|
"For shader debugging, path to dump GPU shaders to as they are compiled.",
|
|
|
|
|
"GPU");
|
2013-11-16 12:06:55 +01:00
|
|
|
|
2019-04-17 21:49:29 +02:00
|
|
|
DEFINE_bool(vsync, true, "Enable VSYNC.", "GPU");
|
2020-02-16 17:35:26 +01:00
|
|
|
|
|
|
|
|
DEFINE_bool(
|
|
|
|
|
gpu_allow_invalid_fetch_constants, false,
|
|
|
|
|
"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");
|
2020-06-01 14:00:22 +02:00
|
|
|
|
2020-08-09 20:33:10 +02:00
|
|
|
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, like Halo 3), but in "
|
|
|
|
|
"some 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 (Banjo-Kazooie), or the leftmost/topmost pixels may not "
|
|
|
|
|
"be fully covered when MSAA is used with fullscreen passes.",
|
|
|
|
|
"GPU");
|
|
|
|
|
|
2020-12-20 14:35:15 +01:00
|
|
|
DEFINE_bool(
|
|
|
|
|
ssaa_scale_gradients, true,
|
|
|
|
|
"When using SSAA instead of native MSAA, adjust texture coordinate "
|
|
|
|
|
"derivatives used for mipmap selection, and getGradients results, to guest "
|
|
|
|
|
"pixels as if true MSAA rather than SSAA was used.\n"
|
|
|
|
|
"Reduces bandwidth usage of texture fetching.",
|
|
|
|
|
"GPU");
|
|
|
|
|
|
2020-12-07 20:23:54 +01:00
|
|
|
DEFINE_string(
|
|
|
|
|
depth_float24_conversion, "",
|
|
|
|
|
"Method for converting 32-bit Z values to 20e4 floating point when using "
|
|
|
|
|
"host depth buffers without native 20e4 support (when not using rasterizer-"
|
|
|
|
|
"ordered views / fragment shader interlocks to perform depth testing "
|
|
|
|
|
"manually).\n"
|
|
|
|
|
"Use: [any, on_copy, truncate, round]\n"
|
|
|
|
|
" on_copy:\n"
|
|
|
|
|
" Do depth testing at host precision, converting when copying between "
|
|
|
|
|
"host depth buffers and the EDRAM buffer to support reinterpretation, "
|
|
|
|
|
"maintaining two copies, in both host and 20e4 formats, for reloading data "
|
|
|
|
|
"to host depth buffers when it wasn't overwritten.\n"
|
|
|
|
|
" + Highest performance, allows early depth test and writing.\n"
|
|
|
|
|
" + Host MSAA is possible with pixel-rate shading where supported.\n"
|
|
|
|
|
" - EDRAM > RAM > EDRAM depth buffer round trip done in certain games "
|
|
|
|
|
"(such as GTA IV) destroys precision irreparably, causing artifacts if "
|
|
|
|
|
"another rendering pass is done after the EDRAM reupload.\n"
|
|
|
|
|
" truncate:\n"
|
|
|
|
|
" Convert to 20e4 directly in pixel shaders, always rounding down.\n"
|
|
|
|
|
" + Good performance, conservative early depth test is possible.\n"
|
|
|
|
|
" + No precision loss when anything changes in the storage of the depth "
|
|
|
|
|
"buffer, EDRAM > RAM > EDRAM copying preserves precision.\n"
|
|
|
|
|
" - Rounding mode is incorrect, sometimes giving results smaller than "
|
|
|
|
|
"they should be - may cause inaccuracy especially in edge cases when the "
|
|
|
|
|
"game wants to write an exact value.\n"
|
|
|
|
|
" - Host MSAA is only possible at SSAA speed, with per-sample shading.\n"
|
|
|
|
|
" round:\n"
|
|
|
|
|
" Convert to 20e4 directly in pixel shaders, correctly rounding to the "
|
|
|
|
|
"nearest even.\n"
|
|
|
|
|
" + Highest accuracy.\n"
|
|
|
|
|
" - Significantly limited performance, early depth test is not possible.\n"
|
|
|
|
|
" - Host MSAA is only possible at SSAA speed, with per-sample shading.\n"
|
|
|
|
|
" Any other value:\n"
|
|
|
|
|
" Choose what is considered the most optimal (currently \"on_copy\").",
|
|
|
|
|
"GPU");
|
|
|
|
|
|
2020-06-01 14:00:22 +02:00
|
|
|
DEFINE_int32(query_occlusion_fake_sample_count, 1000,
|
|
|
|
|
"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");
|
2020-12-07 20:23:54 +01:00
|
|
|
|
|
|
|
|
namespace xe {
|
|
|
|
|
namespace gpu {
|
|
|
|
|
namespace flags {
|
|
|
|
|
|
|
|
|
|
DepthFloat24Conversion GetDepthFloat24Conversion() {
|
|
|
|
|
if (cvars::depth_float24_conversion == "truncate") {
|
|
|
|
|
return DepthFloat24Conversion::kOnOutputTruncating;
|
|
|
|
|
}
|
|
|
|
|
if (cvars::depth_float24_conversion == "round") {
|
|
|
|
|
return DepthFloat24Conversion::kOnOutputRounding;
|
|
|
|
|
}
|
|
|
|
|
return DepthFloat24Conversion::kOnCopy;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace flags
|
|
|
|
|
} // namespace gpu
|
|
|
|
|
} // namespace xe
|