diff --git a/src/core/gpu_hw.cpp b/src/core/gpu_hw.cpp index 64f10f5fd..dd3e4d8d3 100644 --- a/src/core/gpu_hw.cpp +++ b/src/core/gpu_hw.cpp @@ -475,7 +475,7 @@ bool GPU_HW::UpdateSettings(const GPUSettings& old_settings, Error* error) const bool downsampling_shaders_changed = ((m_resolution_scale > 1) != (resolution_scale > 1) || (resolution_scale > 1 && (g_gpu_settings.gpu_downsample_mode != old_settings.gpu_downsample_mode || - (m_downsample_mode == GPUDownsampleMode::Box && + (g_gpu_settings.gpu_downsample_mode == GPUDownsampleMode::Box && (resolution_scale != m_resolution_scale || g_gpu_settings.gpu_downsample_scale != old_settings.gpu_downsample_scale))))); @@ -706,7 +706,19 @@ void GPU_HW::CheckSettings() { const u32 resolution_scale = CalculateResolutionScale(); const u32 box_downscale = GetBoxDownsampleScale(resolution_scale); - if (box_downscale != g_gpu_settings.gpu_downsample_scale || box_downscale == resolution_scale) + if (box_downscale == resolution_scale) + { + m_downsample_mode = GPUDownsampleMode::Disabled; + + Host::AddIconOSDMessage( + "BoxDownsampleUnsupported", ICON_FA_PAINT_BRUSH, + fmt::format( + TRANSLATE_FS("GPU_HW", + "Resolution scale {0}x is not divisible by downsample scale {1}x, downsampling disabled."), + resolution_scale, g_gpu_settings.gpu_downsample_scale), + Host::OSD_WARNING_DURATION); + } + else if (box_downscale != g_gpu_settings.gpu_downsample_scale) { Host::AddIconOSDMessage( "BoxDownsampleUnsupported", ICON_FA_PAINT_BRUSH, @@ -719,9 +731,6 @@ void GPU_HW::CheckSettings() { Host::RemoveKeyedOSDMessage("BoxDownsampleUnsupported"); } - - if (box_downscale == g_gpu_settings.gpu_resolution_scale) - m_downsample_mode = GPUDownsampleMode::Disabled; } } @@ -1791,6 +1800,9 @@ bool GPU_HW::CompileDownsamplePipelines(Error* error) m_downsample_lod_sampler.reset(); m_downsample_composite_sampler.reset(); + if (m_downsample_mode == GPUDownsampleMode::Disabled) + return true; + const GPU_HW_ShaderGen shadergen(g_gpu_device->GetRenderAPI(), m_supports_dual_source_blend, m_supports_framebuffer_fetch);