mirror of
https://github.com/ARMSX2/ARMSX2.git
synced 2026-08-24 16:50:16 -07:00
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:
@@ -559,6 +559,17 @@ enum class GSUserHackOverride : u8
|
||||
TextureOffsetY,
|
||||
PreloadFrameData,
|
||||
DisablePartialInvalidation,
|
||||
GPUPaletteConversion,
|
||||
DisableDepthSupport,
|
||||
CPUFBConversion,
|
||||
ReadTCOnClose,
|
||||
Limit24BitDepth,
|
||||
EstimateTextureRegion,
|
||||
DrawBuffering,
|
||||
CPUSpriteRenderBW,
|
||||
CPUSpriteRenderLevel,
|
||||
CPUCLUTRender,
|
||||
GPUTargetCLUT,
|
||||
MaxCount
|
||||
};
|
||||
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user