vulkan: Track spa_buffers for stream

This commit is contained in:
columbarius 2023-08-10 02:20:30 +02:00 committed by Wim Taymans
parent 2456d58397
commit eea8096b12
2 changed files with 11 additions and 0 deletions

View file

@ -286,6 +286,7 @@ static int runCommandBuffer(struct vulkan_compute_state *s)
for (i = 0; i < s->n_streams; i++) {
struct vulkan_stream *p = &s->streams[i];
struct vulkan_buffer *current_buffer = &p->buffers[p->current_buffer_id];
struct spa_buffer *current_spa_buffer = p->spa_buffers[p->current_buffer_id];
VkAccessFlags access_flags;
if (p->direction == SPA_DIRECTION_INPUT) {
@ -322,6 +323,9 @@ static int runCommandBuffer(struct vulkan_compute_state *s)
.subresourceRange.layerCount = 1,
};
if (current_spa_buffer->datas[0].type != SPA_DATA_DmaBuf)
continue;
if (vulkan_sync_foreign_dmabuf(&s->base, current_buffer) < 0) {
spa_log_warn(s->log, "Failed to wait for foreign buffer DMA-BUF fence");
} else {
@ -396,6 +400,10 @@ static int runCommandBuffer(struct vulkan_compute_state *s)
int ret = 1;
for (uint32_t i = 0; i < s->n_streams; i++) {
struct vulkan_stream *p = &s->streams[i];
struct spa_buffer *current_spa_buffer = p->spa_buffers[p->current_buffer_id];
if (current_spa_buffer->datas[0].type != SPA_DATA_DmaBuf)
continue;
if (!vulkan_sync_export_dmabuf(&s->base, &p->buffers[p->current_buffer_id], sync_file_fd)) {
ret = 0;
@ -412,6 +420,7 @@ static void clear_buffers(struct vulkan_compute_state *s, struct vulkan_stream *
for (i = 0; i < p->n_buffers; i++) {
vulkan_buffer_clear(&s->base, &p->buffers[i]);
p->spa_buffers[i] = NULL;
}
p->n_buffers = 0;
}
@ -499,6 +508,7 @@ int spa_vulkan_use_buffers(struct vulkan_compute_state *s, struct vulkan_stream
spa_log_error(s->log, "Failed to use buffer %d", i);
return ret;
}
p->spa_buffers[i] = buffers[i];
p->n_buffers++;
}

View file

@ -42,6 +42,7 @@ struct vulkan_stream {
uint32_t ready_buffer_id;
struct vulkan_buffer buffers[MAX_BUFFERS];
struct spa_buffer *spa_buffers[MAX_BUFFERS];
uint32_t n_buffers;
};