This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 33525cb6e7b380fe643b033698fe9028ca3b4676 Author: Lynne <[email protected]> AuthorDate: Wed Feb 11 21:44:04 2026 +0100 Commit: Lynne <[email protected]> CommitDate: Thu Feb 19 19:42:33 2026 +0100 vulkan/rangecoder: don't store pointers in the context --- libavcodec/vulkan/ffv1_common.glsl | 3 +- libavcodec/vulkan/ffv1_dec.comp.glsl | 13 ++++----- libavcodec/vulkan/ffv1_dec_setup.comp.glsl | 12 ++++---- libavcodec/vulkan/ffv1_enc.comp.glsl | 11 +++---- libavcodec/vulkan/ffv1_enc_setup.comp.glsl | 3 +- libavcodec/vulkan/rangecoder.glsl | 47 ++++++++++++++---------------- 6 files changed, 40 insertions(+), 49 deletions(-) diff --git a/libavcodec/vulkan/ffv1_common.glsl b/libavcodec/vulkan/ffv1_common.glsl index a0e1325817..f7caa9f7b8 100644 --- a/libavcodec/vulkan/ffv1_common.glsl +++ b/libavcodec/vulkan/ffv1_common.glsl @@ -23,7 +23,6 @@ #ifndef VULKAN_FFV1_COMMON_H #define VULKAN_FFV1_COMMON_H -#include "rangecoder.glsl" #ifdef GOLOMB #include "ffv1_vlc.glsl" #endif @@ -77,6 +76,8 @@ layout (push_constant, scalar) uniform pushConstants { uint slice_size_max; }; +#include "rangecoder.glsl" + #define TYPE int32_t #define VTYPE2 i32vec2 #define VTYPE3 i32vec3 diff --git a/libavcodec/vulkan/ffv1_dec.comp.glsl b/libavcodec/vulkan/ffv1_dec.comp.glsl index 36bf7a18b3..9ceaf89d37 100644 --- a/libavcodec/vulkan/ffv1_dec.comp.glsl +++ b/libavcodec/vulkan/ffv1_dec.comp.glsl @@ -35,8 +35,6 @@ layout (set = 1, binding = 2, scalar) writeonly buffer slice_status_buf { }; layout (set = 1, binding = 4) uniform uimage2D dec[]; -uint64_t slice_start; - #ifndef GOLOMB layout (set = 1, binding = 3, scalar) buffer slice_state_buf { @@ -162,9 +160,9 @@ void golomb_init(void) if (version == 3 && micro_version > 1 || version > 3) get_rac_internal(rc.range * 129 >> 8); - uint64_t ac_byte_count = rc.bytestream - slice_start - 1; - init_get_bits(gb, u8buf(slice_start + ac_byte_count), - int(rc.bytestream_end - slice_start - ac_byte_count)); + uint64_t ac_byte_count = rc.bs_off - rc.bs_start - 1; + init_get_bits(gb, u8buf(rc.bs_start + ac_byte_count), + int(rc.bs_end - rc.bs_start - ac_byte_count)); } void decode_line(ivec2 sp, int w, @@ -342,7 +340,6 @@ void decode_slice(in SliceContext sc, uint slice_idx) void main(void) { uint slice_idx = gl_WorkGroupID.y*gl_NumWorkGroups.x + gl_WorkGroupID.x; - slice_start = uint64_t(slice_data) + slice_offsets[slice_idx].x; if (gl_LocalInvocationID.x == 0) rc = slice_ctx[slice_idx].c; @@ -352,8 +349,8 @@ void main(void) if (gl_LocalInvocationID.x == 0) { uint overread = 0; - if (rc.bytestream >= (rc.bytestream_end + MAX_OVERREAD)) - overread = uint(rc.bytestream - rc.bytestream_end); + if (rc.bs_off >= (rc.bs_end + MAX_OVERREAD)) + overread = rc.bs_off - rc.bs_end; slice_status[2*slice_idx + 1] = overread; } } diff --git a/libavcodec/vulkan/ffv1_dec_setup.comp.glsl b/libavcodec/vulkan/ffv1_dec_setup.comp.glsl index e3cf45c8ed..011713a7dd 100644 --- a/libavcodec/vulkan/ffv1_dec_setup.comp.glsl +++ b/libavcodec/vulkan/ffv1_dec_setup.comp.glsl @@ -112,10 +112,7 @@ void main(void) { uint slice_idx = gl_WorkGroupID.y*gl_NumWorkGroups.x + gl_WorkGroupID.x; - u8buf bs = u8buf(slice_data + slice_offsets[slice_idx].x); - uint32_t slice_size = slice_offsets[slice_idx].y; - - rac_init_dec(bs, slice_size); + rac_init_dec(slice_offsets[slice_idx].x, slice_offsets[slice_idx].y); if (slice_idx == (gl_NumWorkGroups.x*gl_NumWorkGroups.y - 1)) get_rac_equi(); @@ -125,6 +122,9 @@ void main(void) slice_ctx[slice_idx].c = rc; if (has_crc) { + u8buf bs = u8buf(slice_data + slice_offsets[slice_idx].x); + uint32_t slice_size = slice_offsets[slice_idx].y; + uint32_t crc = crcref; for (int i = 0; i < slice_size; i++) crc = crc_ieee[(crc & 0xFF) ^ uint32_t(bs[i].v)] ^ (crc >> 8); @@ -133,7 +133,7 @@ void main(void) } uint overread = 0; - if (rc.bytestream >= (rc.bytestream_end + MAX_OVERREAD)) - overread = uint(rc.bytestream - rc.bytestream_end); + if (rc.bs_off >= (rc.bs_end + MAX_OVERREAD)) + overread = rc.bs_off - rc.bs_end; slice_status[2*slice_idx + 1] = overread; } diff --git a/libavcodec/vulkan/ffv1_enc.comp.glsl b/libavcodec/vulkan/ffv1_enc.comp.glsl index b3399e3e5f..f26dbf0bb1 100644 --- a/libavcodec/vulkan/ffv1_enc.comp.glsl +++ b/libavcodec/vulkan/ffv1_enc.comp.glsl @@ -36,8 +36,6 @@ layout (set = 1, binding = 1, scalar) writeonly buffer slice_results_buf { }; layout (set = 1, binding = 3) uniform uimage2D src[]; -uint64_t slice_start; - #ifndef GOLOMB layout (set = 1, binding = 2, scalar) buffer slice_state_buf { @@ -136,8 +134,8 @@ PutBitContext pb; void init_golomb(void) { - hdr_len = rac_terminate(slice_start); - init_put_bits(pb, OFFBUF(u8buf, slice_start, hdr_len), + hdr_len = rac_terminate(); + init_put_bits(pb, OFFBUF(u8buf, rc.bs_start, hdr_len), slice_size_max - hdr_len); } @@ -329,10 +327,10 @@ void finalize_slice(const uint slice_idx) #ifdef GOLOMB uint32_t enc_len = hdr_len + flush_put_bits(pb); #else - uint32_t enc_len = rac_terminate(slice_start); + uint32_t enc_len = rac_terminate(); #endif - u8buf bs = u8buf(slice_start); + u8buf bs = u8buf(slice_data + rc.bs_start); /* Append slice length */ u8vec4 enc_len_p = unpack8(enc_len); @@ -367,7 +365,6 @@ void finalize_slice(const uint slice_idx) void main(void) { const uint slice_idx = gl_WorkGroupID.y*gl_NumWorkGroups.x + gl_WorkGroupID.x; - slice_start = uint64_t(slice_data) + slice_idx*slice_size_max; if (gl_LocalInvocationID.x == 0) rc = slice_ctx[slice_idx].c; diff --git a/libavcodec/vulkan/ffv1_enc_setup.comp.glsl b/libavcodec/vulkan/ffv1_enc_setup.comp.glsl index c57ba4074b..860b50a73c 100644 --- a/libavcodec/vulkan/ffv1_enc_setup.comp.glsl +++ b/libavcodec/vulkan/ffv1_enc_setup.comp.glsl @@ -48,8 +48,7 @@ void init_slice(inout SliceContext sc, uint slice_idx) if (!rct_search || (sc.slice_coding_mode == 1)) sc.slice_rct_coef = ivec2(1, 1); - rac_init(OFFBUF(u8buf, slice_data, slice_idx * slice_size_max), - slice_size_max); + rac_init(slice_idx*slice_size_max, slice_size_max); } void put_usymbol(uint v) diff --git a/libavcodec/vulkan/rangecoder.glsl b/libavcodec/vulkan/rangecoder.glsl index 5ee2443b95..614b727a87 100644 --- a/libavcodec/vulkan/rangecoder.glsl +++ b/libavcodec/vulkan/rangecoder.glsl @@ -37,9 +37,9 @@ layout (set = 0, binding = 0, scalar) RC_BTYPE rangecoder_buf { }; struct RangeCoder { - uint64_t bytestream; - uint64_t bytestream_end; - + uint bs_start; + uint bs_off; + uint bs_end; uint low; uint range; uint16_t outstanding_count; @@ -51,10 +51,11 @@ shared uint8_t rc_state[CONTEXT_SIZE]; shared bool rc_data[CONTEXT_SIZE]; shared bool rc_dec[CONTEXT_SIZE]; -void rac_init(u8buf data, uint buf_size) +void rac_init(uint bs_start, uint bs_len) { - rc.bytestream = uint64_t(data); - rc.bytestream_end = uint64_t(data) + buf_size; + rc.bs_start = bs_start; + rc.bs_off = bs_start; + rc.bs_end = bs_start + bs_len; rc.low = 0; rc.range = 0xFF00; rc.outstanding_count = uint16_t(0); @@ -66,29 +67,27 @@ void rac_init(u8buf data, uint buf_size) void renorm_encoder(void) { int bs_cnt = 0; - u8buf bytestream = u8buf(rc.bytestream); if (rc.outstanding_byte == 0xFF) { rc.outstanding_byte = uint8_t(rc.low >> 8); } else if (rc.low <= 0xFF00) { - bytestream[bs_cnt++].v = rc.outstanding_byte; + slice_data[rc.bs_off++].v = rc.outstanding_byte; uint16_t cnt = rc.outstanding_count; for (; cnt > 0; cnt--) - bytestream[bs_cnt++].v = uint8_t(0xFF); + slice_data[rc.bs_off++].v = uint8_t(0xFF); rc.outstanding_count = uint16_t(0); rc.outstanding_byte = uint8_t(rc.low >> 8); } else if (rc.low >= 0x10000) { - bytestream[bs_cnt++].v = rc.outstanding_byte + uint8_t(1); + slice_data[rc.bs_off++].v = rc.outstanding_byte + uint8_t(1); uint16_t cnt = rc.outstanding_count; for (; cnt > 0; cnt--) - bytestream[bs_cnt++].v = uint8_t(0x00); + slice_data[rc.bs_off++].v = uint8_t(0x00); rc.outstanding_count = uint16_t(0); rc.outstanding_byte = uint8_t(bitfieldExtract(rc.low, 8, 8)); } else { rc.outstanding_count++; } - rc.bytestream += bs_cnt; rc.range <<= 8; rc.low = bitfieldInsert(0, rc.low, 8, 8); } @@ -109,19 +108,17 @@ void renorm_encoder(void) return; } - u8buf bs = u8buf(rc.bytestream); uint8_t outstanding_byte = rc.outstanding_byte; - rc.bytestream = uint64_t(bs) + oc; rc.outstanding_count = uint16_t(0); rc.outstanding_byte = uint8_t(low >> 8); uint8_t obs = uint8_t(low > 0xFF00); uint8_t fill = obs - uint8_t(1); /* unsigned underflow */ - bs[0].v = outstanding_byte + obs; + slice_data[rc.bs_off++].v = outstanding_byte + obs; for (int i = 1; i < oc; i++) - bs[i].v = fill; + slice_data[rc.bs_off++].v = fill; } #endif @@ -170,7 +167,7 @@ void put_rac_terminate(void) } /* Return the number of bytes written. */ -uint rac_terminate(uint64_t bytestream_start) +uint rac_terminate(void) { put_rac_terminate(); rc.range = uint16_t(0xFF); @@ -186,21 +183,21 @@ uint rac_terminate(uint64_t bytestream_start) debugPrintfEXT("Error: range < 0x100"); #endif - return uint(uint64_t(rc.bytestream) - bytestream_start); + return rc.bs_off - rc.bs_start; } -void rac_init_dec(u8buf data, uint buf_size) +void rac_init_dec(uint bs_start, uint bs_len) { /* Skip priming bytes */ - rac_init(OFFBUF(u8buf, data, 2), buf_size - 2); + rac_init(bs_start + 2, bs_len - 2); - u8vec2 prime = u8vec2buf(data).v; + u8vec2 prime = u8vec2buf(slice_data + bs_start).v; /* Switch endianness of the priming bytes */ rc.low = pack16(prime.yx); if (rc.low >= 0xFF00) { rc.low = 0xFF00; - rc.bytestream_end = uint64_t(data) + 2; + rc.bs_end = bs_start + 2; } } @@ -208,9 +205,9 @@ void refill(void) { rc.range <<= 8; rc.low <<= 8; - if (expectEXT(rc.bytestream < rc.bytestream_end, true)) - rc.low |= u8buf(rc.bytestream).v; - rc.bytestream++; + if (expectEXT(rc.bs_off < rc.bs_end, true)) + rc.low |= slice_data[rc.bs_off].v; + rc.bs_off++; } bool get_rac_internal(const uint range1) _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
