@@ -5272,14 +5272,13 @@ void RenderingDevice::_wait_for_transfer_worker(TransferWorker *p_transfer_worke
52725272 p_transfer_worker->operations_processed = p_transfer_worker->operations_submitted ;
52735273 }
52745274
5275- if (!p_transfer_worker->texture_barriers .is_empty ()) {
5276- MutexLock transfer_worker_lock (transfer_worker_pool_mutex);
5277- _flush_barriers_for_transfer_worker (p_transfer_worker);
5278- }
5275+ _flush_barriers_for_transfer_worker (p_transfer_worker);
52795276}
52805277
52815278void RenderingDevice::_flush_barriers_for_transfer_worker (TransferWorker *p_transfer_worker) {
5279+ // Caller must have already acquired the mutex for the worker.
52825280 if (!p_transfer_worker->texture_barriers .is_empty ()) {
5281+ MutexLock transfer_worker_lock (transfer_worker_pool_texture_barriers_mutex);
52835282 for (uint32_t i = 0 ; i < p_transfer_worker->texture_barriers .size (); i++) {
52845283 transfer_worker_pool_texture_barriers.push_back (p_transfer_worker->texture_barriers [i]);
52855284 }
@@ -5352,8 +5351,11 @@ void RenderingDevice::_submit_transfer_workers(RDD::CommandBufferID p_draw_comma
53525351 }
53535352 }
53545353 }
5354+ }
53555355
5356- if (p_draw_command_buffer && !transfer_worker_pool_texture_barriers.is_empty ()) {
5356+ void RenderingDevice::_submit_transfer_barriers (RDD::CommandBufferID p_draw_command_buffer) {
5357+ MutexLock transfer_worker_lock (transfer_worker_pool_texture_barriers_mutex);
5358+ if (!transfer_worker_pool_texture_barriers.is_empty ()) {
53575359 driver->command_pipeline_barrier (p_draw_command_buffer, RDD::PIPELINE_STAGE_COPY_BIT, RDD::PIPELINE_STAGE_ALL_COMMANDS_BIT, {}, {}, transfer_worker_pool_texture_barriers);
53585360 transfer_worker_pool_texture_barriers.clear ();
53595361 }
@@ -5953,6 +5955,7 @@ void RenderingDevice::_end_frame() {
59535955 // The command buffer must be copied into a stack variable as the driver workarounds can change the command buffer in use.
59545956 RDD::CommandBufferID command_buffer = frames[frame].command_buffer ;
59555957 _submit_transfer_workers (command_buffer);
5958+ _submit_transfer_barriers (command_buffer);
59565959
59575960 draw_graph.end (RENDER_GRAPH_REORDER, RENDER_GRAPH_FULL_BARRIERS, command_buffer, frames[frame].command_buffer_pool );
59585961 driver->command_buffer_end (command_buffer);
0 commit comments