mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -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++) {
|
for (i = 0; i < s->n_streams; i++) {
|
||||||
struct vulkan_stream *p = &s->streams[i];
|
struct vulkan_stream *p = &s->streams[i];
|
||||||
struct vulkan_buffer *current_buffer = &p->buffers[p->current_buffer_id];
|
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;
|
VkAccessFlags access_flags;
|
||||||
if (p->direction == SPA_DIRECTION_INPUT) {
|
if (p->direction == SPA_DIRECTION_INPUT) {
|
||||||
|
|
@ -322,6 +323,9 @@ static int runCommandBuffer(struct vulkan_compute_state *s)
|
||||||
.subresourceRange.layerCount = 1,
|
.subresourceRange.layerCount = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (current_spa_buffer->datas[0].type != SPA_DATA_DmaBuf)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (vulkan_sync_foreign_dmabuf(&s->base, current_buffer) < 0) {
|
if (vulkan_sync_foreign_dmabuf(&s->base, current_buffer) < 0) {
|
||||||
spa_log_warn(s->log, "Failed to wait for foreign buffer DMA-BUF fence");
|
spa_log_warn(s->log, "Failed to wait for foreign buffer DMA-BUF fence");
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -396,6 +400,10 @@ static int runCommandBuffer(struct vulkan_compute_state *s)
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
for (uint32_t i = 0; i < s->n_streams; i++) {
|
for (uint32_t i = 0; i < s->n_streams; i++) {
|
||||||
struct vulkan_stream *p = &s->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)) {
|
if (!vulkan_sync_export_dmabuf(&s->base, &p->buffers[p->current_buffer_id], sync_file_fd)) {
|
||||||
ret = 0;
|
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++) {
|
for (i = 0; i < p->n_buffers; i++) {
|
||||||
vulkan_buffer_clear(&s->base, &p->buffers[i]);
|
vulkan_buffer_clear(&s->base, &p->buffers[i]);
|
||||||
|
p->spa_buffers[i] = NULL;
|
||||||
}
|
}
|
||||||
p->n_buffers = 0;
|
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);
|
spa_log_error(s->log, "Failed to use buffer %d", i);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
p->spa_buffers[i] = buffers[i];
|
||||||
p->n_buffers++;
|
p->n_buffers++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ struct vulkan_stream {
|
||||||
uint32_t ready_buffer_id;
|
uint32_t ready_buffer_id;
|
||||||
|
|
||||||
struct vulkan_buffer buffers[MAX_BUFFERS];
|
struct vulkan_buffer buffers[MAX_BUFFERS];
|
||||||
|
struct spa_buffer *spa_buffers[MAX_BUFFERS];
|
||||||
uint32_t n_buffers;
|
uint32_t n_buffers;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue