42 vk_frames = frames_ctx->
hwctx;
43 vk_dev = device_ctx->
hwctx;
49 (vk_frames->
tiling != VK_IMAGE_TILING_LINEAR &&
50 vk_frames->
tiling != VK_IMAGE_TILING_OPTIMAL) ||
51 !(vk_frames->
usage & VK_IMAGE_USAGE_SAMPLED_BIT)) {
55 if (vk_frames->
usage & VK_IMAGE_USAGE_STORAGE_BIT)
66 for (
int i = 0; sub[
i] != VK_FORMAT_UNDEFINED;
i++) {
67 VkFormatProperties2 prop = {
68 .sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2,
70 vk->GetPhysicalDeviceFormatProperties2(vk_dev->
phys_dev, sub[
i],
73 if (vk_frames->
tiling == VK_IMAGE_TILING_LINEAR) {
74 no_storage |= !(prop.formatProperties.linearTilingFeatures &
75 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT);
77 no_storage |= !(prop.formatProperties.optimalTilingFeatures &
78 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT);
98 "Vulkan filtering requires a device context!\n");
110 vk_frames = frames_ctx->
hwctx;
111 vk_frames->
tiling = VK_IMAGE_TILING_OPTIMAL;
112 vk_frames->
usage = VK_IMAGE_USAGE_SAMPLED_BIT |
113 VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
114 VK_IMAGE_USAGE_TRANSFER_DST_BIT;
123 vk_dev = device_ctx->
hwctx;
135 "the %s extension is supported!\n",
136 VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME);
147 s->frames_ref = frames_ref;
148 s->frames = frames_ctx;
150 s->device = device_ctx;
151 s->hwctx = device_ctx->
hwctx;
166 if (!
inlink->hw_frames_ctx) {
168 "hardware frames context on the input.\n");
181 s->input_frames_ref =
inlink->hw_frames_ctx;
199 s->output_width,
s->output_height,
208 outlink->
w =
s->output_width;
209 outlink->
h =
s->output_height;
225 VkSampler sampler,
void *push_src,
size_t push_size)
231 VkImageMemoryBarrier2 img_bar[37];
242 0, push_size, push_src);
246 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
247 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
250 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
253 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
254 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
255 VK_ACCESS_SHADER_READ_BIT,
256 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
257 VK_QUEUE_FAMILY_IGNORED);
261 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
262 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
265 VK_IMAGE_LAYOUT_GENERAL,
268 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
269 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
270 VK_ACCESS_SHADER_WRITE_BIT,
271 VK_IMAGE_LAYOUT_GENERAL,
272 VK_QUEUE_FAMILY_IGNORED);
274 vk->CmdPipelineBarrier2(exec->
buf, &(VkDependencyInfo) {
275 .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
276 .pImageMemoryBarriers = img_bar,
277 .imageMemoryBarrierCount = nb_img_bar,
280 vk->CmdDispatch(exec->
buf,
294 VkSampler sampler,
void *push_src,
size_t push_size)
301 VkImageMemoryBarrier2 img_bar[37];
309 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
310 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
312 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
313 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
315 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
316 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
323 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
324 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
325 VK_ACCESS_SHADER_READ_BIT,
326 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
327 VK_QUEUE_FAMILY_IGNORED);
329 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
330 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
331 VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,
332 VK_IMAGE_LAYOUT_GENERAL,
333 VK_QUEUE_FAMILY_IGNORED);
335 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
336 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
337 VK_ACCESS_SHADER_WRITE_BIT,
338 VK_IMAGE_LAYOUT_GENERAL,
339 VK_QUEUE_FAMILY_IGNORED);
341 vk->CmdPipelineBarrier2(exec->
buf, &(VkDependencyInfo) {
342 .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
343 .pImageMemoryBarriers = img_bar,
344 .imageMemoryBarrierCount = nb_img_bar,
347 for (
int i = 0;
i < 2;
i++) {
351 VkImageView *src_views = !
i ? in_views : tmp_views;
352 VkImageView *dst_views = !
i ? tmp_views : out_views;
358 0, push_size, push_src);
361 !
i ? VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL :
362 VK_IMAGE_LAYOUT_GENERAL,
365 VK_IMAGE_LAYOUT_GENERAL,
368 vk->CmdDispatch(exec->
buf,
383 VkSampler sampler,
void *push_src,
size_t push_size)
389 VkImageMemoryBarrier2 img_bar[128];
397 for (
int i = 0;
i < nb_in;
i++) {
399 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
400 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
404 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
405 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
406 VK_ACCESS_SHADER_READ_BIT,
407 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
408 VK_QUEUE_FAMILY_IGNORED);
413 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
414 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
417 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
418 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
419 VK_ACCESS_SHADER_WRITE_BIT,
420 VK_IMAGE_LAYOUT_GENERAL,
421 VK_QUEUE_FAMILY_IGNORED);
423 vk->CmdPipelineBarrier2(exec->
buf, &(VkDependencyInfo) {
424 .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
425 .pImageMemoryBarriers = img_bar,
426 .imageMemoryBarrierCount = nb_img_bar,
433 0, push_size, push_src);
435 for (
int i = 0;
i < nb_in;
i++)
437 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
441 VK_IMAGE_LAYOUT_GENERAL,
444 vk->CmdDispatch(exec->
buf,