Opened 6 months ago
#10655 new defect
scale_vulkan filter failed to generate valid shader
Reported by: | Cyryl Ł | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | avfilter |
Version: | unspecified | Keywords: | vulkan |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
How to reproduce:
% ffmpeg -f lavfi -i testsrc -t 1 -pix_fmt yuv420p -init_hw_device vulkan -vf "hwupload=derive_device=vulkan,scale_vulkan=640:480,hwdownload" out.mp4 ffmpeg version git-2023-11-11-fa81de4 Copyright (c) 2000-2023 the FFmpeg developers built with gcc 13 (Ubuntu 13.2.0-4ubuntu3) configuration: --disable-doc --enable-libx264 --enable-libx265 --enable-gpl --enable-libmp3lame --enable-libfdk-aac --enable-cuda-nvcc --enable-nvdec --enable-nvenc --enable-cuvid --enable-nonfree --enable-libnpp --enable-libglslang --disable-optimizations --disable-stripping --enable-debug libavutil 58. 32.100 / 58. 32.100 libavcodec 60. 33.100 / 60. 33.100 libavformat 60. 17.100 / 60. 17.100 libavdevice 60. 4.100 / 60. 4.100 libavfilter 9. 13.100 / 9. 13.100 libswscale 7. 6.100 / 7. 6.100 libswresample 4. 13.100 / 4. 13.100 libpostproc 57. 4.100 / 57. 4.100 Input #0, lavfi, from 'testsrc': Duration: N/A, start: 0.000000, bitrate: N/A Stream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 25 tbn File 'out.mp4' already exists. Overwrite? [y/N] y Stream mapping: Stream #0:0 -> #0:0 (wrapped_avframe (native) -> h264 (libx264)) Press [q] to stop, [?] for help [Parsed_scale_vulkan_1 @ 0x558baed49fc0] Shader scale_compute: 1 #version 460 2 #define IS_WITHIN(v1, v2) ((v1.x < v2.x) && (v1.y < v2.y)) 3 4 #extension GL_EXT_buffer_reference : require 5 #extension GL_EXT_buffer_reference2 : require 6 layout (local_size_x = 32, local_size_y = 32, local_size_z = 1) in; 7 8 layout(push_constant, std430) uniform pushConstants { 9 mat4 yuv_matrix; 10 }; 11 12 layout (set = 0, binding = 0) uniform sampler2D input_img[3]; 13 layout (set = 0, binding = 1, rgba8) uniform writeonly image2D output_img[3]; 14 15 16 vec4 scale_bilinear(int idx, ivec2 pos, vec2 crop_range, vec2 crop_off) 17 { 18 vec2 npos = (vec2(pos) + 0.5f) / imageSize(output_img[idx]); 19 npos *= crop_range; 20 npos += crop_off; 21 return texture(input_img[idx], npos); 22 } 23 24 25 void write_420(vec4 src, ivec2 pos) 26 { 27 imageStore(output_img[0], pos, vec4(src.r, 0.0, 0.0, 0.0)); 28 pos /= ivec2(2); 29 imageStore(output_img[1], pos, vec4(src.g, 0.0, 0.0, 0.0)); 30 imageStore(output_img[2], pos, vec4(src.b, 0.0, 0.0, 0.0)); 31 } 32 33 void main() 34 { 35 ivec2 size; 36 ivec2 pos = ivec2(gl_GlobalInvocationID.xy); 37 vec2 in_d = vec2(320, 240); 38 vec2 c_r = vec2(320, 240) / in_d; 39 vec2 c_o = vec2(0, 0) / in_d; 40 41 size = imageSize(output_img[0]); 42 if (IS_WITHIN(pos, size)) { 43 vec4 res = scale_bilinear(0, pos, c_r, c_o); 44 imageStore(output_img[0], pos, res); 45 } 46 size = imageSize(output_img[1]); 47 if (IS_WITHIN(pos, size)) { 48 vec4 res = scale_bilinear(1, pos, c_r, c_o); 49 imageStore(output_img[1], pos, res); 50 } 51 size = imageSize(output_img[2]); 52 if (IS_WITHIN(pos, size)) { 53 vec4 res = scale_bilinear(2, pos, c_r, c_o); 54 imageStore(output_img[2], pos, res); 55 } 56 size = imageSize(output_img[3]); 57 if (IS_WITHIN(pos, size)) { 58 vec4 res = scale_bilinear(3, pos, c_r, c_o); 59 imageStore(output_img[3], pos, res); 60 } 61 size = imageSize(output_img[4]); 62 if (IS_WITHIN(pos, size)) { 63 vec4 res = scale_bilinear(4, pos, c_r, c_o); 64 imageStore(output_img[4], pos, res); 65 } 66 size = imageSize(output_img[5]); 67 if (IS_WITHIN(pos, size)) { 68 vec4 res = scale_bilinear(5, pos, c_r, c_o); 69 imageStore(output_img[5], pos, res); 70 } 71 size = imageSize(output_img[6]); 72 if (IS_WITHIN(pos, size)) { 73 vec4 res = scale_bilinear(6, pos, c_r, c_o); 74 imageStore(output_img[6], pos, res); 75 } 76 } [Parsed_scale_vulkan_1 @ 0x558baed49fc0] Unable to parse shader: ERROR: 0:56: '[' : array index out of range '3' ERROR: 0:56: '' : compilation terminated ERROR: 2 compilation errors. No code generated. ()! [vf#0:0 @ 0x558baed49b00] Error while filtering: Invalid argument Failed to inject frame into filter network: Invalid argument Error while filtering: Invalid argument
% vulkaninfo --summary 'DISPLAY' environment variable not set... skipping surface info error: XDG_RUNTIME_DIR is invalid or not set in the environment. ========== VULKANINFO ========== Vulkan Instance Version: 1.3.268 Instance Extensions: count = 21 ------------------------------- VK_EXT_acquire_drm_display : extension revision 1 VK_EXT_acquire_xlib_display : extension revision 1 VK_EXT_debug_report : extension revision 10 VK_EXT_debug_utils : extension revision 2 VK_EXT_direct_mode_display : extension revision 1 VK_EXT_display_surface_counter : extension revision 1 VK_KHR_device_group_creation : extension revision 1 VK_KHR_display : extension revision 23 VK_KHR_external_fence_capabilities : extension revision 1 VK_KHR_external_memory_capabilities : extension revision 1 VK_KHR_external_semaphore_capabilities : extension revision 1 VK_KHR_get_display_properties2 : extension revision 1 VK_KHR_get_physical_device_properties2 : extension revision 2 VK_KHR_get_surface_capabilities2 : extension revision 1 VK_KHR_portability_enumeration : extension revision 1 VK_KHR_surface : extension revision 25 VK_KHR_surface_protected_capabilities : extension revision 1 VK_KHR_wayland_surface : extension revision 6 VK_KHR_xcb_surface : extension revision 6 VK_KHR_xlib_surface : extension revision 6 VK_LUNARG_direct_driver_loading : extension revision 1 Instance Layers: count = 1 -------------------------- VK_LAYER_NV_optimus NVIDIA Optimus layer 1.3.242 version 1 Devices: ======== GPU0: apiVersion = 1.3.242 driverVersion = 535.129.3.0 vendorID = 0x10de deviceID = 0x1f11 deviceType = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU deviceName = NVIDIA GeForce RTX 2060 driverID = DRIVER_ID_NVIDIA_PROPRIETARY driverName = NVIDIA driverInfo = 535.129.03 conformanceVersion = 1.3.5.0 deviceUUID = 4eb9d46b-89f0-71ff-5646-fedaa9f1540b driverUUID = 94b0ae56-adb8-502a-bb00-b4e608864495
Note:
See TracTickets
for help on using tickets.