This adds a function which adds a regular timeline semaphore as a wait-only dependency.
Unified · Split
| @@ -620,6 +620,23 @@ static void destroy_tmp_semaphores(void *opaque, uint8_t *data) · 619 unmodified lines | ||
| 620 | 620 | av_free(ts); |
| 621 | 621 | } |
| 622 | 622 | |
| 623 | +int ff_vk_exec_add_dep_wait_sem(FFVulkanContext *s, FFVkExecContext *e, | |
| 624 | + VkSemaphore sem, uint64_t val, | |
| 625 | + VkPipelineStageFlagBits2 stage) | |
| 626 | +{ | |
| 627 | + VkSemaphoreSubmitInfo *sem_wait; | |
| 628 | + ARR_REALLOC(e, sem_wait, &e->sem_wait_alloc, e->sem_wait_cnt); | |
| 629 | + | |
| 630 | + e->sem_wait[e->sem_wait_cnt++] = (VkSemaphoreSubmitInfo) { | |
| 631 | + .sType = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO, | |
| 632 | + .semaphore = sem, | |
| 633 | + .value = val, | |
| 634 | + .stageMask = stage, | |
| 635 | + }; | |
| 636 | + | |
| 637 | + return 0; | |
| 638 | +} | |
| 639 | + | |
| 623 | 640 | int ff_vk_exec_add_dep_bool_sem(FFVulkanContext *s, FFVkExecContext *e, |
| 624 | 641 | VkSemaphore *sem, int nb, |
| 625 | 642 | VkPipelineStageFlagBits2 stage, |
| @@ -672,14 +689,9 @@ int ff_vk_exec_add_dep_bool_sem(FFVulkanContext *s, FFVkExecContext *e, · 46 unmodified lines | ||
| 672 | 689 | } |
| 673 | 690 | |
| 674 | 691 | for (int i = 0; i < nb; i++) { |
| 675 | − VkSemaphoreSubmitInfo *sem_wait; | |
| 676 | − ARR_REALLOC(e, sem_wait, &e->sem_wait_alloc, e->sem_wait_cnt); | |
| 677 | − | |
| 678 | − e->sem_wait[e->sem_wait_cnt++] = (VkSemaphoreSubmitInfo) { | |
| 679 | − .sType = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO, | |
| 680 | − .semaphore = sem[i], | |
| 681 | − .stageMask = stage, | |
| 682 | − }; | |
| 692 | + err = ff_vk_exec_add_dep_wait_sem(s, e, sem[i], 0, stage); | |
| 693 | + if (err < 0) | |
| 694 | + return err; | |
| 683 | 695 | } |
| 684 | 696 | |
| 685 | 697 | return 0; |
| @@ -456,6 +456,9 @@ void ff_vk_exec_wait(FFVulkanContext *s, FFVkExecContext *e); · 455 unmodified lines | ||
| 456 | 456 | */ |
| 457 | 457 | int ff_vk_exec_add_dep_buf(FFVulkanContext *s, FFVkExecContext *e, |
| 458 | 458 | AVBufferRef **deps, int nb_deps, int ref); |
| 459 | +int ff_vk_exec_add_dep_wait_sem(FFVulkanContext *s, FFVkExecContext *e, | |
| 460 | + VkSemaphore sem, uint64_t val, | |
| 461 | + VkPipelineStageFlagBits2 stage); | |
| 459 | 462 | int ff_vk_exec_add_dep_bool_sem(FFVulkanContext *s, FFVkExecContext *e, |
| 460 | 463 | VkSemaphore *sem, int nb, |
| 461 | 464 | VkPipelineStageFlagBits2 stage, |