mirror of
https://github.com/stenzek/duckstation.git
synced 2025-06-08 04:25:37 +00:00
GPU/HW: Fix crash when changing downsampling factor
This commit is contained in:
parent
19c03aff4d
commit
5c41a48e39
@ -475,7 +475,7 @@ bool GPU_HW::UpdateSettings(const GPUSettings& old_settings, Error* error)
|
|||||||
const bool downsampling_shaders_changed =
|
const bool downsampling_shaders_changed =
|
||||||
((m_resolution_scale > 1) != (resolution_scale > 1) ||
|
((m_resolution_scale > 1) != (resolution_scale > 1) ||
|
||||||
(resolution_scale > 1 && (g_gpu_settings.gpu_downsample_mode != old_settings.gpu_downsample_mode ||
|
(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 ||
|
(resolution_scale != m_resolution_scale ||
|
||||||
g_gpu_settings.gpu_downsample_scale != old_settings.gpu_downsample_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 resolution_scale = CalculateResolutionScale();
|
||||||
const u32 box_downscale = GetBoxDownsampleScale(resolution_scale);
|
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(
|
Host::AddIconOSDMessage(
|
||||||
"BoxDownsampleUnsupported", ICON_FA_PAINT_BRUSH,
|
"BoxDownsampleUnsupported", ICON_FA_PAINT_BRUSH,
|
||||||
@ -719,9 +731,6 @@ void GPU_HW::CheckSettings()
|
|||||||
{
|
{
|
||||||
Host::RemoveKeyedOSDMessage("BoxDownsampleUnsupported");
|
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_lod_sampler.reset();
|
||||||
m_downsample_composite_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,
|
const GPU_HW_ShaderGen shadergen(g_gpu_device->GetRenderAPI(), m_supports_dual_source_blend,
|
||||||
m_supports_framebuffer_fetch);
|
m_supports_framebuffer_fetch);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user