mirror of https://github.com/PCSX2/pcsx2.git
GS: Remove CRC hack levels
Replace it with a boolean "Disable Render Fixes" option.
This commit is contained in:
parent
7ca28fc796
commit
7edc4e2cb3
|
@ -181,8 +181,6 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget*
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
// HW Renderer Fixes
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
SettingWidgetBinder::BindWidgetToIntSetting(
|
||||
sif, m_ui.crcFixLevel, "EmuCore/GS", "crc_hack_level", static_cast<int>(CRCHackLevel::Automatic), -1);
|
||||
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.halfScreenFix, "EmuCore/GS", "UserHacks_Half_Bottom_Override", -1, -1);
|
||||
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.cpuSpriteRenderBW, "EmuCore/GS", "UserHacks_CPUSpriteRenderBW", 0);
|
||||
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.cpuSpriteRenderLevel, "EmuCore/GS", "UserHacks_CPUSpriteRenderLevel", 0);
|
||||
|
@ -194,6 +192,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget*
|
|||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.frameBufferConversion, "EmuCore/GS", "UserHacks_CPU_FB_Conversion", false);
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.disableDepthEmulation, "EmuCore/GS", "UserHacks_DisableDepthSupport", false);
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.disableSafeFeatures, "EmuCore/GS", "UserHacks_Disable_Safe_Features", false);
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.disableRenderFixes, "EmuCore/GS", "UserHacks_DisableRenderFixes", false);
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.preloadFrameData, "EmuCore/GS", "preload_frame_with_gs_data", false);
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(
|
||||
sif, m_ui.disablePartialInvalidation, "EmuCore/GS", "UserHacks_DisablePartialInvalidation", false);
|
||||
|
@ -471,9 +470,6 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget*
|
|||
"Unscaled: Native Dithering / Lowest dithering effect does not increase size of squares when upscaling.<br> "
|
||||
"Scaled: Upscaling-aware / Highest dithering effect."));
|
||||
|
||||
dialog->registerWidgetHelp(m_ui.crcFixLevel, tr("CRC Fix Level"), tr("Automatic (Default)"),
|
||||
tr("Control the number of Auto-CRC fixes and hacks applied to games."));
|
||||
|
||||
dialog->registerWidgetHelp(m_ui.blending, tr("Blending Accuracy"), tr("Basic (Recommended)"),
|
||||
tr("Control the accuracy level of the GS blending unit emulation.<br> "
|
||||
"The higher the setting, the more blending is emulated in the shader accurately, and the higher the speed penalty will "
|
||||
|
@ -545,6 +541,9 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget*
|
|||
"Disables accurate GS Memory Clearing to be done on the CPU, and let the GPU handle it, which can help Kingdom Hearts "
|
||||
"games."));
|
||||
|
||||
dialog->registerWidgetHelp(
|
||||
m_ui.disableRenderFixes, tr("Disable Render Fixes"), tr("Unchecked"), tr("This option disables game-specific render fixes."));
|
||||
|
||||
dialog->registerWidgetHelp(m_ui.disablePartialInvalidation, tr("Disable Partial Source Invalidation"), tr("Unchecked"),
|
||||
tr("By default, the texture cache handles partial invalidations. Unfortunately it is very costly to compute CPU wise. "
|
||||
"This hack replaces the partial invalidation with a complete deletion of the texture to reduce the CPU load. "
|
||||
|
@ -1051,7 +1050,6 @@ void GraphicsSettingsWidget::resetManualHardwareFixes()
|
|||
|
||||
check_bool("EmuCore/GS", "UserHacks", false);
|
||||
|
||||
check_int("EmuCore/GS", "crc_hack_level", static_cast<int>(CRCHackLevel::Automatic));
|
||||
check_int("EmuCore/GS", "UserHacks_Half_Bottom_Override", -1);
|
||||
check_int("EmuCore/GS", "UserHacks_CPUSpriteRenderBW", 0);
|
||||
check_int("EmuCore/GS", "UserHacks_CPUCLUTRender", 0);
|
||||
|
@ -1062,6 +1060,7 @@ void GraphicsSettingsWidget::resetManualHardwareFixes()
|
|||
check_bool("EmuCore/GS", "UserHacks_CPU_FB_Conversion", false);
|
||||
check_bool("EmuCore/GS", "UserHacks_DisableDepthSupport", false);
|
||||
check_bool("EmuCore/GS", "UserHacks_Disable_Safe_Features", false);
|
||||
check_bool("EmuCore/GS", "UserHacks_DisableRenderFixes", false);
|
||||
check_bool("EmuCore/GS", "preload_frame_with_gs_data", false);
|
||||
check_bool("EmuCore/GS", "UserHacks_DisablePartialInvalidation", false);
|
||||
check_int("EmuCore/GS", "UserHacks_TextureInsideRt", static_cast<int>(GSTextureInRtMode::Disabled));
|
||||
|
|
|
@ -781,54 +781,13 @@
|
|||
</attribute>
|
||||
<layout class="QFormLayout" name="hardwareFixesLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>CRC Fix Level:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="crcFixLevel">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Automatic (Default)</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>None (Debug)</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Minimum (Debug)</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Partial (OpenGL)</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Full (Direct3D)</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Aggressive</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_10">
|
||||
<property name="text">
|
||||
<string>Half Screen Fix:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="halfScreenFix">
|
||||
<item>
|
||||
<property name="text">
|
||||
|
@ -847,14 +806,14 @@
|
|||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_36">
|
||||
<property name="text">
|
||||
<string>CPU Sprite Render Size:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<item row="1" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5" stretch="1,0">
|
||||
<item>
|
||||
<widget class="QComboBox" name="cpuSpriteRenderBW">
|
||||
|
@ -936,14 +895,14 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_16">
|
||||
<property name="text">
|
||||
<string>Software CLUT Render:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="cpuCLUTRender">
|
||||
<property name="currentText">
|
||||
<string extracomment="0 (Disabled)">0 (Disabled)</string>
|
||||
|
@ -968,14 +927,14 @@
|
|||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_47">
|
||||
<property name="text">
|
||||
<string extracomment="CLUT: Color Look Up Table, often referred to as a palette in non-PS2 things. GPU Target CLUT: GPU handling of when a game uses data from a render target as a CLUT.">GPU Target CLUT:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<item row="3" column="1">
|
||||
<widget class="QComboBox" name="gpuTargetCLUTMode">
|
||||
<item>
|
||||
<property name="text">
|
||||
|
@ -994,40 +953,14 @@
|
|||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_45">
|
||||
<property name="text">
|
||||
<string>Texture Inside RT:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QComboBox" name="textureInsideRt">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Disabled (Default)</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Inside Target</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Merge Targets</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_30">
|
||||
<property name="text">
|
||||
<string>Auto Flush:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<item row="4" column="1">
|
||||
<widget class="QComboBox" name="hwAutoFlush">
|
||||
<item>
|
||||
<property name="text">
|
||||
|
@ -1046,14 +979,40 @@
|
|||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_45">
|
||||
<property name="text">
|
||||
<string>Texture Inside RT:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QComboBox" name="textureInsideRt">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Disabled (Default)</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Inside Target</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Merge Targets</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_12">
|
||||
<property name="text">
|
||||
<string>Skipdraw Range:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<item row="6" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QSpinBox" name="skipDrawStart">
|
||||
|
@ -1071,7 +1030,7 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="8" column="0" colspan="2">
|
||||
<item row="7" column="0" colspan="2">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="disableDepthEmulation">
|
||||
|
@ -1094,45 +1053,52 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="estimateTextureRegion">
|
||||
<item row="4" column="1">
|
||||
<widget class="QCheckBox" name="targetPartialInvalidation">
|
||||
<property name="text">
|
||||
<string>Estimate Texture Region</string>
|
||||
<string>Target Partial Invalidation</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="frameBufferConversion">
|
||||
<property name="text">
|
||||
<string>Frame Buffer Conversion</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QCheckBox" name="gpuPaletteConversion">
|
||||
<property name="text">
|
||||
<string>GPU Palette Conversion</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="preloadFrameData">
|
||||
<property name="text">
|
||||
<string>Preload Frame Data</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<item row="3" column="1">
|
||||
<widget class="QCheckBox" name="readTCOnClose">
|
||||
<property name="text">
|
||||
<string>Read Targets When Closing</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QCheckBox" name="targetPartialInvalidation">
|
||||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="preloadFrameData">
|
||||
<property name="text">
|
||||
<string>Target Partial Invalidation</string>
|
||||
<string>Preload Frame Data</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="gpuPaletteConversion">
|
||||
<property name="text">
|
||||
<string>GPU Palette Conversion</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QCheckBox" name="frameBufferConversion">
|
||||
<property name="text">
|
||||
<string>Frame Buffer Conversion</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="estimateTextureRegion">
|
||||
<property name="text">
|
||||
<string>Estimate Texture Region</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="disableRenderFixes">
|
||||
<property name="text">
|
||||
<string>Disable Render Fixes</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
@ -288,16 +288,6 @@ enum class HWMipmapLevel : s8
|
|||
Full
|
||||
};
|
||||
|
||||
enum class CRCHackLevel : s8
|
||||
{
|
||||
Automatic = -1,
|
||||
Off,
|
||||
Minimum,
|
||||
Partial,
|
||||
Full,
|
||||
Aggressive
|
||||
};
|
||||
|
||||
enum class AccBlendLevel : u8
|
||||
{
|
||||
Minimum,
|
||||
|
@ -685,6 +675,7 @@ struct Pcsx2Config
|
|||
UserHacks_DisableDepthSupport : 1,
|
||||
UserHacks_DisablePartialInvalidation : 1,
|
||||
UserHacks_DisableSafeFeatures : 1,
|
||||
UserHacks_DisableRenderFixes : 1,
|
||||
UserHacks_MergePPSprite : 1,
|
||||
UserHacks_WildHack : 1,
|
||||
UserHacks_BilinearHack : 1,
|
||||
|
@ -742,7 +733,6 @@ struct Pcsx2Config
|
|||
|
||||
HWMipmapLevel HWMipmap = HWMipmapLevel::Automatic;
|
||||
AccBlendLevel AccurateBlendingUnit = AccBlendLevel::Basic;
|
||||
CRCHackLevel CRCHack = CRCHackLevel::Automatic;
|
||||
BiFiltering TextureFiltering = BiFiltering::PS2;
|
||||
TexturePreloadingLevel TexturePreloading = TexturePreloadingLevel::Full;
|
||||
GSDumpCompressionMethod GSDumpCompression = GSDumpCompressionMethod::Zstandard;
|
||||
|
|
|
@ -3185,9 +3185,6 @@ void FullscreenUI::DrawGraphicsSettingsPage()
|
|||
static constexpr const char* s_auto_flush_options[] = {
|
||||
"Disabled (Default)", "Enabled (Sprites Only)", "Enabled (All Primitives)"};
|
||||
|
||||
DrawIntListSetting(bsi, "CRC Fix Level", "Applies manual fixes to difficult-to-emulate effects in the hardware renderers.",
|
||||
"EmuCore/GS", "crc_hack_level", static_cast<int>(CRCHackLevel::Automatic), s_crc_fix_options, std::size(s_crc_fix_options),
|
||||
-1);
|
||||
DrawIntListSetting(bsi, "Half-Bottom Override", "Control the half-screen fix detection on texture shuffling.", "EmuCore/GS",
|
||||
"UserHacks_Half_Bottom_Override", -1, s_generic_options, std::size(s_generic_options), -1);
|
||||
DrawIntListSetting(bsi, "CPU Sprite Render Size", "Uses software renderer to draw texture decompression-like sprites.",
|
||||
|
@ -3208,6 +3205,8 @@ void FullscreenUI::DrawGraphicsSettingsPage()
|
|||
"UserHacks_DisableDepthSupport", false, manual_hw_fixes);
|
||||
DrawToggleSetting(bsi, "Disable Safe Features", "This option disables multiple safe features.", "EmuCore/GS",
|
||||
"UserHacks_Disable_Safe_Features", false, manual_hw_fixes);
|
||||
DrawToggleSetting(bsi, "Disable Render Features", "This option disables game-specific render fixes.", "EmuCore/GS",
|
||||
"UserHacks_DisableRenderFixes", false, manual_hw_fixes);
|
||||
DrawToggleSetting(bsi, "Preload Frame", "Uploads GS data when rendering a new frame to reproduce some effects accurately.",
|
||||
"EmuCore/GS", "preload_frame_with_gs_data", false, manual_hw_fixes);
|
||||
DrawToggleSetting(bsi, "Disable Partial Invalidation",
|
||||
|
|
|
@ -392,8 +392,6 @@ void ImGuiManager::DrawSettingsOverlay()
|
|||
APPEND("AF={} ", EmuConfig.GS.MaxAnisotropy);
|
||||
if (GSConfig.Dithering != 2)
|
||||
APPEND("DI={} ", GSConfig.Dithering);
|
||||
if (EmuConfig.GS.CRCHack != CRCHackLevel::Automatic)
|
||||
APPEND("CRC={} ", static_cast<unsigned>(EmuConfig.GS.CRCHack));
|
||||
if (GSConfig.UserHacks_HalfBottomOverride >= 0)
|
||||
APPEND("HBO={} ", GSConfig.UserHacks_HalfBottomOverride);
|
||||
if (GSConfig.UserHacks_HalfPixelOffset > 0)
|
||||
|
@ -436,6 +434,8 @@ void ImGuiManager::DrawSettingsOverlay()
|
|||
APPEND("TPI ");
|
||||
if (GSConfig.UserHacks_DisableSafeFeatures)
|
||||
APPEND("DSF ");
|
||||
if (GSConfig.UserHacks_DisableRenderFixes)
|
||||
APPEND("DRF ");
|
||||
if (GSConfig.PreloadFrameWithGSData)
|
||||
APPEND("PLFD ");
|
||||
if (GSConfig.UserHacks_EstimateTextureRegion)
|
||||
|
|
|
@ -774,8 +774,7 @@ void GSUpdateConfig(const Pcsx2Config::GSOptions& new_config)
|
|||
}
|
||||
|
||||
// Options which aren't using the global struct yet, so we need to recreate all GS objects.
|
||||
if (
|
||||
GSConfig.SWExtraThreads != old_config.SWExtraThreads ||
|
||||
if (GSConfig.SWExtraThreads != old_config.SWExtraThreads ||
|
||||
GSConfig.SWExtraThreadsHeight != old_config.SWExtraThreadsHeight)
|
||||
{
|
||||
if (!GSreopen(false, true, old_config))
|
||||
|
@ -784,10 +783,7 @@ void GSUpdateConfig(const Pcsx2Config::GSOptions& new_config)
|
|||
return;
|
||||
}
|
||||
|
||||
// This is where we would do finer-grained checks in the future.
|
||||
// For example, flushing the texture cache when mipmap settings change.
|
||||
|
||||
if (GSConfig.CRCHack != old_config.CRCHack ||
|
||||
if (GSConfig.UserHacks_DisableRenderFixes != old_config.UserHacks_DisableRenderFixes ||
|
||||
GSConfig.UpscaleMultiplier != old_config.UpscaleMultiplier ||
|
||||
GSConfig.GetSkipCountFunctionId != old_config.GetSkipCountFunctionId ||
|
||||
GSConfig.BeforeDrawFunctionId != old_config.BeforeDrawFunctionId)
|
||||
|
|
|
@ -2587,7 +2587,7 @@ void GSState::SetGameCRC(u32 crc)
|
|||
|
||||
void GSState::UpdateCRCHacks()
|
||||
{
|
||||
m_game = CRC::Lookup((GSConfig.CRCHack != CRCHackLevel::Off) ? m_crc : 0);
|
||||
m_game = CRC::Lookup(GSConfig.UserHacks_DisableRenderFixes ? 0 : m_crc);
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -196,11 +196,6 @@ u32 GSUtil::GetChannelMask(u32 spsm)
|
|||
}
|
||||
}
|
||||
|
||||
CRCHackLevel GSUtil::GetRecommendedCRCHackLevel(GSRendererType type)
|
||||
{
|
||||
return (type == GSRendererType::DX11 || type == GSRendererType::DX12) ? CRCHackLevel::Full : CRCHackLevel::Partial;
|
||||
}
|
||||
|
||||
GSRendererType GSUtil::GetPreferredRenderer()
|
||||
{
|
||||
#if defined(__APPLE__)
|
||||
|
|
|
@ -35,7 +35,6 @@ public:
|
|||
static bool HasSameSwizzleBits(u32 spsm, u32 dpsm);
|
||||
static u32 GetChannelMask(u32 spsm);
|
||||
|
||||
static CRCHackLevel GetRecommendedCRCHackLevel(GSRendererType type);
|
||||
static GSRendererType GetPreferredRenderer();
|
||||
};
|
||||
|
||||
|
|
|
@ -19,11 +19,6 @@
|
|||
#include "GS/GSGL.h"
|
||||
|
||||
static bool s_nativeres;
|
||||
static CRCHackLevel s_crc_hack_level = CRCHackLevel::Full;
|
||||
|
||||
#define CRC_Partial (s_crc_hack_level >= CRCHackLevel::Partial)
|
||||
#define CRC_Full (s_crc_hack_level >= CRCHackLevel::Full)
|
||||
#define CRC_Aggressive (s_crc_hack_level >= CRCHackLevel::Aggressive)
|
||||
|
||||
#define RPRIM r.PRIM
|
||||
#define RCONTEXT r.m_context
|
||||
|
@ -64,11 +59,13 @@ bool GSHwHack::GSC_DeathByDegreesTekkenNinaWilliams(GSRendererHW& r, int& skip)
|
|||
// Upscaling issue similar to Tekken 5.
|
||||
skip = 1; // Animation pane
|
||||
}
|
||||
else if (CRC_Aggressive && RFBP == 0x3500 && RTPSM == PSMT8 && RFBMSK == 0xFFFF00FF)
|
||||
#if 0
|
||||
else if (RFBP == 0x3500 && RTPSM == PSMT8 && RFBMSK == 0xFFFF00FF)
|
||||
{
|
||||
// Needs to be further tested so put it on Aggressive for now, likely channel shuffle.
|
||||
skip = 4; // Underwater white fog
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -532,10 +529,6 @@ bool GSHwHack::GSC_SteambotChronicles(GSRendererHW& r, int& skip)
|
|||
{
|
||||
skip = 100; // deletes most others(too high deletes the buggy sea completely;c, too low causes glitches to be visible)
|
||||
}
|
||||
else if (CRC_Aggressive && RFBP != 0)
|
||||
{
|
||||
skip = 19; // "speedhack", makes the game very light, vaporized water can disappear when not looked at directly, possibly some interface still, other value to try: 6 breaks menu background, possibly nothing(?) during gameplay, but it's slower, hence not much of a speedhack anymore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1006,66 +999,62 @@ bool GSHwHack::OI_HauntingGround(GSRendererHW& r, GSTexture* rt, GSTexture* ds,
|
|||
#undef RZMSK
|
||||
#undef RZTST
|
||||
|
||||
#undef CRC_Partial
|
||||
#undef CRC_Full
|
||||
#undef CRC_Aggressive
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define CRC_F(name, level) { #name, &GSHwHack::name, level }
|
||||
#define CRC_F(name) { #name, &GSHwHack::name }
|
||||
|
||||
const GSHwHack::Entry<GSRendererHW::GSC_Ptr> GSHwHack::s_get_skip_count_functions[] = {
|
||||
CRC_F(GSC_GodHand, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_KnightsOfTheTemple2, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_Kunoichi, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_Manhunt2, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_MidnightClub3, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_SacredBlaze, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_SakuraTaisen, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_SakuraWarsSoLongMyLove, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_Simple2000Vol114, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_SFEX3, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_TalesOfLegendia, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_TalesofSymphonia, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_UrbanReign, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_ZettaiZetsumeiToshi2, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_BlackAndBurnoutSky, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_BlueTongueGames, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_Battlefield2, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_NFSUndercover, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_PolyphonyDigitalGames, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_GodHand),
|
||||
CRC_F(GSC_KnightsOfTheTemple2),
|
||||
CRC_F(GSC_Kunoichi),
|
||||
CRC_F(GSC_Manhunt2),
|
||||
CRC_F(GSC_MidnightClub3),
|
||||
CRC_F(GSC_SacredBlaze),
|
||||
CRC_F(GSC_SakuraTaisen),
|
||||
CRC_F(GSC_SakuraWarsSoLongMyLove),
|
||||
CRC_F(GSC_Simple2000Vol114),
|
||||
CRC_F(GSC_SFEX3),
|
||||
CRC_F(GSC_TalesOfLegendia),
|
||||
CRC_F(GSC_TalesofSymphonia),
|
||||
CRC_F(GSC_UrbanReign),
|
||||
CRC_F(GSC_ZettaiZetsumeiToshi2),
|
||||
CRC_F(GSC_BlackAndBurnoutSky),
|
||||
CRC_F(GSC_BlueTongueGames),
|
||||
CRC_F(GSC_Battlefield2),
|
||||
CRC_F(GSC_NFSUndercover),
|
||||
CRC_F(GSC_PolyphonyDigitalGames),
|
||||
|
||||
// Channel Effect
|
||||
CRC_F(GSC_GiTS, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_SteambotChronicles, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_GiTS),
|
||||
CRC_F(GSC_SteambotChronicles),
|
||||
|
||||
// Depth Issue
|
||||
CRC_F(GSC_BurnoutGames, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_BurnoutGames),
|
||||
|
||||
// Half Screen bottom issue
|
||||
CRC_F(GSC_Tekken5, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_Tekken5),
|
||||
|
||||
// Texture shuffle
|
||||
CRC_F(GSC_DeathByDegreesTekkenNinaWilliams, CRCHackLevel::Partial), // + Upscaling issues
|
||||
CRC_F(GSC_DeathByDegreesTekkenNinaWilliams), // + Upscaling issues
|
||||
|
||||
// Upscaling hacks
|
||||
CRC_F(GSC_UltramanFightingEvolution, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_UltramanFightingEvolution),
|
||||
|
||||
// Accurate Blending
|
||||
CRC_F(GSC_GetawayGames, CRCHackLevel::Partial),
|
||||
CRC_F(GSC_GetawayGames),
|
||||
};
|
||||
|
||||
const GSHwHack::Entry<GSRendererHW::OI_Ptr> GSHwHack::s_before_draw_functions[] = {
|
||||
CRC_F(OI_PointListPalette, CRCHackLevel::Minimum),
|
||||
CRC_F(OI_BigMuthaTruckers, CRCHackLevel::Minimum),
|
||||
CRC_F(OI_DBZBTGames, CRCHackLevel::Minimum),
|
||||
CRC_F(OI_FFX, CRCHackLevel::Minimum),
|
||||
CRC_F(OI_RozenMaidenGebetGarden, CRCHackLevel::Minimum),
|
||||
CRC_F(OI_SonicUnleashed, CRCHackLevel::Minimum),
|
||||
CRC_F(OI_ArTonelico2, CRCHackLevel::Minimum),
|
||||
CRC_F(OI_BurnoutGames, CRCHackLevel::Minimum),
|
||||
CRC_F(OI_Battlefield2, CRCHackLevel::Minimum),
|
||||
CRC_F(OI_HauntingGround, CRCHackLevel::Minimum)
|
||||
CRC_F(OI_PointListPalette),
|
||||
CRC_F(OI_BigMuthaTruckers),
|
||||
CRC_F(OI_DBZBTGames),
|
||||
CRC_F(OI_FFX),
|
||||
CRC_F(OI_RozenMaidenGebetGarden),
|
||||
CRC_F(OI_SonicUnleashed),
|
||||
CRC_F(OI_ArTonelico2),
|
||||
CRC_F(OI_BurnoutGames),
|
||||
CRC_F(OI_Battlefield2),
|
||||
CRC_F(OI_HauntingGround)
|
||||
};
|
||||
|
||||
#undef CRC_F
|
||||
|
@ -1096,28 +1085,22 @@ void GSRendererHW::UpdateCRCHacks()
|
|||
{
|
||||
GSRenderer::UpdateCRCHacks();
|
||||
|
||||
const CRCHackLevel real_level = (GSConfig.CRCHack == CRCHackLevel::Automatic) ?
|
||||
GSUtil::GetRecommendedCRCHackLevel(GSConfig.Renderer) : GSConfig.CRCHack;
|
||||
|
||||
m_nativeres = (GSConfig.UpscaleMultiplier == 1.0f);
|
||||
s_nativeres = m_nativeres;
|
||||
s_crc_hack_level = real_level;
|
||||
|
||||
m_gsc = nullptr;
|
||||
m_oi = nullptr;
|
||||
|
||||
if (real_level != CRCHackLevel::Off)
|
||||
if (!GSConfig.UserHacks_DisableRenderFixes)
|
||||
{
|
||||
if (GSConfig.GetSkipCountFunctionId >= 0 &&
|
||||
static_cast<size_t>(GSConfig.GetSkipCountFunctionId) < std::size(GSHwHack::s_get_skip_count_functions) &&
|
||||
real_level >= GSHwHack::s_get_skip_count_functions[GSConfig.GetSkipCountFunctionId].level)
|
||||
static_cast<size_t>(GSConfig.GetSkipCountFunctionId) < std::size(GSHwHack::s_get_skip_count_functions))
|
||||
{
|
||||
m_gsc = GSHwHack::s_get_skip_count_functions[GSConfig.GetSkipCountFunctionId].ptr;
|
||||
}
|
||||
|
||||
if (GSConfig.BeforeDrawFunctionId >= 0 &&
|
||||
static_cast<size_t>(GSConfig.BeforeDrawFunctionId) < std::size(GSHwHack::s_before_draw_functions) &&
|
||||
real_level >= GSHwHack::s_before_draw_functions[GSConfig.BeforeDrawFunctionId].level)
|
||||
static_cast<size_t>(GSConfig.BeforeDrawFunctionId) < std::size(GSHwHack::s_before_draw_functions))
|
||||
{
|
||||
m_oi = GSHwHack::s_before_draw_functions[GSConfig.BeforeDrawFunctionId].ptr;
|
||||
}
|
||||
|
|
|
@ -61,7 +61,6 @@ public:
|
|||
{
|
||||
const char* name;
|
||||
F ptr;
|
||||
CRCHackLevel level;
|
||||
};
|
||||
|
||||
static const Entry<GSRendererHW::GSC_Ptr> s_get_skip_count_functions[];
|
||||
|
|
|
@ -445,6 +445,7 @@ Pcsx2Config::GSOptions::GSOptions()
|
|||
UserHacks_DisableDepthSupport = false;
|
||||
UserHacks_DisablePartialInvalidation = false;
|
||||
UserHacks_DisableSafeFeatures = false;
|
||||
UserHacks_DisableRenderFixes = false;
|
||||
UserHacks_MergePPSprite = false;
|
||||
UserHacks_WildHack = false;
|
||||
UserHacks_BilinearHack = false;
|
||||
|
@ -506,7 +507,6 @@ bool Pcsx2Config::GSOptions::OptionsAreEqual(const GSOptions& right) const
|
|||
|
||||
OpEqu(HWMipmap) &&
|
||||
OpEqu(AccurateBlendingUnit) &&
|
||||
OpEqu(CRCHack) &&
|
||||
OpEqu(TextureFiltering) &&
|
||||
OpEqu(TexturePreloading) &&
|
||||
OpEqu(GSDumpCompression) &&
|
||||
|
@ -662,6 +662,7 @@ void Pcsx2Config::GSOptions::LoadSave(SettingsWrapper& wrap)
|
|||
GSSettingBoolEx(UserHacks_DisableDepthSupport, "UserHacks_DisableDepthSupport");
|
||||
GSSettingBoolEx(UserHacks_DisablePartialInvalidation, "UserHacks_DisablePartialInvalidation");
|
||||
GSSettingBoolEx(UserHacks_DisableSafeFeatures, "UserHacks_Disable_Safe_Features");
|
||||
GSSettingBoolEx(UserHacks_DisableRenderFixes, "UserHacks_DisableRenderFixes");
|
||||
GSSettingBoolEx(UserHacks_MergePPSprite, "UserHacks_merge_pp_sprite");
|
||||
GSSettingBoolEx(UserHacks_WildHack, "UserHacks_WildHack");
|
||||
GSSettingBoolEx(UserHacks_BilinearHack, "UserHacks_BilinearHack");
|
||||
|
@ -703,7 +704,6 @@ void Pcsx2Config::GSOptions::LoadSave(SettingsWrapper& wrap)
|
|||
|
||||
GSSettingIntEnumEx(HWMipmap, "mipmap_hw");
|
||||
GSSettingIntEnumEx(AccurateBlendingUnit, "accurate_blending_unit");
|
||||
GSSettingIntEnumEx(CRCHack, "crc_hack_level");
|
||||
GSSettingIntEnumEx(TextureFiltering, "filter");
|
||||
GSSettingIntEnumEx(TexturePreloading, "texture_preloading");
|
||||
GSSettingIntEnumEx(GSDumpCompression, "GSDumpCompression");
|
||||
|
@ -787,6 +787,7 @@ void Pcsx2Config::GSOptions::MaskUserHacks()
|
|||
UserHacks_BilinearHack = false;
|
||||
UserHacks_NativePaletteDraw = false;
|
||||
UserHacks_DisableSafeFeatures = false;
|
||||
UserHacks_DisableRenderFixes = false;
|
||||
UserHacks_HalfBottomOverride = -1;
|
||||
UserHacks_HalfPixelOffset = 0;
|
||||
UserHacks_RoundSprite = 0;
|
||||
|
|
|
@ -1949,8 +1949,6 @@ void VMManager::WarnAboutUnsafeSettings()
|
|||
messages += ICON_FA_PAGER " Trilinear filtering is not set to automatic. This may break rendering in some games.\n";
|
||||
if (EmuConfig.GS.AccurateBlendingUnit <= AccBlendLevel::Minimum)
|
||||
messages += ICON_FA_BLENDER " Blending is below basic, this may break effects in some games.\n";
|
||||
if (EmuConfig.GS.CRCHack != CRCHackLevel::Automatic)
|
||||
messages += ICON_FA_FIRST_AID " CRC Fix Level is not set to default, this may break effects in some games.\n";
|
||||
if (EmuConfig.GS.HWDownloadMode != GSHardwareDownloadMode::Enabled)
|
||||
messages += ICON_FA_DOWNLOAD " Hardware Download Mode is not set to Accurate, this may break rendering in some games.\n";
|
||||
if (EmuConfig.Cpu.sseMXCSR.GetRoundMode() != SSEround_Chop)
|
||||
|
|
Loading…
Reference in New Issue