summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorBenjamin Saunders <ben.e.saunders@gmail.com>2017-01-29 17:15:34 -0800
committerNikolay Amiantov <ab@fmap.me>2017-01-31 04:47:19 +0300
commitdbd4a35060b242839ba4d41e9bb743365faef8ce (patch)
treecbfb93c045f05e57535a378aa11c1a073e791d29 /pkgs
parent8d379ddfef1e7bcf123d8b0092f9924bf5232c07 (diff)
downloadnixlib-dbd4a35060b242839ba4d41e9bb743365faef8ce.tar
nixlib-dbd4a35060b242839ba4d41e9bb743365faef8ce.tar.gz
nixlib-dbd4a35060b242839ba4d41e9bb743365faef8ce.tar.bz2
nixlib-dbd4a35060b242839ba4d41e9bb743365faef8ce.tar.lz
nixlib-dbd4a35060b242839ba4d41e9bb743365faef8ce.tar.xz
nixlib-dbd4a35060b242839ba4d41e9bb743365faef8ce.tar.zst
nixlib-dbd4a35060b242839ba4d41e9bb743365faef8ce.zip
vulkan-loader: 1.0.26.0 -> 1.0.39.1
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/development/compilers/glslang/default.nix6
-rw-r--r--pkgs/development/compilers/glslang/install-headers.patch25
-rw-r--r--pkgs/development/libraries/vulkan-loader/default.nix26
-rw-r--r--pkgs/development/libraries/vulkan-loader/use-xdg-paths.patch388
-rw-r--r--pkgs/development/tools/spirv-tools/default.nix10
5 files changed, 318 insertions, 137 deletions
diff --git a/pkgs/development/compilers/glslang/default.nix b/pkgs/development/compilers/glslang/default.nix
index cd03c246624e..d2384598456d 100644
--- a/pkgs/development/compilers/glslang/default.nix
+++ b/pkgs/development/compilers/glslang/default.nix
@@ -2,15 +2,15 @@
 
 stdenv.mkDerivation rec {
   name = "glslang-git-${version}";
-  version = "2016-08-26";
+  version = "2016-12-21";
 
   # `vulkan-loader` requires a specific version of `glslang` as specified in
   # `<vulkan-loader-repo>/glslang_revision`.
   src = fetchFromGitHub {
     owner = "KhronosGroup";
     repo = "glslang";
-    rev = "81cd764b5ffc475bc73f1fb35f75fd1171bb2343";
-    sha256 = "1vfwl6lzkjh9nh29q32b7zca4q1abf3q4nqkahskijgznw5lr59g";
+    rev = "807a0d9e2f4e176f75d62ac3c179c81800ec2608";
+    sha256 = "02jckgihqhagm73glipb4c6ri5fr3pnbxb5vrznn2vppyfdfghbj";
   };
 
   patches = [ ./install-headers.patch ];
diff --git a/pkgs/development/compilers/glslang/install-headers.patch b/pkgs/development/compilers/glslang/install-headers.patch
index 9ad6f5e19068..75f271309780 100644
--- a/pkgs/development/compilers/glslang/install-headers.patch
+++ b/pkgs/development/compilers/glslang/install-headers.patch
@@ -1,21 +1,30 @@
 diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
-index 48a6c46..593d941 100755
+index c538e84..6ece1ab 100755
 --- a/SPIRV/CMakeLists.txt
 +++ b/SPIRV/CMakeLists.txt
-@@ -42,3 +42,8 @@ endif(WIN32)
+@@ -34,8 +34,9 @@ if(ENABLE_AMD_EXTENSIONS)
+ endif(ENABLE_AMD_EXTENSIONS)
+ 
+ if(ENABLE_NV_EXTENSIONS)
+-    set(HEADERS
+-        GLSL.ext.NV.h)
++    list(APPEND
++         HEADERS
++         GLSL.ext.NV.h)
+ endif(ENABLE_NV_EXTENSIONS)
+ 
+ add_library(SPIRV STATIC ${SOURCES} ${HEADERS})
+@@ -51,3 +52,5 @@ endif(WIN32)
  
  install(TARGETS SPIRV SPVRemapper
          ARCHIVE DESTINATION lib)
 +
-+foreach(file ${HEADERS} ${SPVREMAP_HEADERS})
-+    get_filename_component(dir ${file} DIRECTORY)
-+    install(FILES ${file} DESTINATION include/SPIRV/${dir})
-+endforeach()
++install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION include/SPIRV/)
 diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
