40         VkImageUsageFlagBits usage_req;
 
   45         vk_frames = frames_ctx->
hwctx;
 
   46         vk_dev = device_ctx->
hwctx;
 
   58         if (vk_frames->
tiling == VK_IMAGE_TILING_LINEAR)
 
   71         usage_req = VK_IMAGE_USAGE_SAMPLED_BIT |
 
   72                     VK_IMAGE_USAGE_STORAGE_BIT;
 
   76         if (vk_frames->
format[1] == VK_FORMAT_UNDEFINED &&
 
   79             VkFormatProperties3 fprops = {
 
   80                 .sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3,
 
   82             VkFormatProperties2 prop = {
 
   83                 .sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2,
 
   86             vk->GetPhysicalDeviceFormatProperties2(vk_dev->
phys_dev,
 
   89             if (fprops.optimalTilingFeatures & VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR)
 
   90                 usage_req |= VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR;
 
   93         if ((vk_frames->
usage & usage_req) != usage_req)
 
   97         for (
int i = 0; sub[
i] != VK_FORMAT_UNDEFINED; 
i++) {
 
   98             VkFormatProperties2 prop = {
 
   99                 .sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2,
 
  101             vk->GetPhysicalDeviceFormatProperties2(vk_dev->
phys_dev, sub[
i],
 
  103             no_storage |= !(prop.formatProperties.optimalTilingFeatures &
 
  104                             VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT);
 
  124                    "Vulkan filtering requires a device context!\n");
 
  136         vk_frames = frames_ctx->
hwctx;
 
  137         vk_frames->
tiling = VK_IMAGE_TILING_OPTIMAL;
 
  138         vk_frames->
usage  = VK_IMAGE_USAGE_SAMPLED_BIT |
 
  139                             VK_IMAGE_USAGE_STORAGE_BIT |
 
  140                             VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
 
  149         vk_dev = device_ctx->
hwctx;
 
  163     s->frames_ref = frames_ref;
 
  164     s->frames = frames_ctx;
 
  166     s->device = device_ctx;
 
  167     s->hwctx = device_ctx->
hwctx;
 
  185                "hardware frames context on the input.\n");
 
  218                                     s->output_width, 
s->output_height,
 
  227     outlink->
w = 
s->output_width;
 
  228     outlink->
h = 
s->output_height;
 
  244                                 VkSampler sampler, 
void *push_src, 
size_t push_size)
 
  250     VkImageMemoryBarrier2 img_bar[37];
 
  252     VkImageLayout in_layout = sampler != VK_NULL_HANDLE ?
 
  253                               VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL :
 
  254                               VK_IMAGE_LAYOUT_GENERAL;
 
  261                                  VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  262                                  VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
 
  265                                   VK_IMAGE_LAYOUT_GENERAL,
 
  269                                      VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  270                                      VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
 
  281                                        0, push_size, push_src);
 
  285                         VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  286                         VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
 
  287                         VK_ACCESS_SHADER_WRITE_BIT,
 
  288                         VK_IMAGE_LAYOUT_GENERAL,
 
  289                         VK_QUEUE_FAMILY_IGNORED);
 
  292                             VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  293                             VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
 
  294                             VK_ACCESS_SHADER_READ_BIT,
 
  296                             VK_QUEUE_FAMILY_IGNORED);
 
  298     vk->CmdPipelineBarrier2(exec->
buf, &(VkDependencyInfo) {
 
  299             .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
 
  300             .pImageMemoryBarriers = img_bar,
 
  301             .imageMemoryBarrierCount = nb_img_bar,
 
  304     vk->CmdDispatch(exec->
buf,
 
  318                                VkSampler sampler, 
void *push_src, 
size_t push_size)
 
  325     VkImageMemoryBarrier2 img_bar[37];
 
  327     VkImageLayout in_layout = sampler != VK_NULL_HANDLE ?
 
  328                               VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL :
 
  329                               VK_IMAGE_LAYOUT_GENERAL;
 
  336                                  VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  337                                  VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
 
  339                                  VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  340                                  VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
 
  342                                  VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  343                                  VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
 
  350                         VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  351                         VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
 
  352                         VK_ACCESS_SHADER_READ_BIT,
 
  354                         VK_QUEUE_FAMILY_IGNORED);
 
  356                         VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  357                         VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
 
  358                         VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,
 
  359                         VK_IMAGE_LAYOUT_GENERAL,
 
  360                         VK_QUEUE_FAMILY_IGNORED);
 
  362                         VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  363                         VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
 
  364                         VK_ACCESS_SHADER_WRITE_BIT,
 
  365                         VK_IMAGE_LAYOUT_GENERAL,
 
  366                         VK_QUEUE_FAMILY_IGNORED);
 
  368     vk->CmdPipelineBarrier2(exec->
buf, &(VkDependencyInfo) {
 
  369             .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
 
  370             .pImageMemoryBarriers = img_bar,
 
  371             .imageMemoryBarrierCount = nb_img_bar,
 
  374     for (
int i = 0; 
i < 2; 
i++) {
 
  378         VkImageView *src_views = !
i ? in_views : tmp_views;
 
  379         VkImageView *dst_views = !
i ? tmp_views : out_views;
 
  383                                            VK_IMAGE_LAYOUT_GENERAL,
 
  386                                       VK_IMAGE_LAYOUT_GENERAL,
 
  393                                            0, push_size, push_src);
 
  395         vk->CmdDispatch(exec->
buf,
 
  410                              VkSampler sampler, 
void *push_src, 
size_t push_size)
 
  416     VkImageMemoryBarrier2 img_bar[128];
 
  418     VkImageLayout in_layout = sampler != VK_NULL_HANDLE ?
 
  419                               VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL :
 
  420                               VK_IMAGE_LAYOUT_GENERAL;
 
  428                                  VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  429                                  VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
 
  431     for (
int i = 0; 
i < nb_in; 
i++) {
 
  433                                      VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  434                                      VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
 
  440                                   VK_IMAGE_LAYOUT_GENERAL,
 
  442     for (
int i = 0; 
i < nb_in; 
i++)
 
  451                                        0, push_size, push_src);
 
  455                         VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  456                         VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
 
  457                         VK_ACCESS_SHADER_WRITE_BIT,
 
  458                         VK_IMAGE_LAYOUT_GENERAL,
 
  459                         VK_QUEUE_FAMILY_IGNORED);
 
  460     for (
int i = 0; 
i < nb_in; 
i++)
 
  462                             VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
 
  463                             VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
 
  464                             VK_ACCESS_SHADER_READ_BIT,
 
  466                             VK_QUEUE_FAMILY_IGNORED);
 
  468     vk->CmdPipelineBarrier2(exec->
buf, &(VkDependencyInfo) {
 
  469             .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
 
  470             .pImageMemoryBarriers = img_bar,
 
  471             .imageMemoryBarrierCount = nb_img_bar,
 
  474     vk->CmdDispatch(exec->
buf,