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 | av_free(ts); | 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 | int ff_vk_exec_add_dep_bool_sem(FFVulkanContext *s, FFVkExecContext *e, | 640 | int ff_vk_exec_add_dep_bool_sem(FFVulkanContext *s, FFVkExecContext *e, |
| 624 | VkSemaphore *sem, int nb, | 641 | VkSemaphore *sem, int nb, |
| 625 | VkPipelineStageFlagBits2 stage, | 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 | for (int i = 0; i < nb; i++) { | 691 | for (int i = 0; i < nb; i++) { |
| 675 | VkSemaphoreSubmitInfo *sem_wait; | 692 | err = ff_vk_exec_add_dep_wait_sem(s, e, sem[i], 0, stage); |
| 676 | ARR_REALLOC(e, sem_wait, &e->sem_wait_alloc, e->sem_wait_cnt); | 693 | if (err < 0) |
| 677 | 694 | return err; | |
| 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 | }; | ||
| 683 | } | 695 | } |
| 684 | 696 | ||
| 685 | return 0; | 697 | return 0; |
| @@ -456,6 +456,9 @@ void ff_vk_exec_wait(FFVulkanContext *s, FFVkExecContext *e); · 455 unmodified lines | |||
| 456 | */ | 456 | */ |
| 457 | int ff_vk_exec_add_dep_buf(FFVulkanContext *s, FFVkExecContext *e, | 457 | int ff_vk_exec_add_dep_buf(FFVulkanContext *s, FFVkExecContext *e, |
| 458 | AVBufferRef **deps, int nb_deps, int ref); | 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 | int ff_vk_exec_add_dep_bool_sem(FFVulkanContext *s, FFVkExecContext *e, | 462 | int ff_vk_exec_add_dep_bool_sem(FFVulkanContext *s, FFVkExecContext *e, |
| 460 | VkSemaphore *sem, int nb, | 463 | VkSemaphore *sem, int nb, |
| 461 | VkPipelineStageFlagBits2 stage, | 464 | VkPipelineStageFlagBits2 stage, |