mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-13 05:05:29 +03:00
vulkan-loader: allow validation layers to be enabled
The loader now uses XDK_DATA_DIRS to find drivers and layers.
This commit is contained in:
parent
e783cc90a0
commit
6bf27c2cae
5 changed files with 151 additions and 7 deletions
|
@ -118,6 +118,7 @@ in
|
||||||
"/share/terminfo"
|
"/share/terminfo"
|
||||||
"/share/themes"
|
"/share/themes"
|
||||||
"/share/vim-plugins"
|
"/share/vim-plugins"
|
||||||
|
"/share/vulkan"
|
||||||
];
|
];
|
||||||
|
|
||||||
system.path = pkgs.buildEnv {
|
system.path = pkgs.buildEnv {
|
||||||
|
|
|
@ -45,10 +45,8 @@ in
|
||||||
"amd/amdapfxx.blb".source = package + "/etc/amd/amdapfxx.blb";
|
"amd/amdapfxx.blb".source = package + "/etc/amd/amdapfxx.blb";
|
||||||
"gbm/gbm.conf".source = package + "/etc/gbm/gbm.conf";
|
"gbm/gbm.conf".source = package + "/etc/gbm/gbm.conf";
|
||||||
"OpenCL/vendors/amdocl64.icd".source = package + "/etc/OpenCL/vendors/amdocl64.icd";
|
"OpenCL/vendors/amdocl64.icd".source = package + "/etc/OpenCL/vendors/amdocl64.icd";
|
||||||
"vulkan/icd.d/amd_icd64.json".source = package + "/etc/vulkan/icd.d/amd_icd64.json";
|
|
||||||
} // optionalAttrs opengl.driSupport32Bit {
|
} // optionalAttrs opengl.driSupport32Bit {
|
||||||
"OpenCL/vendors/amdocl32.icd".source = package32 + "/etc/OpenCL/vendors/amdocl32.icd";
|
"OpenCL/vendors/amdocl32.icd".source = package32 + "/etc/OpenCL/vendors/amdocl32.icd";
|
||||||
"vulkan/icd.d/amd_icd32.json".source = package32 + "/etc/vulkan/icd.d/amd_icd32.json";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -34,6 +34,8 @@ stdenv.mkDerivation rec {
|
||||||
"-DBUILD_WSI_WAYLAND_SUPPORT=ON" # XLIB/XCB supported by default
|
"-DBUILD_WSI_WAYLAND_SUPPORT=ON" # XLIB/XCB supported by default
|
||||||
];
|
];
|
||||||
|
|
||||||
|
patches = [ ./use-xdg-paths.patch ];
|
||||||
|
|
||||||
outputs = [ "out" "dev" "demos" ];
|
outputs = [ "out" "dev" "demos" ];
|
||||||
|
|
||||||
preConfigure = ''
|
preConfigure = ''
|
||||||
|
@ -49,10 +51,10 @@ stdenv.mkDerivation rec {
|
||||||
mkdir -p $out/lib $out/bin
|
mkdir -p $out/lib $out/bin
|
||||||
cp -d loader/libvulkan.so* $out/lib
|
cp -d loader/libvulkan.so* $out/lib
|
||||||
cp demos/vulkaninfo $out/bin
|
cp demos/vulkaninfo $out/bin
|
||||||
mkdir -p $out/lib $out/etc/explicit_layer.d
|
mkdir -p $out/lib $out/share/vulkan/explicit_layer.d
|
||||||
cp -d layers/*.so $out/lib/
|
cp -d layers/*.so $out/lib/
|
||||||
cp -d layers/*.json $out/etc/explicit_layer.d/
|
cp -d layers/*.json $out/share/vulkan/explicit_layer.d/
|
||||||
sed -i "s:\\./lib:$out/lib/lib:g" "$out/etc/"**/*.json
|
sed -i "s:\\./lib:$out/lib/lib:g" "$out/share/vulkan/"*/*.json
|
||||||
mkdir -p $dev/include
|
mkdir -p $dev/include
|
||||||
cp -rv ../include $dev/
|
cp -rv ../include $dev/
|
||||||
mkdir -p $demos/bin
|
mkdir -p $demos/bin
|
||||||
|
|
142
pkgs/development/libraries/vulkan-loader/use-xdg-paths.patch
Normal file
142
pkgs/development/libraries/vulkan-loader/use-xdg-paths.patch
Normal file
|
@ -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
|
|
@ -92,12 +92,13 @@ in stdenv.mkDerivation rec {
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out
|
mkdir -p $out
|
||||||
cp -r usr/bin $out/bin
|
cp -r usr/bin $out/bin
|
||||||
|
cp -r usr/share $out/share
|
||||||
cp -r etc $out/etc
|
cp -r etc $out/etc
|
||||||
|
mv $out/etc/vulkan $out/share
|
||||||
cp -r usr/include $out/include
|
cp -r usr/include $out/include
|
||||||
cp -r usr/lib/${libArch} $out/lib
|
cp -r usr/lib/${libArch} $out/lib
|
||||||
mv $out/lib/amdgpu-pro/* $out/lib/
|
mv $out/lib/amdgpu-pro/* $out/lib/
|
||||||
rmdir $out/lib/amdgpu-pro
|
rmdir $out/lib/amdgpu-pro
|
||||||
cp -r usr/share $out/share
|
|
||||||
'' + optionalString (!libsOnly) ''
|
'' + optionalString (!libsOnly) ''
|
||||||
if [ -d $out/lib/xorg ]; then
|
if [ -d $out/lib/xorg ]; then
|
||||||
rm $out/lib/xorg
|
rm $out/lib/xorg
|
||||||
|
@ -133,7 +134,7 @@ in stdenv.mkDerivation rec {
|
||||||
perl -pi -e 's:${libReplaceDir}:${libCompatDir}:g' "$out/lib/$lib"
|
perl -pi -e 's:${libReplaceDir}:${libCompatDir}:g' "$out/lib/$lib"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
substituteInPlace "$out/etc/vulkan/icd.d/amd_icd${bitness}.json" --replace "/usr/lib/${libArch}" "$out/lib"
|
substituteInPlace "$out/share/vulkan/icd.d/amd_icd${bitness}.json" --replace "/usr/lib/${libArch}" "$out/lib"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue