vulkan: add enumerate function for dsp and raw

This commit is contained in:
columbarius 2023-09-23 18:37:47 +02:00
parent e1cee625d5
commit d17f853b03
3 changed files with 28 additions and 2 deletions

View file

@ -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);
}
}

View file

@ -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)
{

View file

@ -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);