1
0
mirror of https://git.ffmpeg.org/ffmpeg.git synced 2026-10-24 02:09:03 +03:00

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 <noreply@anthropic.com>
Signed-off-by: Niklas Haas <git@haasn.dev>
This commit is contained in:
Niklas Haas
2026-10-20 02:12:31 +02:00
committed by Niklas Haas
parent 91d6402932
commit 42ab9010b5

View File

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