-index ff91135..4318279 100644
+index 95d4bdd..e7fda90 100644
 --- a/glslang/CMakeLists.txt
 +++ b/glslang/CMakeLists.txt
-@@ -90,3 +90,8 @@ endif(WIN32)
+@@ -93,3 +93,8 @@ endif(WIN32)
  
  install(TARGETS glslang 
          ARCHIVE DESTINATION lib)
diff --git a/pkgs/development/libraries/vulkan-loader/default.nix b/pkgs/development/libraries/vulkan-loader/default.nix
index 731bd81cb6f3..46994a495eb4 100644
--- a/pkgs/development/libraries/vulkan-loader/default.nix
+++ b/pkgs/development/libraries/vulkan-loader/default.nix
@@ -1,13 +1,14 @@
 { stdenv, fetchgit, fetchFromGitHub, cmake, pkgconfig, git, python3,
-  python3Packages, glslang, spirv-tools, x11, libxcb, wayland }:
+  python3Packages, glslang, spirv-tools, x11, libxcb, libXrandr,
+  libXext, wayland }:
 
 let
-  version = "1.0.26.0";
+  version = "1.0.39.1";
   src = fetchFromGitHub {
     owner = "KhronosGroup";
     repo = "Vulkan-LoaderAndValidationLayers";
     rev = "sdk-${version}";
-    sha256 = "157m746hc76xrxd3qq0f44f5dy7pjbz8cx74ykqrlbc7rmpjpk58";
+    sha256 = "0y9zzrnjjjza2kkf5jfsdqhn98md6rsq0hb7jg62z2dipzky7zdp";
   };
 in
 
