GPU/HW: Disable depth testing with semitransparency
But provide an option to enable it.
This commit is contained in:
parent
d9c9b3038d
commit
d25cffebd5
|
@ -4770,6 +4770,11 @@ void FullscreenUI::DrawGraphicsSettingsPage()
|
|||
"fix misaligned UI in some games, but otherwise should be left disabled."),
|
||||
"GPU", "PGXPDisableOn2DPolygons", false, pgxp_enabled);
|
||||
|
||||
DrawToggleSetting(bsi, FSUI_ICONSTR(ICON_FA_PENCIL_RULER, "Depth Test Transparent Polygons"),
|
||||
FSUI_CSTR("Enables depth testing for semi-transparent polygons. Usually these include shadows, "
|
||||
"and tend to clip through the ground when depth testing is enabled."),
|
||||
"GPU", "PGXPTransparentDepthTest", false, pgxp_enabled);
|
||||
|
||||
DrawFloatRangeSetting(
|
||||
bsi, FSUI_ICONSTR(ICON_FA_STAR, "Geometry Tolerance"),
|
||||
FSUI_CSTR("Sets a threshold for discarding precise values when exceeded. May help with glitches in some games."),
|
||||
|
@ -8182,6 +8187,7 @@ TRANSLATE_NOOP("FullscreenUI", "Deinterlacing Mode");
|
|||
TRANSLATE_NOOP("FullscreenUI", "Delete Save");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Delete State");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Depth Clear Threshold");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Depth Test Transparent Polygons");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Desktop Mode");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Details");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Details unavailable for game not scanned in game list.");
|
||||
|
@ -8255,6 +8261,7 @@ TRANSLATE_NOOP("FullscreenUI", "Enables alignment and bus exceptions. Not needed
|
|||
TRANSLATE_NOOP("FullscreenUI", "Enables an additional 6MB of RAM to obtain a total of 2+6 = 8MB, usually present on dev consoles.");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Enables an additional three controller slots on each port. Not supported in all games.");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Enables caching of guest textures, required for texture replacement.");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Enables depth testing for semi-transparent polygons. Usually these include shadows, and tend to clip through the ground when depth testing is enabled.");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Enables dumping of textures to image files, which can be replaced. Not compatible with all games.");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Enables loading of cheats for this game from DuckStation's database.");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Enables loading of replacement textures. Not compatible with all games.");
|
||||
|
|
|
@ -2804,7 +2804,8 @@ void GPU_HW::DrawPrecisePolygon(const GPUBackendDrawPrecisePolygonCommand* cmd)
|
|||
// Use PGXP to exclude primitives that are definitely 3D.
|
||||
const bool is_3d = (vertices[0].w != vertices[1].w || vertices[0].w != vertices[2].w ||
|
||||
(num_vertices == 4 && vertices[0].w != vertices[3].w));
|
||||
const bool use_depth = m_pgxp_depth_buffer && is_3d;
|
||||
const bool use_depth =
|
||||
m_pgxp_depth_buffer && is_3d && (!cmd->transparency_enable || g_gpu_settings.gpu_pgxp_transparent_depth);
|
||||
SetBatchDepthBuffer(cmd, use_depth);
|
||||
if (use_depth)
|
||||
CheckForDepthClear(cmd, vertices.data(), num_vertices);
|
||||
|
|
|
@ -255,6 +255,7 @@ void Settings::Load(const SettingsInterface& si, const SettingsInterface& contro
|
|||
gpu_pgxp_tolerance = si.GetFloatValue("GPU", "PGXPTolerance", -1.0f);
|
||||
gpu_pgxp_depth_buffer = si.GetBoolValue("GPU", "PGXPDepthBuffer", false);
|
||||
gpu_pgxp_disable_2d = si.GetBoolValue("GPU", "PGXPDisableOn2DPolygons", false);
|
||||
gpu_pgxp_transparent_depth = si.GetBoolValue("GPU", "PGXPTransparentDepthTest", false);
|
||||
SetPGXPDepthClearThreshold(si.GetFloatValue("GPU", "PGXPDepthClearThreshold", DEFAULT_GPU_PGXP_DEPTH_THRESHOLD));
|
||||
gpu_show_vram = si.GetBoolValue("Debug", "ShowVRAM");
|
||||
gpu_dump_cpu_to_vram_copies = si.GetBoolValue("Debug", "DumpCPUToVRAMCopies");
|
||||
|
@ -593,6 +594,7 @@ void Settings::Save(SettingsInterface& si, bool ignore_base) const
|
|||
si.SetFloatValue("GPU", "PGXPTolerance", gpu_pgxp_tolerance);
|
||||
si.SetBoolValue("GPU", "PGXPDepthBuffer", gpu_pgxp_depth_buffer);
|
||||
si.SetBoolValue("GPU", "PGXPDisableOn2DPolygons", gpu_pgxp_disable_2d);
|
||||
si.SetBoolValue("GPU", "PGXPTransparentDepthTest", gpu_pgxp_transparent_depth);
|
||||
si.SetFloatValue("GPU", "PGXPDepthClearThreshold", GetPGXPDepthClearThreshold());
|
||||
si.SetBoolValue("Debug", "ShowVRAM", gpu_show_vram);
|
||||
si.SetBoolValue("Debug", "DumpCPUToVRAMCopies", gpu_dump_cpu_to_vram_copies);
|
||||
|
@ -1026,6 +1028,7 @@ void Settings::FixIncompatibleSettings(const SettingsInterface& si, bool display
|
|||
g_settings.gpu_pgxp_preserve_proj_fp = false;
|
||||
g_settings.gpu_pgxp_depth_buffer = false;
|
||||
g_settings.gpu_pgxp_disable_2d = false;
|
||||
g_settings.gpu_pgxp_transparent_depth = false;
|
||||
}
|
||||
|
||||
// texture replacements are not available without the TC or with the software renderer
|
||||
|
|
|
@ -123,6 +123,7 @@ struct GPUSettings
|
|||
bool gpu_pgxp_preserve_proj_fp : 1 = false;
|
||||
bool gpu_pgxp_depth_buffer : 1 = false;
|
||||
bool gpu_pgxp_disable_2d : 1 = false;
|
||||
bool gpu_pgxp_transparent_depth : 1 = false;
|
||||
|
||||
bool display_optimal_frame_pacing : 1 = false;
|
||||
bool display_pre_frame_sleep : 1 = false;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-FileCopyrightText: 2019-2025 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-License-Identifier: CC-BY-NC-ND-4.0
|
||||
|
||||
#include "graphicssettingswidget.h"
|
||||
|
@ -169,6 +169,8 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
|
|||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.pgxpVertexCache, "GPU", "PGXPVertexCache", false);
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.pgxpDisableOn2DPolygons, "GPU", "PGXPDisableOn2DPolygons",
|
||||
false);
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.pgxpTransparentDepthTest, "GPU", "PGXPTransparentDepthTest",
|
||||
false);
|
||||
|
||||
connect(m_ui.pgxpTextureCorrection, &QCheckBox::checkStateChanged, this,
|
||||
&GraphicsSettingsWidget::updatePGXPSettingsEnabled);
|
||||
|
@ -509,6 +511,10 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
|
|||
tr("Uses native resolution coordinates for 2D polygons, instead of precise coordinates. "
|
||||
"Can fix misaligned UI in some games, but otherwise should be left disabled. The game "
|
||||
"database will enable this automatically when needed."));
|
||||
dialog->registerWidgetHelp(m_ui.pgxpTransparentDepthTest, tr("Depth Test Transparent Polygons"), tr("Unchecked"),
|
||||
tr("Enables depth testing for semi-transparent polygons. Usually these include shadows, "
|
||||
"and tend to clip through the ground when depth testing is enabled. Depth writes for "
|
||||
"semi-transparent polygons are disabled regardless of this setting.."));
|
||||
|
||||
// OSD Tab
|
||||
|
||||
|
@ -994,6 +1000,8 @@ void GraphicsSettingsWidget::updatePGXPSettingsEnabled()
|
|||
m_ui.pgxpGeometryToleranceLabel->setEnabled(enabled);
|
||||
m_ui.pgxpDepthClearThreshold->setEnabled(depth_enabled);
|
||||
m_ui.pgxpDepthClearThresholdLabel->setEnabled(depth_enabled);
|
||||
m_ui.pgxpDisableOn2DPolygons->setEnabled(enabled);
|
||||
m_ui.pgxpTransparentDepthTest->setEnabled(depth_enabled);
|
||||
}
|
||||
|
||||
void GraphicsSettingsWidget::onAspectRatioChanged()
|
||||
|
|
|
@ -614,6 +614,13 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QCheckBox" name="pgxpTransparentDepthTest">
|
||||
<property name="text">
|
||||
<string>Depth Test Transparent Polygons</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-License-Identifier: CC-BY-NC-ND-4.0
|
||||
|
||||
static constexpr ImWchar FA_ICON_RANGE[] = { 0xe06f,0xe070,0xe086,0xe086,0xf002,0xf002,0xf005,0xf005,0xf007,0xf007,0xf00c,0xf00e,0xf011,0xf013,0xf017,0xf017,0xf019,0xf019,0xf01c,0xf01c,0xf021,0xf021,0xf023,0xf023,0xf025,0xf026,0xf028,0xf028,0xf02e,0xf02e,0xf030,0xf030,0xf03a,0xf03a,0xf03d,0xf03d,0xf04a,0xf04c,0xf050,0xf050,0xf056,0xf056,0xf05e,0xf05e,0xf062,0xf063,0xf065,0xf067,0xf071,0xf071,0xf075,0xf075,0xf077,0xf078,0xf07b,0xf07c,0xf083,0xf085,0xf091,0xf091,0xf0ac,0xf0ae,0xf0b2,0xf0b2,0xf0c3,0xf0c3,0xf0c5,0xf0c5,0xf0c7,0xf0c9,0xf0cb,0xf0cb,0xf0d0,0xf0d0,0xf0dc,0xf0dc,0xf0e0,0xf0e0,0xf0e2,0xf0e2,0xf0e7,0xf0e8,0xf0eb,0xf0eb,0xf0f1,0xf0f1,0xf0f3,0xf0f3,0xf0fe,0xf0fe,0xf110,0xf110,0xf11b,0xf11c,0xf140,0xf140,0xf144,0xf144,0xf146,0xf146,0xf14a,0xf14a,0xf15b,0xf15d,0xf191,0xf192,0xf1ab,0xf1ab,0xf1c0,0xf1c0,0xf1c5,0xf1c5,0xf1de,0xf1de,0xf1e6,0xf1e6,0xf1eb,0xf1eb,0xf1f8,0xf1f8,0xf1fb,0xf1fc,0xf201,0xf201,0xf240,0xf240,0xf242,0xf242,0xf245,0xf245,0xf26c,0xf26c,0xf279,0xf279,0xf2c1,0xf2c1,0xf2d0,0xf2d0,0xf2db,0xf2db,0xf2f1,0xf2f2,0xf302,0xf302,0xf31e,0xf31e,0xf338,0xf338,0xf35d,0xf35d,0xf360,0xf360,0xf362,0xf362,0xf3fd,0xf3fd,0xf410,0xf410,0xf422,0xf422,0xf424,0xf424,0xf462,0xf462,0xf466,0xf466,0xf4ce,0xf4ce,0xf500,0xf500,0xf51f,0xf51f,0xf538,0xf538,0xf53f,0xf53f,0xf545,0xf545,0xf547,0xf548,0xf54c,0xf54c,0xf55b,0xf55b,0xf55d,0xf55d,0xf565,0xf565,0xf56e,0xf570,0xf575,0xf575,0xf5a2,0xf5a2,0xf5aa,0xf5aa,0xf5c7,0xf5c7,0xf5cb,0xf5cb,0xf5e7,0xf5e7,0xf5ee,0xf5ee,0xf61f,0xf61f,0xf65d,0xf65e,0xf6a9,0xf6a9,0xf6cf,0xf6cf,0xf70c,0xf70c,0xf70e,0xf70e,0xf78c,0xf78c,0xf794,0xf794,0xf7a0,0xf7a0,0xf7a4,0xf7a5,0xf7c2,0xf7c2,0xf807,0xf807,0xf815,0xf815,0xf818,0xf818,0xf84c,0xf84c,0xf87d,0xf87d,0xf8cc,0xf8cc,0x0,0x0 };
|
||||
static constexpr ImWchar FA_ICON_RANGE[] = { 0xe06f,0xe070,0xe086,0xe086,0xf002,0xf002,0xf005,0xf005,0xf007,0xf007,0xf00c,0xf00e,0xf011,0xf013,0xf017,0xf017,0xf019,0xf019,0xf01c,0xf01c,0xf021,0xf021,0xf023,0xf023,0xf025,0xf026,0xf028,0xf028,0xf02e,0xf02e,0xf030,0xf030,0xf03a,0xf03a,0xf03d,0xf03d,0xf04a,0xf04c,0xf050,0xf050,0xf056,0xf056,0xf05e,0xf05e,0xf062,0xf063,0xf065,0xf067,0xf071,0xf071,0xf075,0xf075,0xf077,0xf078,0xf07b,0xf07c,0xf083,0xf085,0xf091,0xf091,0xf0ac,0xf0ae,0xf0b2,0xf0b2,0xf0c3,0xf0c3,0xf0c5,0xf0c5,0xf0c7,0xf0c9,0xf0cb,0xf0cb,0xf0d0,0xf0d0,0xf0dc,0xf0dc,0xf0e0,0xf0e0,0xf0e2,0xf0e2,0xf0e7,0xf0e8,0xf0eb,0xf0eb,0xf0f1,0xf0f1,0xf0f3,0xf0f3,0xf0fe,0xf0fe,0xf110,0xf110,0xf11b,0xf11c,0xf140,0xf140,0xf144,0xf144,0xf146,0xf146,0xf14a,0xf14a,0xf15b,0xf15d,0xf191,0xf192,0xf1ab,0xf1ab,0xf1c0,0xf1c0,0xf1c5,0xf1c5,0xf1de,0xf1de,0xf1e6,0xf1e6,0xf1eb,0xf1eb,0xf1f8,0xf1f8,0xf1fb,0xf1fc,0xf201,0xf201,0xf240,0xf240,0xf242,0xf242,0xf245,0xf245,0xf26c,0xf26c,0xf279,0xf279,0xf2c1,0xf2c1,0xf2d0,0xf2d0,0xf2db,0xf2db,0xf2f1,0xf2f2,0xf302,0xf302,0xf31e,0xf31e,0xf338,0xf338,0xf35d,0xf35d,0xf360,0xf360,0xf362,0xf362,0xf3fd,0xf3fd,0xf410,0xf410,0xf422,0xf422,0xf424,0xf424,0xf462,0xf462,0xf466,0xf466,0xf4ce,0xf4ce,0xf500,0xf500,0xf51f,0xf51f,0xf538,0xf538,0xf53f,0xf53f,0xf545,0xf545,0xf547,0xf548,0xf54c,0xf54c,0xf55b,0xf55b,0xf55d,0xf55d,0xf565,0xf565,0xf56e,0xf570,0xf575,0xf575,0xf5a2,0xf5a2,0xf5aa,0xf5aa,0xf5ae,0xf5ae,0xf5c7,0xf5c7,0xf5cb,0xf5cb,0xf5e7,0xf5e7,0xf5ee,0xf5ee,0xf61f,0xf61f,0xf65d,0xf65e,0xf6a9,0xf6a9,0xf6cf,0xf6cf,0xf70c,0xf70c,0xf70e,0xf70e,0xf78c,0xf78c,0xf794,0xf794,0xf7a0,0xf7a0,0xf7a4,0xf7a5,0xf7c2,0xf7c2,0xf807,0xf807,0xf815,0xf815,0xf818,0xf818,0xf84c,0xf84c,0xf87d,0xf87d,0xf8cc,0xf8cc,0x0,0x0 };
|
||||
|
||||
static constexpr ImWchar PF_ICON_RANGE[] = { 0x2196,0x2199,0x219e,0x21a3,0x21b0,0x21b3,0x21ba,0x21c3,0x21c7,0x21ca,0x21d0,0x21d4,0x21e0,0x21e3,0x21e6,0x21e8,0x21ed,0x21ee,0x21f7,0x21f8,0x21fa,0x21fb,0x227a,0x227f,0x2284,0x2284,0x2349,0x2349,0x235e,0x235e,0x2360,0x2361,0x2364,0x2366,0x23b2,0x23b4,0x23ce,0x23ce,0x23f4,0x23f7,0x2427,0x243a,0x243c,0x243e,0x2460,0x246b,0x248f,0x248f,0x24f5,0x24fd,0x24ff,0x24ff,0x2717,0x2717,0x278a,0x278e,0x27fc,0x27fc,0xe000,0xe001,0xff21,0xff3a,0x1f52b,0x1f52b,0x1f578,0x1f578,0x0,0x0 };
|
||||
|
||||
|
|
Loading…
Reference in New Issue