This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit f2affdfafb4e7dd0674ba415ea77faa949a11439 Author: Lynne <[email protected]> AuthorDate: Fri Jan 2 10:13:12 2026 +0100 Commit: Lynne <[email protected]> CommitDate: Mon Jan 12 17:28:40 2026 +0100 configure/make: support compile-time SPIR-V generation --- .gitignore | 2 ++ configure | 88 +++++++++++++++++++++++++++++++++++++++++---- ffbuild/common.mak | 16 ++++++--- libavcodec/vulkan/Makefile | 4 +-- libavfilter/Makefile | 3 +- libavfilter/vulkan/Makefile | 4 +-- 6 files changed, 99 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index d789b5804c..8fb1c924ee 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,8 @@ *.metal.air *.metallib *.metallib.c +*.spv +*.spv.c *.ptx *.ptx.c *.ptx.gz diff --git a/configure b/configure index 45200071d3..4f848bc633 100755 --- a/configure +++ b/configure @@ -237,7 +237,7 @@ External library support: --enable-libfreetype enable libfreetype, needed for drawtext filter [no] --enable-libfribidi enable libfribidi, improves drawtext filter [no] --enable-libharfbuzz enable libharfbuzz, needed for drawtext filter [no] - --enable-libglslang enable GLSL->SPIRV compilation via libglslang [no] + --enable-libglslang enable runtime GLSL->SPIRV compilation via libglslang [no] --enable-libgme enable Game Music Emu via libgme [no] --enable-libgsm enable GSM de/encoding via libgsm [no] --enable-libiec61883 enable iec61883 via libiec61883 [no] @@ -272,7 +272,7 @@ External library support: --enable-librsvg enable SVG rasterization via librsvg [no] --enable-librubberband enable rubberband needed for rubberband filter [no] --enable-librtmp enable RTMP[E] support via librtmp [no] - --enable-libshaderc enable GLSL->SPIRV compilation via libshaderc [no] + --enable-libshaderc enable runtime GLSL->SPIRV compilation via libshaderc [no] --enable-libshine enable fixed-point MP3 encoding via libshine [no] --enable-libsmbclient enable Samba protocol via libsmbclient [no] --enable-libsnappy enable Snappy compression, needed for hap encoding [no] @@ -405,6 +405,7 @@ Toolchain options: --stdcxx=STDCXX use C standard STDCXX [$stdcxx_default] --objcc=OCC use ObjC compiler OCC [$cc_default] --dep-cc=DEPCC use dependency generator DEPCC [$cc_default] + --glslc=GLSLC use GLSL compiler GLSLC [$glslc_default] --nvcc=NVCC use Nvidia CUDA compiler NVCC or clang [$nvcc_default] --ld=LD use linker LD [$ld_default] --metalcc=METALCC use metal compiler METALCC [$metalcc_default] @@ -429,6 +430,7 @@ Toolchain options: --extra-libs=ELIBS add ELIBS [$ELIBS] --extra-version=STRING version string suffix [] --optflags=OPTFLAGS override optimization-related compiler flags + --glslcflags=GLSLCFLAGS extra glslc flags [$glslcflags_default] --nvccflags=NVCCFLAGS override nvcc flags [$nvccflags_default] --build-suffix=SUFFIX library name suffix [] --enable-pic build position-independent code @@ -1074,6 +1076,10 @@ hostcc_o(){ eval printf '%s\\n' $HOSTCC_O } +glslc_o(){ + eval printf '%s\\n' $GLSLC_O +} + nvcc_o(){ eval printf '%s\\n' $NVCC_O } @@ -1099,6 +1105,27 @@ test_objcc(){ test_cmd $objcc -Werror=missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPM } +test_glslc(){ + log test_glslc "$@" + cat > $TMPGLSL + log_file $TMPGLSL + test_cmd $glslc $GLSLCFLAGS $glslcflags "$@" $(glslc_o $TMPO) $TMPGLSL +} + +check_glslc(){ + log check_glslc "$@" + name=$1 + shift 1 + disabled $name && return + disable $name + test_glslc "$@" <<EOF && enable $name +#version 460 +#pragma shader_stage(compute) +#extension GL_GOOGLE_include_directive : require +void main(void) {} +EOF +} + test_nvcc(){ log test_nvcc "$@" cat > $TMPCU @@ -2791,6 +2818,8 @@ CMDLINE_SET=" ln_s logfile malloc_prefix + glslc + glslcflags metalcc metallib nm @@ -4270,6 +4299,7 @@ host_cc_default="gcc" doxygen_default="doxygen" install="install" ln_s_default="ln -s -f" +glslc_default="glslc" metalcc_default="xcrun -sdk macosx metal" metallib_default="xcrun -sdk macosx metallib" nm_default="nm -g" @@ -4372,6 +4402,7 @@ HOSTCC_C='-c' HOSTCC_E='-E -o $@' HOSTCC_O='-o $@' HOSTLD_O='-o $@' +GLSLC_O='-o $@' NVCC_C='-c' NVCC_O='-o $@' @@ -4904,7 +4935,7 @@ if enabled cuda_nvcc; then fi set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \ - target_exec x86asmexe metalcc metallib stdc stdcxx + target_exec x86asmexe glslc metalcc metallib stdc stdcxx enabled cross_compile || host_cc_default=$cc set_default host_cc @@ -4976,6 +5007,7 @@ tmpfile TMPE $EXESUF tmpfile TMPH .h tmpfile TMPM .m tmpfile TMPCU .cu +tmpfile TMPGLSL .comp.glsl tmpfile TMPO .o tmpfile TMPS .S tmpfile TMPSH .sh @@ -7638,6 +7670,7 @@ enabled vdpau && enabled vdpau && check_lib vdpau_x11 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau -lX11 +# Check for the Vulkan headers if enabled_all vulkan vulkan_static; then check_pkg_config vulkan "vulkan >= 1.3.277" "vulkan/vulkan.h" "defined VK_VERSION_1_3" || check_lib vulkan "vulkan/vulkan.h" vkGetInstanceProcAddr -lvulkan @@ -7646,11 +7679,50 @@ elif enabled vulkan; then check_cpp_condition vulkan "vulkan/vulkan.h" "defined(VK_VERSION_1_4) || (defined(VK_VERSION_1_3) && VK_HEADER_VERSION >= 277)" fi +probe_glslc(){ + glslc_probe=$1 + if test_cmd $glslc_probe -v; then + # glslang/glslangValidator + glslc=$glslc_probe + glslcflags="-V --target-env spirv1.6" + glslc_opt_speed="" + glslc_opt_size="-Os" + glslc_opt_none="-Od" + glslc_debug="-gVS" + GLSLC_DEPFLAGS='--depfile $(@:.spv=.d)' + elif test_cmd $glslc_probe --version; then + # glslc + glslc=$glslc_probe + glslcflags="--target-env=vulkan1.4 --target-spv=spv1.6" + glslc_opt_speed="-O" + glslc_opt_size="-Os" + glslc_opt_none="-O0" + glslc_debug="-g" + GLSLC_DEPFLAGS='-MD -MF $(@:.spv=.d) -MT $@' + else + return 1 + fi + check_glslc vulkan +} + +if enabled vulkan; then + for program in $glslc glslc glslang glslangValidator; do + probe_glslc $program && break + done + disabled vulkan && warn "glslc/glslang not found or too old, disabling Vulkan." + append GLSLCFLAGS $glslcflags + if enabled small; then + append GLSLCFLAGS $glslc_opt_size + elif enabled optimizations; then + append GLSLCFLAGS $glslc_opt_speed + else + append GLSLCFLAGS $glslc_opt_none + fi + enabled debug && append GLSLCFLAGS $glslc_debug +fi + if disabled vulkan; then disable libglslang libshaderc spirv_library -else - check_pkg_config_header_only vulkan_1_4 "vulkan >= 1.4.317" "vulkan/vulkan.h" "defined VK_VERSION_1_4" || - check_cpp_condition vulkan_1_4 "vulkan/vulkan.h" "defined(VK_VERSION_1_5) || (defined(VK_VERSION_1_4) && VK_HEADER_VERSION >= 317)" fi if enabled x86; then @@ -8400,6 +8472,7 @@ RESPONSE_FILES=$response_files AR_O=$ar_o AR_CMD=$ar NM_CMD=$nm +GLSLC=$glslc METALCC=$metalcc METALLIB=$metallib RANLIB=$ranlib @@ -8413,6 +8486,7 @@ CFLAGS=$CFLAGS CXXFLAGS=$CXXFLAGS OBJCFLAGS=$OBJCFLAGS ASFLAGS=$ASFLAGS +GLSLCFLAGS=$GLSLCFLAGS NVCCFLAGS=$nvccflags AS_C=$AS_C AS_O=$AS_O @@ -8424,6 +8498,7 @@ CC_E=$CC_E CC_O=$CC_O CXX_C=$CXX_C CXX_O=$CXX_O +GLSLC_O=$GLSLC_O NVCC_C=$NVCC_C NVCC_O=$NVCC_O LD_O=$LD_O @@ -8464,6 +8539,7 @@ CXX_DEPFLAGS=$CXX_DEPFLAGS OBJCC_DEPFLAGS=$OBJC_DEPFLAGS AS_DEPFLAGS=$AS_DEPFLAGS X86ASM_DEPFLAGS=$X86ASM_DEPFLAGS +GLSLC_DEPFLAGS=$GLSLC_DEPFLAGS HOSTCC=$host_cc HOSTLD=$host_ld HOSTCFLAGS=$host_cflags diff --git a/ffbuild/common.mak b/ffbuild/common.mak index 89c0c413e1..6e4a4ff097 100644 --- a/ffbuild/common.mak +++ b/ffbuild/common.mak @@ -27,7 +27,7 @@ BIN2C = $(BIN2CEXE) ifndef V Q = @ ECHO = printf "$(1)\t%s\n" $(2) -BRIEF = CC CXX OBJCC HOSTCC HOSTLD AS X86ASM AR LD LDXX STRIP CP WINDRES NVCC BIN2C METALCC METALLIB +BRIEF = CC CXX OBJCC HOSTCC HOSTLD AS X86ASM AR LD LDXX STRIP CP WINDRES GLSLC NVCC BIN2C METALCC METALLIB SILENT = DEPCC DEPCXX DEPHOSTCC DEPAS DEPX86ASM RANLIB RM MSG = $@ @@ -68,6 +68,7 @@ COMPILE_S = $(call COMPILE,AS) COMPILE_M = $(call COMPILE,OBJCC) COMPILE_X86ASM = $(call COMPILE,X86ASM) COMPILE_HOSTC = $(call COMPILE,HOSTCC) +COMPILE_GLSLC = $(call COMPILE,GLSLC) COMPILE_NVCC = $(call COMPILE,NVCC) COMPILE_MMI = $(call COMPILE,CC,MMIFLAGS) COMPILE_MSA = $(call COMPILE,CC,MSAFLAGS) @@ -130,6 +131,12 @@ RUN_MINIFY = $(M)sed 's!/\\*.*\\*/!!g' $< | tr '\n' ' ' | tr -s ' ' | sed 's/^ / %.gz: TAG = GZIP %.min: TAG = MINIFY +%.spv: %.glsl + $(COMPILE_GLSLC) + +%.spv.c: %.spv $(BIN2CEXE) + $(RUN_BIN2C) + %.metal.air: %.metal $(METALCC) $< -o $@ @@ -228,10 +235,11 @@ ALLHEADERS := $(subst $(SRC_DIR)/,$(SUBDIR),$(wildcard $(SRC_DIR)/*.h $(SRC_DIR) SKIPHEADERS += $(ARCH_HEADERS:%=$(ARCH)/%) $(SKIPHEADERS-) SKIPHEADERS := $(SKIPHEADERS:%=$(SUBDIR)%) HOBJS = $(filter-out $(SKIPHEADERS:.h=.h.o),$(ALLHEADERS:.h=.h.o)) +SPVOBJS = $(filter %.spv.o,$(OBJS)) PTXOBJS = $(filter %.ptx.o,$(OBJS)) $(HOBJS): CCFLAGS += $(CFLAGS_HEADERS) checkheaders: $(HOBJS) -.SECONDARY: $(HOBJS:.o=.c) $(PTXOBJS:.o=.c) $(PTXOBJS:.o=.gz) $(PTXOBJS:.o=) +.SECONDARY: $(HOBJS:.o=.c) $(SPVOBJS:.o=.c) $(SPVOBJS:.o=) $(PTXOBJS:.o=.c) $(PTXOBJS:.o=.gz) $(PTXOBJS:.o=) alltools: $(TOOLS) $(HOSTOBJS): %.o: %.c @@ -250,7 +258,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 *.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.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 @@ -260,4 +268,4 @@ endef $(eval $(RULES)) --include $(wildcard $(OBJS:.o=.d) $(HOSTOBJS:.o=.d) $(TESTOBJS:.o=.d) $(HOBJS:.o=.d) $(SHLIBOBJS:.o=.d) $(STLIBOBJS:.o=.d)) $(OBJS:.o=$(DEFAULT_X86ASMD).d) +-include $(wildcard $(OBJS:.o=.d) $(HOSTOBJS:.o=.d) $(TESTOBJS:.o=.d) $(HOBJS:.o=.d) $(SHLIBOBJS:.o=.d) $(STLIBOBJS:.o=.d) $(SPVOBJS:.spv.o=.d)) $(OBJS:.o=$(DEFAULT_X86ASMD).d) diff --git a/libavcodec/vulkan/Makefile b/libavcodec/vulkan/Makefile index 35e96c506d..c96a4bb442 100644 --- a/libavcodec/vulkan/Makefile +++ b/libavcodec/vulkan/Makefile @@ -1,7 +1,5 @@ -GEN_CLEANSUFFIXES = *.o *.c *.d - clean:: - $(RM) $(GEN_CLEANSUFFIXES:%=libavcodec/vulkan/%) + $(RM) $(CLEANSUFFIXES:%=libavcodec/vulkan/%) OBJS-$(CONFIG_FFV1_VULKAN_ENCODER) += vulkan/common.o \ vulkan/rangecoder.o vulkan/ffv1_vlc.o \ diff --git a/libavfilter/Makefile b/libavfilter/Makefile index 5f5a199a63..615e9b61f8 100644 --- a/libavfilter/Makefile +++ b/libavfilter/Makefile @@ -690,8 +690,7 @@ TOOLS-$(CONFIG_LIBZMQ) += zmqsend clean:: $(RM) $(CLEANSUFFIXES:%=libavfilter/dnn/%) $(CLEANSUFFIXES:%=libavfilter/opencl/%) \ - $(CLEANSUFFIXES:%=libavfilter/metal/%) \ - $(CLEANSUFFIXES:%=libavfilter/vulkan/%) + $(CLEANSUFFIXES:%=libavfilter/metal/%) OPENCL = $(subst $(SRC_PATH)/,,$(wildcard $(SRC_PATH)/libavfilter/opencl/*.cl)) .SECONDARY: $(OPENCL:.cl=.c) diff --git a/libavfilter/vulkan/Makefile b/libavfilter/vulkan/Makefile index c77aaf4f6b..911cb1015e 100644 --- a/libavfilter/vulkan/Makefile +++ b/libavfilter/vulkan/Makefile @@ -1,7 +1,5 @@ -GEN_CLEANSUFFIXES = *.o *.c *.d - clean:: - $(RM) $(GEN_CLEANSUFFIXES:%=libavfilter/vulkan/%) + $(RM) $(CLEANSUFFIXES:%=libavfilter/vulkan/%) OBJS-$(CONFIG_BWDIF_VULKAN_FILTER) += vulkan/bwdif.o OBJS-$(CONFIG_SCALE_VULKAN_FILTER) += vulkan/debayer.o _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
