From: Lynne <dev@lynne.ee> To: ffmpeg-devel@ffmpeg.org Cc: Lynne <dev@lynne.ee> Subject: [FFmpeg-devel] [PATCH 1/3] vulkan: move feature<->property mapping code outside of hwcontext_vulkan.c Date: Sun, 20 Apr 2025 11:03:00 +0200 Message-ID: <20250420090308.11213-1-dev@lynne.ee> (raw) 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".
next reply other threads:[~2025-04-20 9:03 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-04-20 9:03 Lynne [this message] 2025-04-20 9:03 ` [FFmpeg-devel] [PATCH 2/3] vulkan: check that the max number of push descriptors is not exceeded Lynne 2025-04-20 9:03 ` [FFmpeg-devel] [PATCH 3/3] vulkan: move OPT_CHAIN out of hwcontext_vulkan Lynne
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20250420090308.11213-1-dev@lynne.ee \ --to=dev@lynne.ee \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git