This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 22a34144f6e7cc0b89be5217ca5d86268379d714
Author:     Lynne <[email protected]>
AuthorDate: Sun Sep 27 01:34:16 2026 +0900
Commit:     Lynne <[email protected]>
CommitDate: Sat Oct 3 12:15:47 2026 +0900

    ffv1enc_vulkan: code the unary prefix without renormalisation checks
    
    The zero flag, the ones of the unary prefix and its terminator can only
    shrink the range, so they are now coded without renormalisation checks,
    and the range is checked once after the terminator. When it underflowed
    on the way, they are coded again from the saved coder state, with the
    checks, which happens for about a quarter of the symbols.
    
    The output is unchanged. Encoding a 6464x4852 16-bit RGB frame with
    1024 slices on an RX 6900 XT, with the frame in VRAM, goes from
    53.2/51.2 ms to 52.9/50.1 ms with context model 1/0.
---
 libavcodec/vulkan/rangecoder_subgroup.glsl | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/libavcodec/vulkan/rangecoder_subgroup.glsl 
b/libavcodec/vulkan/rangecoder_subgroup.glsl
index c9ccaf74ce..f8ae202495 100644
--- a/libavcodec/vulkan/rangecoder_subgroup.glsl
+++ b/libavcodec/vulkan/rangecoder_subgroup.glsl
@@ -192,11 +192,26 @@ void put_isymbol_tail(int e, uint st24, uint a, bool neg)
             s[11 + i] = subgroupBroadcast(st24, 22 + i);
     s[20] = subgroupBroadcast(st24, 11 + e);
 
-    put_rac(s[0], false);
+    uint range = rc.range;
+    uint top = rc_top;
+    uint r = rac_range1(rc.range, s[0]);
+    rc.range -= r;
+    rc_top -= r;
     [[unroll]] for (int i = 0; i < 9; i++)
         if (i < e)
-            put_rac(s[1 + i], true);
-    put_rac(s[1 + e], false);
+            rc.range = rac_range1(rc.range, s[1 + i]);
+    r = rac_range1(rc.range, s[1 + e]);
+    rc.range -= r;
+    rc_top -= r;
+    [[dont_flatten]] if (rc.range < 0x100) {
+        rc.range = range;
+        rc_top = top;
+        put_rac(s[0], false);
+        [[unroll]] for (int i = 0; i < 9; i++)
+            if (i < e)
+                put_rac(s[1 + i], true);
+        put_rac(s[1 + e], false);
+    }
     [[unroll]] for (int i = 8; i >= 0; i--)
         if (i < e)
             put_rac(s[11 + i], bitfieldExtract(a, i, 1) != 0);

-- 
To stop receiving notification emails like this one, please contact
[email protected].
_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to