From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <ffmpeg-devel-bounces@ffmpeg.org> Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id D2A40474FF for <ffmpegdev@gitmailbox.com>; Sun, 20 Apr 2025 09:03:24 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2A4A0687D75; Sun, 20 Apr 2025 12:03:19 +0300 (EEST) Received: from vidala.pars.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4E3A1687BB0 for <ffmpeg-devel@ffmpeg.org>; Sun, 20 Apr 2025 12:03:12 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; s=202405r; d=lynne.ee; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1745139789; bh=bacclrE4fGS5pZRw0gUioDO LGgR99u2yVSmxy2gbzko=; b=o25oiZig5ZRXWHo47t/PjGgVjv3v/A6P/ZUvz1pdLOGoTjMQNZ aJU2MS1NJnWxxv5ese0OIJMNKIRgD/F9V7IKvgOkdCAhOX5RsuEpcc+Lvkk17EY0CR6Fz5X3+Xc aZXnL5vP9AdarkGNM4CsXYaYwAZHkvzpGSU/AlJZltvpJGInSr+E/xdIfZCJCN1wld30jOWXqHE eajW9foB0UIBfWtSvYFFb+0TJkCszNU/QICDpYSnUGbKVMUb4lkpNQ6ssRsAtQjawAz1jiOGVjO Rn46Aez3ovypLaQfHEAK6do3qfl3DKR2Pm6/78G9uB4QXo5e3dYMvopjzv2hWBhhV/g==; DKIM-Signature: v=1; a=ed25519-sha256; s=202405e; d=lynne.ee; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1745139789; bh=bacclrE4fGS5pZRw0gUioDO LGgR99u2yVSmxy2gbzko=; b=9Dqr/mPivV9nUkxrUFCdi+7QRiRSxX9J8ezaCOIgB3HZb+nQpg OSphq7//BGTTK42V4zr2+d3sEH8674AZH9Cw==; From: Lynne <dev@lynne.ee> To: ffmpeg-devel@ffmpeg.org Date: Sun, 20 Apr 2025 11:03:00 +0200 Message-ID: <20250420090308.11213-1-dev@lynne.ee> X-Mailer: git-send-email 2.49.0.395.g12beb8f557c MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] vulkan: move feature<->property mapping code outside of hwcontext_vulkan.c X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org> List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe> List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel> List-Post: <mailto:ffmpeg-devel@ffmpeg.org> List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help> List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe> Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Cc: Lynne <dev@lynne.ee> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org> Archived-At: <https://master.gitmailbox.com/ffmpegdev/20250420090308.11213-1-dev@lynne.ee/> List-Archive: <https://master.gitmailbox.com/ffmpegdev/> List-Post: <mailto:ffmpegdev@gitmailbox.com> Allows for it to be reused. --- libavutil/hwcontext_vulkan.c | 42 ++++++------------------------------ libavutil/vulkan.c | 34 +++++++++++++++++++++++++++++ libavutil/vulkan.h | 6 ++++++ 3 files changed, 46 insertions(+), 36 deletions(-) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index d7822d4629..e9fa734518 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -437,40 +437,6 @@ static const struct FFVkFormatEntry *vk_find_format_entry(enum AVPixelFormat p) return NULL; } -/* Malitia pura, Khronos */ -#define FN_MAP_TO(dst_t, dst_name, src_t, src_name) \ - static av_unused dst_t map_ ##src_name## _to_ ##dst_name(src_t src) \ - { \ - dst_t dst = 0x0; \ - MAP_TO(VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT, \ - VK_IMAGE_USAGE_SAMPLED_BIT); \ - MAP_TO(VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT, \ - VK_IMAGE_USAGE_TRANSFER_SRC_BIT); \ - MAP_TO(VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT, \ - VK_IMAGE_USAGE_TRANSFER_DST_BIT); \ - MAP_TO(VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT, \ - VK_IMAGE_USAGE_STORAGE_BIT); \ - MAP_TO(VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT, \ - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); \ - MAP_TO(VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR, \ - VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR); \ - MAP_TO(VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR, \ - VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR); \ - MAP_TO(VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR, \ - VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR); \ - MAP_TO(VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR, \ - VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR); \ - return dst; \ - } - -#define MAP_TO(flag1, flag2) if (src & flag2) dst |= flag1; -FN_MAP_TO(VkFormatFeatureFlagBits2, feats, VkImageUsageFlags, usage) -#undef MAP_TO -#define MAP_TO(flag1, flag2) if (src & flag1) dst |= flag2; -FN_MAP_TO(VkImageUsageFlags, usage, VkFormatFeatureFlagBits2, feats) -#undef MAP_TO -#undef FN_MAP_TO - static int vkfmt_from_pixfmt2(AVHWDeviceContext *dev_ctx, enum AVPixelFormat p, VkImageTiling tiling, VkFormat fmts[AV_NUM_DATA_POINTERS], /* Output format list */ @@ -538,7 +504,7 @@ static int vkfmt_from_pixfmt2(AVHWDeviceContext *dev_ctx, enum AVPixelFormat p, if (aspect) *aspect = vk_formats_list[i].aspect; if (supported_usage) - *supported_usage = map_feats_to_usage(feats_primary) | + *supported_usage = ff_vk_map_feats_to_usage(feats_primary) | ((need_storage && (storage_primary | storage_secondary)) ? VK_IMAGE_USAGE_STORAGE_BIT : 0); return 0; @@ -553,7 +519,7 @@ static int vkfmt_from_pixfmt2(AVHWDeviceContext *dev_ctx, enum AVPixelFormat p, if (aspect) *aspect = vk_formats_list[i].aspect; if (supported_usage) - *supported_usage = map_feats_to_usage(feats_secondary); + *supported_usage = ff_vk_map_feats_to_usage(feats_secondary); return 0; } else { return AVERROR(ENOTSUP); @@ -2681,6 +2647,10 @@ static AVBufferRef *vulkan_pool_alloc(void *opaque, size_t size) VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT); #endif + if (p->vkctx.extensions & FF_VK_EXT_EXTERNAL_DMABUF_MEMORY) + try_export_flags(hwfc, &eiinfo.handleTypes, &e, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT); + for (int i = 0; i < av_pix_fmt_count_planes(hwfc->sw_format); i++) { eminfo[i].sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO; eminfo[i].pNext = hwctx->alloc_pnext[i]; diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c index 8b02abecf1..8ab977c734 100644 --- a/libavutil/vulkan.c +++ b/libavutil/vulkan.c @@ -84,6 +84,40 @@ const char *ff_vk_ret2str(VkResult res) #undef CASE } +/* Malitia pura, Khronos */ +#define FN_MAP_TO(dst_t, dst_name, src_t, src_name) \ + dst_t ff_vk_map_ ##src_name## _to_ ##dst_name(src_t src) \ + { \ + dst_t dst = 0x0; \ + MAP_TO(VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT, \ + VK_IMAGE_USAGE_SAMPLED_BIT); \ + MAP_TO(VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT, \ + VK_IMAGE_USAGE_TRANSFER_SRC_BIT); \ + MAP_TO(VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT, \ + VK_IMAGE_USAGE_TRANSFER_DST_BIT); \ + MAP_TO(VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT, \ + VK_IMAGE_USAGE_STORAGE_BIT); \ + MAP_TO(VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT, \ + VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); \ + MAP_TO(VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR, \ + VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR); \ + MAP_TO(VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR, \ + VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR); \ + MAP_TO(VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR, \ + VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR); \ + MAP_TO(VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR, \ + VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR); \ + return dst; \ + } + +#define MAP_TO(flag1, flag2) if (src & flag2) dst |= flag1; +FN_MAP_TO(VkFormatFeatureFlagBits2, feats, VkImageUsageFlags, usage) +#undef MAP_TO +#define MAP_TO(flag1, flag2) if (src & flag1) dst |= flag2; +FN_MAP_TO(VkImageUsageFlags, usage, VkFormatFeatureFlagBits2, feats) +#undef MAP_TO +#undef FN_MAP_TO + static void load_enabled_qfs(FFVulkanContext *s) { s->nb_qfs = 0; diff --git a/libavutil/vulkan.h b/libavutil/vulkan.h index 2fb7f7c2de..49f015ae9d 100644 --- a/libavutil/vulkan.h +++ b/libavutil/vulkan.h @@ -364,6 +364,12 @@ int ff_vk_init(FFVulkanContext *s, void *log_parent, */ const char *ff_vk_ret2str(VkResult res); +/** + * Map between usage and features. + */ +VkImageUsageFlags ff_vk_map_feats_to_usage(VkFormatFeatureFlagBits2 feats); +VkFormatFeatureFlagBits2 ff_vk_map_usage_to_feats(VkImageUsageFlags usage); + /** * Returns 1 if pixfmt is a usable RGB format. */ -- 2.49.0.395.g12beb8f557c _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".