aboutsummaryrefslogtreecommitdiffstats
path: root/configure
diff options
context:
space:
mode:
authorLynne <dev@lynne.ee>2021-04-29 03:37:42 +0200
committerLynne <dev@lynne.ee>2021-04-30 00:08:37 +0200
commitcf17e2323f9db866e47312dfa38c9290423d30c1 (patch)
tree34b900f991afaf02d72e99b9aaa3653aa09f3a5f /configure
parent4a6581e968d38f009140e055e29be9953279cc7b (diff)
downloadffmpeg-cf17e2323f9db866e47312dfa38c9290423d30c1.tar.gz
hwcontext_vulkan: dlopen libvulkan
While Vulkan itself went more or less the way it was expected to go, libvulkan didn't quite solve all of the opengl loader issues. It's multi-vendor, yes, but unfortunately, the code is Google/Khronos QUALITY, so suffers from big static linking issues (static linking on anything but OSX is unsupported), has bugs, and due to the prefix system used, there are 3 or so ways to type out functions. Just solve all of those problems by dlopening it. We even have nice emulation for it on Windows.
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure34
1 files changed, 33 insertions, 1 deletions
diff --git a/configure b/configure
index 820f719a32..23a0905819 100755
--- a/configure
+++ b/configure
@@ -1451,6 +1451,23 @@ test_pkg_config(){
set_sanitized "${name}_extralibs" $pkg_libs
}
+test_pkg_config_cpp(){
+ log test_pkg_config_cpp "$@"
+ name="$1"
+ pkg_version="$2"
+ pkg="${2%% *}"
+ headers="$3"
+ cond="$4"
+ shift 4
+ disable $name
+ test_cmd $pkg_config --exists --print-errors $pkg_version || return
+ pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
+ pkg_incdir=$($pkg_config --variable=includedir $pkg_config_flags $pkg)
+ test_cpp_condition "$pkg_incdir/$headers" "$cond" "$@" &&
+ enable $name &&
+ set_sanitized "${name}_cflags" $pkg_cflags
+}
+
check_pkg_config(){
log check_pkg_config "$@"
name="$1"
@@ -1458,6 +1475,13 @@ check_pkg_config(){
eval add_cflags \$${name}_cflags
}
+check_pkg_config_cpp(){
+ log check_pkg_config_cpp "$@"
+ name="$1"
+ test_pkg_config_cpp "$@" &&
+ eval add_cflags \$${name}_cflags
+}
+
test_exec(){
test_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
}
@@ -1581,6 +1605,12 @@ require_pkg_config(){
check_pkg_config "$@" || die "ERROR: $pkg_version not found using pkg-config$pkg_config_fail_message"
}
+require_pkg_config_cpp(){
+ log require_pkg_config_cpp "$@"
+ pkg_version="$2"
+ check_pkg_config_cpp "$@" || die "ERROR: $pkg_version not found using pkg-config$pkg_config_fail_message"
+}
+
test_host_cc(){
log test_host_cc "$@"
cat > $TMPC
@@ -2920,6 +2950,7 @@ nvdec_deps="ffnvcodec"
vaapi_x11_deps="xlib"
videotoolbox_hwaccel_deps="videotoolbox pthreads"
videotoolbox_hwaccel_extralibs="-framework QuartzCore"
+vulkan_deps_any="libdl LoadLibrary"
xvmc_deps="X11_extensions_XvMClib_h"
av1_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_AV1"
@@ -6739,7 +6770,8 @@ enabled vdpau &&
enabled crystalhd && check_lib crystalhd "stdint.h libcrystalhd/libcrystalhd_if.h" DtsCrystalHDVersion -lcrystalhd
enabled vulkan &&
- require_pkg_config vulkan "vulkan >= 1.1.97" "vulkan/vulkan.h" vkCreateInstance
+ { require_pkg_config_cpp vulkan "vulkan >= 1.1.97" "vulkan/vulkan.h" "defined VK_VERSION_1_1" ||
+ require_cpp_condition vulkan "vulkan/vulkan.h" "defined VK_VERSION_1_1"; }
if enabled x86; then
case $target_os in