]> git.sesse.net Git - ffmpeg/commitdiff
hwcontext_vulkan: add VkExternalMemoryBufferCreateInfo to imported buffers
authorLynne <dev@lynne.ee>
Sun, 22 Nov 2020 21:48:14 +0000 (22:48 +0100)
committerLynne <dev@lynne.ee>
Wed, 25 Nov 2020 22:06:35 +0000 (23:06 +0100)
Its a validation layer thing.

libavutil/hwcontext_vulkan.c

index ed39e7b8eaa39286259c79b9dd3754c1866e901f..61cca86d6e2ee9b8323f2ba084dcddde05ac97fd 100644 (file)
@@ -3028,6 +3028,11 @@ static int vulkan_transfer_data_from_mem(AVHWFramesContext *hwfc, AVFrame *dst,
         size_t p_size = FFALIGN(FFABS(src->linesize[i]) * p_height,
                                 p->hprops.minImportedHostPointerAlignment);
 
+        VkExternalMemoryBufferCreateInfo create_desc = {
+            .sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO,
+            .handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT,
+        };
+
         VkImportMemoryHostPointerInfoEXT import_desc = {
             .sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT,
             .handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT,
@@ -3044,7 +3049,8 @@ static int vulkan_transfer_data_from_mem(AVHWFramesContext *hwfc, AVFrame *dst,
         tmp.linesize[i] = FFABS(src->linesize[i]);
         err = create_buf(dev_ctx, &bufs[i], p_size, p_height, &tmp.linesize[i],
                          VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
-                         VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, NULL,
+                         VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
+                         host_mapped[i] ? &create_desc : NULL,
                          host_mapped[i] ? &import_desc : NULL);
         if (err)
             goto end;
@@ -3211,6 +3217,11 @@ static int vulkan_transfer_data_to_mem(AVHWFramesContext *hwfc, AVFrame *dst,
         size_t p_size = FFALIGN(FFABS(dst->linesize[i]) * p_height,
                                 p->hprops.minImportedHostPointerAlignment);
 
+        VkExternalMemoryBufferCreateInfo create_desc = {
+            .sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO,
+            .handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT,
+        };
+
         VkImportMemoryHostPointerInfoEXT import_desc = {
             .sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT,
             .handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT,
@@ -3227,7 +3238,8 @@ static int vulkan_transfer_data_to_mem(AVHWFramesContext *hwfc, AVFrame *dst,
         tmp.linesize[i] = FFABS(dst->linesize[i]);
         err = create_buf(dev_ctx, &bufs[i], p_size, p_height,
                          &tmp.linesize[i], VK_BUFFER_USAGE_TRANSFER_DST_BIT,
-                         VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, NULL,
+                         VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
+                         host_mapped[i] ? &create_desc : NULL,
                          host_mapped[i] ? &import_desc : NULL);
         if (err)
             goto end;