diff options
author | Vladimír Čunát <vcunat@gmail.com> | 2016-11-13 19:55:50 +0100 |
---|---|---|
committer | Vladimír Čunát <vcunat@gmail.com> | 2016-11-13 20:06:40 +0100 |
commit | 1ac5869907a9bbe9bb361e9d1a248bbb848c8544 (patch) | |
tree | c96e55bda5fd508828e94f55d2c0f41adfdf9693 /pkgs/development/libraries | |
parent | 2ded9f3f7b2222b8aea5e779416f8a6ed3528009 (diff) | |
parent | 3d4a280c354bb21b711055ca7e02ee3e7999292b (diff) | |
download | nixlib-1ac5869907a9bbe9bb361e9d1a248bbb848c8544.tar nixlib-1ac5869907a9bbe9bb361e9d1a248bbb848c8544.tar.gz nixlib-1ac5869907a9bbe9bb361e9d1a248bbb848c8544.tar.bz2 nixlib-1ac5869907a9bbe9bb361e9d1a248bbb848c8544.tar.lz nixlib-1ac5869907a9bbe9bb361e9d1a248bbb848c8544.tar.xz nixlib-1ac5869907a9bbe9bb361e9d1a248bbb848c8544.tar.zst nixlib-1ac5869907a9bbe9bb361e9d1a248bbb848c8544.zip |
Merge #19936: vulkan / amdgpu-pro update
Diffstat (limited to 'pkgs/development/libraries')
-rw-r--r-- | pkgs/development/libraries/vulkan-loader/default.nix | 31 | ||||
-rw-r--r-- | pkgs/development/libraries/vulkan-loader/use-xdg-paths.patch | 142 |
2 files changed, 166 insertions, 7 deletions
diff --git a/pkgs/development/libraries/vulkan-loader/default.nix b/pkgs/development/libraries/vulkan-loader/default.nix index 4c00bb861425..622d027c60bc 100644 --- a/pkgs/development/libraries/vulkan-loader/default.nix +++ b/pkgs/development/libraries/vulkan-loader/default.nix @@ -1,8 +1,6 @@ { stdenv, fetchgit, fetchFromGitHub, cmake, pkgconfig, git, python3, python3Packages, glslang, spirv-tools, x11, libxcb, wayland }: -assert stdenv.system == "x86_64-linux"; - let version = "1.0.26.0"; src = fetchFromGitHub { @@ -11,7 +9,6 @@ let rev = "sdk-${version}"; sha256 = "157m746hc76xrxd3qq0f44f5dy7pjbz8cx74ykqrlbc7rmpjpk58"; }; - getRev = name: builtins.substring 0 40 (builtins.readFile "${src}/${name}_revision"); in stdenv.mkDerivation rec { @@ -37,12 +34,32 @@ stdenv.mkDerivation rec { "-DBUILD_WSI_WAYLAND_SUPPORT=ON" # XLIB/XCB supported by default ]; + patches = [ ./use-xdg-paths.patch ]; + + outputs = [ "out" "dev" "demos" ]; + + preConfigure = '' + checkRev() { + [ "$2" = $(cat "$1_revision") ] || (echo "ERROR: dependency $1 is revision $2 but should be revision" $(cat "$1_revision") && exit 1) + } + checkRev spirv-tools "${spirv-tools.src.rev}" + checkRev spirv-headers "${spirv-tools.headers.rev}" + checkRev glslang "${glslang.src.rev}" + ''; + installPhase = '' - mkdir -p $out/lib - mkdir -p $out/bin - cp loader/libvulkan.so* $out/lib + mkdir -p $out/lib $out/bin + cp -d loader/libvulkan.so* $out/lib cp demos/vulkaninfo $out/bin - ''; + mkdir -p $out/lib $out/share/vulkan/explicit_layer.d + cp -d layers/*.so $out/lib/ + cp -d layers/*.json $out/share/vulkan/explicit_layer.d/ + sed -i "s:\\./lib:$out/lib/lib:g" "$out/share/vulkan/"*/*.json + mkdir -p $dev/include + cp -rv ../include $dev/ + mkdir -p $demos/bin + cp demos/smoketest demos/tri demos/cube demos/*.spv demos/*.ppm $demos/bin + ''; meta = with stdenv.lib; { description = "LunarG Vulkan loader"; diff --git a/pkgs/development/libraries/vulkan-loader/use-xdg-paths.patch b/pkgs/development/libraries/vulkan-loader/use-xdg-paths.patch new file mode 100644 index 000000000000..1ae0f20889fc --- /dev/null +++ b/pkgs/development/libraries/vulkan-loader/use-xdg-paths.patch @@ -0,0 +1,142 @@ +diff --git a/loader/loader.c b/loader/loader.c +index a950ea1..9462d05 100644 +--- a/loader/loader.c ++++ b/loader/loader.c +@@ -2671,6 +2671,94 @@ static VkResult loader_get_manifest_files( + } + } + ++#if !defined(_WIN32) ++ if (home_location && override == NULL) { ++ char *xdgconfdirs = secure_getenv("XDG_CONFIG_DIRS"); ++ char *xdgdatadirs = secure_getenv("XDG_DATA_DIRS"); ++ char *cur, *src = loc; ++ size_t src_size = strlen(src), rel_size = strlen(home_location); ++ size_t size = 0; ++ ++ if (src_size > 0) ++ size += src_size + 1; ++ ++ if (xdgconfdirs == NULL) ++ xdgconfdirs = "/etc/xdg"; ++ if (xdgdatadirs == NULL) ++ xdgdatadirs = "/usr/local/share:/usr/share"; ++ ++ for (char *x = xdgconfdirs; *x; ++x) ++ if (*x == PATH_SEPERATOR) size += rel_size; ++ size += strlen(xdgconfdirs) + rel_size + 1; ++ for (char *x = xdgdatadirs; *x; ++x) ++ if (*x == PATH_SEPERATOR) size += rel_size; ++ size += strlen(xdgdatadirs) + rel_size + 1; ++ ++#if defined(LOCALPREFIX) ++ size += strlen(LOCALPREFIX "/" SYSCONFDIR) + rel_size + 1; ++ size += strlen(LOCALPREFIX "/" DATADIR) + rel_size + 1; ++#endif ++ ++ loc = cur = loader_stack_alloc(size); ++ if (cur == NULL) { ++ loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, ++ "Out of memory can't get manifest files"); ++ res = VK_ERROR_OUT_OF_HOST_MEMORY; ++ goto out; ++ } ++ ++ if (src_size > 0) { ++ memcpy(cur, src, src_size); ++ cur += src_size; ++ *cur++ = PATH_SEPERATOR; ++ } ++ ++ src = xdgconfdirs; ++ for (char *x = src;; ++x) { ++ if (*x == PATH_SEPERATOR || *x == 0) { ++ size_t s = x - src; ++ memcpy(cur, src, s); cur += s; ++ memcpy(cur, home_location, rel_size); cur += rel_size; ++ *cur++ = PATH_SEPERATOR; ++ if (*x == 0) ++ break; ++ src = ++x; ++ } ++ } ++ ++#if defined(LOCALPREFIX) ++ strcpy(cur, LOCALPREFIX "/" SYSCONFDIR); ++ cur += strlen(cur); ++ memcpy(cur, home_location, rel_size); cur += rel_size; ++ *cur++ = PATH_SEPERATOR; ++#endif ++ ++ src = xdgdatadirs; ++ for (char *x = src;; ++x) { ++ if (*x == PATH_SEPERATOR || *x == 0) { ++ size_t s = x - src; ++ memcpy(cur, src, s); cur += s; ++ memcpy(cur, home_location, rel_size); cur += rel_size; ++ *cur++ = PATH_SEPERATOR; ++ if (*x == 0) ++ break; ++ src = ++x; ++ } ++ } ++ ++#if defined(LOCALPREFIX) ++ strcpy(cur, LOCALPREFIX "/" DATADIR); ++ cur += strlen(cur); ++ memcpy(cur, home_location, rel_size); cur += rel_size; ++ *cur++ = PATH_SEPERATOR; ++#endif ++ ++ loc[size - 1] = 0; ++ assert(cur == loc + size); ++ list_is_dirs = true; ++ } ++#endif ++ + // Print out the paths being searched if debugging is enabled + loader_log(inst, VK_DEBUG_REPORT_DEBUG_BIT_EXT, 0, + "Searching the following paths for manifest files: %s\n", loc); +diff --git a/loader/vk_loader_platform.h b/loader/vk_loader_platform.h +index 3a02640..70a2652 100644 +--- a/loader/vk_loader_platform.h ++++ b/loader/vk_loader_platform.h +@@ -57,35 +57,10 @@ + #define VULKAN_ILAYERCONF_DIR "implicit_layer.d" + #define VULKAN_LAYER_DIR "layer" + +-#if defined(LOCALPREFIX) +-#define LOCAL_DRIVERS_INFO \ +- LOCALPREFIX "/" SYSCONFDIR VULKAN_DIR VULKAN_ICDCONF_DIR ":" \ +- LOCALPREFIX "/" DATADIR VULKAN_DIR VULKAN_ICDCONF_DIR ":" +-#define LOCAL_ELAYERS_INFO \ +- LOCALPREFIX "/" SYSCONFDIR VULKAN_DIR VULKAN_ELAYERCONF_DIR ":" \ +- LOCALPREFIX "/" DATADIR VULKAN_DIR VULKAN_ELAYERCONF_DIR ":" +-#define LOCAL_ILAYERS_INFO \ +- LOCALPREFIX "/" SYSCONFDIR VULKAN_DIR VULKAN_ILAYERCONF_DIR ":" \ +- LOCALPREFIX "/" DATADIR VULKAN_DIR VULKAN_ILAYERCONF_DIR ":" +-#else +-#define LOCAL_DRIVERS_INFO +-#define LOCAL_ELAYERS_INFO +-#define LOCAL_ILAYERS_INFO +-#endif +- +-#define DEFAULT_VK_DRIVERS_INFO \ +- LOCAL_DRIVERS_INFO \ +- "/" SYSCONFDIR VULKAN_DIR VULKAN_ICDCONF_DIR ":" \ +- "/usr/" DATADIR VULKAN_DIR VULKAN_ICDCONF_DIR ++#define DEFAULT_VK_DRIVERS_INFO "" + #define DEFAULT_VK_DRIVERS_PATH "" +-#define DEFAULT_VK_ELAYERS_INFO \ +- LOCAL_ELAYERS_INFO \ +- "/" SYSCONFDIR VULKAN_DIR VULKAN_ELAYERCONF_DIR ":" \ +- "/usr/" DATADIR VULKAN_DIR VULKAN_ELAYERCONF_DIR +-#define DEFAULT_VK_ILAYERS_INFO \ +- LOCAL_ILAYERS_INFO \ +- "/" SYSCONFDIR VULKAN_DIR VULKAN_ILAYERCONF_DIR ":" \ +- "/usr/" DATADIR VULKAN_DIR VULKAN_ILAYERCONF_DIR ++#define DEFAULT_VK_ELAYERS_INFO "" ++#define DEFAULT_VK_ILAYERS_INFO "" + #define DEFAULT_VK_LAYERS_PATH "" + #if !defined(LAYERS_SOURCE_PATH) + #define LAYERS_SOURCE_PATH NULL |