Add libplacebo
This commit is contained in:
		
							parent
							
								
									6328ecc7fc
								
							
						
					
					
						commit
						176e853bbe
					
				
					 9 changed files with 143 additions and 384 deletions
				
			
		| 
						 | 
				
			
			@ -1,75 +0,0 @@
 | 
			
		|||
From 45fd7a314a2dc4b39bacbd91369128e04adc0699 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Syoyo Fujita <syoyo@lighttransport.com>
 | 
			
		||||
Date: Thu, 28 May 2020 21:38:16 +0900
 | 
			
		||||
Subject: [PATCH 1/4] Fix build on MinGW cross compiling environment.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 loader/CMakeLists.txt   |  4 +++-
 | 
			
		||||
 loader/loader.rc        |  4 ++++
 | 
			
		||||
 loader/loader_windows.c | 12 ++++++++++++
 | 
			
		||||
 3 files changed, 19 insertions(+), 1 deletion(-)
 | 
			
		||||
 | 
			
		||||
diff --git a/loader/CMakeLists.txt b/loader/CMakeLists.txt
 | 
			
		||||
index 56aece671..6e7971845 100644
 | 
			
		||||
--- a/loader/CMakeLists.txt
 | 
			
		||||
+++ b/loader/CMakeLists.txt
 | 
			
		||||
@@ -187,7 +187,7 @@ if(WIN32)
 | 
			
		||||
     if (USE_MASM)
 | 
			
		||||
       enable_language(ASM_MASM)
 | 
			
		||||
     endif ()
 | 
			
		||||
-    if(CMAKE_ASM_MASM_COMPILER_WORKS OR JWASM_FOUND)
 | 
			
		||||
+    if((CMAKE_ASM_MASM_COMPILER_WORKS AND NOT CMAKE_CROSSCOMPILING) OR JWASM_FOUND)
 | 
			
		||||
         if(MINGW)
 | 
			
		||||
             set(CMAKE_ASM_MASM_FLAGS ${CMAKE_ASM_MASM_FLAGS} ${JWASM_FLAGS})
 | 
			
		||||
         elseif(NOT CMAKE_CL_64 AND NOT JWASM_FOUND)
 | 
			
		||||
@@ -207,6 +207,8 @@ if(WIN32)
 | 
			
		||||
         add_library(loader-unknown-chain OBJECT unknown_ext_chain.c)
 | 
			
		||||
         set_target_properties(loader-unknown-chain PROPERTIES CMAKE_C_FLAGS_DEBUG "${MODIFIED_C_FLAGS_DEBUG}")
 | 
			
		||||
         target_compile_options(loader-unknown-chain PUBLIC ${MSVC_LOADER_COMPILE_OPTIONS})
 | 
			
		||||
+
 | 
			
		||||
+        target_include_directories(loader-unknown-chain PRIVATE "$<TARGET_PROPERTY:Vulkan::Headers,INTERFACE_INCLUDE_DIRECTORIES>")
 | 
			
		||||
     endif()
 | 
			
		||||
 elseif(APPLE)
 | 
			
		||||
     # For MacOS, use the C code and force the compiler's tail-call optimization instead of using assembly code.
 | 
			
		||||
diff --git a/loader/loader.rc b/loader/loader.rc
 | 
			
		||||
index 44193ea33..456ac70a2 100644
 | 
			
		||||
--- a/loader/loader.rc
 | 
			
		||||
+++ b/loader/loader.rc
 | 
			
		||||
@@ -19,7 +19,11 @@
 | 
			
		||||
 // Author: Charles Giessen <charles@lunarg.com>
 | 
			
		||||
 //
 | 
			
		||||
 
 | 
			
		||||
+#if defined(__MINGW32__)
 | 
			
		||||
+#include <winresrc.h>
 | 
			
		||||
+#else
 | 
			
		||||
 #include "winres.h"
 | 
			
		||||
+#endif
 | 
			
		||||
 
 | 
			
		||||
 // All set through CMake
 | 
			
		||||
 #define VER_FILE_VERSION 1, 0, 1111, 2222
 | 
			
		||||
diff --git a/loader/loader_windows.c b/loader/loader_windows.c
 | 
			
		||||
index aff3b276e..e1579bf3a 100644
 | 
			
		||||
--- a/loader/loader_windows.c
 | 
			
		||||
