diff --git a/src/video_core/query_cache/bank_base.h b/src/video_core/query_cache/bank_base.h index 44769ea971..7c4fc91a6b 100644 --- a/src/video_core/query_cache/bank_base.h +++ b/src/video_core/query_cache/bank_base.h @@ -8,6 +8,7 @@ #include #include "common/common_types.h" +#include "common/logging.h" namespace VideoCommon { @@ -46,8 +47,13 @@ public: } void CloseReference(size_t how_many = 1) { - if (how_many > references.load(std::memory_order_relaxed)) { - UNREACHABLE(); + const size_t prev = references.load(std::memory_order_relaxed); + if (how_many > prev) [[unlikely]] { + LOG_CRITICAL(HW_GPU, + "QueryBank CloseReference underflow keepalive: prev={} how_many={}", + prev, how_many); + references.store(0, std::memory_order_relaxed); + return; } references.fetch_sub(how_many, std::memory_order_relaxed); }