@@ -15,23 +16,13 @@ stdenv.mkDerivation rec {
   name = "vulkan-loader-${version}";
   inherit version src;
 
-  prePatch = ''
-    if [ "$(cat '${src}/spirv-tools_revision')" != '${spirv-tools.src.rev}' ] \
-      || [ "$(cat '${src}/spirv-headers_revision')" != '${spirv-tools.headers.rev}' ] \
-      || [ "$(cat '${src}/glslang_revision')" != '${glslang.src.rev}' ]
-    then
-      echo "Version mismatch, aborting!"
-      false
-    fi
-  '';
-
   buildInputs = [ cmake pkgconfig git python3 python3Packages.lxml
-                  glslang spirv-tools x11 libxcb wayland
+                  glslang spirv-tools x11 libxcb libXrandr libXext wayland
                 ];
   enableParallelBuilding = true;
 
   cmakeFlags = [
-    "-DBUILD_WSI_WAYLAND_SUPPORT=ON" # XLIB/XCB supported by default
+    "-DBUILD_WSI_MIR_SUPPORT=OFF"
   ];
 
   patches = [ ./use-xdg-paths.patch ];
@@ -40,7 +31,7 @@ stdenv.mkDerivation rec {
 
   preConfigure = ''
     checkRev() {
-      [ "$2" = $(cat "$1_revision") ] || (echo "ERROR: dependency $1 is revision $2 but should be revision" $(cat "$1_revision") && exit 1)
+      [ "$2" = $(cat "external_revisions/$1_revision") ] || (echo "ERROR: dependency $1 is revision $2 but should be revision" $(cat "external_revisions/$1_revision") && exit 1)
     }
     checkRev spirv-tools "${spirv-tools.src.rev}"
     checkRev spirv-headers "${spirv-tools.headers.rev}"
@@ -58,7 +49,8 @@ stdenv.mkDerivation rec {
     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
+    cp demos/*.spv demos/*.ppm $demos/bin
+    find demos -type f -executable -not -name vulkaninfo -exec cp {} $demos/bin \;
    '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/vulkan-loader/use-xdg-paths.patch b/pkgs/development/libraries/vulkan-loader/use-xdg-paths.patch
index 1ae0f20889fc..eb7869cd73c0 100644
--- a/pkgs/development/libraries/vulkan-loader/use-xdg-paths.patch
+++ b/pkgs/development/libraries/vulkan-loader/use-xdg-paths.patch
@@ -1,142 +1,322 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 27ab6e5..e59256e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -256,17 +256,10 @@ if(NOT WIN32)
+     include(GNUInstallDirs)
+ 
+     add_definitions(-DSYSCONFDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}")
+-    add_definitions(-DDATADIR="${CMAKE_INSTALL_FULL_DATADIR}")
+-
+     # Make sure /etc is searched by the loader
+-    if (NOT (CMAKE_INSTALL_FULL_SYSCONFDIR STREQUAL "/etc"))
++    if(NOT (CMAKE_INSTALL_FULL_SYSCONFDIR STREQUAL "/etc"))
+         add_definitions(-DEXTRASYSCONFDIR="/etc")
+     endif()
+-
+-    # Make sure /usr/share is searched by the loader
+-    if (NOT (CMAKE_INSTALL_FULL_DATADIR STREQUAL "/usr/share"))
+-        add_definitions(-DEXTRADATADIR="/usr/share")
+-    endif()
+ endif()
+ 
+ if(UNIX)
 diff --git a/loader/loader.c b/loader/loader.c
-index a950ea1..9462d05 100644
+index 24758f4..af7cc85 100644
 --- a/loader/loader.c
 +++ b/loader/loader.c
-@@ -2671,6 +2671,94 @@ static VkResult loader_get_manifest_files(
-         }
+@@ -2909,7 +2909,7 @@ static VkResult
+ loader_get_manifest_files(const struct loader_instance *inst,
+                           const char *env_override, const char *source_override,
+                           bool is_layer, bool warn_if_not_present,
+-                          const char *location, const char *home_location,
++                          const char *location, const char *relative_location,
+                           struct loader_manifest_files *out_files) {
+     const char * override = NULL;
+     char *override_getenv = NULL;
+@@ -2941,9 +2941,9 @@ loader_get_manifest_files(const struct loader_instance *inst,
      }
  
+ #if !defined(_WIN32)
+-    if (location == NULL && home_location == NULL) {
++    if (location == NULL && relative_location == NULL) {
+ #else
+-    home_location = NULL;
++    relative_location = NULL;
+     if (location == NULL) {
+ #endif
+         loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
+@@ -2962,16 +2962,89 @@ loader_get_manifest_files(const struct loader_instance *inst,
+     // Make a copy of the input we are using so it is not modified
+     // Also handle getting the location(s) from registry on Windows
+     if (override == NULL) {
+-        loc = loader_stack_alloc(strlen(location) + 1);
++        size_t loc_size = strlen(location) + 1;
 +#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)
++        const char *xdgconfdirs = secure_getenv("XDG_CONFIG_DIRS");
++        const char *xdgdatadirs = secure_getenv("XDG_DATA_DIRS");
++        if (xdgconfdirs == NULL || xdgconfdirs[0] == '\0')
 +            xdgconfdirs = "/etc/xdg";
-+        if (xdgdatadirs == NULL)
++        if (xdgdatadirs == NULL || xdgdatadirs[0] == '\0')
 +            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;
++        const size_t rel_size = strlen(relative_location);
++        // Leave space for trailing separators
++        loc_size += strlen(xdgconfdirs) + strlen(xdgdatadirs) + 2*rel_size + 2;
++        for (const char *x = xdgconfdirs; *x; ++x)
++            if (*x == PATH_SEPARATOR) loc_size += rel_size;
++        for (const char *x = xdgdatadirs; *x; ++x)
++            if (*x == PATH_SEPARATOR) loc_size += rel_size;
++        loc_size += strlen(SYSCONFDIR) + rel_size + 1;
++#ifdef EXTRASYSCONFDIR
++        loc_size += strlen(EXTRASYSCONFDIR) + rel_size + 1;
 +#endif
++#endif
++        loc = loader_stack_alloc(loc_size);
+         if (loc == NULL) {
+             loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
+                        "loader_get_manifest_files: Failed to allocate "
+                        "%d bytes for manifest file location.",
+-                       strlen(location));
++                       loc_size);
+             res = VK_ERROR_OUT_OF_HOST_MEMORY;
+             goto out;
+         }
+-        strcpy(loc, location);
++        char *loc_write = loc;
++#if !defined(_WIN32)
++        const char *loc_read;
 +
-+        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;
++        loc_read = &xdgconfdirs[0];
++        for (const char *x = loc_read;; ++x) {
++            if (*x == PATH_SEPARATOR || *x == '\0') {
++                const size_t s = x - loc_read;
++                memcpy(loc_write, loc_read, s);
++                loc_write += s;
++                memcpy(loc_write, relative_location, rel_size);
++                loc_write += rel_size;
++                *loc_write++ = PATH_SEPARATOR;
 +                if (*x == 0)
 +                    break;
-+                src = ++x;
++                loc_read = ++x;
 +            }
 +        }
 +
-+#if defined(LOCALPREFIX)
-+        strcpy(cur, LOCALPREFIX "/" SYSCONFDIR);
-+        cur += strlen(cur);
-+        memcpy(cur, home_location, rel_size); cur += rel_size;
-+        *cur++ = PATH_SEPERATOR;
++        memcpy(loc_write, SYSCONFDIR, strlen(SYSCONFDIR));
++        loc_write += strlen(SYSCONFDIR);
++        memcpy(loc_write, relative_location, rel_size);
++        loc_write += rel_size;
++        *loc_write++ = PATH_SEPARATOR;
++
++#ifdef EXTRASYSCONFDIR
++        memcpy(loc_write, EXTRASYSCONFDIR, strlen(EXTRASYSCONFDIR));
++        loc_write += strlen(EXTRASYSCONFDIR);
++        memcpy(loc_write, relative_location, rel_size);
++        loc_write += rel_size;
++        *loc_write++ = PATH_SEPARATOR;
 +#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;
++        loc_read = &xdgdatadirs[0];
++        for (const char *x = loc_read;; ++x) {
++            if (*x == PATH_SEPARATOR || *x == '\0') {
++                const size_t s = x - loc_read;
++                memcpy(loc_write, loc_read, s);
++                loc_write += s;
++                memcpy(loc_write, relative_location, rel_size);
++                loc_write += rel_size;
++                *loc_write++ = PATH_SEPARATOR;
 +                if (*x == 0)
 +                    break;
-+                src = ++x;
++                loc_read = ++x;
 +            }
 +        }
-+
-+#if defined(LOCALPREFIX)
-+        strcpy(cur, LOCALPREFIX "/" DATADIR);
-+        cur += strlen(cur);
-+        memcpy(cur, home_location, rel_size); cur += rel_size;
-+        *cur++ = PATH_SEPERATOR;
++        --loc_write;
++        *loc_write = '\0';
++#else
++        memcpy(loc_write, location, loc_size);
++        loc[loc_size-1] = '\0';
 +#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);
+ #if defined(_WIN32)
+         VkResult reg_result = loaderGetRegistryFiles(inst, loc, &reg);
+         if (VK_SUCCESS != reg_result || NULL == reg) {
+@@ -3122,14 +3195,14 @@ loader_get_manifest_files(const struct loader_instance *inst,
+         }
+         file = next_file;
+ #if !defined(_WIN32)
+-        if (home_location != NULL &&
++        if (relative_location != NULL &&
+             (next_file == NULL || *next_file == '\0') && override == NULL) {
+             char *xdgdatahome = secure_getenv("XDG_DATA_HOME");
+             size_t len;
+             if (xdgdatahome != NULL) {
+ 
+                 char *home_loc = loader_stack_alloc(strlen(xdgdatahome) + 2 +
+-                                                    strlen(home_location));
++                                                    strlen(relative_location));
+                 if (home_loc == NULL) {
+                     loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
+                                "loader_get_manifest_files: Failed to allocate "
+@@ -3139,15 +3212,15 @@ loader_get_manifest_files(const struct loader_instance *inst,
+                 }
+                 strcpy(home_loc, xdgdatahome);
+                 // Add directory separator if needed
+-                if (home_location[0] != DIRECTORY_SYMBOL) {
++                if (relative_location[0] != DIRECTORY_SYMBOL) {
+                     len = strlen(home_loc);
+                     home_loc[len] = DIRECTORY_SYMBOL;
+                     home_loc[len + 1] = '\0';
+                 }
+-                strcat(home_loc, home_location);
++                strcat(home_loc, relative_location);
+                 file = home_loc;
+                 next_file = loader_get_next_path(file);
+-                home_location = NULL;
++                relative_location = NULL;
+ 
+                 loader_log(
+                     inst, VK_DEBUG_REPORT_DEBUG_BIT_EXT, 0,
+@@ -3160,7 +3233,7 @@ loader_get_manifest_files(const struct loader_instance *inst,
+                 char *home = secure_getenv("HOME");
+                 if (home != NULL) {
+                     char *home_loc = loader_stack_alloc(strlen(home) + 16 +
+-                                                        strlen(home_location));
++                                                        strlen(relative_location));
+                     if (home_loc == NULL) {
+                         loader_log(
+                             inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
+@@ -3178,15 +3251,15 @@ loader_get_manifest_files(const struct loader_instance *inst,
+                     }
+                     strcat(home_loc, ".local/share");
+ 
+-                    if (home_location[0] != DIRECTORY_SYMBOL) {
++                    if (relative_location[0] != DIRECTORY_SYMBOL) {
+                         len = strlen(home_loc);
+                         home_loc[len] = DIRECTORY_SYMBOL;
+                         home_loc[len + 1] = '\0';
+                     }
+-                    strcat(home_loc, home_location);
++                    strcat(home_loc, relative_location);
+                     file = home_loc;
+                     next_file = loader_get_next_path(file);
+-                    home_location = NULL;
++                    relative_location = NULL;
+ 
+                     loader_log(
+                         inst, VK_DEBUG_REPORT_DEBUG_BIT_EXT, 0,
+@@ -3263,7 +3336,7 @@ VkResult loader_icd_scan(const struct loader_instance *inst,
+     // Get a list of manifest files for ICDs
+     res = loader_get_manifest_files(inst, "VK_ICD_FILENAMES", NULL, false, true,
+                                     DEFAULT_VK_DRIVERS_INFO,
+-                                    HOME_VK_DRIVERS_INFO, &manifest_files);
++                                    RELATIVE_VK_DRIVERS_INFO, &manifest_files);
+     if (VK_SUCCESS != res || manifest_files.count == 0) {
+         goto out;
+     }
+@@ -3490,7 +3563,7 @@ void loader_layer_scan(const struct loader_instance *inst,
+     if (VK_SUCCESS !=
+         loader_get_manifest_files(inst, LAYERS_PATH_ENV, LAYERS_SOURCE_PATH,
+                                   true, true, DEFAULT_VK_ELAYERS_INFO,
+-                                  HOME_VK_ELAYERS_INFO, &manifest_files[0])) {
++                                  RELATIVE_VK_ELAYERS_INFO, &manifest_files[0])) {
+         goto out;
+     }
+ 
+@@ -3499,7 +3572,7 @@ void loader_layer_scan(const struct loader_instance *inst,
+     // overridden by LAYERS_PATH_ENV
+     if (VK_SUCCESS != loader_get_manifest_files(inst, NULL, NULL, true, false,
+                                                 DEFAULT_VK_ILAYERS_INFO,
+-                                                HOME_VK_ILAYERS_INFO,
++                                                RELATIVE_VK_ILAYERS_INFO,
+                                                 &manifest_files[1])) {
+         goto out;
+     }
+@@ -3569,7 +3642,7 @@ void loader_implicit_layer_scan(const struct loader_instance *inst,
+     // overridden by LAYERS_PATH_ENV
+     VkResult res = loader_get_manifest_files(
+         inst, NULL, NULL, true, false, DEFAULT_VK_ILAYERS_INFO,
+-        HOME_VK_ILAYERS_INFO, &manifest_files);
++        RELATIVE_VK_ILAYERS_INFO, &manifest_files);
+     if (VK_SUCCESS != res || manifest_files.count == 0) {
+         return;
+     }
 diff --git a/loader/vk_loader_platform.h b/loader/vk_loader_platform.h
-index 3a02640..70a2652 100644
+index dc4ac10..50a7966 100644
 --- a/loader/vk_loader_platform.h
 +++ b/loader/vk_loader_platform.h
-@@ -57,35 +57,10 @@
+@@ -57,47 +57,9 @@
  #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 ":"
+-#if defined(EXTRASYSCONFDIR)
+-#define EXTRA_DRIVERS_SYSCONFDIR_INFO ":"                                      \
+-    EXTRASYSCONFDIR VULKAN_DIR VULKAN_ICDCONF_DIR
+-#define EXTRA_ELAYERS_SYSCONFDIR_INFO ":"                                      \
+-    EXTRASYSCONFDIR VULKAN_DIR VULKAN_ELAYERCONF_DIR
+-#define EXTRA_ILAYERS_SYSCONFDIR_INFO ":"                                      \
+-    EXTRASYSCONFDIR VULKAN_DIR VULKAN_ILAYERCONF_DIR
+-#else
+-#define EXTRA_DRIVERS_SYSCONFDIR_INFO
+-#define EXTRA_ELAYERS_SYSCONFDIR_INFO
+-#define EXTRA_ILAYERS_SYSCONFDIR_INFO
+-#endif
+-
+-#if defined(EXTRADATADIR)
+-#define EXTRA_DRIVERS_DATADIR_INFO ":"                                         \
+-    EXTRADATADIR VULKAN_DIR VULKAN_ICDCONF_DIR
+-#define EXTRA_ELAYERS_DATADIR_INFO ":"                                         \
+-    EXTRADATADIR VULKAN_DIR VULKAN_ELAYERCONF_DIR
+-#define EXTRA_ILAYERS_DATADIR_INFO ":"                                         \
+-    EXTRADATADIR VULKAN_DIR VULKAN_ILAYERCONF_DIR
 -#else
--#define LOCAL_DRIVERS_INFO
--#define LOCAL_ELAYERS_INFO
--#define LOCAL_ILAYERS_INFO
+-#define EXTRA_DRIVERS_DATADIR_INFO
+-#define EXTRA_ELAYERS_DATADIR_INFO
+-#define EXTRA_ILAYERS_DATADIR_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 ""
+-    SYSCONFDIR   VULKAN_DIR VULKAN_ICDCONF_DIR ":"                             \
+-    DATADIR      VULKAN_DIR VULKAN_ICDCONF_DIR                                 \
+-    EXTRA_DRIVERS_SYSCONFDIR_INFO                                              \
+-    EXTRA_DRIVERS_DATADIR_INFO
 -#define DEFAULT_VK_ELAYERS_INFO                                                \
--    LOCAL_ELAYERS_INFO                                                         \
--    "/"  SYSCONFDIR VULKAN_DIR VULKAN_ELAYERCONF_DIR ":"                       \
--    "/usr/" DATADIR VULKAN_DIR VULKAN_ELAYERCONF_DIR
+-    SYSCONFDIR   VULKAN_DIR VULKAN_ELAYERCONF_DIR ":"                          \
+-    DATADIR      VULKAN_DIR VULKAN_ELAYERCONF_DIR                              \
+-    EXTRA_ELAYERS_SYSCONFDIR_INFO                                              \
+-    EXTRA_ELAYERS_DATADIR_INFO
 -#define DEFAULT_VK_ILAYERS_INFO                                                \
--    LOCAL_ILAYERS_INFO                                                         \
--    "/"  SYSCONFDIR VULKAN_DIR VULKAN_ILAYERCONF_DIR ":"                       \
--    "/usr/" DATADIR VULKAN_DIR VULKAN_ILAYERCONF_DIR
+-    SYSCONFDIR   VULKAN_DIR VULKAN_ILAYERCONF_DIR ":"                          \
+-    DATADIR      VULKAN_DIR VULKAN_ILAYERCONF_DIR                              \
+-    EXTRA_ILAYERS_SYSCONFDIR_INFO                                              \
+-    EXTRA_ILAYERS_DATADIR_INFO
++#define DEFAULT_VK_DRIVERS_INFO ""
 +#define DEFAULT_VK_ELAYERS_INFO ""
 +#define DEFAULT_VK_ILAYERS_INFO ""
- #define DEFAULT_VK_LAYERS_PATH ""
- #if !defined(LAYERS_SOURCE_PATH)
+ 
+ #define DEFAULT_VK_DRIVERS_PATH ""
+ #if !defined(DEFAULT_VK_LAYERS_PATH)
+@@ -109,9 +71,9 @@
+ #endif
+ #define LAYERS_PATH_ENV "VK_LAYER_PATH"
+ 
+-#define HOME_VK_DRIVERS_INFO VULKAN_DIR VULKAN_ICDCONF_DIR
+-#define HOME_VK_ELAYERS_INFO VULKAN_DIR VULKAN_ELAYERCONF_DIR
+-#define HOME_VK_ILAYERS_INFO VULKAN_DIR VULKAN_ILAYERCONF_DIR
++#define RELATIVE_VK_DRIVERS_INFO VULKAN_DIR VULKAN_ICDCONF_DIR
++#define RELATIVE_VK_ELAYERS_INFO VULKAN_DIR VULKAN_ELAYERCONF_DIR
++#define RELATIVE_VK_ILAYERS_INFO VULKAN_DIR VULKAN_ILAYERCONF_DIR
+ 
+ // C99:
+ #define PRINTF_SIZE_T_SPECIFIER "%zu"
+@@ -251,9 +213,9 @@ loader_platform_thread_cond_broadcast(loader_platform_thread_cond *pCond) {
  #define LAYERS_SOURCE_PATH NULL
+ #endif
+ #define LAYERS_PATH_ENV "VK_LAYER_PATH"
+-#define HOME_VK_DRIVERS_INFO ""
+-#define HOME_VK_ELAYERS_INFO ""
+-#define HOME_VK_ILAYERS_INFO ""
++#define RELATIVE_VK_DRIVERS_INFO ""
++#define RELATIVE_VK_ELAYERS_INFO ""
++#define RELATIVE_VK_ILAYERS_INFO ""
+ #define PRINTF_SIZE_T_SPECIFIER "%Iu"
+ 
+ // File IO
diff --git a/pkgs/development/tools/spirv-tools/default.nix b/pkgs/development/tools/spirv-tools/default.nix
index 4693e5477161..9bc9bf9c0e41 100644
--- a/pkgs/development/tools/spirv-tools/default.nix
+++ b/pkgs/development/tools/spirv-tools/default.nix
@@ -8,14 +8,14 @@ spirv_sources = {
   tools = fetchFromGitHub {
     owner = "KhronosGroup";
     repo = "SPIRV-Tools";
-    rev = "923a4596b44831a07060df45caacb522613730c9";
-    sha256 = "0hmgng2sv34amfsag3ya09prnv1w535djwlzfn8h2vh430vgawxa";
+    rev = "37422e9dba1a3a8cb8028b779dd546d43add6ef8";
+    sha256 = "0sp2p4wg902clq0fr94vj19vyv43cq333jjxr0mjzay8dw2h4yzk";
   };
   headers = fetchFromGitHub {
     owner = "KhronosGroup";
     repo = "SPIRV-Headers";
-    rev = "33d41376d378761ed3a4c791fc4b647761897f26";
-    sha256 = "1s103bpi3g6hhq453qa4jbabfkyxxpf9vn213j8k4vm26lsi8hs2";
+    rev = "c470b68225a04965bf87d35e143ae92f831e8110";
+    sha256 = "18jgcpmm0ixp6314r5w144l3wayxjkmwqgx8dk5jgyw36dammkwd";
   };
 };
 
@@ -23,7 +23,7 @@ in
 
 stdenv.mkDerivation rec {
   name = "spirv-tools-${version}";
-  version = "2016-07-18";
+  version = "2016-12-19";
 
   src = spirv_sources.tools;
   patchPhase = ''ln -sv ${spirv_sources.headers} external/spirv-headers'';