diff --git a/spa/plugins/vulkan/vulkan-blit-filter.c b/spa/plugins/vulkan/vulkan-blit-filter.c index 22dbb2386..d5bb64cc2 100644 --- a/spa/plugins/vulkan/vulkan-blit-filter.c +++ b/spa/plugins/vulkan/vulkan-blit-filter.c @@ -308,9 +308,9 @@ static int port_enum_formats(void *object, } return 1; } - return spa_vulkan_blit_enumerate_dsp_formats(&this->state, index-1, spa_vulkan_blit_get_buffer_caps(&this->state, direction), param, builder); + return spa_vulkan_blit_enumerate_formats(&this->state, index-1, spa_vulkan_blit_get_buffer_caps(&this->state, direction), param, builder); } else { - return spa_vulkan_blit_enumerate_dsp_formats(&this->state, index, spa_vulkan_blit_get_buffer_caps(&this->state, direction), param, builder); + return spa_vulkan_blit_enumerate_formats(&this->state, index, spa_vulkan_blit_get_buffer_caps(&this->state, direction), param, builder); } } diff --git a/spa/plugins/vulkan/vulkan-blit-utils.c b/spa/plugins/vulkan/vulkan-blit-utils.c index 8a41f21db..a2ea96b53 100644 --- a/spa/plugins/vulkan/vulkan-blit-utils.c +++ b/spa/plugins/vulkan/vulkan-blit-utils.c @@ -408,6 +408,30 @@ int spa_vulkan_blit_enumerate_dsp_formats(struct vulkan_blit_state *s, uint32_t return 1; } +int spa_vulkan_blit_enumerate_formats(struct vulkan_blit_state *s, uint32_t index, uint32_t caps, + struct spa_pod **param, struct spa_pod_builder *builder) +{ + uint32_t fmt_idx; + bool has_modifier; + uint32_t raw_offset = 0; + if ((caps & VULKAN_BUFFER_TYPE_CAP_SHM) > 0) + raw_offset += s->formatInfosDSP.formatCount; + if ((caps & VULKAN_BUFFER_TYPE_CAP_DMABUF) > 0) + raw_offset += s->formatInfosDSP.formatsWithModifiersCount; + if (index < raw_offset) { + if (find_EnumFormatInfo(&s->formatInfosDSP, index, caps, &fmt_idx, &has_modifier)) { + *param = build_dsp_EnumFormat(&s->formatInfosDSP.infos[fmt_idx], has_modifier, builder); + return 1; + } + } else { + if (find_EnumFormatInfo(&s->formatInfosRaw, index - raw_offset, caps, &fmt_idx, &has_modifier)) { + *param = build_raw_EnumFormat(&s->formatInfosRaw.infos[fmt_idx], has_modifier, builder); + return 1; + } + } + return 0; +} + static int vulkan_stream_init(struct vulkan_stream *stream, enum spa_direction direction, struct spa_dict *props) { diff --git a/spa/plugins/vulkan/vulkan-blit-utils.h b/spa/plugins/vulkan/vulkan-blit-utils.h index 387fce55c..249a40d26 100644 --- a/spa/plugins/vulkan/vulkan-blit-utils.h +++ b/spa/plugins/vulkan/vulkan-blit-utils.h @@ -64,6 +64,8 @@ int spa_vulkan_blit_enumerate_raw_formats(struct vulkan_blit_state *s, uint32_t struct spa_pod **param, struct spa_pod_builder *builder); int spa_vulkan_blit_enumerate_dsp_formats(struct vulkan_blit_state *s, uint32_t index, uint32_t caps, struct spa_pod **param, struct spa_pod_builder *builder); +int spa_vulkan_blit_enumerate_formats(struct vulkan_blit_state *s, uint32_t index, uint32_t caps, + struct spa_pod **param, struct spa_pod_builder *builder); int spa_vulkan_blit_prepare(struct vulkan_blit_state *s); int spa_vulkan_blit_unprepare(struct vulkan_blit_state *s);