+++ b/loader/loader_windows.c
 | 
			
		||||
@@ -58,6 +58,18 @@
 | 
			
		||||
 typedef HRESULT(APIENTRY *PFN_CreateDXGIFactory1)(REFIID riid, void **ppFactory);
 | 
			
		||||
 static PFN_CreateDXGIFactory1 fpCreateDXGIFactory1;
 | 
			
		||||
 
 | 
			
		||||
+#if defined(__MINGW32__)
 | 
			
		||||
+// MinGW header may not have some definitions(cfgmgr32.h).
 | 
			
		||||
+#if !defined(CM_GETIDLIST_FILTER_CLASS)
 | 
			
		||||
+#define CM_GETIDLIST_FILTER_CLASS (0x200)
 | 
			
		||||
+#endif
 | 
			
		||||
+
 | 
			
		||||
+#if !defined(CM_GETIDLIST_FILTER_PRESENT)
 | 
			
		||||
+#define CM_GETIDLIST_FILTER_PRESENT (0x100)
 | 
			
		||||
+#endif
 | 
			
		||||
+
 | 
			
		||||
+#endif // __MINGW32__
 | 
			
		||||
+
 | 
			
		||||
 void windows_initialization(void) {
 | 
			
		||||
     char dll_location[MAX_PATH];
 | 
			
		||||
     HMODULE module_handle = NULL;
 | 
			
		||||
-- 
 | 
			
		||||
2.25.1
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,62 +0,0 @@
 | 
			
		|||
From 8f83fc25f149a53566e0367d185c2a10d2b5b50e Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: BtbN <btbn@btbn.de>
 | 
			
		||||
Date: Mon, 7 Sep 2020 20:07:39 +0200
 | 
			
		||||
Subject: [PATCH 2/4] Fixes for MinGW build
 | 
			
		||||
 | 
			
		||||
Adapted from https://github.com/msys2/MINGW-packages/blob/348f1d46d9d273a2cc928deadf9d9114f7a69c2f/mingw-w64-vulkan-loader/002-proper-def-files-for-32bit.patch
 | 
			
		||||
---
 | 
			
		||||
 loader/CMakeLists.txt                  | 2 +-
 | 
			
		||||
 loader/vk_loader_platform.h            | 4 +++-
 | 
			
		||||
 tests/framework/layer/wrap_objects.cpp | 4 +++-
 | 
			
		||||
 3 files changed, 7 insertions(+), 3 deletions(-)
 | 
			
		||||
 | 
			
		||||
diff --git a/loader/CMakeLists.txt b/loader/CMakeLists.txt
 | 
			
		||||
index 6e7971845..b5bc0a98a 100644
 | 
			
		||||
--- a/loader/CMakeLists.txt
 | 
			
		||||
+++ b/loader/CMakeLists.txt
 | 
			
		||||
@@ -364,11 +364,11 @@ else()
 | 
			
		||||
         )
 | 
			
		||||
 # cmake-format: on
 | 
			
		||||
     endif()
 | 
			
		||||
+endif()
 | 
			
		||||
 
 | 
			
		||||
     if(NOT APPLE)
 | 
			
		||||
         target_compile_definitions(vulkan PRIVATE _XOPEN_SOURCE=500) # hush compiler warnings for readlink
 | 
			
		||||
     endif()
 | 
			
		||||
-endif()
 | 
			
		||||
 
 | 
			
		||||
 # Generate pkg-config file.
 | 
			
		||||
 include(FindPkgConfig QUIET)
 | 
			
		||||
diff --git a/loader/vk_loader_platform.h b/loader/vk_loader_platform.h
 | 
			
		||||
index ecb8e1006..2e138aeaa 100644
 | 
			
		||||
--- a/loader/vk_loader_platform.h
 | 
			
		||||
+++ b/loader/vk_loader_platform.h
 | 
			
		||||
@@ -76,7 +76,9 @@
 | 
			
		||||
 #include "vk_layer_dispatch_table.h"
 | 
			
		||||
 #include "vk_loader_extensions.h"
 | 
			
		||||
 
 | 
			
		||||
-#if defined(__GNUC__) && __GNUC__ >= 4
 | 
			
		||||
+#if defined(_WIN32)
 | 
			
		||||
+#define LOADER_EXPORT __declspec(dllexport)
 | 
			
		||||
