| 93 | } VulkanPriv; |
| 94 | |
| 95 | static void process(const SwsOpExec *exec, const void *priv, |
| 96 | int x_start, int y_start, int x_end, int y_end) |
| 97 | { |
| 98 | VulkanPriv *p = (VulkanPriv *)priv; |
| 99 | FFVkExecContext *ec = ff_vk_exec_get(&p->s->vkctx, &p->s->e); |
| 100 | FFVulkanFunctions *vk = &p->s->vkctx.vkfn; |
| 101 | ff_vk_exec_start(&p->s->vkctx, ec); |
| 102 | |
| 103 | AVFrame *src_f = (AVFrame *) exec->in_frame->avframe; |
| 104 | AVFrame *dst_f = (AVFrame *) exec->out_frame->avframe; |
| 105 | ff_vk_exec_add_dep_frame(&p->s->vkctx, ec, src_f, |
| 106 | VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, |
| 107 | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT); |
| 108 | ff_vk_exec_add_dep_frame(&p->s->vkctx, ec, dst_f, |
| 109 | VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, |
| 110 | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT); |
| 111 | |
| 112 | VkImageView src_views[AV_NUM_DATA_POINTERS]; |
| 113 | VkImageView dst_views[AV_NUM_DATA_POINTERS]; |
| 114 | ff_vk_create_imageviews(&p->s->vkctx, ec, src_views, src_f, p->src_rep); |
| 115 | ff_vk_create_imageviews(&p->s->vkctx, ec, dst_views, dst_f, p->dst_rep); |
| 116 | |
| 117 | ff_vk_shader_update_img_array(&p->s->vkctx, ec, &p->shd, src_f, src_views, |
| 118 | 0, 0, VK_IMAGE_LAYOUT_GENERAL, VK_NULL_HANDLE); |
| 119 | ff_vk_shader_update_img_array(&p->s->vkctx, ec, &p->shd, dst_f, dst_views, |
| 120 | 0, 1, VK_IMAGE_LAYOUT_GENERAL, VK_NULL_HANDLE); |
| 121 | |
| 122 | int nb_img_bar = 0; |
| 123 | VkImageMemoryBarrier2 img_bar[8]; |
| 124 | ff_vk_frame_barrier(&p->s->vkctx, ec, src_f, img_bar, &nb_img_bar, |
| 125 | VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, |
| 126 | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, |
| 127 | VK_ACCESS_SHADER_READ_BIT, |
| 128 | VK_IMAGE_LAYOUT_GENERAL, |
| 129 | VK_QUEUE_FAMILY_IGNORED); |
| 130 | ff_vk_frame_barrier(&p->s->vkctx, ec, dst_f, img_bar, &nb_img_bar, |
| 131 | VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, |
| 132 | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, |
| 133 | VK_ACCESS_SHADER_WRITE_BIT, |
| 134 | VK_IMAGE_LAYOUT_GENERAL, |
| 135 | VK_QUEUE_FAMILY_IGNORED); |
| 136 | vk->CmdPipelineBarrier2(ec->buf, &(VkDependencyInfo) { |
| 137 | .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO, |
| 138 | .pImageMemoryBarriers = img_bar, |
| 139 | .imageMemoryBarrierCount = nb_img_bar, |
| 140 | }); |
| 141 | |
| 142 | ff_vk_exec_bind_shader(&p->s->vkctx, ec, &p->shd); |
| 143 | |
| 144 | vk->CmdDispatch(ec->buf, |
| 145 | FFALIGN(src_f->width, p->shd.lg_size[0])/p->shd.lg_size[0], |
| 146 | FFALIGN(src_f->height, p->shd.lg_size[1])/p->shd.lg_size[1], |
| 147 | 1); |
| 148 | |
| 149 | ff_vk_exec_submit(&p->s->vkctx, ec); |
| 150 | ff_vk_exec_wait(&p->s->vkctx, ec); |
| 151 | } |
| 152 |
nothing calls this directly
no test coverage detected