From 2b37dee2b7db777780190dad10e6c6cf96f4ecaa Mon Sep 17 00:00:00 2001 From: nmzik Date: Thu, 22 Oct 2026 01:08:07 +0200 Subject: [PATCH] shader: track possible bits through bit-field inserts in resource tracking --- .../shader/recompiler/ir/passes/ResourceTracking.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/graphics/shader/recompiler/ir/passes/ResourceTracking.cpp b/src/graphics/shader/recompiler/ir/passes/ResourceTracking.cpp index b887a6fd3..5c688867f 100644 --- a/src/graphics/shader/recompiler/ir/passes/ResourceTracking.cpp +++ b/src/graphics/shader/recompiler/ir/passes/ResourceTracking.cpp @@ -56,6 +56,17 @@ uint32_t PossibleU32Bits(Value value, const auto& normalize) { } break; } + case ValueOpcode::BitFieldInsert: { + const auto offset = inst->Arg(2).Resolve(); + const auto count = inst->Arg(3).Resolve(); + if (offset.IsImmediate() && count.IsImmediate() && offset.U32() < 32u && + count.U32() <= 32u - offset.U32()) { + const auto field = (count.U32() == 32u ? UINT32_MAX : (1u << count.U32()) - 1u) + << offset.U32(); + bits = (arg(0) & ~field) | ((arg(1) << offset.U32()) & field); + } + break; + } default: break; } return bits;