This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 489a3834d27c9add73d15e4c027856f6a39276a4
Author:     Lynne <[email protected]>
AuthorDate: Tue May 12 22:26:11 2026 +0900
Commit:     Lynne <[email protected]>
CommitDate: Tue May 19 03:22:29 2026 +0900

    swscale/vulkan: implement SWS_OP_PACK/SWS_OP_UNPACK
    
    The issue is that while Vulkan already does the decomposition for us,
    swscale assumes that the pixels will be in bitstream order, rather than
    in their decomposed form.
    This is valid for all packed formats for which these instructions are
    issued (XV30 and X2RGB10).
    This allows us to support the formats in Vulkan.
    
    Sponsored-by: Sovereign Tech Fund
---
 libswscale/vulkan/ops.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/libswscale/vulkan/ops.c b/libswscale/vulkan/ops.c
index cf128b00c1..a2ef13918e 100644
--- a/libswscale/vulkan/ops.c
+++ b/libswscale/vulkan/ops.c
@@ -875,6 +875,18 @@ static int add_ops_spirv(VulkanPriv *p, FFVulkanOpsCtx *s,
             nb_linear_ops++;
             break;
         }
+        case SWS_OP_UNPACK:
+            if (ops->src.format == AV_PIX_FMT_X2BGR10)
+                data = spi_OpVectorShuffle(spi, type_v, data, data, 3, 2, 1, 
0);
+            else
+                data = spi_OpVectorShuffle(spi, type_v, data, data, 3, 0, 1, 
2);
+            break;
+        case SWS_OP_PACK:
+            if (ops->dst.format == AV_PIX_FMT_X2BGR10)
+                data = spi_OpVectorShuffle(spi, type_v, data, data, 3, 2, 1, 
0);
+            else
+                data = spi_OpVectorShuffle(spi, type_v, data, data, 1, 2, 3, 
0);
+            break;
         default:
             return AVERROR(ENOTSUP);
         }
@@ -1105,6 +1117,16 @@ static int add_ops_glsl(VulkanPriv *p, FFVulkanOpsCtx *s,
             }
             av_bprintf(&shd->src, "    f32 = tmp;\n");
             break;
+        case SWS_OP_UNPACK:
+            /* MSB->LSB indexing */
+            av_bprintf(&shd->src, "    %s = %s.%s;\n", type_name, type_name,
+                       ops->src.format == AV_PIX_FMT_X2BGR10 ? "wzyx" : 
"wxyz");
+            break;
+        case SWS_OP_PACK:
+            /* LSB->MSB indexing */
+            av_bprintf(&shd->src, "    %s = %s.%s;\n", type_name, type_name,
+                       ops->dst.format == AV_PIX_FMT_X2BGR10 ? "wzyx" : 
"yzwx");
+            break;
         default:
             return AVERROR(ENOTSUP);
         }

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to