mirror of
https://mirror.skon.top/https://github.com/FFmpeg/FFmpeg
synced 2026-04-20 21:00:41 +08:00
configure/make: support compile-time SPIR-V generation
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -23,6 +23,8 @@
|
||||
*.metal.air
|
||||
*.metallib
|
||||
*.metallib.c
|
||||
*.spv
|
||||
*.spv.c
|
||||
*.ptx
|
||||
*.ptx.c
|
||||
*.ptx.gz
|
||||
|
||||
88
configure
vendored
88
configure
vendored
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user