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

Git pushed a commit to branch master
in repository ffmpeg.

commit 91d6402932f4e9444a8d8b783bf38ddaa2e7dd90
Author:     Niklas Haas <[email protected]>
AuthorDate: Tue Oct 20 02:08:41 2026 +0200
Commit:     Niklas Haas <[email protected]>
CommitDate: Tue Oct 20 19:50:40 2026 +0000

    swscale/vulkan/ops: track entrypoint interface variables by name
    
    Instead of hard-coding the layout of the in_vars[] array, give the fixed
    variables names and build the entrypoint interface list by appending.
    
    Co-Authored-By: Claude Opus 5.5 <[email protected]>
    Signed-off-by: Niklas Haas <[email protected]>
---
 libswscale/vulkan/ops.c | 50 +++++++++++++++++++++++++------------------------
 1 file changed, 26 insertions(+), 24 deletions(-)

diff --git a/libswscale/vulkan/ops.c b/libswscale/vulkan/ops.c
index 0eafb94ae0..63acf0a5ce 100644
--- a/libswscale/vulkan/ops.c
+++ b/libswscale/vulkan/ops.c
@@ -308,7 +308,13 @@ struct FilterData {
 };
 
 typedef struct SPIRVIDs {
-    int in_vars[3 + MAX_DATA_BUFS + 1];
+    /* Entrypoint interface variables */
+    int iface[3 + MAX_DATA_BUFS + 1];
+    int nb_iface;
+
+    int gid_var;
+    int in_img_var;
+    int out_img_var;
 
     int glfn;
     int ep;
@@ -394,9 +400,7 @@ static void define_shader_header(SwsContext *sws, 
FFVulkanShader *shd,
 
     /* Entrypoint */
     id->ep = spi_OpEntryPoint(spi, SpvExecutionModelGLCompute, "main",
-                                id->in_vars,
-                                3 + id->nb_dither_bufs + id->nb_filter_bufs +
-                                (id->interlaced ? 1 : 0));
+                                id->iface, id->nb_iface);
     spi_OpExecutionMode(spi, id->ep, SpvExecutionModeLocalSize,
                         shd->lg_size, 3);
 
@@ -407,18 +411,18 @@ static void define_shader_header(SwsContext *sws, 
FFVulkanShader *shd,
     }
 
     /* gl_GlobalInvocationID descriptor decorations */
-    spi_OpDecorate(spi, id->in_vars[0], SpvDecorationBuiltIn,
+    spi_OpDecorate(spi, id->gid_var, SpvDecorationBuiltIn,
                    SpvBuiltInGlobalInvocationId);
 
     /* Input image descriptor decorations */
-    spi_OpDecorate(spi, id->in_vars[1], SpvDecorationNonWritable);
-    spi_OpDecorate(spi, id->in_vars[1], SpvDecorationDescriptorSet, 0);
-    spi_OpDecorate(spi, id->in_vars[1], SpvDecorationBinding, 0);
+    spi_OpDecorate(spi, id->in_img_var, SpvDecorationNonWritable);
+    spi_OpDecorate(spi, id->in_img_var, SpvDecorationDescriptorSet, 0);
+    spi_OpDecorate(spi, id->in_img_var, SpvDecorationBinding, 0);
 
     /* Output image descriptor decorations */
-    spi_OpDecorate(spi, id->in_vars[2], SpvDecorationNonReadable);
-    spi_OpDecorate(spi, id->in_vars[2], SpvDecorationDescriptorSet, 0);
-    spi_OpDecorate(spi, id->in_vars[2], SpvDecorationBinding, 1);
+    spi_OpDecorate(spi, id->out_img_var, SpvDecorationNonReadable);
+    spi_OpDecorate(spi, id->out_img_var, SpvDecorationDescriptorSet, 0);
+    spi_OpDecorate(spi, id->out_img_var, SpvDecorationBinding, 1);
 
     for (int i = 0; i < id->nb_dither_bufs; i++) {
         spi_OpDecorate(spi, id->dither[i].arr_1d_id, SpvDecorationArrayStride,
@@ -734,13 +738,13 @@ static void define_shader_bindings(const SwsOpList *ops, 
SPICtx *spi, SPIRVIDs *
     }
 
     /* Define inputs */
-    spi_OpVariable(spi, id->in_vars[0], id->u32vec3_tptr,
+    spi_OpVariable(spi, id->gid_var, id->u32vec3_tptr,
                    SpvStorageClassInput, 0);
     if (op_r) {
-        spi_OpVariable(spi, id->in_vars[1], id->in_img_tptr,
+        spi_OpVariable(spi, id->in_img_var, id->in_img_tptr,
                        SpvStorageClassUniformConstant, 0);
     }
-    spi_OpVariable(spi, id->in_vars[2], id->out_img_tptr,
+    spi_OpVariable(spi, id->out_img_var, id->out_img_tptr,
                    SpvStorageClassUniformConstant, 0);
 
     if (id->interlaced) {
@@ -997,9 +1001,9 @@ static int add_ops_spirv(SwsContext *sws, VulkanPriv *p, 
FFVulkanOpsCtx *s,
         return err;
 
     /* Entrypoint inputs; gl_GlobalInvocationID, input and output images, 
dither */
-    id->in_vars[0] = spi_get_id(spi);
-    id->in_vars[1] = spi_get_id(spi);
-    id->in_vars[2] = spi_get_id(spi);
+    id->gid_var     = id->iface[id->nb_iface++] = spi_get_id(spi);
+    id->in_img_var  = id->iface[id->nb_iface++] = spi_get_id(spi);
+    id->out_img_var = id->iface[id->nb_iface++] = spi_get_id(spi);
 
     /* Create dither and filter buffer descriptor set. Both are collected in
      * op order, so the bindings match the buffer order from create_bufs().*/
@@ -1041,7 +1045,7 @@ static int add_ops_spirv(SwsContext *sws, VulkanPriv *p, 
FFVulkanOpsCtx *s,
             continue;
         }
 
-        id->in_vars[3 + nb_data_bufs] = var_id;
+        id->iface[id->nb_iface++] = var_id;
         desc_set[nb_data_bufs++] = (FFVulkanDescriptorSetBinding) {
             .type        = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
             .stages      = VK_SHADER_STAGE_COMPUTE_BIT,
@@ -1053,9 +1057,7 @@ static int add_ops_spirv(SwsContext *sws, VulkanPriv *p, 
FFVulkanOpsCtx *s,
 
     if (id->interlaced) {
         id->push_const_struct_id = spi_get_id(spi);
-        id->push_const_var_id = spi_get_id(spi);
-        id->in_vars[3 + id->nb_dither_bufs + id->nb_filter_bufs] =
-            id->push_const_var_id;
+        id->push_const_var_id = id->iface[id->nb_iface++] = spi_get_id(spi);
     }
 
     /* Define shader header sections */
@@ -1072,7 +1074,7 @@ static int add_ops_spirv(SwsContext *sws, VulkanPriv *p, 
FFVulkanOpsCtx *s,
     for (int i = 0; i < in_img_count; i++) {
         /* Deref array and then the pointer */
         int img = spi_OpAccessChain(spi, id->in_img_sptr,
-                                    id->in_vars[1], id->u32_cid[i]);
+                                    id->in_img_var, id->u32_cid[i]);
         in_img[i] = spi_OpLoad(spi, id->in_img_type, img,
                                SpvMemoryAccessMaskNone, 0);
     }
@@ -1081,13 +1083,13 @@ static int add_ops_spirv(SwsContext *sws, VulkanPriv 
*p, FFVulkanOpsCtx *s,
     int out_img[4] = { 0 };
     for (int i = 0; i < out_img_count; i++) {
         int img = spi_OpAccessChain(spi, id->out_img_sptr,
-                                    id->in_vars[2], id->u32_cid[i]);
+                                    id->out_img_var, id->u32_cid[i]);
         out_img[i] = spi_OpLoad(spi, id->out_img_type, img,
                                 SpvMemoryAccessMaskNone, 0);
     }
 
     /* Load gl_GlobalInvocationID */
-    int gid = spi_OpLoad(spi, id->u32vec3_type, id->in_vars[0],
+    int gid = spi_OpLoad(spi, id->u32vec3_type, id->gid_var,
                          SpvMemoryAccessMaskNone, 0);
 
     /* ivec2(gl_GlobalInvocationID.xy) */

-- 
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]

Reply via email to