This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit e844b43776fa73e9e36624b770889e93fa667297 Author: Lynne <[email protected]> AuthorDate: Thu Jan 8 23:23:03 2026 +0100 Commit: Lynne <[email protected]> CommitDate: Mon Jan 12 17:28:41 2026 +0100 vulkan: support shader compression --- .gitignore | 1 + configure | 2 +- ffbuild/common.mak | 12 ++++++++++-- libavutil/vulkan.c | 23 ++++++++++++++++++++++- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 8fb1c924ee..1065ae1e72 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ *.metallib.c *.spv *.spv.c +*.spv.gz *.ptx *.ptx.c *.ptx.gz diff --git a/configure b/configure index 92c97f4bd8..5a4fa45cf7 100755 --- a/configure +++ b/configure @@ -4246,7 +4246,7 @@ avfilter_deps="avutil" avfilter_suggest="libm stdatomic spirv_library" avformat_deps="avcodec avutil" avformat_suggest="libm network zlib stdatomic" -avutil_suggest="clock_gettime ffnvcodec gcrypt libm libdrm libmfx opencl openssl user32 vaapi vulkan videotoolbox corefoundation corevideo coremedia bcrypt stdatomic" +avutil_suggest="clock_gettime ffnvcodec gcrypt libm zlib libdrm libmfx opencl openssl user32 vaapi vulkan videotoolbox corefoundation corevideo coremedia bcrypt stdatomic" swresample_deps="avutil" swresample_suggest="libm libsoxr stdatomic" swscale_deps="avutil" diff --git a/ffbuild/common.mak b/ffbuild/common.mak index ccf42b9fd1..06d6f39715 100644 --- a/ffbuild/common.mak +++ b/ffbuild/common.mak @@ -134,8 +134,16 @@ RUN_MINIFY = $(M)sed 's!/\\*.*\\*/!!g' $< | tr '\n' ' ' | tr -s ' ' | sed 's/^ / %.spv: %.glsl $(COMPILE_GLSLC) +ifdef CONFIG_SHADER_COMPRESSION +%.spv.gz: %.spv + $(RUN_GZIP) + +%.spv.c: %.spv.gz $(BIN2CEXE) + $(RUN_BIN2C) +else %.spv.c: %.spv $(BIN2CEXE) $(RUN_BIN2C) +endif %.metal.air: %.metal $(METALCC) $< -o $@ @@ -239,7 +247,7 @@ SPVOBJS = $(filter %.spv.o,$(OBJS)) PTXOBJS = $(filter %.ptx.o,$(OBJS)) $(HOBJS): CCFLAGS += $(CFLAGS_HEADERS) checkheaders: $(HOBJS) -.SECONDARY: $(HOBJS:.o=.c) $(SPVOBJS:.o=.c) $(SPVOBJS:.o=) $(PTXOBJS:.o=.c) $(PTXOBJS:.o=.gz) $(PTXOBJS:.o=) +.SECONDARY: $(HOBJS:.o=.c) $(SPVOBJS:.o=.c) $(SPVOBJS:.o=.gz) $(SPVOBJS:.o=) $(PTXOBJS:.o=.c) $(PTXOBJS:.o=.gz) $(PTXOBJS:.o=) alltools: $(TOOLS) $(HOSTOBJS): %.o: %.c @@ -258,7 +266,7 @@ $(TOOLOBJS): | tools OUTDIRS := $(OUTDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(SHLIBOBJS) $(STLIBOBJS) $(TESTOBJS)) -CLEANSUFFIXES = *.d *.gcda *.gcno *.h.c *.ho *.map *.o *.objs *.pc *.ptx *.ptx.gz *.ptx.c *.spv *.spv.c *.ver *.version *.html.gz *.html.c *.css.min.gz *.css.min *.css.c *$(DEFAULT_X86ASMD).asm *~ *.ilk *.pdb +CLEANSUFFIXES = *.d *.gcda *.gcno *.h.c *.ho *.map *.o *.objs *.pc *.ptx *.ptx.gz *.ptx.c *.spv *.spv.gz *.spv.c *.ver *.version *.html.gz *.html.c *.css.min.gz *.css.min *.css.c *$(DEFAULT_X86ASMD).asm *~ *.ilk *.pdb LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a define RULES diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c index 59d25db8f0..b6abcc8abb 100644 --- a/libavutil/vulkan.c +++ b/libavutil/vulkan.c @@ -18,12 +18,17 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "config.h" #include "avassert.h" #include "mem.h" #include "vulkan.h" #include "libavutil/vulkan_loader.h" +#if CONFIG_SHADER_COMPRESSION +#include "libavutil/zlib_utils.h" +#endif + const VkComponentMapping ff_comp_identity_map = { .r = VK_COMPONENT_SWIZZLE_IDENTITY, .g = VK_COMPONENT_SWIZZLE_IDENTITY, @@ -2388,7 +2393,7 @@ int ff_vk_shader_link(FFVulkanContext *s, FFVulkanShader *shd, FFVulkanFunctions *vk = &s->vkfn; VkSpecializationMapEntry spec_entries[3]; VkSpecializationInfo spec_info; - size_t binary_size = 0; + size_t input_size = spirv_len, binary_size = 0; if (shd->precompiled) { if (!shd->specialization_info) { @@ -2414,6 +2419,16 @@ int ff_vk_shader_link(FFVulkanContext *s, FFVulkanShader *shd, memcpy(&spd[shd->specialization_info->dataSize], shd->lg_size, 3*sizeof(uint32_t)); shd->specialization_info->dataSize += 3*sizeof(uint32_t); + +#if CONFIG_SHADER_COMPRESSION + uint8_t *out; + size_t out_len; + int ret = ff_zlib_expand(s, &out, &out_len, spirv, spirv_len); + if (ret < 0) + return ret; + spirv = out; + spirv_len = out_len; +#endif } err = init_descriptors(s, shd); @@ -2462,6 +2477,8 @@ int ff_vk_shader_link(FFVulkanContext *s, FFVulkanShader *shd, else av_log(s, AV_LOG_VERBOSE, "Shader linked, size:"); + if (input_size != spirv_len) + av_log(s, AV_LOG_VERBOSE, " %zu compressed,", input_size); av_log(s, AV_LOG_VERBOSE, " %zu SPIR-V", spirv_len); if (binary_size != spirv_len) av_log(s, AV_LOG_VERBOSE, ", %zu binary", spirv_len); @@ -2472,6 +2489,10 @@ end: shd->specialization_info->mapEntryCount -= 3; shd->specialization_info->dataSize -= 3*sizeof(uint32_t); } +#if CONFIG_SHADER_COMPRESSION + if (shd->precompiled) + av_free((void *)spirv); +#endif return err; } _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