+#elif defined(__GNUC__) && __GNUC__ >= 4
 | 
			
		||||
 #define LOADER_EXPORT __attribute__((visibility("default")))
 | 
			
		||||
 #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
 | 
			
		||||
 #define LOADER_EXPORT __attribute__((visibility("default")))
 | 
			
		||||
diff --git a/tests/framework/layer/wrap_objects.cpp b/tests/framework/layer/wrap_objects.cpp
 | 
			
		||||
index 8f617a6d3..e7b1996f6 100644
 | 
			
		||||
--- a/tests/framework/layer/wrap_objects.cpp
 | 
			
		||||
+++ b/tests/framework/layer/wrap_objects.cpp
 | 
			
		||||
@@ -29,7 +29,9 @@
 | 
			
		||||
 #include "loader/vk_loader_layer.h"
 | 
			
		||||
 
 | 
			
		||||
 #if !defined(VK_LAYER_EXPORT)
 | 
			
		||||
-#if defined(__GNUC__) && __GNUC__ >= 4
 | 
			
		||||
+#if defined(_WIN32)
 | 
			
		||||
+#define VK_LAYER_EXPORT __declspec(dllexport)
 | 
			
		||||
+#elif defined(__GNUC__) && __GNUC__ >= 4
 | 
			
		||||
 #define VK_LAYER_EXPORT __attribute__((visibility("default")))
 | 
			
		||||
 #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
 | 
			
		||||
 #define VK_LAYER_EXPORT __attribute__((visibility("default")))
 | 
			
		||||
-- 
 | 
			
		||||
2.25.1
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,28 +0,0 @@
 | 
			
		|||
From 6c963fb60da75e53214579507d7717acadb08c0f Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: BtbN <btbn@btbn.de>
 | 
			
		||||
Date: Mon, 7 Sep 2020 20:33:23 +0200
 | 
			
		||||
Subject: [PATCH 3/4] Define appropiate minimum Windows-Version
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 loader/vk_loader_platform.h | 5 +++++
 | 
			
		||||
 1 file changed, 5 insertions(+)
 | 
			
		||||
 | 
			
		||||
diff --git a/loader/vk_loader_platform.h b/loader/vk_loader_platform.h
 | 
			
		||||
index 2e138aeaa..d956e803a 100644
 | 
			
		||||
--- a/loader/vk_loader_platform.h
 | 
			
		||||
+++ b/loader/vk_loader_platform.h
 | 
			
		||||
@@ -30,6 +30,11 @@
 | 
			
		||||
 #endif
 | 
			
		||||
 
 | 
			
		||||
 #if defined(_WIN32)
 | 
			
		||||
+
 | 
			
		||||
+#define WINVER 0x0601
 | 
			
		||||
+#define _WIN32_WINNT 0x0601
 | 
			
		||||
+#define STRSAFE_NO_DEPRECATE 1
 | 
			
		||||
+
 | 
			
		||||
 // WinSock2.h must be included *BEFORE* windows.h
 | 
			
		||||
 #include <winsock2.h>
 | 
			
		||||
 #endif  // _WIN32
 | 
			
		||||
-- 
 | 
			
		||||
2.25.1
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,159 +0,0 @@
 | 
			
		|||
From 73d8fb89c6897648ef9e0340793cb2487695488f Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: BtbN <btbn@btbn.de>
 | 
			
		||||
Date: Sun, 4 Apr 2021 23:29:53 +0200
 | 
			
		||||
Subject: [PATCH 4/4] Unlock building static loader on any OS
 | 
			
		||||
 | 
			
		||||
Based in parts on https://github.com/shinchiro/mpv-winbuild-cmake/blob/master/packages/vulkan-0001-cross-compile-static-linking-hacks.patch
 | 
			
		||||
---
 | 
			
		||||
 CMakeLists.txt              |  2 --
 | 
			
		||||
 loader/CMakeLists.txt       | 23 ++++++++++++++++++++++-
 | 
			
		||||
 loader/loader.h             |  3 +++
 | 
			
		||||
 loader/loader_windows.c     |  2 ++
 | 
			
		||||
 loader/vk_loader_platform.h | 16 ++++++++++++++++
 | 
			
		||||
 5 files changed, 43 insertions(+), 3 deletions(-)
 | 
			
		||||
 | 
			
		||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
 | 
			
		||||
index 703bcb1ba..43a25d8aa 100644
 | 
			
		||||
