GS: let players claim the remaining hardware fixes

Eleven more hacks get a claim bit: palette conversion, depth support,
framebuffer conversion, read targets on close, the 24 bit depth limit,
texture region estimation, draw buffering, both CPU sprite render
values, CPU CLUT render and GPU target CLUT. They move behind the same
keep guard the sprite hacks use, and the ten with a database fix id map
across to it.

Every one of them was cleared on each settings load whenever manual
hacks were off, which is the default, so a frontend row for any of them
did nothing at all unless the player also turned the database fixes off
for that game. Disable safe features and disable render fixes stay
unconditional, since no frontend exposes them.
This commit is contained in:
J1coding
2026-08-07 11:15:34 +02:00
committed by Jeen
parent 06bb419db9
commit fc4d1eb44d
3 changed files with 56 additions and 13 deletions
+11
View File
@@ -559,6 +559,17 @@ enum class GSUserHackOverride : u8
TextureOffsetY,
PreloadFrameData,
DisablePartialInvalidation,
GPUPaletteConversion,
DisableDepthSupport,
CPUFBConversion,
ReadTCOnClose,
Limit24BitDepth,
EstimateTextureRegion,
DrawBuffering,
CPUSpriteRenderBW,
CPUSpriteRenderLevel,
CPUCLUTRender,
GPUTargetCLUT,
MaxCount
};
+20
View File
@@ -514,6 +514,26 @@ static std::optional<GSUserHackOverride> UserHackOverrideForHWFix(GameDatabaseSc
return GSUserHackOverride::PreloadFrameData;
case GameDatabaseSchema::GSHWFixId::DisablePartialInvalidation:
return GSUserHackOverride::DisablePartialInvalidation;
case GameDatabaseSchema::GSHWFixId::GPUPaletteConversion:
return GSUserHackOverride::GPUPaletteConversion;
case GameDatabaseSchema::GSHWFixId::DisableDepthSupport:
return GSUserHackOverride::DisableDepthSupport;
case GameDatabaseSchema::GSHWFixId::CPUFramebufferConversion:
return GSUserHackOverride::CPUFBConversion;
case GameDatabaseSchema::GSHWFixId::Limit24BitDepth:
return GSUserHackOverride::Limit24BitDepth;
case GameDatabaseSchema::GSHWFixId::EstimateTextureRegion:
return GSUserHackOverride::EstimateTextureRegion;
case GameDatabaseSchema::GSHWFixId::DrawBuffering:
return GSUserHackOverride::DrawBuffering;
case GameDatabaseSchema::GSHWFixId::CPUSpriteRenderBW:
return GSUserHackOverride::CPUSpriteRenderBW;
case GameDatabaseSchema::GSHWFixId::CPUSpriteRenderLevel:
return GSUserHackOverride::CPUSpriteRenderLevel;
case GameDatabaseSchema::GSHWFixId::CPUCLUTRender:
return GSUserHackOverride::CPUCLUTRender;
case GameDatabaseSchema::GSHWFixId::GPUTargetCLUT:
return GSUserHackOverride::GPUTargetCLUT;
default:
return std::nullopt;
}
+25 -13
View File
@@ -1227,8 +1227,7 @@ void Pcsx2Config::GSOptions::MaskUserHacks(bool respect_claims)
if (ManualUserHacks)
return;
// A pinned hack is the player's answer for this one setting, so it survives here and
// past the GameDB. Everything they didn't touch still goes back to automatic.
// A pinned hack is the player's answer, so it survives here and past the GameDB.
const auto keep = [this, respect_claims](GSUserHackOverride hack) {
return respect_claims && IsUserHackPinned(hack);
};
@@ -1262,19 +1261,32 @@ void Pcsx2Config::GSOptions::MaskUserHacks(bool respect_claims)
if (!keep(GSUserHackOverride::DisablePartialInvalidation))
UserHacks_DisablePartialInvalidation = false;
if (!keep(GSUserHackOverride::GPUPaletteConversion))
GPUPaletteConversion = false;
if (!keep(GSUserHackOverride::DisableDepthSupport))
UserHacks_DisableDepthSupport = false;
if (!keep(GSUserHackOverride::CPUFBConversion))
UserHacks_CPUFBConversion = false;
if (!keep(GSUserHackOverride::ReadTCOnClose))
UserHacks_ReadTCOnClose = false;
if (!keep(GSUserHackOverride::Limit24BitDepth))
UserHacks_Limit24BitDepth = GSLimit24BitDepth::Disabled;
if (!keep(GSUserHackOverride::EstimateTextureRegion))
UserHacks_EstimateTextureRegion = false;
if (!keep(GSUserHackOverride::DrawBuffering))
UserHacks_DrawBuffering = false;
if (!keep(GSUserHackOverride::CPUSpriteRenderBW))
UserHacks_CPUSpriteRenderBW = 0;
if (!keep(GSUserHackOverride::CPUSpriteRenderLevel))
UserHacks_CPUSpriteRenderLevel = 0;
if (!keep(GSUserHackOverride::CPUCLUTRender))
UserHacks_CPUCLUTRender = 0;
if (!keep(GSUserHackOverride::GPUTargetCLUT))
UserHacks_GPUTargetCLUTMode = GSGPUTargetCLUTMode::Disabled;
// No UI reaches these two, so there is nothing for a player to claim.
UserHacks_DisableSafeFeatures = false;
UserHacks_DisableRenderFixes = false;
GPUPaletteConversion = false;
UserHacks_DisableDepthSupport = false;
UserHacks_CPUFBConversion = false;
UserHacks_ReadTCOnClose = false;
UserHacks_Limit24BitDepth = GSLimit24BitDepth::Disabled;
UserHacks_EstimateTextureRegion = false;
UserHacks_DrawBuffering = false;
UserHacks_CPUSpriteRenderBW = 0;
UserHacks_CPUSpriteRenderLevel = 0;
UserHacks_CPUCLUTRender = 0;
UserHacks_GPUTargetCLUTMode = GSGPUTargetCLUTMode::Disabled;
SkipDrawStart = 0;
SkipDrawEnd = 0;
}