This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 851bbd4dae609fae766a06a9569cae829821a825 Author: Marcos Ashton Iglesias <[email protected]> AuthorDate: Wed Sep 30 19:37:41 2026 +0100 Commit: Lynne <[email protected]> CommitDate: Thu Oct 1 03:11:19 2026 +0000 avfilter/vulkan/transpose: fix all four directions The shader runs per output pixel but mixed input and output coordinates: cclock_flip left part of the output unwritten, clock came out mirrored and cclock/clock_flip were off by one. Read the source pixel for each output pixel instead, like the OpenCL filter. --- libavfilter/vulkan/transpose.comp.glsl | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/libavfilter/vulkan/transpose.comp.glsl b/libavfilter/vulkan/transpose.comp.glsl index 6387b21cc8..40d9b18250 100644 --- a/libavfilter/vulkan/transpose.comp.glsl +++ b/libavfilter/vulkan/transpose.comp.glsl @@ -30,14 +30,6 @@ layout (local_size_x_id = 253, local_size_y_id = 254, local_size_z_id = 255) in; layout (set = 0, binding = 0) uniform readonly image2D input_img[]; layout (set = 0, binding = 1) uniform writeonly image2D output_img[]; -#define TRANSPOSE_CCLOCK_FLIP 0 -#define TRANSPOSE_CLOCK 1 -#define TRANSPOSE_CCLOCK 2 -#define TRANSPOSE_CLOCK_FLIP 3 -#define TRANSPOSE_REVERSAL 4 -#define TRANSPOSE_HFLIP 5 -#define TRANSPOSE_VFLIP 6 - layout (push_constant, scalar) uniform pushConstants { int dir; }; @@ -45,22 +37,15 @@ layout (push_constant, scalar) uniform pushConstants { void main() { ivec2 pos = ivec2(gl_GlobalInvocationID.xy); - if (dir == TRANSPOSE_CCLOCK || dir == TRANSPOSE_CLOCK || dir == TRANSPOSE_CLOCK_FLIP) - pos = pos.yx; - - ivec2 size = imageSize(input_img[nonuniformEXT(gl_LocalInvocationID.z)]); + ivec2 size = imageSize(output_img[nonuniformEXT(gl_LocalInvocationID.z)]); if (any(greaterThanEqual(pos, size))) return; - ivec2 dst; - switch (dir) { - case TRANSPOSE_CCLOCK: dst = ivec2(size.y - pos.y, pos.x); break; - case TRANSPOSE_CLOCK: pos = ivec2(pos.x, size.y - pos.y); /* fall */ - case TRANSPOSE_CLOCK_FLIP: dst = ivec2(size.yx - pos.yx); break; - default: dst = pos.yx; break; - } + /* size is the output size, so the input is size.yx */ + ivec2 src = ivec2((dir & 2) != 0 ? size.y - 1 - pos.y : pos.y, + (dir & 1) != 0 ? size.x - 1 - pos.x : pos.x); - vec4 res = imageLoad(input_img[nonuniformEXT(gl_LocalInvocationID.z)], pos); + vec4 res = imageLoad(input_img[nonuniformEXT(gl_LocalInvocationID.z)], src); - imageStore(output_img[nonuniformEXT(gl_LocalInvocationID.z)], dst, res); + imageStore(output_img[nonuniformEXT(gl_LocalInvocationID.z)], pos, res); } -- To stop receiving notification emails like this one, please contact [email protected]. _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
