diff --git a/src/graphics/host_gpu/renderer/debug.cpp b/src/graphics/host_gpu/renderer/debug.cpp index b3b466fe3..709c98c24 100644 --- a/src/graphics/host_gpu/renderer/debug.cpp +++ b/src/graphics/host_gpu/renderer/debug.cpp @@ -10,6 +10,7 @@ #include "graphics/host_gpu/renderer/render.h" #include +#include #include #include #include @@ -1059,18 +1060,24 @@ static ScissorRect ScissorRectClamp(ScissorRect r, uint32_t width, uint32_t heig return r; } +static constexpr std::array MakeScissorIntersectionRules() { + std::array rules {}; + for (uint32_t candidate = 0; candidate < rules.size(); candidate++) { + for (uint32_t combination = 0; combination < 16; combination++) { + if ((combination & candidate) == candidate) { + rules[candidate] |= static_cast(1u << combination); + } + } + } + return rules; +} + static bool ScissorClipRuleToIntersectionMask(uint16_t rule, uint8_t* mask) { EXIT_IF(mask == nullptr); - for (uint32_t candidate = 0; candidate < 16; candidate++) { - uint16_t expected = 0; - for (uint32_t combination = 0; combination < 16; combination++) { - if ((combination & candidate) == candidate) { - expected |= static_cast(1u << combination); - } - } - - if (expected == rule) { + static constexpr auto rules = MakeScissorIntersectionRules(); + for (uint32_t candidate = 0; candidate < rules.size(); candidate++) { + if (rules[candidate] == rule) { *mask = static_cast(candidate); return true; }