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

Git pushed a commit to branch master
in repository ffmpeg.

commit f956e9817cff123a33e687ce1e203ebe37c5efe5
Author:     Lynne <[email protected]>
AuthorDate: Wed Dec 24 01:08:53 2025 +0100
Commit:     Lynne <[email protected]>
CommitDate: Wed Dec 31 15:00:46 2025 +0100

    ffv1enc_vulkan: use ff_vk_buf_barrier()
---
 libavcodec/ffv1enc_vulkan.c | 222 +++++++++++++++++++-------------------------
 1 file changed, 94 insertions(+), 128 deletions(-)

diff --git a/libavcodec/ffv1enc_vulkan.c b/libavcodec/ffv1enc_vulkan.c
index 1dc6aa8e90..3f3da6bbae 100644
--- a/libavcodec/ffv1enc_vulkan.c
+++ b/libavcodec/ffv1enc_vulkan.c
@@ -414,41 +414,16 @@ static int vulkan_encode_ffv1_submit_frame(AVCodecContext 
*avctx,
                                   VK_NULL_HANDLE);
 
     /* Add a buffer barrier between previous and current frame */
-    if (!f->key_frame) {
-        buf_bar[nb_buf_bar++] = (VkBufferMemoryBarrier2) {
-            .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2,
-            .srcStageMask = slice_data_buf->stage,
-            .dstStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
-            .srcAccessMask = slice_data_buf->access,
-            .dstAccessMask = VK_ACCESS_2_SHADER_STORAGE_READ_BIT |
-                             VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT,
-            .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-            .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-            .buffer = slice_data_buf->buf,
-            .size = VK_WHOLE_SIZE,
-            .offset = 0,
-        };
-    }
-
-    if (fv->optimize_rct) {
-        RET(run_rct_search(avctx, exec,
-                           src, src_views,
-                           slice_data_buf, slice_data_size));
-
-        buf_bar[nb_buf_bar++] = (VkBufferMemoryBarrier2) {
-            .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2,
-            .srcStageMask = slice_data_buf->stage,
-            .dstStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
-            .srcAccessMask = slice_data_buf->access,
-            .dstAccessMask = VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT,
-            .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-            .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-            .buffer = slice_data_buf->buf,
-            .size = slice_data_size*f->slice_count,
-            .offset = 0,
-        };
-    }
-
+    if (!f->key_frame)
+        ff_vk_buf_barrier(buf_bar[nb_buf_bar++], slice_data_buf,
+                          ALL_COMMANDS_BIT, NONE_KHR, NONE_KHR,
+                          COMPUTE_SHADER_BIT, SHADER_READ_BIT, 
SHADER_WRITE_BIT,
+                          0, slice_data_size*f->slice_count);
+    else
+        ff_vk_buf_barrier(buf_bar[nb_buf_bar++], slice_data_buf,
+                          COMPUTE_SHADER_BIT, SHADER_READ_BIT, 
SHADER_WRITE_BIT,
+                          COMPUTE_SHADER_BIT, SHADER_READ_BIT, 
SHADER_WRITE_BIT,
+                          0, slice_data_size*f->slice_count);
     vk->CmdPipelineBarrier2(exec->buf, &(VkDependencyInfo) {
         .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
         .pImageMemoryBarriers = img_bar,
@@ -457,9 +432,23 @@ static int vulkan_encode_ffv1_submit_frame(AVCodecContext 
*avctx,
         .bufferMemoryBarrierCount = nb_buf_bar,
     });
     nb_img_bar = 0;
-    if (nb_buf_bar) {
-        slice_data_buf->stage = buf_bar[0].dstStageMask;
-        slice_data_buf->access = buf_bar[0].dstAccessMask;
+    nb_buf_bar = 0;
+
+    if (fv->optimize_rct) {
+        RET(run_rct_search(avctx, exec,
+                           src, src_views,
+                           slice_data_buf, slice_data_size));
+
+        /* Make sure the writes are visible to the setup shader */
+        ff_vk_buf_barrier(buf_bar[nb_buf_bar++], slice_data_buf,
+                          COMPUTE_SHADER_BIT, SHADER_READ_BIT, 
SHADER_WRITE_BIT,
+                          COMPUTE_SHADER_BIT, SHADER_READ_BIT, 
SHADER_WRITE_BIT,
+                          0, slice_data_size*f->slice_count);
+        vk->CmdPipelineBarrier2(exec->buf, &(VkDependencyInfo) {
+            .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
+            .pBufferMemoryBarriers = buf_bar,
+            .bufferMemoryBarrierCount = nb_buf_bar,
+        });
         nb_buf_bar = 0;
     }
 
@@ -526,87 +515,78 @@ static int vulkan_encode_ffv1_submit_frame(AVCodecContext 
*avctx,
                                }));
     }
 
