TextureCache: Add an option to disable EFB copies to VRAM
The option is named DisableCopyToVRAM under the Hacks section in GFX.ini. It is intentionally not exposed to the GUI, as users should not need to use it under normal circumstances. The main use is debugging issues in the EFB-to-RAM shaders.
This commit is contained in:
parent
84b990faa0
commit
93fb0e1e1c
|
@ -132,6 +132,8 @@ const ConfigInfo<bool> GFX_HACK_SKIP_EFB_COPY_TO_RAM{{System::GFX, "Hacks", "EFB
|
||||||
true};
|
true};
|
||||||
const ConfigInfo<bool> GFX_HACK_SKIP_XFB_COPY_TO_RAM{{System::GFX, "Hacks", "XFBToTextureEnable"},
|
const ConfigInfo<bool> GFX_HACK_SKIP_XFB_COPY_TO_RAM{{System::GFX, "Hacks", "XFBToTextureEnable"},
|
||||||
true};
|
true};
|
||||||
|
const ConfigInfo<bool> GFX_HACK_DISABLE_COPY_TO_VRAM{{System::GFX, "Hacks", "DisableCopyToVRAM"},
|
||||||
|
false};
|
||||||
const ConfigInfo<bool> GFX_HACK_IMMEDIATE_XFB{{System::GFX, "Hacks", "ImmediateXFBEnable"}, false};
|
const ConfigInfo<bool> GFX_HACK_IMMEDIATE_XFB{{System::GFX, "Hacks", "ImmediateXFBEnable"}, false};
|
||||||
const ConfigInfo<bool> GFX_HACK_COPY_EFB_SCALED{{System::GFX, "Hacks", "EFBScaledCopy"}, true};
|
const ConfigInfo<bool> GFX_HACK_COPY_EFB_SCALED{{System::GFX, "Hacks", "EFBScaledCopy"}, true};
|
||||||
const ConfigInfo<bool> GFX_HACK_EFB_EMULATE_FORMAT_CHANGES{
|
const ConfigInfo<bool> GFX_HACK_EFB_EMULATE_FORMAT_CHANGES{
|
||||||
|
|
|
@ -100,6 +100,7 @@ extern const ConfigInfo<bool> GFX_HACK_BBOX_PREFER_STENCIL_IMPLEMENTATION;
|
||||||
extern const ConfigInfo<bool> GFX_HACK_FORCE_PROGRESSIVE;
|
extern const ConfigInfo<bool> GFX_HACK_FORCE_PROGRESSIVE;
|
||||||
extern const ConfigInfo<bool> GFX_HACK_SKIP_EFB_COPY_TO_RAM;
|
extern const ConfigInfo<bool> GFX_HACK_SKIP_EFB_COPY_TO_RAM;
|
||||||
extern const ConfigInfo<bool> GFX_HACK_SKIP_XFB_COPY_TO_RAM;
|
extern const ConfigInfo<bool> GFX_HACK_SKIP_XFB_COPY_TO_RAM;
|
||||||
|
extern const ConfigInfo<bool> GFX_HACK_DISABLE_COPY_TO_VRAM;
|
||||||
extern const ConfigInfo<bool> GFX_HACK_IMMEDIATE_XFB;
|
extern const ConfigInfo<bool> GFX_HACK_IMMEDIATE_XFB;
|
||||||
extern const ConfigInfo<bool> GFX_HACK_COPY_EFB_SCALED;
|
extern const ConfigInfo<bool> GFX_HACK_COPY_EFB_SCALED;
|
||||||
extern const ConfigInfo<bool> GFX_HACK_EFB_EMULATE_FORMAT_CHANGES;
|
extern const ConfigInfo<bool> GFX_HACK_EFB_EMULATE_FORMAT_CHANGES;
|
||||||
|
|
|
@ -72,7 +72,8 @@ bool IsSettingSaveable(const Config::ConfigLocation& config_location)
|
||||||
Config::GFX_HACK_EFB_ACCESS_ENABLE.location, Config::GFX_HACK_BBOX_ENABLE.location,
|
Config::GFX_HACK_EFB_ACCESS_ENABLE.location, Config::GFX_HACK_BBOX_ENABLE.location,
|
||||||
Config::GFX_HACK_BBOX_PREFER_STENCIL_IMPLEMENTATION.location,
|
Config::GFX_HACK_BBOX_PREFER_STENCIL_IMPLEMENTATION.location,
|
||||||
Config::GFX_HACK_FORCE_PROGRESSIVE.location, Config::GFX_HACK_SKIP_EFB_COPY_TO_RAM.location,
|
Config::GFX_HACK_FORCE_PROGRESSIVE.location, Config::GFX_HACK_SKIP_EFB_COPY_TO_RAM.location,
|
||||||
Config::GFX_HACK_SKIP_XFB_COPY_TO_RAM.location, Config::GFX_HACK_IMMEDIATE_XFB.location,
|
Config::GFX_HACK_SKIP_XFB_COPY_TO_RAM.location,
|
||||||
|
Config::GFX_HACK_DISABLE_COPY_TO_VRAM.location, Config::GFX_HACK_IMMEDIATE_XFB.location,
|
||||||
Config::GFX_HACK_COPY_EFB_SCALED.location,
|
Config::GFX_HACK_COPY_EFB_SCALED.location,
|
||||||
Config::GFX_HACK_EFB_EMULATE_FORMAT_CHANGES.location,
|
Config::GFX_HACK_EFB_EMULATE_FORMAT_CHANGES.location,
|
||||||
Config::GFX_HACK_VERTEX_ROUDING.location,
|
Config::GFX_HACK_VERTEX_ROUDING.location,
|
||||||
|
|
|
@ -1557,16 +1557,12 @@ void TextureCacheBase::CopyRenderTargetToTexture(u32 dstAddr, EFBCopyFormat dstF
|
||||||
//
|
//
|
||||||
// Disadvantage of all methods: Calling this function requires the GPU to perform a pipeline flush
|
// Disadvantage of all methods: Calling this function requires the GPU to perform a pipeline flush
|
||||||
// which stalls any further CPU processing.
|
// which stalls any further CPU processing.
|
||||||
//
|
const bool is_xfb_copy = !is_depth_copy && !isIntensity && dstFormat == EFBCopyFormat::XFB;
|
||||||
// For historical reasons, Dolphin doesn't actually implement "pure" EFB to RAM emulation, but
|
bool copy_to_vram =
|
||||||
// only EFB to texture and hybrid EFB copies.
|
g_ActiveConfig.backend_info.bSupportsCopyToVram && !g_ActiveConfig.bDisableCopyToVRAM;
|
||||||
|
|
||||||
bool is_xfb_copy = !is_depth_copy && !isIntensity && dstFormat == EFBCopyFormat::XFB;
|
|
||||||
|
|
||||||
bool copy_to_vram = g_ActiveConfig.backend_info.bSupportsCopyToVram;
|
|
||||||
bool copy_to_ram =
|
bool copy_to_ram =
|
||||||
!(is_xfb_copy ? g_ActiveConfig.bSkipXFBCopyToRam : g_ActiveConfig.bSkipEFBCopyToRam) ||
|
!(is_xfb_copy ? g_ActiveConfig.bSkipXFBCopyToRam : g_ActiveConfig.bSkipEFBCopyToRam) ||
|
||||||
!g_ActiveConfig.backend_info.bSupportsCopyToVram;
|
!copy_to_vram;
|
||||||
|
|
||||||
u8* dst = Memory::GetPointer(dstAddr);
|
u8* dst = Memory::GetPointer(dstAddr);
|
||||||
if (dst == nullptr)
|
if (dst == nullptr)
|
||||||
|
|
|
@ -136,6 +136,7 @@ void VideoConfig::Refresh()
|
||||||
bForceProgressive = Config::Get(Config::GFX_HACK_FORCE_PROGRESSIVE);
|
bForceProgressive = Config::Get(Config::GFX_HACK_FORCE_PROGRESSIVE);
|
||||||
bSkipEFBCopyToRam = Config::Get(Config::GFX_HACK_SKIP_EFB_COPY_TO_RAM);
|
bSkipEFBCopyToRam = Config::Get(Config::GFX_HACK_SKIP_EFB_COPY_TO_RAM);
|
||||||
bSkipXFBCopyToRam = Config::Get(Config::GFX_HACK_SKIP_XFB_COPY_TO_RAM);
|
bSkipXFBCopyToRam = Config::Get(Config::GFX_HACK_SKIP_XFB_COPY_TO_RAM);
|
||||||
|
bDisableCopyToVRAM = Config::Get(Config::GFX_HACK_DISABLE_COPY_TO_VRAM);
|
||||||
bImmediateXFB = Config::Get(Config::GFX_HACK_IMMEDIATE_XFB);
|
bImmediateXFB = Config::Get(Config::GFX_HACK_IMMEDIATE_XFB);
|
||||||
bCopyEFBScaled = Config::Get(Config::GFX_HACK_COPY_EFB_SCALED);
|
bCopyEFBScaled = Config::Get(Config::GFX_HACK_COPY_EFB_SCALED);
|
||||||
bEFBEmulateFormatChanges = Config::Get(Config::GFX_HACK_EFB_EMULATE_FORMAT_CHANGES);
|
bEFBEmulateFormatChanges = Config::Get(Config::GFX_HACK_EFB_EMULATE_FORMAT_CHANGES);
|
||||||
|
|
|
@ -118,6 +118,7 @@ struct VideoConfig final
|
||||||
bool bEFBEmulateFormatChanges;
|
bool bEFBEmulateFormatChanges;
|
||||||
bool bSkipEFBCopyToRam;
|
bool bSkipEFBCopyToRam;
|
||||||
bool bSkipXFBCopyToRam;
|
bool bSkipXFBCopyToRam;
|
||||||
|
bool bDisableCopyToVRAM;
|
||||||
bool bImmediateXFB;
|
bool bImmediateXFB;
|
||||||
bool bCopyEFBScaled;
|
bool bCopyEFBScaled;
|
||||||
int iSafeTextureCache_ColorSamples;
|
int iSafeTextureCache_ColorSamples;
|
||||||
|
|
Loading…
Reference in New Issue