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