-    /* Setup shader modified the slice data buffer */
-    buf_bar[nb_buf_bar++] = (VkBufferMemoryBarrier2) {
-        .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2,
-        .srcStageMask = slice_data_buf->stage,
-        .dstStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
-        .srcAccessMask = slice_data_buf->access,
-        .dstAccessMask = VK_ACCESS_2_SHADER_STORAGE_READ_BIT |
-                         VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT,
-        .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-        .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-        .buffer = slice_data_buf->buf,
-        .size = slice_data_size*f->slice_count,
-        .offset = 0,
-    };
-
-    if (f->key_frame || f->version > 3) {
-        FFv1VkResetParameters pd_reset;
-
-        ff_vk_shader_update_desc_buffer(&fv->s, exec, &fv->reset,
-                                        1, 0, 0,
-                                        slice_data_buf,
-                                        0, slice_data_size*f->slice_count,
-                                        VK_FORMAT_UNDEFINED);
-
-        /* Run setup shader */
-        ff_vk_exec_bind_shader(&fv->s, exec, &fv->reset);
-        pd_reset = (FFv1VkResetParameters) {
-            .slice_state = slice_data_buf->address + f->slice_count*256,
-            .plane_state_size = plane_state_size,
-            .codec_planes = f->plane_count,
-            .key_frame = f->key_frame,
-        };
-        for (int i = 0; i < f->quant_table_count; i++)
-            pd_reset.context_count[i] = f->context_count[i];
-
-        ff_vk_shader_update_push_const(&fv->s, exec, &fv->reset,
-                                       VK_SHADER_STAGE_COMPUTE_BIT,
-                                       0, sizeof(pd_reset), &pd_reset);
-
-        /* Sync between setup and reset shaders */
-        vk->CmdPipelineBarrier2(exec->buf, &(VkDependencyInfo) {
-            .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
-            .pBufferMemoryBarriers = buf_bar,
-            .bufferMemoryBarrierCount = nb_buf_bar,
-        });
-        slice_data_buf->stage = buf_bar[0].dstStageMask;
-        slice_data_buf->access = buf_bar[0].dstAccessMask;
-        nb_buf_bar = 0;
+    /* Sync between setup and reset shaders */
+    ff_vk_buf_barrier(buf_bar[nb_buf_bar++], slice_data_buf,
+                      COMPUTE_SHADER_BIT, SHADER_READ_BIT, SHADER_WRITE_BIT,
+                      COMPUTE_SHADER_BIT, SHADER_READ_BIT, NONE_KHR,
+                      0, slice_data_size*f->slice_count);
+    /* Prepare the probabilities */
+    if (!f->key_frame)
+        ff_vk_buf_barrier(buf_bar[nb_buf_bar++], slice_data_buf,
+                          ALL_COMMANDS_BIT, NONE_KHR, NONE_KHR,
+                          COMPUTE_SHADER_BIT, SHADER_WRITE_BIT, NONE_KHR,
+                          slice_data_size*f->slice_count, VK_WHOLE_SIZE);
+    else
+        ff_vk_buf_barrier(buf_bar[nb_buf_bar++], slice_data_buf,
+                          COMPUTE_SHADER_BIT, SHADER_READ_BIT, 
SHADER_WRITE_BIT,
+                          COMPUTE_SHADER_BIT, SHADER_WRITE_BIT, NONE_KHR,
+                          slice_data_size*f->slice_count, VK_WHOLE_SIZE);
+    vk->CmdPipelineBarrier2(exec->buf, &(VkDependencyInfo) {
+        .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
+        .pBufferMemoryBarriers = buf_bar,
+        .bufferMemoryBarrierCount = nb_buf_bar,
+    });
+    nb_buf_bar = 0;
 
-        vk->CmdDispatch(exec->buf, fv->ctx.num_h_slices, fv->ctx.num_v_slices,
-                        f->plane_count);
-    }
+    /* Run reset shader */
+    FFv1VkResetParameters pd_reset;
+    ff_vk_shader_update_desc_buffer(&fv->s, exec, &fv->reset,
+                                    1, 0, 0,
+                                    slice_data_buf,
+                                    0, slice_data_size*f->slice_count,
+                                    VK_FORMAT_UNDEFINED);
+    ff_vk_exec_bind_shader(&fv->s, exec, &fv->reset);
+    pd_reset = (FFv1VkResetParameters) {
+        .slice_state = slice_data_buf->address + f->slice_count*256,
+        .plane_state_size = plane_state_size,
+        .codec_planes = f->plane_count,
+        .key_frame = f->key_frame,
+    };
+    for (int i = 0; i < f->quant_table_count; i++)
+        pd_reset.context_count[i] = f->context_count[i];
 