--- a/CMakeLists.txt
 | 
			
		||||
+++ b/CMakeLists.txt
 | 
			
		||||
@@ -95,9 +95,7 @@ if(BUILD_TESTS)
 | 
			
		||||
     enable_testing()
 | 
			
		||||
 endif()
 | 
			
		||||
 
 | 
			
		||||
-if(APPLE)
 | 
			
		||||
     option(BUILD_STATIC_LOADER "Build a loader that can be statically linked" OFF)
 | 
			
		||||
-endif()
 | 
			
		||||
 
 | 
			
		||||
 if(WIN32)
 | 
			
		||||
     # Optional: Allow specify the exact version used in the loader dll
 | 
			
		||||
diff --git a/loader/CMakeLists.txt b/loader/CMakeLists.txt
 | 
			
		||||
index b5bc0a98a..f74079954 100644
 | 
			
		||||
--- a/loader/CMakeLists.txt
 | 
			
		||||
+++ b/loader/CMakeLists.txt
 | 
			
		||||
@@ -251,6 +251,22 @@ if(WIN32)
 | 
			
		||||
     target_compile_options(loader-opt PUBLIC ${MSVC_LOADER_COMPILE_OPTIONS})
 | 
			
		||||
     target_include_directories(loader-opt PRIVATE "$<TARGET_PROPERTY:Vulkan::Headers,INTERFACE_INCLUDE_DIRECTORIES>")
 | 
			
		||||
 
 | 
			
		||||
+    if(BUILD_STATIC_LOADER)
 | 
			
		||||
+    add_library(vulkan
 | 
			
		||||
+                STATIC
 | 
			
		||||
+                $<TARGET_OBJECTS:loader-opt>
 | 
			
		||||
+                $<TARGET_OBJECTS:loader-norm>
 | 
			
		||||
+                $<TARGET_OBJECTS:loader-unknown-chain>
 | 
			
		||||
+                ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-1.def
 | 
			
		||||
+                ${CMAKE_CURRENT_SOURCE_DIR}/loader.rc)
 | 
			
		||||
+    set_target_properties(vulkan
 | 
			
		||||
+                          PROPERTIES LINK_FLAGS_DEBUG
 | 
			
		||||
+                                     "/ignore:4098"
 | 
			
		||||
+                                     OUTPUT_NAME
 | 
			
		||||
+                                     vulkan-1
 | 
			
		||||
+                                     PREFIX
 | 
			
		||||
+                                     lib)
 | 
			
		||||
+    else()
 | 
			
		||||
     add_library(vulkan
 | 
			
		||||
                 SHARED
 | 
			
		||||
                 $<TARGET_OBJECTS:loader-opt>
 | 
			
		||||
@@ -269,6 +285,8 @@ if(WIN32)
 | 
			
		||||
     set_target_properties(vulkan
 | 
			
		||||
                           PROPERTIES
 | 
			
		||||
                           OUTPUT_NAME vulkan-1)
 | 
			
		||||
+    set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS LOADER_DYNAMIC_LIB)
 | 
			
		||||
+    endif()
 | 
			
		||||
 
 | 
			
		||||
     target_link_libraries(vulkan Vulkan::Headers)
 | 
			
		||||
 
 | 
			
		||||
@@ -291,16 +309,18 @@ else()
 | 
			
		||||
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-typedef-redefinition")
 | 
			
		||||
     endif()
 | 
			
		||||
 
 | 
			
		||||
-    if(APPLE AND BUILD_STATIC_LOADER)
 | 
			
		||||
+    if(BUILD_STATIC_LOADER)
 | 
			
		||||
         add_library(vulkan STATIC ${NORMAL_LOADER_SRCS} ${OPT_LOADER_SRCS})
 | 
			
		||||
     else()
 | 
			
		||||
         add_library(vulkan SHARED ${NORMAL_LOADER_SRCS} ${OPT_LOADER_SRCS})
 | 
			
		||||
     endif()
 | 
			
		||||
     add_dependencies(vulkan loader_asm_gen_files)
 | 
			
		||||
+    if (NOT BUILD_STATIC_LOADER)
 | 
			
		||||
     # set version based on LOADER_GENERATED_HEADER_VERSION used to generate the code
 | 
			
		||||
     set_target_properties(vulkan
 | 
			
		||||
                           PROPERTIES SOVERSION "1"
 | 
			
		||||
                           VERSION ${LOADER_GENERATED_HEADER_VERSION})
 | 
			
		||||
