From defebd74c094f72af253b776882fc07b71a7db3c Mon Sep 17 00:00:00 2001 From: Lynne Date: Fri, 4 Apr 2025 05:49:31 +0000 Subject: [PATCH] vulkan_ffv1: slightly optimize the range decoder GPUs have cmovs as standard. --- libavcodec/vulkan/rangecoder.comp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libavcodec/vulkan/rangecoder.comp b/libavcodec/vulkan/rangecoder.comp index 4272b2a42f..ba8a6cfd9d 100644 --- a/libavcodec/vulkan/rangecoder.comp +++ b/libavcodec/vulkan/rangecoder.comp @@ -219,7 +219,7 @@ void refill(inout RangeCoder c) c.range <<= 8; c.low <<= 8; if (c.bytestream < c.bytestream_end) { - c.low += u8buf(c.bytestream).v; + c.low |= u8buf(c.bytestream).v; c.bytestream++; } else { overread++; @@ -234,11 +234,10 @@ bool get_rac(inout RangeCoder c, uint64_t state) int ranged = c.range + range1; bool bit = c.low >= ranged; - int bv = bit ? 0xFFFFFFFF : 0; - sb.v = zero_one_state[(bv & 0x100) + val]; + sb.v = zero_one_state[val + (bit ? 256 : 0)]; - c.low = c.low - (bv & ranged); - c.range = (ranged & ~bv) - (range1 & bv); + c.low = c.low - (bit ? ranged : 0); + c.range = (bit ? 0 : ranged) - (bit ? range1 : 0); if (c.range < 0x100) refill(c);