mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
vulkan: Track spa_buffers for stream
This commit is contained in:
parent
2456d58397
commit
eea8096b12
2 changed files with 11 additions and 0 deletions
|
|
@ -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++;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue