From 6ee2ef8715e6acc5c6b49a1ece3722d174802ca6 Mon Sep 17 00:00:00 2001 From: nmzik Date: Thu, 22 Oct 2026 00:31:52 +0200 Subject: [PATCH] shader: insert the V_CVT_PK_U8_F32 byte with one bit-field insert --- .../shader/recompiler/frontend/translate/Convert.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/graphics/shader/recompiler/frontend/translate/Convert.cpp b/src/graphics/shader/recompiler/frontend/translate/Convert.cpp index ee4fc9b0c..bf0dc6f82 100644 --- a/src/graphics/shader/recompiler/frontend/translate/Convert.cpp +++ b/src/graphics/shader/recompiler/frontend/translate/Convert.cpp @@ -125,9 +125,9 @@ void Translator::V_CVT_PK_U8_F32(const Decoder::Instruction& inst) { {ir.Emit(IR::ValueOpcode::ConvertU32F32, {source}), IR::Value(255u)})); const auto index = ir.BitwiseAnd(ReadU32(SourceAt(inst, 1)), IR::U32(IR::Value(3u))); const auto shift = ir.ShiftLeftLogical(index, IR::U32(IR::Value(3u))); - const auto mask = ir.ShiftLeftLogical(IR::U32(IR::Value(0xffu)), shift); - const auto base = ir.BitwiseAnd(ReadU32(SourceAt(inst, 2)), ir.BitwiseNot(mask)); - WriteOperand(DestinationOperand(inst), ir.BitwiseOr(base, ir.ShiftLeftLogical(byte, shift))); + WriteOperand(DestinationOperand(inst), + ir.Emit(IR::ValueOpcode::BitFieldInsert, + {ReadU32(SourceAt(inst, 2)), byte, shift, IR::Value(8u)})); } void Translator::V_PACK_B32_F16(const Decoder::Instruction& inst) {