-    /* If the reset shader ran, insert a barrier now. */
-    if (f->key_frame || f->version > 3) {
-        /* Reset shader modified the slice data buffer */
-        buf_bar[nb_buf_bar++] = (VkBufferMemoryBarrier2) {
-            .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2,
-            .srcStageMask = slice_data_buf->stage,
-            .dstStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
-            .srcAccessMask = slice_data_buf->access,
-            .dstAccessMask = VK_ACCESS_2_SHADER_STORAGE_READ_BIT |
-                             VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT,
-            .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-            .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-            .buffer = slice_data_buf->buf,
-            .size = slice_data_buf->size - slice_data_size*f->slice_count,
-            .offset = slice_data_size*f->slice_count,
-        };
-    }
+    ff_vk_shader_update_push_const(&fv->s, exec, &fv->reset,
+                                   VK_SHADER_STAGE_COMPUTE_BIT,
+                                   0, sizeof(pd_reset), &pd_reset);
+    vk->CmdDispatch(exec->buf, fv->ctx.num_h_slices, fv->ctx.num_v_slices,
+                    f->plane_count);
+
+    /* Sync between reset and encode shaders */
+    ff_vk_buf_barrier(buf_bar[nb_buf_bar++], slice_data_buf,
+                      COMPUTE_SHADER_BIT, SHADER_READ_BIT, NONE_KHR,
+                      COMPUTE_SHADER_BIT, SHADER_READ_BIT, SHADER_WRITE_BIT,
+                      0, slice_data_size*f->slice_count);
+    ff_vk_buf_barrier(buf_bar[nb_buf_bar++], slice_data_buf,
+                      COMPUTE_SHADER_BIT, SHADER_WRITE_BIT, NONE_KHR,
+                      COMPUTE_SHADER_BIT, SHADER_READ_BIT, SHADER_WRITE_BIT,
+                      slice_data_size*f->slice_count, VK_WHOLE_SIZE);
+    ff_vk_buf_barrier(buf_bar[nb_buf_bar++], results_data_buf,
+                      ALL_COMMANDS_BIT, NONE_KHR, NONE_KHR,
+                      COMPUTE_SHADER_BIT, SHADER_WRITE_BIT, NONE_KHR,
+                      0, VK_WHOLE_SIZE);
+    ff_vk_buf_barrier(buf_bar[nb_buf_bar++], out_data_buf,
+                      ALL_COMMANDS_BIT, NONE_KHR, NONE_KHR,
+                      COMPUTE_SHADER_BIT, SHADER_WRITE_BIT, NONE_KHR,
+                      0, VK_WHOLE_SIZE);
 
-    if (fv->is_rgb) {
+    if (fv->is_rgb)
         ff_vk_frame_barrier(&fv->s, exec, tmp, img_bar, &nb_img_bar,
                             VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
                             VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
                             VK_ACCESS_SHADER_READ_BIT | 
VK_ACCESS_SHADER_WRITE_BIT,
                             VK_IMAGE_LAYOUT_GENERAL,
                             VK_QUEUE_FAMILY_IGNORED);
-    }
 
-    /* Final barrier before encoding */
     vk->CmdPipelineBarrier2(exec->buf, &(VkDependencyInfo) {
         .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
         .pImageMemoryBarriers = img_bar,
@@ -615,11 +595,7 @@ static int vulkan_encode_ffv1_submit_frame(AVCodecContext 
*avctx,
         .bufferMemoryBarrierCount = nb_buf_bar,
     });
     nb_img_bar = 0;
-    if (nb_buf_bar) {
-        slice_data_buf->stage = buf_bar[0].dstStageMask;
-        slice_data_buf->access = buf_bar[0].dstAccessMask;
-        nb_buf_bar = 0;
-    }
+    nb_buf_bar = 0;
 
     /* Main encode shader */
     ff_vk_shader_update_desc_buffer(&fv->s, exec, &fv->enc,
@@ -705,25 +681,15 @@ static int transfer_slices(AVCodecContext *avctx,
     mapped_ref = NULL; /* Ownership passed */
 
     /* Ensure the output buffer is finished */
-    buf_bar[nb_buf_bar++] = (VkBufferMemoryBarrier2) {
-        .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2,
-        .srcStageMask = out_data_buf->stage,
-        .dstStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT,
-        .srcAccessMask = out_data_buf->access,
-        .dstAccessMask = VK_ACCESS_2_TRANSFER_READ_BIT,
-        .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-        .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-        .buffer = out_data_buf->buf,
-        .size = VK_WHOLE_SIZE,
-        .offset = 0,
-    };
+    ff_vk_buf_barrier(buf_bar[nb_buf_bar++], out_data_buf,
+                      COMPUTE_SHADER_BIT, SHADER_WRITE_BIT, NONE_KHR,
+                      TRANSFER_BIT, TRANSFER_READ_BIT, NONE_KHR,
+                      0, VK_WHOLE_SIZE);
     vk->CmdPipelineBarrier2(exec->buf, &(VkDependencyInfo) {
         .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
         .pBufferMemoryBarriers = buf_bar,
         .bufferMemoryBarrierCount = nb_buf_bar,
     });
-    out_data_buf->stage = buf_bar[0].dstStageMask;
-    out_data_buf->access = buf_bar[0].dstAccessMask;
     nb_buf_bar = 0;
 
     for (int i = 0; i < nb_regions; i++)

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to