From 07c84876a1a17e98ed0c348ef7fa1cfaa826d990 Mon Sep 17 00:00:00 2001 From: nmzik Date: Sun, 4 Oct 2026 21:00:54 +0400 Subject: [PATCH] shader: fix constant types in converted image gathers --- .../recompiler/backend/spirv/spirvEmitterImage.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/graphics/shader/recompiler/backend/spirv/spirvEmitterImage.cpp b/src/graphics/shader/recompiler/backend/spirv/spirvEmitterImage.cpp index 7064923fd..eb3231ac4 100644 --- a/src/graphics/shader/recompiler/backend/spirv/spirvEmitterImage.cpp +++ b/src/graphics/shader/recompiler/backend/spirv/spirvEmitterImage.cpp @@ -471,9 +471,13 @@ uint32_t UnpackImageGather(ValueEmitContext& ctx, const IR::MemoryInfo& mem, uin const auto numeric_class = ctx.state.program.info.images[mem.resource].numeric_class; const auto vector_type = ImageVectorType(ctx.state, numeric_class, 4); if (selector < 4u) { - const auto value = info.packed_bitfield - ? ConstantU32(ctx.state, selector == 1u ? 1u : 0u) - : ConstantF32Value(ctx.state, selector == 1u ? 1.0f : 0.0f); + uint32_t value; + switch (info.type) { + case Format::ComponentType::Uscaled: + value = ConstantF32Value(ctx.state, selector == 1u ? 1.0f : 0.0f); + break; + default: value = ConstantU32(ctx.state, selector == 1u ? 1u : 0u); break; + } return ctx.state.builder.Constant(spv::OpConstantComposite, vector_type, value, value, value, value); }