| 529 | } |
| 530 | |
| 531 | void SyncOpPipelineBarrier::ReplayRecord(CommandExecutionContext& exec_context, const ResourceUsageTag exec_tag) const { |
| 532 | const bool has_buffer_barriers = !barrier_set_.buffer_barriers.empty(); |
| 533 | const bool has_image_barriers = !barrier_set_.image_barriers.empty(); |
| 534 | |
| 535 | const bool single_buffer_barrier = barrier_set_.buffer_barriers.size() == 1 && |
| 536 | barrier_set_.memory_barriers.size() == 1 && // buffer barrier exec dependency |
| 537 | !has_image_barriers; |
| 538 | |
| 539 | const bool single_image_barrier = barrier_set_.image_barriers.size() == 1 && |
| 540 | barrier_set_.memory_barriers.size() == 1 && // image barrier exec dependency |
| 541 | !has_buffer_barriers; |
| 542 | |
| 543 | const bool single_memory_barrier = barrier_set_.memory_barriers.size() == 1 && !has_buffer_barriers && !has_image_barriers; |
| 544 | |
| 545 | if (single_buffer_barrier) { |
| 546 | ApplySingleBufferBarrier(exec_context, barrier_set_.buffer_barriers[0], barrier_set_.memory_barriers[0]); |
| 547 | } else if (single_image_barrier) { |
| 548 | ApplySingleImageBarrier(exec_context, barrier_set_.image_barriers[0], barrier_set_.memory_barriers[0], exec_tag); |
| 549 | } else if (single_memory_barrier) { |
| 550 | ApplySingleMemoryBarrier(exec_context, barrier_set_.memory_barriers[0]); |
| 551 | } else { |
| 552 | ApplyMultipleBarriers(exec_context, exec_tag); |
| 553 | } |
| 554 | |
| 555 | SyncEventsContext& events_context = exec_context.GetEventsContext(); |
| 556 | if (barrier_set_.single_exec_scope) { |
| 557 | events_context.ApplyBarrier(barrier_set_.src_exec_scope, barrier_set_.dst_exec_scope, exec_tag); |
| 558 | } else { |
| 559 | for (const auto& barrier : barrier_set_.memory_barriers) { |
| 560 | events_context.ApplyBarrier(barrier.src_exec_scope, barrier.dst_exec_scope, exec_tag); |
| 561 | } |
| 562 | } |
| 563 | } |
| 564 | |
| 565 | bool SyncOpPipelineBarrier::ReplayValidate(ReplayState& replay, ResourceUsageTag recorded_tag) const { |
| 566 | // The layout transitions happen at the replay tag |
no test coverage detected