summary refs log tree commit diff
path: root/pkgs/development/libraries
diff options
context:
space:
mode:
authorVladimír Čunát <vcunat@gmail.com>2016-11-13 19:55:50 +0100
committerVladimír Čunát <vcunat@gmail.com>2016-11-13 20:06:40 +0100
commit1ac5869907a9bbe9bb361e9d1a248bbb848c8544 (patch)
treec96e55bda5fd508828e94f55d2c0f41adfdf9693 /pkgs/development/libraries
parent2ded9f3f7b2222b8aea5e779416f8a6ed3528009 (diff)
parent3d4a280c354bb21b711055ca7e02ee3e7999292b (diff)
downloadnixlib-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.nix31
-rw-r--r--pkgs/development/libraries/vulkan-loader/use-xdg-paths.patch142
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