From 42ab9010b5e9e98d0ced509dbfc651065cd38700 Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Tue, 20 Oct 2026 02:12:31 +0200 Subject: [PATCH] swscale/vulkan/ops: don't reference the input image in passes without reads The input image variable was only defined when the pass contains a read, but was unconditionally decorated and listed in the entrypoint interface, referencing an undefined ID and producing invalid SPIR-V. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Niklas Haas --- libswscale/vulkan/ops.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libswscale/vulkan/ops.c b/libswscale/vulkan/ops.c index 63acf0a5ce..6f9f96698c 100644 --- a/libswscale/vulkan/ops.c +++ b/libswscale/vulkan/ops.c @@ -415,9 +415,11 @@ static void define_shader_header(SwsContext *sws, FFVulkanShader *shd, SpvBuiltInGlobalInvocationId); /* Input image descriptor decorations */ - 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); + if (id->in_img_var) { + 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->out_img_var, SpvDecorationNonReadable); @@ -1002,7 +1004,8 @@ static int add_ops_spirv(SwsContext *sws, VulkanPriv *p, FFVulkanOpsCtx *s, /* Entrypoint inputs; gl_GlobalInvocationID, input and output images, dither */ 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); + if (op_r) + 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