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

Git pushed a commit to branch master
in repository ffmpeg.

commit e3a96a69cb0deea8418db1117738dde700dc07ce
Author:     Lynne <[email protected]>
AuthorDate: Mon Jan 19 11:51:30 2026 +0100
Commit:     Lynne <[email protected]>
CommitDate: Mon Jan 19 16:37:17 2026 +0100

    vulkan_dpx: remove host image upload path
    
    The main reason this was written was due to Nvidia. Nvidia always
    has a fickle upload path, and seemed to have a shortcut for the
    host image upload path. This seems to have been patched out of
    recent driver versions.
    
    This upload path relies on the driver keeping the same layout,
    down to the stride for the images. Which is an assumption that's
    not portable.
    
    Rather than relying on this fickle upload path, what we'd like when
    we want pure bandwidth is to decouple uploads to a separate queue,
    and let the GPU pull the data from RAM via uploads.
    
    It'll be slower with a single-threaded decoder, but currently all
    of our compute-based decoders and the decoders that sit underneath
    them support frame threading.
---
 libavcodec/vulkan_dpx.c | 103 ------------------------------------------------
 1 file changed, 103 deletions(-)

diff --git a/libavcodec/vulkan_dpx.c b/libavcodec/vulkan_dpx.c
index cf53a0f4df..17f91c6ce4 100644
--- a/libavcodec/vulkan_dpx.c
+++ b/libavcodec/vulkan_dpx.c
@@ -54,106 +54,6 @@ typedef struct DecodePushData {
     int shift;
 } DecodePushData;
 
-static int host_upload_image(AVCodecContext *avctx,
-                             FFVulkanDecodeContext *dec, DPXDecContext *dpx,
-                             const uint8_t *src, uint32_t size)
-{
-    int err;
-    VkImage temp;
-
-    FFVulkanDecodeShared *ctx = dec->shared_ctx;
-    DPXVulkanDecodeContext *dxv = ctx->sd_ctx;
-    VkPhysicalDeviceLimits *limits = &ctx->s.props.properties.limits;
-    FFVulkanFunctions *vk = &ctx->s.vkfn;
-
-    DPXVulkanDecodePicture *pp = dpx->hwaccel_picture_private;
-    FFVulkanDecodePicture *vp = &pp->vp;
-
-    int unpack = (avctx->bits_per_raw_sample == 12 && !dpx->packing) ||
-                 avctx->bits_per_raw_sample == 10;
-    if (unpack)
-        return 0;
-
-    VkImageCreateInfo create_info = {
-        .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
-        .imageType = VK_IMAGE_TYPE_2D,
-        .format = avctx->bits_per_raw_sample == 8 ? VK_FORMAT_R8_UINT :
-                  avctx->bits_per_raw_sample == 32 ? VK_FORMAT_R32_UINT :
-                                                     VK_FORMAT_R16_UINT,
-        .extent.width = dpx->frame->width*dpx->components,
-        .extent.height = dpx->frame->height,
-        .extent.depth = 1,
-        .mipLevels = 1,
-        .arrayLayers = 1,
-        .tiling = VK_IMAGE_TILING_LINEAR,
-        .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
-        .usage = VK_IMAGE_USAGE_STORAGE_BIT | 
VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT,
-        .samples = VK_SAMPLE_COUNT_1_BIT,
-        .pQueueFamilyIndices = &ctx->qf[0].idx,
-        .queueFamilyIndexCount = 1,
-        .sharingMode = VK_SHARING_MODE_EXCLUSIVE,
-    };
-
-    if (create_info.extent.width >= limits->maxImageDimension2D ||
-        create_info.extent.height >= limits->maxImageDimension2D)
-        return 0;
-
-    vk->CreateImage(ctx->s.hwctx->act_dev, &create_info, ctx->s.hwctx->alloc,
-                    &temp);
-
-    err = ff_vk_get_pooled_buffer(&ctx->s, &dxv->frame_data_pool,
-                                  &vp->slices_buf,
-                                  VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
-                                      
VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
-                                  NULL, size,
-                                  VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
-                                  VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
-    if (err < 0)
-        return err;
-
-    FFVkBuffer *vkb = (FFVkBuffer *)vp->slices_buf->data;
-    VkBindImageMemoryInfo bind_info = {
-        .sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
-        .image = temp,
-        .memory = vkb->mem,
-    };
-    vk->BindImageMemory2(ctx->s.hwctx->act_dev, 1, &bind_info);
-
-    VkHostImageLayoutTransitionInfo layout_change = {
-        .sType = VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO,
-        .image = temp,
-        .oldLayout = VK_IMAGE_LAYOUT_UNDEFINED,
-        .newLayout = VK_IMAGE_LAYOUT_GENERAL,
-        .subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
-        .subresourceRange.layerCount = 1,
-        .subresourceRange.levelCount = 1,
-    };
-    vk->TransitionImageLayoutEXT(ctx->s.hwctx->act_dev, 1, &layout_change);
-
-    VkMemoryToImageCopy copy_region = {
-        .sType = VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY,
-        .pHostPointer = src,
-        .imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
-        .imageSubresource.layerCount = 1,
-        .imageExtent = (VkExtent3D){ dpx->frame->width*dpx->components,
-                                     dpx->frame->height,
-                                     1 },
-    };
-    VkCopyMemoryToImageInfo copy_info = {
-        .sType = VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO,
-        .flags = VK_HOST_IMAGE_COPY_MEMCPY_EXT,
-        .dstImage = temp,
-        .dstImageLayout = VK_IMAGE_LAYOUT_GENERAL,
-        .regionCount = 1,
-        .pRegions = &copy_region,
-    };
-    vk->CopyMemoryToImageEXT(ctx->s.hwctx->act_dev, &copy_info);
-
-    vk->DestroyImage(ctx->s.hwctx->act_dev, temp, ctx->s.hwctx->alloc);
-
-    return 0;
-}
-
 static int vk_dpx_start_frame(AVCodecContext          *avctx,
                               const AVBufferRef       *buffer_ref,
                               av_unused const uint8_t *buffer,
@@ -167,9 +67,6 @@ static int vk_dpx_start_frame(AVCodecContext          *avctx,
     DPXVulkanDecodePicture *pp = dpx->hwaccel_picture_private;
     FFVulkanDecodePicture *vp = &pp->vp;
 
-    if (ctx->s.extensions & FF_VK_EXT_HOST_IMAGE_COPY)
-        host_upload_image(avctx, dec, dpx, buffer, size);
-
     /* Host map the frame data if supported */
     if (!vp->slices_buf &&
         ctx->s.extensions & FF_VK_EXT_EXTERNAL_HOST_MEMORY)

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

Reply via email to