From b4787a2d21ae1a187db13cd1906e9d6dcc5438b2 Mon Sep 17 00:00:00 2001 From: lightningterror <18107717+lightningterror@users.noreply.github.com> Date: Wed, 15 Jan 2025 11:22:39 +0100 Subject: [PATCH] GS/HW: Limit GetValidSize height and width. Max texture size limit is 2048. This should never happen but if it does clamp it --- pcsx2/GS/Renderers/HW/GSRendererHW.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp index f740042033..bb0ab8da66 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp @@ -949,6 +949,17 @@ GSVector2i GSRendererHW::GetValidSize(const GSTextureCache::Source* tex) } } + // Make sure sizes are within max limit of 2048, + // this shouldn't happen but if it does it needs to be addressed, + // clamp the size so at least it doesn't cause a crash. + constexpr int valid_max_size = 2048; + if ((width > valid_max_size) || (height > valid_max_size)) + { + Console.Warning("Warning: GetValidSize out of bounds, X:%d Y:%d", width, height); + width = std::min(width, valid_max_size); + height = std::min(height, valid_max_size); + } + return GSVector2i(width, height); } @@ -2728,7 +2739,7 @@ void GSRendererHW::Draw() } rt = g_texture_cache->CreateTarget(FRAME_TEX0, t_size, GetValidSize(src), (scale_draw < 0 && is_possible_mem_clear != ClearType::NormalClear) ? src->m_from_target->GetScale() : target_scale, GSTextureCache::RenderTarget, true, - fm, false, force_preload, preserve_rt_color | possible_shuffle, m_r, src); + fm, false, force_preload, preserve_rt_color || possible_shuffle, m_r, src); if (!rt) [[unlikely]] { GL_INS("ERROR: Failed to create FRAME target, skipping.");