From 2d5b41080c444d0cbb3b28af0fcbd9293c0f26b9 Mon Sep 17 00:00:00 2001 From: goldislead <69987043+goldislead@users.noreply.github.com> Date: Fri, 7 Aug 2026 19:04:00 -0700 Subject: [PATCH] [Vulkan] Clamp stacked-texture layer index for Inf/NaN coords Co-authored-by: Herman S. <429230+has207@users.noreply.github.com> --- src/xenia/gpu/spirv_shader_translator_fetch.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/xenia/gpu/spirv_shader_translator_fetch.cc b/src/xenia/gpu/spirv_shader_translator_fetch.cc index ec99debeb..fca5c9796 100644 --- a/src/xenia/gpu/spirv_shader_translator_fetch.cc +++ b/src/xenia/gpu/spirv_shader_translator_fetch.cc @@ -1469,6 +1469,14 @@ void SpirvShaderTranslator::ProcessTextureFetchInstruction( z_stacked = builder_->createNoContractionBinOp( spv::OpFAdd, type_float_, z_stacked, z_offset); } + // Clamp the layer index to a valid range so an Inf or NaN coordinate + // does not select an undefined array layer. + z_stacked = builder_->createTriBuiltinCall( + type_float_, ext_inst_glsl_std_450_, GLSLstd450NClamp, z_stacked, + const_float_0_, + builder_->createNoContractionBinOp( + spv::OpFSub, type_float_, z_size, + builder_->makeFloatConstant(1.0f))); builder_->createBranch(&block_dimension_merge); // Select one of the two. builder_->setBuildPoint(&block_dimension_merge);