+    endif()
 | 
			
		||||
     target_link_libraries(vulkan ${CMAKE_DL_LIBS} m)
 | 
			
		||||
     if (NOT ANDROID)
 | 
			
		||||
         target_link_libraries(vulkan pthread)
 | 
			
		||||
@@ -377,6 +397,7 @@ if(PKG_CONFIG_FOUND)
 | 
			
		||||
     foreach(LIB ${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES} ${PLATFORM_LIBS})
 | 
			
		||||
         set(PRIVATE_LIBS "${PRIVATE_LIBS} -l${LIB}")
 | 
			
		||||
     endforeach()
 | 
			
		||||
+    set(PRIVATE_LIBS "${PRIVATE_LIBS} -lshlwapi -lcfgmgr32")
 | 
			
		||||
     if(WIN32)
 | 
			
		||||
         set(VULKAN_LIB_SUFFIX "-1")
 | 
			
		||||
         # Set libdir path as in cmake's FindVulkan.cmake
 | 
			
		||||
diff --git a/loader/loader.h b/loader/loader.h
 | 
			
		||||
index cfebfba67..62dcaeb81 100644
 | 
			
		||||
--- a/loader/loader.h
 | 
			
		||||
+++ b/loader/loader.h
 | 
			
		||||
@@ -66,6 +66,9 @@ static inline void loader_init_dispatch(void *obj, const void *data) {
 | 
			
		||||
 
 | 
			
		||||
 // Global variables used across files
 | 
			
		||||
 extern struct loader_struct loader;
 | 
			
		||||
+#if defined(_WIN32) && !defined(LOADER_DYNAMIC_LIB)
 | 
			
		||||
+extern LOADER_PLATFORM_THREAD_ONCE_DEFINITION(once_init);
 | 
			
		||||
+#endif
 | 
			
		||||
 extern loader_platform_thread_mutex loader_lock;
 | 
			
		||||
 extern loader_platform_thread_mutex loader_json_lock;
 | 
			
		||||
 extern loader_platform_thread_mutex loader_preload_icd_lock;
 | 
			
		||||
diff --git a/loader/loader_windows.c b/loader/loader_windows.c
 | 
			
		||||
index e1579bf3a..8a7daef04 100644
 | 
			
		||||
--- a/loader/loader_windows.c
 | 
			
		||||
+++ b/loader/loader_windows.c
 | 
			
		||||
@@ -98,6 +98,7 @@ void windows_initialization(void) {
 | 
			
		||||
 #endif
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
+#if defined(LOADER_DYNAMIC_LIB)
 | 
			
		||||
 BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, LPVOID reserved) {
 | 
			
		||||
     switch (reason) {
 | 
			
		||||
         case DLL_PROCESS_ATTACH:
 | 
			
		||||
@@ -114,6 +115,7 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, LPVOID reserved) {
 | 
			
		||||
     }
 | 
			
		||||
     return TRUE;
 | 
			
		||||
 }
 | 
			
		||||
+#endif
 | 
			
		||||
 
 | 
			
		||||
 bool windows_add_json_entry(const struct loader_instance *inst,
 | 
			
		||||
                             char **reg_data,    // list of JSON files
 | 
			
		||||
diff --git a/loader/vk_loader_platform.h b/loader/vk_loader_platform.h
 | 
			
		||||
index d956e803a..fab7b44f5 100644
 | 
			
		||||
--- a/loader/vk_loader_platform.h
 | 
			
		||||
+++ b/loader/vk_loader_platform.h
 | 
			
		||||
@@ -456,9 +456,25 @@ typedef HANDLE loader_platform_thread;
 | 
			
		||||
 // The once init functionality is not used when building a DLL on Windows. This is because there is no way to clean up the
 | 
			
		||||
 // resources allocated by anything allocated by once init. This isn't a problem for static libraries, but it is for dynamic
 | 
			
		||||
 // ones. When building a DLL, we use DllMain() instead to allow properly cleaning up resources.
 | 
			
		||||
+#if defined(LOADER_DYNAMIC_LIB)
 | 
			
		||||
 #define LOADER_PLATFORM_THREAD_ONCE_DECLARATION(var)
 | 
			
		||||
 #define LOADER_PLATFORM_THREAD_ONCE_DEFINITION(var)
 | 
			
		||||
 #define LOADER_PLATFORM_THREAD_ONCE(ctl, func)
 | 
			
		||||
+#else
 | 
			
		||||
+#define LOADER_PLATFORM_THREAD_ONCE_DECLARATION(var) INIT_ONCE var = INIT_ONCE_STATIC_INIT;
 | 
			
		||||
+#define LOADER_PLATFORM_THREAD_ONCE_DEFINITION(var) INIT_ONCE var;
 | 
			
		||||
+#define LOADER_PLATFORM_THREAD_ONCE(ctl, func) loader_platform_thread_once_fn(ctl, func)
 | 
			
		||||
+static BOOL CALLBACK InitFuncWrapper(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context) {
 | 
			
		||||
+    void (*func)(void) = (void (*)(void))Parameter;
 | 
			
		||||
+    func();
 | 
			
		||||
+    return TRUE;
 | 
			
		||||
+}
 | 
			
		||||
+static void loader_platform_thread_once_fn(void *ctl, void (*func)(void)) {
 | 
			
		||||
+    assert(func != NULL);
 | 
			
		||||
+    assert(ctl != NULL);
 | 
			
		||||
+    InitOnceExecuteOnce((PINIT_ONCE)ctl, InitFuncWrapper, (void *)func, NULL);
 | 
			
		||||
+}
 | 
			
		||||
+#endif
 | 
			
		||||
 
 | 
			
		||||
 // Thread IDs:
 | 
			
		||||
 typedef DWORD loader_platform_thread_id;
 | 
			
		||||
-- 
 | 
			
		||||
2.25.1
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,56 +0,0 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
LOADER_REPO="https://github.com/KhronosGroup/Vulkan-Loader.git"
 | 
			
		||||
LOADER_COMMIT="830a0724aa281d7cad98eda59b850871f024bb41"
 | 
			
		||||
 | 
			
		||||
ffbuild_enabled() {
 | 
			
		||||
    # The various graphics systems(xcb, xlib, wayland, ...) need figured out first
 | 
			
		||||
    [[ $TARGET == linux* ]] && return -1
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ffbuild_dockerstage() {
 | 
			
		||||
    to_df "RUN --mount=src=${SELF},dst=/stage.sh --mount=src=patches/vulkan,dst=/patches run_stage /stage.sh"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ffbuild_dockerbuild() {
 | 
			
		||||
    git clone "$LOADER_REPO" loader
 | 
			
		||||
    git -C loader checkout "$LOADER_COMMIT"
 | 
			
		||||
 | 
			
		||||
    for patch in /patches/*.patch; do
 | 
			
		||||
        echo "Applying $patch"
 | 
			
		||||
        git -C loader am -3 < "$patch"
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    HEADERS_REPO="$(grep -A10 'name.*:.*Vulkan-Headers' loader/scripts/known_good.json | grep url | head -n1 | cut -d'"' -f4)"
 | 
			
		||||
    HEADERS_COMMIT="$(grep -A10 'name.*:.*Vulkan-Headers' loader/scripts/known_good.json | grep commit | head -n1 | cut -d'"' -f4)"
 | 
			
		||||
 | 
			
		||||
    git-mini-clone "$HEADERS_REPO" "$HEADERS_COMMIT" headers
 | 
			
		||||
 | 
			
		||||
    cd headers
 | 
			
		||||
 | 
			
		||||
    mkdir build && cd build
 | 
			
		||||
 | 
			
		||||
    cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" ..
 | 
			
		||||
    make -j$(nproc)
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
    cd ../../loader
 | 
			
		||||
 | 
			
		||||
    mkdir build && cd build
 | 
			
		||||
 | 
			
		||||
    cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" -DBUILD_TESTS=OFF -DBUILD_STATIC_LOADER=ON ..
 | 
			
		||||
    make -j$(nproc)
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
    ln -s libvulkan-1.a /opt/ffbuild/lib/libvulkan.a
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ffbuild_configure() {
 | 
			
		||||
    echo --enable-vulkan
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ffbuild_unconfigure() {
 | 
			
		||||
    echo --disable-vulkan
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										38
									
								
								scripts.d/45-vulkan/45-vulkan.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										38
									
								
								scripts.d/45-vulkan/45-vulkan.sh
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
HEADERS_REPO="https://github.com/KhronosGroup/Vulkan-Headers.git"
 | 
			
		||||
HEADERS_VERSION="1.2.198"
 | 
			
		||||
 | 
			
		||||
ffbuild_enabled() {
 | 
			
		||||
    [[ $ADDINS_STR == *4.4* ]] && return -1
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ffbuild_dockerbuild() {
 | 
			
		||||
    git-mini-clone "$HEADERS_REPO" "v$HEADERS_VERSION" vkheaders
 | 
			
		||||
    cd vkheaders
 | 
			
		||||
 | 
			
		||||
    mkdir build && cd build
 | 
			
		||||
 | 
			
		||||
    cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" ..
 | 
			
		||||
    make -j$(nproc)
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
    cat >"$FFBUILD_PREFIX"/lib/pkgconfig/vulkan.pc <<EOF
 | 
			
		||||
prefix=$FFBUILD_PREFIX
 | 
			
		||||
includedir=\${prefix}/include
 | 
			
		||||
 | 
			
		||||
Name: vulkan
 | 
			
		||||
Version: $HEADERS_VERSION
 | 
			
		||||
Description: Vulkan (Headers Only)
 | 
			
		||||
Cflags: -I\${includedir}
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ffbuild_configure() {
 | 
			
		||||
    echo --enable-vulkan
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ffbuild_unconfigure() {
 | 
			
		||||
    echo --disable-vulkan
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -4,9 +4,6 @@ GLSLANG_REPO="https://github.com/KhronosGroup/glslang.git"
 | 
			
		|||
GLSLANG_COMMIT="d1608ab1ef17f1488bdcbfe11f2c3c96ac482fce"
 | 
			
		||||
 | 
			
		||||
ffbuild_enabled() {
 | 
			
		||||
    # Pointless without Vulkan
 | 
			
		||||
    [[ $TARGET == linux* ]] && return -1
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -18,7 +15,9 @@ ffbuild_dockerbuild() {
 | 
			
		|||
 | 
			
		||||
    mkdir build && cd build
 | 
			
		||||
 | 
			
		||||
    cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" -DBUILD_SHARED_LIBS=OFF -DBUILD_EXTERNAL=ON -DBUILD_TESTING=OFF -DENABLE_CTEST=OFF -DENABLE_HLSL=ON -DENABLE_GLSLANG_BINARIES=OFF ..
 | 
			
		||||
    cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \
 | 
			
		||||
        -DBUILD_SHARED_LIBS=OFF -DBUILD_EXTERNAL=ON -DBUILD_TESTING=OFF -DENABLE_CTEST=OFF \
 | 
			
		||||
        -DENABLE_OPT=ON -DENABLE_HLSL=ON -DENABLE_GLSLANG_BINARIES=OFF ..
 | 
			
		||||
    make -j$(nproc)
 | 
			
		||||
    make install
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								scripts.d/45-vulkan/55-spirv-cross.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										42
									
								
								scripts.d/45-vulkan/55-spirv-cross.sh
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
SPIRV_CROSS_REPO="https://github.com/KhronosGroup/SPIRV-Cross.git"
 | 
			
		||||
SPIRV_CROSS_COMMIT="401296d3b8fc60193e99ccabb81eb3e4fe2dd802"
 | 
			
		||||
 | 
			
		||||
ffbuild_enabled() {
 | 
			
		||||
    [[ $ADDINS_STR == *4.4* ]] && return -1
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ffbuild_dockerbuild() {
 | 
			
		||||
    git-mini-clone "$SPIRV_CROSS_REPO" "$SPIRV_CROSS_COMMIT" spirv-cross
 | 
			
		||||
    cd spirv-cross
 | 
			
		||||
 | 
			
		||||
    VER_MAJ="$(grep 'set(spirv-cross-abi-major' CMakeLists.txt | sed -re 's/.* ([0-9]+)\)/\1/')"
 | 
			
		||||
    VER_MIN="$(grep 'set(spirv-cross-abi-minor' CMakeLists.txt | sed -re 's/.* ([0-9]+)\)/\1/')"
 | 
			
		||||
    VER_PCH="$(grep 'set(spirv-cross-abi-patch' CMakeLists.txt | sed -re 's/.* ([0-9]+)\)/\1/')"
 | 
			
		||||
    VER_FULL="$VER_MAJ.$VER_MIN.$VER_PCH"
 | 
			
		||||
 | 
			
		||||
    mkdir build && cd build
 | 
			
		||||
 | 
			
		||||
    cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \
 | 
			
		||||
        -DSPIRV_CROSS_SHARED=OFF -DSPIRV_CROSS_STATIC=ON -DSPIRV_CROSS_CLI=OFF -DSPIRV_CROSS_ENABLE_TESTS=OFF -DSPIRV_CROSS_FORCE_PIC=ON -DSPIRV_CROSS_ENABLE_CPP=OFF ..
 | 
			
		||||
    make -j$(nproc)
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
    cat >"$FFBUILD_PREFIX"/lib/pkgconfig/spirv-cross-c-shared.pc <<EOF
 | 
			
		||||
prefix=$FFBUILD_PREFIX
 | 
			
		||||
exec_prefix=\${prefix}
 | 
			
		||||
libdir=\${prefix}/lib
 | 
			
		||||
sharedlibdir=\${prefix}/lib
 | 
			
		||||
includedir=\${prefix}/include/spirv_cross
 | 
			
		||||
 | 
			
		||||
Name: spirv-cross-c-shared
 | 
			
		||||
Description: C API for SPIRV-Cross
 | 
			
		||||
Version: $VER_FULL
 | 
			
		||||
 | 
			
		||||
Requires:
 | 
			
		||||
Libs: -L\${libdir} -L\${sharedlibdir} -lspirv-cross-c -lspirv-cross-glsl -lspirv-cross-hlsl -lspirv-cross-reflect -lspirv-cross-msl -lspirv-cross-util -lspirv-cross-core -lstdc++
 | 
			
		||||
Cflags: -I\${includedir}
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										60
									
								
								scripts.d/50-libplacebo.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										60
									
								
								scripts.d/50-libplacebo.sh
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,60 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
PLACEBO_REPO="https://code.videolan.org/videolan/libplacebo.git"
 | 
			
		||||
PLACEBO_COMMIT="e91a59f055a2d4025b587fa9e9cf91a6ba934377"
 | 
			
		||||
 | 
			
		||||
ffbuild_enabled() {
 | 
			
		||||
    [[ $ADDINS_STR == *4.4* ]] && return -1
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ffbuild_dockerbuild() {
 | 
			
		||||
    git-mini-clone "$PLACEBO_REPO" "$PLACEBO_COMMIT" placebo
 | 
			
		||||
    cd placebo
 | 
			
		||||
 | 
			
		||||
    mkdir build && cd build
 | 
			
		||||
 | 
			
		||||
    local myconf=(
 | 
			
		||||
        --prefix="$FFBUILD_PREFIX"
 | 
			
		||||
        --buildtype=release
 | 
			
		||||
        --default-library=static
 | 
			
		||||
        -Dvulkan=enabled
 | 
			
		||||
        -Dvulkan-link=false
 | 
			
		||||
        -Dvulkan-registry="$FFBUILD_PREFIX"/share/vulkan/registry/vk.xml
 | 
			
		||||
        -Dglslang=enabled
 | 
			
		||||
        -Ddemos=false
 | 
			
		||||
        -Dtests=false
 | 
			
		||||
        -Dbench=false
 | 
			
		||||
        -Dfuzz=false
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    if [[ $TARGET == win* ]]; then
 | 
			
		||||
        myconf+=(
 | 
			
		||||
            -Dd3d11=enabled
 | 
			
		||||
        )
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ $TARGET == win* || $TARGET == linux* ]]; then
 | 
			
		||||
        myconf+=(
 | 
			
		||||
            --cross-file=/cross.meson
 | 
			
		||||
        )
 | 
			
		||||
    else
 | 
			
		||||
        echo "Unknown target"
 | 
			
		||||
        return -1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    meson "${myconf[@]}" ..
 | 
			
		||||
    ninja -j$(nproc)
 | 
			
		||||
    ninja install
 | 
			
		||||
 | 
			
		||||
    echo "Libs.private: -lstdc++" >> "$FFBUILD_PREFIX"/lib/pkgconfig/libplacebo.pc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ffbuild_configure() {
 | 
			
		||||
    echo --enable-libplacebo
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ffbuild_unconfigure() {
 | 
			
		||||
    [[ $ADDINS_STR == *4.4* ]] && return 0
 | 
			
		||||
    echo --disable-libplacebo
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue