From a673c56eead47ad2982264afcdac7dda232bd456 Mon Sep 17 00:00:00 2001 From: columbarius Date: Fri, 4 Aug 2023 00:26:20 +0200 Subject: [PATCH] vulkan: announce SPA_PARAM_BUFFERS wrt. modifiers --- spa/plugins/vulkan/vulkan-compute-filter.c | 26 +++++++++++++++------ spa/plugins/vulkan/vulkan-compute-source.c | 27 ++++++++++++++++------ spa/plugins/vulkan/vulkan-compute-utils.c | 5 ++++ spa/plugins/vulkan/vulkan-compute-utils.h | 2 ++ 4 files changed, 46 insertions(+), 14 deletions(-) diff --git a/spa/plugins/vulkan/vulkan-compute-filter.c b/spa/plugins/vulkan/vulkan-compute-filter.c index 29c5137d9..eda4b686a 100644 --- a/spa/plugins/vulkan/vulkan-compute-filter.c +++ b/spa/plugins/vulkan/vulkan-compute-filter.c @@ -406,13 +406,25 @@ impl_node_port_enum_params(void *object, int seq, this->position->video.size.height, this->position->video.stride); - param = spa_pod_builder_add_object(&b, - SPA_TYPE_OBJECT_ParamBuffers, id, - SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(2, 1, MAX_BUFFERS), - SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(1), - SPA_PARAM_BUFFERS_size, SPA_POD_Int(this->position->video.stride * - this->position->video.size.height), - SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->position->video.stride)); + if (port->current_format.info.dsp.flags & SPA_VIDEO_FLAG_MODIFIER) { + struct vulkan_modifier_info *mod_info = spa_vulkan_get_modifier_info(&this->state, + &port->current_format.info.dsp); + param = spa_pod_builder_add_object(&b, + SPA_TYPE_OBJECT_ParamBuffers, id, + SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(2, 1, MAX_BUFFERS), + SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(mod_info->props.drmFormatModifierPlaneCount), + SPA_PARAM_BUFFERS_dataType, SPA_POD_CHOICE_FLAGS_Int(1<position->video.stride * + this->position->video.size.height), + SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->position->video.stride), + SPA_PARAM_BUFFERS_dataType, SPA_POD_CHOICE_FLAGS_Int(1<position->video.size.height, this->position->video.stride); - param = spa_pod_builder_add_object(&b, - SPA_TYPE_OBJECT_ParamBuffers, id, - SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(2, 1, MAX_BUFFERS), - SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(1), - SPA_PARAM_BUFFERS_size, SPA_POD_Int(this->position->video.stride * - this->position->video.size.height), - SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->position->video.stride)); + + if (port->current_format.info.dsp.flags & SPA_VIDEO_FLAG_MODIFIER) { + struct vulkan_modifier_info *mod_info = spa_vulkan_get_modifier_info(&this->state, + &port->current_format.info.dsp); + param = spa_pod_builder_add_object(&b, + SPA_TYPE_OBJECT_ParamBuffers, id, + SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(2, 1, MAX_BUFFERS), + SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(mod_info->props.drmFormatModifierPlaneCount), + SPA_PARAM_BUFFERS_dataType, SPA_POD_CHOICE_FLAGS_Int(1<position->video.stride * + this->position->video.size.height), + SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->position->video.stride), + SPA_PARAM_BUFFERS_dataType, SPA_POD_CHOICE_FLAGS_Int(1<format); + return vulkan_modifierInfo_find(&s->base, vk_format, info->modifier); +} + int spa_vulkan_init(struct vulkan_compute_state *s) { s->base.log = s->log; diff --git a/spa/plugins/vulkan/vulkan-compute-utils.h b/spa/plugins/vulkan/vulkan-compute-utils.h index 725e45dbb..f66b36750 100644 --- a/spa/plugins/vulkan/vulkan-compute-utils.h +++ b/spa/plugins/vulkan/vulkan-compute-utils.h @@ -72,6 +72,8 @@ int spa_vulkan_process(struct vulkan_compute_state *s); int spa_vulkan_cleanup(struct vulkan_compute_state *s); int spa_vulkan_get_buffer_caps(struct vulkan_compute_state *s, enum spa_direction direction); +struct vulkan_modifier_info *spa_vulkan_get_modifier_info(struct vulkan_compute_state *s, + struct spa_video_info_dsp *dsp_info); int spa_vulkan_init(struct vulkan_compute_state *s); void spa_vulkan_deinit(struct vulkan_compute_state *s);