From 6883805c142468f71876d3e76cf8b9d1cf4e41df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Miko=C5=82ajczyk?= Date: Thu, 2 Apr 2026 23:42:12 +0200 Subject: [PATCH] For OpImageFetch, do not provide both Lod and Sample operands --- src/shader_recompiler/backend/spirv/emit_spirv_image.cpp | 7 ++++++- src/shader_recompiler/ir/passes/resource_tracking_pass.cpp | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp index 0b05dcef4..22eac28cf 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp @@ -226,7 +226,12 @@ Id EmitImageRead(EmitContext& ctx, IR::Inst* inst, u32 handle, Id coords, Id lod Id texel; if (!texture.is_storage) { const Id image = ctx.OpLoad(texture.image_type, texture.id); - operands.Add(spv::ImageOperandsMask::Lod, lod); + if (texture.view_type != AmdGpu::ImageType::Color2DMsaa) { + if (Sirit::ValidId(ms)) { + LOG_ERROR(Render_Recompiler, "image is not MS but ms operand is provided"); + } + operands.Add(spv::ImageOperandsMask::Lod, lod); + } texel = ctx.OpImageFetch(color_type, image, coords, operands.mask, operands.operands); } else { Id image_ptr = texture.id; diff --git a/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp b/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp index 0b256a349..c4958bdf7 100644 --- a/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp +++ b/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp @@ -1051,7 +1051,7 @@ void PatchImageSampleArgs(IR::Block& block, IR::Inst& inst, Info& info, auto texel = [&] -> IR::Value { if (is_msaa) { - return ir.ImageRead(handle, coords, ir.Imm32(0U), ir.Imm32(0U), inst_info); + return ir.ImageRead(handle, coords, {}, ir.Imm32(0U), inst_info); } if (inst_info.is_gather) { if (inst_info.is_depth) {