Implement bloom simulation hack

This commit is contained in:
Gamer64ytb 2024-07-20 00:08:45 +02:00
parent 616b4c7be7
commit f467bdbf92
2 changed files with 11 additions and 1 deletions

View File

@ -540,6 +540,7 @@ struct Values {
SwitchableSetting<bool> disable_flush_cpu_write{false, "disable_flush_cpu_write"};
SwitchableSetting<bool> priority_boost_starved_threads{true, "priority_boost_starved_threads"};
SwitchableSetting<bool> reduce_downcount_slice{false, "reduce_downcount_slice"};
SwitchableSetting<bool> simulate_bloom{false, "simulate_bloom"};
// Reimplementation of old (and fixed) citra frameskip
// See https://github.com/CitraEnhanced/citra/commit/e279a6955edf644cf832dd329ac72931aea8add7
SwitchableSetting<u64> frame_skip{0, "frame_skip"};

View File

@ -220,7 +220,16 @@ bool RasterizerCache<T>::AccelerateTextureCopy(const Pica::DisplayTransferConfig
dst_params.stride =
dst_params.width + src_info.PixelsInBytes(src_info.is_tiled ? output_gap / 8 : output_gap);
dst_params.height = src_rect.GetHeight() / src_info.res_scale;
dst_params.res_scale = src_info.res_scale;
// Some games (e.g., FE: Awakening) `TexturCopy` at a resolution lower than the native 3DS
// resolution to simulate bloom, rendering these at an upscaled resolution creates ghosting
// artifacts.
if (Settings::values.simulate_bloom && src_info.res_scale > 1 &&
(dst_params.height < 400 || dst_params.width < 240)) {
dst_params.res_scale = 1;
} else {
dst_params.res_scale = src_info.res_scale;
}
dst_params.UpdateParams();
// Since we are going to invalidate the gap if there is one, we will have to load it first