Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

wsl-distro: introduce wsl.useWindowsDriver option #339

Merged
merged 1 commit into from
Dec 30, 2023

Conversation

Atry
Copy link
Contributor

@Atry Atry commented Nov 16, 2023

This PR introduce wsl.useWindowsDriver option, which enables /usr/lib/wsl/lib as OpenGL driver.

With the help of this PR, CUDA can be used if there is a Nvidia GPU.

[nixos@nixos:~]$ nvidia-smi
Thu Nov 16 05:46:07 2023       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.05              Driver Version: 545.84       CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 3060        On  | 00000000:07:00.0  On |                  N/A |
|  0%   38C    P8              18W / 170W |   1481MiB / 12288MiB |      2%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A        25      G   /Xwayland                                 N/A      |
+---------------------------------------------------------------------------------------+

modules/wsl-distro.nix Outdated Show resolved Hide resolved
modules/wsl-distro.nix Outdated Show resolved Hide resolved
@K900
Copy link
Contributor

K900 commented Nov 16, 2023

This isn't enough AFAIK, as you also need to load the libraries required by the Windows drivers. Unless Nvidia's driver is just statically linked?

@Kiskae
Copy link

Kiskae commented Nov 16, 2023

This isn't enough AFAIK, as you also need to load the libraries required by the Windows drivers. Unless Nvidia's driver is just statically linked?

The problem is that the drivers are designed to dlopen other parts of the driver contained in /usr/lib/wsl. I'm pretty sure the only way to get full functionality is something like nix-ld to point the drivers at the correct location.

The driver libs themselves are in a read-only mount, so they can't be patched either.

/usr/lib/wsl/lib]$ readelf -p .rodata ./libcuda.so | grep "\.so"
  [     d]  libcuda.so.1
  [    1a]  libdxcore.so

@Atry
Copy link
Contributor Author

Atry commented Nov 16, 2023

Binaries in nixpkgs already hard-code /run/opengl-driver/lib/ when searching for drivers.

https://github.com/NixOS/nixpkgs/blob/67a9619cb5671df2044fbca897babfac1fdada48/pkgs/development/python-modules/nvidia-ml-py/0001-locate-libnvidia-ml.so.1-on-NixOS.patch#L14

Unpatched Linux binaries would need hardware.opengl.setLdLibraryPath = true in order to find drivers.
https://github.com/NixOS/nixpkgs/blob/67a9619cb5671df2044fbca897babfac1fdada48/nixos/modules/hardware/opengl.nix#L115

@K900
Copy link
Contributor

K900 commented Nov 16, 2023

The problem isn't the binaries themselves, the problem is that the drivers in /usr/lib/wsl attempt to dlopen things and fail.

@Atry
Copy link
Contributor Author

Atry commented Nov 16, 2023

Could you share your error message. At least I can use nvidia-smi.

@K900
Copy link
Contributor

K900 commented Nov 16, 2023

On AMD at the very least it will fail with "can't find libcrypto.so.3" or similar.

@Atry
Copy link
Contributor Author

Atry commented Dec 17, 2023

On AMD at the very least it will fail with "can't find libcrypto.so.3" or similar.

I think a workaround is to enable nix-ld-rs.

@Atry Atry requested review from K900 and SuperSandro2000 December 17, 2023 19:14
@K900
Copy link
Contributor

K900 commented Dec 17, 2023

On AMD at the very least it will fail with "can't find libcrypto.so.3" or similar.

I think a workaround is to enable nix-ld-rs.

No, it doesn't cover dlopen.

@Atry
Copy link
Contributor Author

Atry commented Dec 17, 2023

I only have Nvidia GPUs to test and I cannot reproduce the error about libcrypto.so.3. Do you have solution about how to fix it on AMD GPUs?

@K900
Copy link
Contributor

K900 commented Dec 17, 2023

Not really, at least not easily. Are you saying this configuration is enough to get proper hardware accelerated rendering on Nvidia? Can you run LD_DEBUG=libs vulkaninfo?

@Atry
Copy link
Contributor Author

Atry commented Dec 17, 2023

The motivation of this PR is to support CUDA, which actually works.

I had not tried Vulkan.

@Atry
Copy link
Contributor Author

Atry commented Dec 17, 2023

Now I am running LD_DEBUG=libs vulkaninfo

     57020:     find library=libdl.so.2 [0]; searching
     57020:      search path=glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:tls/x86_64/x86_64:tls/x86_64:tls/x86_64:tls:x86_64/x86_64:x86_64:x86_64::/run/opengl-driver/lib/glibc-hwcaps/x86-64-v3:/run/opengl-driver/lib/glibc-hwcaps/x86-64-v2:/run/opengl-driver/lib/tls/x86_64/x86_64:/run/opengl-driver/lib/tls/x86_64:/run/opengl-driver/lib/tls/x86_64:/run/opengl-driver/lib/tls:/run/opengl-driver/lib/x86_64/x86_64:/run/opengl-driver/lib/x86_64:/run/opengl-driver/lib/x86_64:/run/opengl-driver/lib         (LD_LIBRARY_PATH)
     57020:       trying file=glibc-hwcaps/x86-64-v3/libdl.so.2
     57020:       trying file=glibc-hwcaps/x86-64-v2/libdl.so.2
     57020:       trying file=tls/x86_64/x86_64/libdl.so.2
     57020:       trying file=tls/x86_64/libdl.so.2
     57020:       trying file=tls/x86_64/libdl.so.2
     57020:       trying file=tls/libdl.so.2
     57020:       trying file=x86_64/x86_64/libdl.so.2
     57020:       trying file=x86_64/libdl.so.2
     57020:       trying file=x86_64/libdl.so.2
     57020:       trying file=libdl.so.2
     57020:       trying file=/run/opengl-driver/lib/glibc-hwcaps/x86-64-v3/libdl.so.2
     57020:       trying file=/run/opengl-driver/lib/glibc-hwcaps/x86-64-v2/libdl.so.2
     57020:       trying file=/run/opengl-driver/lib/tls/x86_64/x86_64/libdl.so.2
     57020:       trying file=/run/opengl-driver/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/run/opengl-driver/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/run/opengl-driver/lib/tls/libdl.so.2
     57020:       trying file=/run/opengl-driver/lib/x86_64/x86_64/libdl.so.2
     57020:       trying file=/run/opengl-driver/lib/x86_64/libdl.so.2
     57020:       trying file=/run/opengl-driver/lib/x86_64/libdl.so.2
     57020:       trying file=/run/opengl-driver/lib/libdl.so.2
     57020:      search path=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/glibc-hwcaps/x86-64-v3:/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/glibc-hwcaps/x86-64-v2:/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/tls/x86_64/x86_64:/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/tls/x86_64:/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/tls/x86_64:/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/tls:/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/x86_64/x86_64:/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/x86_64:/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/x86_64:/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/glibc-hwcaps/x86-64-v3:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/glibc-hwcaps/x86-64-v2:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/tls/x86_64/x86_64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/tls/x86_64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/tls/x86_64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/tls:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/x86_64/x86_64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/x86_64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/x86_64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/glibc-hwcaps/x86-64-v3:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/glibc-hwcaps/x86-64-v2:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/tls/x86_64/x86_64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/tls/x86_64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/tls/x86_64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/tls:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/x86_64/x86_64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/x86_64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/x86_64:/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/glibc-hwcaps/x86-64-v3:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/glibc-hwcaps/x86-64-v2:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/tls/x86_64/x86_64:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/tls/x86_64:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/tls/x86_64:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/tls:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/x86_64/x86_64:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/x86_64:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/x86_64:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/glibc-hwcaps/x86-64-v3:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/glibc-hwcaps/x86-64-v2:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/tls/x86_64/x86_64:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/tls/x86_64:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/tls/x86_64:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/tls:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/x86_64/x86_64:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/x86_64:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/x86_64:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/glibc-hwcaps/x86-64-v3:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/glibc-hwcaps/x86-64-v2:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/tls/x86_64/x86_64:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/tls/x86_64:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/tls/x86_64:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/tls:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/x86_64/x86_64:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/x86_64:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/x86_64:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib                (RUNPATH from file vulkaninfo)
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/glibc-hwcaps/x86-64-v3/libdl.so.2
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/glibc-hwcaps/x86-64-v2/libdl.so.2
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/tls/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/tls/libdl.so.2
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/x86_64/libdl.so.2
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/x86_64/libdl.so.2
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/glibc-hwcaps/x86-64-v3/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/glibc-hwcaps/x86-64-v2/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/tls/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/tls/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/glibc-hwcaps/x86-64-v3/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/glibc-hwcaps/x86-64-v2/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/tls/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/tls/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/x86_64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/x86_64/libdl.so.2
     57020:       trying file=/nix/store/s5aizvmdbkjbddxhjzaxp71wvw0jlb3s-vulkan-tools-1.3.211.0/lib/libdl.so.2
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/glibc-hwcaps/x86-64-v3/libdl.so.2
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/glibc-hwcaps/x86-64-v2/libdl.so.2
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/tls/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/tls/libdl.so.2
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/x86_64/libdl.so.2
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/x86_64/libdl.so.2
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/libdl.so.2
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/glibc-hwcaps/x86-64-v3/libdl.so.2
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/glibc-hwcaps/x86-64-v2/libdl.so.2
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/tls/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/tls/libdl.so.2
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/x86_64/libdl.so.2
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/x86_64/libdl.so.2
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/libdl.so.2
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/glibc-hwcaps/x86-64-v3/libdl.so.2
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/glibc-hwcaps/x86-64-v2/libdl.so.2
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/tls/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/tls/libdl.so.2
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/x86_64/libdl.so.2
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/x86_64/libdl.so.2
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/libdl.so.2
     57020:      search path=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/glibc-hwcaps/x86-64-v3:/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/glibc-hwcaps/x86-64-v2:/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/tls/x86_64/x86_64:/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/tls/x86_64:/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/tls/x86_64:/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/tls:/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/x86_64/x86_64:/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/x86_64:/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/x86_64:/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib                (system search path)
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/glibc-hwcaps/x86-64-v3/libdl.so.2
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/glibc-hwcaps/x86-64-v2/libdl.so.2
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/tls/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/tls/x86_64/libdl.so.2
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/tls/libdl.so.2
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/x86_64/x86_64/libdl.so.2
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/x86_64/libdl.so.2
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/x86_64/libdl.so.2
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/libdl.so.2
     57020:
     57020:     find library=libxcb.so.1 [0]; searching
     57020:      search path=glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:tls/x86_64/x86_64:tls/x86_64:tls/x86_64:tls:x86_64/x86_64:x86_64:x86_64::/run/opengl-driver/lib              (LD_LIBRARY_PATH)
     57020:       trying file=glibc-hwcaps/x86-64-v3/libxcb.so.1
     57020:       trying file=glibc-hwcaps/x86-64-v2/libxcb.so.1
     57020:       trying file=tls/x86_64/x86_64/libxcb.so.1
     57020:       trying file=tls/x86_64/libxcb.so.1
     57020:       trying file=tls/x86_64/libxcb.so.1
     57020:       trying file=tls/libxcb.so.1
     57020:       trying file=x86_64/x86_64/libxcb.so.1
     57020:       trying file=x86_64/libxcb.so.1
     57020:       trying file=x86_64/libxcb.so.1
     57020:       trying file=libxcb.so.1
     57020:       trying file=/run/opengl-driver/lib/libxcb.so.1
     57020:      search path=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib            (RUNPATH from file vulkaninfo)
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/libxcb.so.1
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/libxcb.so.1
     57020:
     57020:     find library=libX11.so.6 [0]; searching
     57020:      search path=glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:tls/x86_64/x86_64:tls/x86_64:tls/x86_64:tls:x86_64/x86_64:x86_64:x86_64::/run/opengl-driver/lib              (LD_LIBRARY_PATH)
     57020:       trying file=glibc-hwcaps/x86-64-v3/libX11.so.6
     57020:       trying file=glibc-hwcaps/x86-64-v2/libX11.so.6
     57020:       trying file=tls/x86_64/x86_64/libX11.so.6
     57020:       trying file=tls/x86_64/libX11.so.6
     57020:       trying file=tls/x86_64/libX11.so.6
     57020:       trying file=tls/libX11.so.6
     57020:       trying file=x86_64/x86_64/libX11.so.6
     57020:       trying file=x86_64/libX11.so.6
     57020:       trying file=x86_64/libX11.so.6
     57020:       trying file=libX11.so.6
     57020:       trying file=/run/opengl-driver/lib/libX11.so.6
     57020:      search path=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib            (RUNPATH from file vulkaninfo)
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/libX11.so.6
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/libX11.so.6
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/libX11.so.6
     57020:
     57020:     find library=libwayland-client.so.0 [0]; searching
     57020:      search path=glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:tls/x86_64/x86_64:tls/x86_64:tls/x86_64:tls:x86_64/x86_64:x86_64:x86_64::/run/opengl-driver/lib              (LD_LIBRARY_PATH)
     57020:       trying file=glibc-hwcaps/x86-64-v3/libwayland-client.so.0
     57020:       trying file=glibc-hwcaps/x86-64-v2/libwayland-client.so.0
     57020:       trying file=tls/x86_64/x86_64/libwayland-client.so.0
     57020:       trying file=tls/x86_64/libwayland-client.so.0
     57020:       trying file=tls/x86_64/libwayland-client.so.0
     57020:       trying file=tls/libwayland-client.so.0
     57020:       trying file=x86_64/x86_64/libwayland-client.so.0
     57020:       trying file=x86_64/libwayland-client.so.0
     57020:       trying file=x86_64/libwayland-client.so.0
     57020:       trying file=libwayland-client.so.0
     57020:       trying file=/run/opengl-driver/lib/libwayland-client.so.0
     57020:      search path=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib            (RUNPATH from file vulkaninfo)
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/libwayland-client.so.0
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/libwayland-client.so.0
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/libwayland-client.so.0
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/libwayland-client.so.0
     57020:
     57020:     find library=libstdc++.so.6 [0]; searching
     57020:      search path=glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:tls/x86_64/x86_64:tls/x86_64:tls/x86_64:tls:x86_64/x86_64:x86_64:x86_64::/run/opengl-driver/lib              (LD_LIBRARY_PATH)
     57020:       trying file=glibc-hwcaps/x86-64-v3/libstdc++.so.6
     57020:       trying file=glibc-hwcaps/x86-64-v2/libstdc++.so.6
     57020:       trying file=tls/x86_64/x86_64/libstdc++.so.6
     57020:       trying file=tls/x86_64/libstdc++.so.6
     57020:       trying file=tls/x86_64/libstdc++.so.6
     57020:       trying file=tls/libstdc++.so.6
     57020:       trying file=x86_64/x86_64/libstdc++.so.6
     57020:       trying file=x86_64/libstdc++.so.6
     57020:       trying file=x86_64/libstdc++.so.6
     57020:       trying file=libstdc++.so.6
     57020:       trying file=/run/opengl-driver/lib/libstdc++.so.6
     57020:      search path=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib            (RUNPATH from file vulkaninfo)
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/libstdc++.so.6
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/libstdc++.so.6
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/libstdc++.so.6
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/libstdc++.so.6
     57020:      search path=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib             (system search path)
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/libstdc++.so.6
     57020:      search path=/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/glibc-hwcaps/x86-64-v3:/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/glibc-hwcaps/x86-64-v2:/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/tls/x86_64/x86_64:/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/tls/x86_64:/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/tls/x86_64:/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/tls:/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/x86_64/x86_64:/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/x86_64:/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/x86_64:/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib                (RUNPATH from file vulkaninfo)
     57020:       trying file=/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/glibc-hwcaps/x86-64-v3/libstdc++.so.6
     57020:       trying file=/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/glibc-hwcaps/x86-64-v2/libstdc++.so.6
     57020:       trying file=/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/tls/x86_64/x86_64/libstdc++.so.6
     57020:       trying file=/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/tls/x86_64/libstdc++.so.6
     57020:       trying file=/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/tls/x86_64/libstdc++.so.6
     57020:       trying file=/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/tls/libstdc++.so.6
     57020:       trying file=/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/x86_64/x86_64/libstdc++.so.6
     57020:       trying file=/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/x86_64/libstdc++.so.6
     57020:       trying file=/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/x86_64/libstdc++.so.6
     57020:       trying file=/nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/libstdc++.so.6
     57020:
     57020:     find library=libm.so.6 [0]; searching
     57020:      search path=glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:tls/x86_64/x86_64:tls/x86_64:tls/x86_64:tls:x86_64/x86_64:x86_64:x86_64::/run/opengl-driver/lib              (LD_LIBRARY_PATH)
     57020:       trying file=glibc-hwcaps/x86-64-v3/libm.so.6
     57020:       trying file=glibc-hwcaps/x86-64-v2/libm.so.6
     57020:       trying file=tls/x86_64/x86_64/libm.so.6
     57020:       trying file=tls/x86_64/libm.so.6
     57020:       trying file=tls/x86_64/libm.so.6
     57020:       trying file=tls/libm.so.6
     57020:       trying file=x86_64/x86_64/libm.so.6
     57020:       trying file=x86_64/libm.so.6
     57020:       trying file=x86_64/libm.so.6
     57020:       trying file=libm.so.6
     57020:       trying file=/run/opengl-driver/lib/libm.so.6
     57020:      search path=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib            (RUNPATH from file vulkaninfo)
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/libm.so.6
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/libm.so.6
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/libm.so.6
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/libm.so.6
     57020:      search path=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib             (system search path)
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/libm.so.6
     57020:
     57020:     find library=libgcc_s.so.1 [0]; searching
     57020:      search path=glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:tls/x86_64/x86_64:tls/x86_64:tls/x86_64:tls:x86_64/x86_64:x86_64:x86_64::/run/opengl-driver/lib              (LD_LIBRARY_PATH)
     57020:       trying file=glibc-hwcaps/x86-64-v3/libgcc_s.so.1
     57020:       trying file=glibc-hwcaps/x86-64-v2/libgcc_s.so.1
     57020:       trying file=tls/x86_64/x86_64/libgcc_s.so.1
     57020:       trying file=tls/x86_64/libgcc_s.so.1
     57020:       trying file=tls/x86_64/libgcc_s.so.1
     57020:       trying file=tls/libgcc_s.so.1
     57020:       trying file=x86_64/x86_64/libgcc_s.so.1
     57020:       trying file=x86_64/libgcc_s.so.1
     57020:       trying file=x86_64/libgcc_s.so.1
     57020:       trying file=libgcc_s.so.1
     57020:       trying file=/run/opengl-driver/lib/libgcc_s.so.1
     57020:      search path=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib            (RUNPATH from file vulkaninfo)
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/libgcc_s.so.1
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/libgcc_s.so.1
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/libgcc_s.so.1
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/libgcc_s.so.1
     57020:      search path=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib             (system search path)
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/libgcc_s.so.1
     57020:
     57020:     find library=libc.so.6 [0]; searching
     57020:      search path=glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:tls/x86_64/x86_64:tls/x86_64:tls/x86_64:tls:x86_64/x86_64:x86_64:x86_64::/run/opengl-driver/lib              (LD_LIBRARY_PATH)
     57020:       trying file=glibc-hwcaps/x86-64-v3/libc.so.6
     57020:       trying file=glibc-hwcaps/x86-64-v2/libc.so.6
     57020:       trying file=tls/x86_64/x86_64/libc.so.6
     57020:       trying file=tls/x86_64/libc.so.6
     57020:       trying file=tls/x86_64/libc.so.6
     57020:       trying file=tls/libc.so.6
     57020:       trying file=x86_64/x86_64/libc.so.6
     57020:       trying file=x86_64/libc.so.6
     57020:       trying file=x86_64/libc.so.6
     57020:       trying file=libc.so.6
     57020:       trying file=/run/opengl-driver/lib/libc.so.6
     57020:      search path=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib            (RUNPATH from file vulkaninfo)
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/libc.so.6
     57020:       trying file=/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/libc.so.6
     57020:       trying file=/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/libc.so.6
     57020:       trying file=/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/libc.so.6
     57020:      search path=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib             (system search path)
     57020:       trying file=/nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/libc.so.6
     57020:
     57020:     find library=libXau.so.6 [0]; searching
     57020:      search path=glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:tls/x86_64/x86_64:tls/x86_64:tls/x86_64:tls:x86_64/x86_64:x86_64:x86_64::/run/opengl-driver/lib              (LD_LIBRARY_PATH)
     57020:       trying file=glibc-hwcaps/x86-64-v3/libXau.so.6
     57020:       trying file=glibc-hwcaps/x86-64-v2/libXau.so.6
     57020:       trying file=tls/x86_64/x86_64/libXau.so.6
     57020:       trying file=tls/x86_64/libXau.so.6
     57020:       trying file=tls/x86_64/libXau.so.6
     57020:       trying file=tls/libXau.so.6
     57020:       trying file=x86_64/x86_64/libXau.so.6
     57020:       trying file=x86_64/libXau.so.6
     57020:       trying file=x86_64/libXau.so.6
     57020:       trying file=libXau.so.6
     57020:       trying file=/run/opengl-driver/lib/libXau.so.6
     57020:      search path=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/glibc-hwcaps/x86-64-v3:/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/glibc-hwcaps/x86-64-v2:/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/tls/x86_64/x86_64:/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/tls/x86_64:/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/tls/x86_64:/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/tls:/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/x86_64/x86_64:/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/x86_64:/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/x86_64:/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/glibc-hwcaps/x86-64-v3:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/glibc-hwcaps/x86-64-v2:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/tls/x86_64/x86_64:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/tls/x86_64:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/tls/x86_64:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/tls:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/x86_64/x86_64:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/x86_64:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/x86_64:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib                (RUNPATH from file /nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/libxcb.so.1)
     57020:       trying file=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/glibc-hwcaps/x86-64-v3/libXau.so.6
     57020:       trying file=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/glibc-hwcaps/x86-64-v2/libXau.so.6
     57020:       trying file=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/tls/x86_64/x86_64/libXau.so.6
     57020:       trying file=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/tls/x86_64/libXau.so.6
     57020:       trying file=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/tls/x86_64/libXau.so.6
     57020:       trying file=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/tls/libXau.so.6
     57020:       trying file=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/x86_64/x86_64/libXau.so.6
     57020:       trying file=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/x86_64/libXau.so.6
     57020:       trying file=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/x86_64/libXau.so.6
     57020:       trying file=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/libXau.so.6
     57020:
     57020:     find library=libXdmcp.so.6 [0]; searching
     57020:      search path=glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:tls/x86_64/x86_64:tls/x86_64:tls/x86_64:tls:x86_64/x86_64:x86_64:x86_64::/run/opengl-driver/lib              (LD_LIBRARY_PATH)
     57020:       trying file=glibc-hwcaps/x86-64-v3/libXdmcp.so.6
     57020:       trying file=glibc-hwcaps/x86-64-v2/libXdmcp.so.6
     57020:       trying file=tls/x86_64/x86_64/libXdmcp.so.6
     57020:       trying file=tls/x86_64/libXdmcp.so.6
     57020:       trying file=tls/x86_64/libXdmcp.so.6
     57020:       trying file=tls/libXdmcp.so.6
     57020:       trying file=x86_64/x86_64/libXdmcp.so.6
     57020:       trying file=x86_64/libXdmcp.so.6
     57020:       trying file=x86_64/libXdmcp.so.6
     57020:       trying file=libXdmcp.so.6
     57020:       trying file=/run/opengl-driver/lib/libXdmcp.so.6
     57020:      search path=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/glibc-hwcaps/x86-64-v3:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/glibc-hwcaps/x86-64-v2:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/tls/x86_64/x86_64:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/tls/x86_64:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/tls/x86_64:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/tls:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/x86_64/x86_64:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/x86_64:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/x86_64:/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib           (RUNPATH from file /nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/libxcb.so.1)
     57020:       trying file=/nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/libXdmcp.so.6
     57020:       trying file=/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/glibc-hwcaps/x86-64-v3/libXdmcp.so.6
     57020:       trying file=/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/glibc-hwcaps/x86-64-v2/libXdmcp.so.6
     57020:       trying file=/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/tls/x86_64/x86_64/libXdmcp.so.6
     57020:       trying file=/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/tls/x86_64/libXdmcp.so.6
     57020:       trying file=/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/tls/x86_64/libXdmcp.so.6
     57020:       trying file=/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/tls/libXdmcp.so.6
     57020:       trying file=/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/x86_64/x86_64/libXdmcp.so.6
     57020:       trying file=/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/x86_64/libXdmcp.so.6
     57020:       trying file=/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/x86_64/libXdmcp.so.6
     57020:       trying file=/nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/libXdmcp.so.6
     57020:
     57020:     find library=libffi.so.8 [0]; searching
     57020:      search path=glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:tls/x86_64/x86_64:tls/x86_64:tls/x86_64:tls:x86_64/x86_64:x86_64:x86_64::/run/opengl-driver/lib              (LD_LIBRARY_PATH)
     57020:       trying file=glibc-hwcaps/x86-64-v3/libffi.so.8
     57020:       trying file=glibc-hwcaps/x86-64-v2/libffi.so.8
     57020:       trying file=tls/x86_64/x86_64/libffi.so.8
     57020:       trying file=tls/x86_64/libffi.so.8
     57020:       trying file=tls/x86_64/libffi.so.8
     57020:       trying file=tls/libffi.so.8
     57020:       trying file=x86_64/x86_64/libffi.so.8
     57020:       trying file=x86_64/libffi.so.8
     57020:       trying file=x86_64/libffi.so.8
     57020:       trying file=libffi.so.8
     57020:       trying file=/run/opengl-driver/lib/libffi.so.8
     57020:      search path=/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/glibc-hwcaps/x86-64-v3:/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/glibc-hwcaps/x86-64-v2:/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/tls/x86_64/x86_64:/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/tls/x86_64:/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/tls/x86_64:/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/tls:/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/x86_64/x86_64:/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/x86_64:/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/x86_64:/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib           (RUNPATH from file /nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/libwayland-client.so.0)
     57020:       trying file=/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/glibc-hwcaps/x86-64-v3/libffi.so.8
     57020:       trying file=/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/glibc-hwcaps/x86-64-v2/libffi.so.8
     57020:       trying file=/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/tls/x86_64/x86_64/libffi.so.8
     57020:       trying file=/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/tls/x86_64/libffi.so.8
     57020:       trying file=/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/tls/x86_64/libffi.so.8
     57020:       trying file=/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/tls/libffi.so.8
     57020:       trying file=/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/x86_64/x86_64/libffi.so.8
     57020:       trying file=/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/x86_64/libffi.so.8
     57020:       trying file=/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/x86_64/libffi.so.8
     57020:       trying file=/nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/libffi.so.8
     57020:
     57020:
     57020:     calling init: /nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/ld-linux-x86-64.so.2
     57020:
     57020:
     57020:     calling init: /nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/libc.so.6
     57020:
     57020:
     57020:     calling init: /nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/libffi.so.8
     57020:
     57020:
     57020:     calling init: /nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/libXdmcp.so.6
     57020:
     57020:
     57020:     calling init: /nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/libXau.so.6
     57020:
     57020:
     57020:     calling init: /nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/libgcc_s.so.1
     57020:
     57020:
     57020:     calling init: /nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/libm.so.6
     57020:
     57020:
     57020:     calling init: /nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/libstdc++.so.6
     57020:
     57020:
     57020:     calling init: /nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/libwayland-client.so.0
     57020:
     57020:
     57020:     calling init: /nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/libxcb.so.1
     57020:
     57020:
     57020:     calling init: /nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/libX11.so.6
     57020:
     57020:
     57020:     calling init: /nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/libdl.so.2
     57020:
     57020:
     57020:     initialize program: vulkaninfo
     57020:
     57020:
     57020:     transferring control: vulkaninfo
     57020:
     57020:     find library=libvulkan.so [0]; searching
     57020:      search path=glibc-hwcaps/x86-64-v3:glibc-hwcaps/x86-64-v2:tls/x86_64/x86_64:tls/x86_64:tls/x86_64:tls:x86_64/x86_64:x86_64:x86_64::/run/opengl-driver/lib              (LD_LIBRARY_PATH)
     57020:       trying file=glibc-hwcaps/x86-64-v3/libvulkan.so
     57020:       trying file=glibc-hwcaps/x86-64-v2/libvulkan.so
     57020:       trying file=tls/x86_64/x86_64/libvulkan.so
     57020:       trying file=tls/x86_64/libvulkan.so
     57020:       trying file=tls/x86_64/libvulkan.so
     57020:       trying file=tls/libvulkan.so
     57020:       trying file=x86_64/x86_64/libvulkan.so
     57020:       trying file=x86_64/libvulkan.so
     57020:       trying file=x86_64/libvulkan.so
     57020:       trying file=libvulkan.so
     57020:       trying file=/run/opengl-driver/lib/libvulkan.so
     57020:      search path=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib:/nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib:/nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib:/nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib            (RUNPATH from file vulkaninfo)
     57020:       trying file=/nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/libvulkan.so
     57020:
     57020:
     57020:     calling init: /nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/libvulkan.so
     57020:
ERROR: [Loader Message] Code 0 : vkCreateInstance: Found no drivers!
Cannot create Vulkan instance.
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.
ERROR at /build/source/vulkaninfo/vulkaninfo.h:665:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER
     57020:
     57020:     calling fini: vulkaninfo [0]
     57020:
     57020:
     57020:     calling fini: /nix/store/144pgqy6gdala3yk0xa74dhii6nsmx09-libX11-1.7.2/lib/libX11.so.6 [0]
     57020:
     57020:
     57020:     calling fini: /nix/store/3vkgbqmpz0ijs61pbrkzfm2n3blz3jdm-libxcb-1.14/lib/libxcb.so.1 [0]
     57020:
     57020:
     57020:     calling fini: /nix/store/1v3bm3sh9a3zgibamxz04a1aj04kg1zj-wayland-1.20.0/lib/libwayland-client.so.0 [0]
     57020:
     57020:
     57020:     calling fini: /nix/store/sqhyhvf3qpnnj6xnb55kv46ckfjx2na8-gcc-11.3.0-lib/lib/libstdc++.so.6 [0]
     57020:
     57020:
     57020:     calling fini: /nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/libgcc_s.so.1 [0]
     57020:
     57020:
     57020:     calling fini: /nix/store/gf6db1v6lbglnwa13kd915cfjk4kivcp-libXau-1.0.9/lib/libXau.so.6 [0]
     57020:
     57020:
     57020:     calling fini: /nix/store/zpxivlbp3y4p75jbl5ksk90ajkn4i810-libXdmcp-1.1.3/lib/libXdmcp.so.6 [0]
     57020:
     57020:
     57020:     calling fini: /nix/store/5yc626hjfj65nd1lknf1iqvyvk31fw9g-libffi-3.4.2/lib/libffi.so.8 [0]
     57020:
     57020:
     57020:     calling fini: /nix/store/5fm2h08qdmv8p0yn106fdyiw4gyb2ljw-vulkan-loader-1.3.211.0/lib/libvulkan.so [0]
     57020:
     57020:
     57020:     calling fini: /nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/libm.so.6 [0]
     57020:
     57020:
     57020:     calling fini: /nix/store/b2hc0i92l22ir2kavnjn3z5z6mzabbvm-glibc-2.34-210/lib/libdl.so.2 [0]
     57020:

@Atry Atry changed the title wsl-distro: introduce wsl.useWslLib option wsl-distro: introduce wsl.useWindowsDriver option Dec 17, 2023
@Kiskae

This comment was marked as outdated.

@K900
Copy link
Contributor

K900 commented Dec 17, 2023

Vulkan is supported with Dozen.

@Kiskae
Copy link

Kiskae commented Dec 17, 2023

Then hardware rendering support is just a matter of getting the right mesa drivers linked to the wsl libs and into /run/opengl-driver

@K900
Copy link
Contributor

K900 commented Dec 17, 2023

It is not, because Dozen attempts to dlopen d3d12core.so (which is trivially fixable with some rpath fiddling), but d3d12core.so then dlopens the Windows provided driver, which attempts to dlopen other things, which causes issues because we can't just patch rpath on the Windows provided read only driver.

modules/wsl-distro.nix Outdated Show resolved Hide resolved
@Kiskae
Copy link

Kiskae commented Dec 17, 2023

It is not, because Dozen attempts to dlopen d3d12core.so (which is trivially fixable with some rpath fiddling), but d3d12core.so then dlopens the Windows provided driver, which attempts to dlopen other things, which causes issues because we can't just patch rpath on the Windows provided read only driver.

This kind of reminds me of the problems with the jetson platform driver. One of the proposed solutions there was to create a dummy library that has the correct rpath and preloads the required libraries using its own path. If we can add libwslhelper.so as a DT_NEEDED to the dozen driver and have that library preload libd3d13core.so and libdxgi.so that might work around the read-only drivers being technically broken.

@Atry
Copy link
Contributor Author

Atry commented Dec 17, 2023

When setting hardware.opengl.extraPackages:

[nixos@nixos:~/nixos-wsl-vscode]$ nix shell nixpkgs#vulkan-tools -c vulkaninfo
WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Failed to CreateInstance in ICD 0.  Skipping ICD.
WARNING: dzn is not a conformant Vulkan implementation, testing use only.
==========
VULKANINFO
==========

Vulkan Instance Version: 1.3.268


Instance Extensions: count = 23
===============================
        VK_EXT_acquire_drm_display             : extension revision 1
        VK_EXT_acquire_xlib_display            : extension revision 1
        VK_EXT_debug_report                    : extension revision 10
        VK_EXT_debug_utils                     : extension revision 2
        VK_EXT_direct_mode_display             : extension revision 1
        VK_EXT_display_surface_counter         : extension revision 1
        VK_EXT_surface_maintenance1            : extension revision 1
        VK_EXT_swapchain_colorspace            : extension revision 4
        VK_KHR_device_group_creation           : extension revision 1
        VK_KHR_display                         : extension revision 23
        VK_KHR_external_fence_capabilities     : extension revision 1
        VK_KHR_external_memory_capabilities    : extension revision 1
        VK_KHR_external_semaphore_capabilities : extension revision 1
        VK_KHR_get_display_properties2         : extension revision 1
        VK_KHR_get_physical_device_properties2 : extension revision 2
        VK_KHR_get_surface_capabilities2       : extension revision 1
        VK_KHR_portability_enumeration         : extension revision 1
        VK_KHR_surface                         : extension revision 25
        VK_KHR_surface_protected_capabilities  : extension revision 1
        VK_KHR_wayland_surface                 : extension revision 6
        VK_KHR_xcb_surface                     : extension revision 6
        VK_KHR_xlib_surface                    : extension revision 6
        VK_LUNARG_direct_driver_loading        : extension revision 1

Layers: count = 3
=================
VK_LAYER_INTEL_nullhw (INTEL NULL HW) Vulkan version 1.1.73, layer version 1:
        Layer Extensions: count = 0
        Devices: count = 2
                GPU id = 0 (Microsoft Direct3D12 (NVIDIA GeForce RTX 3060))
                Layer-Device Extensions: count = 0

                GPU id = 1 (llvmpipe (LLVM 16.0.6, 256 bits))
                Layer-Device Extensions: count = 0

VK_LAYER_MESA_device_select (Linux device selection layer) Vulkan version 1.3.211, layer version 1:
        Layer Extensions: count = 0
        Devices: count = 2
                GPU id = 0 (Microsoft Direct3D12 (NVIDIA GeForce RTX 3060))
                Layer-Device Extensions: count = 0

                GPU id = 1 (llvmpipe (LLVM 16.0.6, 256 bits))
                Layer-Device Extensions: count = 0

VK_LAYER_MESA_overlay (Mesa Overlay layer) Vulkan version 1.3.211, layer version 1:
        Layer Extensions: count = 0
        Devices: count = 2
                GPU id = 0 (Microsoft Direct3D12 (NVIDIA GeForce RTX 3060))
                Layer-Device Extensions: count = 0

                GPU id = 1 (llvmpipe (LLVM 16.0.6, 256 bits))
                Layer-Device Extensions: count = 0

Presentable Surfaces:
=====================
GPU id : 0 (Microsoft Direct3D12 (NVIDIA GeForce RTX 3060)):
        Surface types: count = 2
                VK_KHR_xcb_surface
                VK_KHR_xlib_surface
        Formats: count = 2
                SurfaceFormat[0]:
                        format = FORMAT_B8G8R8A8_SRGB
                        colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
                SurfaceFormat[1]:
                        format = FORMAT_B8G8R8A8_UNORM
                        colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
        Present Modes: count = 4
                PRESENT_MODE_IMMEDIATE_KHR
                PRESENT_MODE_MAILBOX_KHR
                PRESENT_MODE_FIFO_KHR
                PRESENT_MODE_FIFO_RELAXED_KHR
        VkSurfaceCapabilitiesKHR:
        -------------------------
                minImageCount = 3
                maxImageCount = 0
                currentExtent:
                        width  = 256
                        height = 256
                minImageExtent:
                        width  = 256
                        height = 256
                maxImageExtent:
                        width  = 256
                        height = 256
                maxImageArrayLayers = 1
                supportedTransforms: count = 1
                        SURFACE_TRANSFORM_IDENTITY_BIT_KHR
                currentTransform = SURFACE_TRANSFORM_IDENTITY_BIT_KHR
                supportedCompositeAlpha: count = 2
                        COMPOSITE_ALPHA_OPAQUE_BIT_KHR
                        COMPOSITE_ALPHA_INHERIT_BIT_KHR
                supportedUsageFlags: count = 6
                        IMAGE_USAGE_TRANSFER_SRC_BIT
                        IMAGE_USAGE_TRANSFER_DST_BIT
                        IMAGE_USAGE_SAMPLED_BIT
                        IMAGE_USAGE_STORAGE_BIT
                        IMAGE_USAGE_COLOR_ATTACHMENT_BIT
                        IMAGE_USAGE_INPUT_ATTACHMENT_BIT
        VkSurfaceProtectedCapabilitiesKHR:
        ----------------------------------
                supportsProtected = false

        VK_EXT_surface_maintenance_1:
        -----------------------------
                PRESENT_MODE_IMMEDIATE_KHR:
                        VkSurfacePresentScalingCapabilitiesEXT:
                                supportedPresentScaling:
                                        None
                                supportedPresentGravityX:
                                        None
                                supportedPresentGravityY:
                                        None
                                minScaledImageExtent:
                                        width  = 256
                                        height = 256
                                maxScaledImageExtent:
                                        width  = 256
                                        height = 256
                        VkSurfacePresentModeCompatibilityEXT:
                                presentModeCount                = 1
                                pPresentModes: count = 1
                                        PRESENT_MODE_IMMEDIATE_KHR
                PRESENT_MODE_MAILBOX_KHR:
                        VkSurfacePresentScalingCapabilitiesEXT:
                                supportedPresentScaling:
                                        None
                                supportedPresentGravityX:
                                        None
                                supportedPresentGravityY:
                                        None
                                minScaledImageExtent:
                                        width  = 256
                                        height = 256
                                maxScaledImageExtent:
                                        width  = 256
                                        height = 256
                        VkSurfacePresentModeCompatibilityEXT:
                                presentModeCount                = 1
                                pPresentModes: count = 1
                                        PRESENT_MODE_MAILBOX_KHR
                PRESENT_MODE_FIFO_KHR:
                        VkSurfacePresentScalingCapabilitiesEXT:
                                supportedPresentScaling:
                                        None
                                supportedPresentGravityX:
                                        None
                                supportedPresentGravityY:
                                        None
                                minScaledImageExtent:
                                        width  = 256
                                        height = 256
                                maxScaledImageExtent:
                                        width  = 256
                                        height = 256
                        VkSurfacePresentModeCompatibilityEXT:
                                presentModeCount                = 1
                                pPresentModes: count = 1
                                        PRESENT_MODE_FIFO_KHR
                PRESENT_MODE_FIFO_RELAXED_KHR:
                        VkSurfacePresentScalingCapabilitiesEXT:
                                supportedPresentScaling:
                                        None
                                supportedPresentGravityX:
                                        None
                                supportedPresentGravityY:
                                        None
                                minScaledImageExtent:
                                        width  = 256
                                        height = 256
                                maxScaledImageExtent:
                                        width  = 256
                                        height = 256
                        VkSurfacePresentModeCompatibilityEXT:
                                presentModeCount                = 1
                                pPresentModes: count = 1
                                        PRESENT_MODE_FIFO_RELAXED_KHR

GPU id : 1 (llvmpipe (LLVM 16.0.6, 256 bits)):
        Surface types: count = 2
                VK_KHR_xcb_surface
                VK_KHR_xlib_surface
        Formats: count = 2
                SurfaceFormat[0]:
                        format = FORMAT_B8G8R8A8_SRGB
                        colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
                SurfaceFormat[1]:
                        format = FORMAT_B8G8R8A8_UNORM
                        colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
        Present Modes: count = 4
                PRESENT_MODE_IMMEDIATE_KHR
                PRESENT_MODE_MAILBOX_KHR
                PRESENT_MODE_FIFO_KHR
                PRESENT_MODE_FIFO_RELAXED_KHR
        VkSurfaceCapabilitiesKHR:
        -------------------------
                minImageCount = 3
                maxImageCount = 0
                currentExtent:
                        width  = 256
                        height = 256
                minImageExtent:
                        width  = 256
                        height = 256
                maxImageExtent:
                        width  = 256
                        height = 256
                maxImageArrayLayers = 1
                supportedTransforms: count = 1
                        SURFACE_TRANSFORM_IDENTITY_BIT_KHR
                currentTransform = SURFACE_TRANSFORM_IDENTITY_BIT_KHR
                supportedCompositeAlpha: count = 2
                        COMPOSITE_ALPHA_OPAQUE_BIT_KHR
                        COMPOSITE_ALPHA_INHERIT_BIT_KHR
                supportedUsageFlags: count = 7
                        IMAGE_USAGE_TRANSFER_SRC_BIT
                        IMAGE_USAGE_TRANSFER_DST_BIT
                        IMAGE_USAGE_SAMPLED_BIT
                        IMAGE_USAGE_STORAGE_BIT
                        IMAGE_USAGE_COLOR_ATTACHMENT_BIT
                        IMAGE_USAGE_INPUT_ATTACHMENT_BIT
                        IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
        VkSurfaceProtectedCapabilitiesKHR:
        ----------------------------------
                supportsProtected = false

        VK_EXT_surface_maintenance_1:
        -----------------------------
                PRESENT_MODE_IMMEDIATE_KHR:
                        VkSurfacePresentScalingCapabilitiesEXT:
                                supportedPresentScaling:
                                        None
                                supportedPresentGravityX:
                                        None
                                supportedPresentGravityY:
                                        None
                                minScaledImageExtent:
                                        width  = 256
                                        height = 256
                                maxScaledImageExtent:
                                        width  = 256
                                        height = 256
                        VkSurfacePresentModeCompatibilityEXT:
                                presentModeCount                = 1
                                pPresentModes: count = 1
                                        PRESENT_MODE_IMMEDIATE_KHR
                PRESENT_MODE_MAILBOX_KHR:
                        VkSurfacePresentScalingCapabilitiesEXT:
                                supportedPresentScaling:
                                        None
                                supportedPresentGravityX:
                                        None
                                supportedPresentGravityY:
                                        None
                                minScaledImageExtent:
                                        width  = 256
                                        height = 256
                                maxScaledImageExtent:
                                        width  = 256
                                        height = 256
                        VkSurfacePresentModeCompatibilityEXT:
                                presentModeCount                = 1
                                pPresentModes: count = 1
                                        PRESENT_MODE_MAILBOX_KHR
                PRESENT_MODE_FIFO_KHR:
                        VkSurfacePresentScalingCapabilitiesEXT:
                                supportedPresentScaling:
                                        None
                                supportedPresentGravityX:
                                        None
                                supportedPresentGravityY:
                                        None
                                minScaledImageExtent:
                                        width  = 256
                                        height = 256
                                maxScaledImageExtent:
                                        width  = 256
                                        height = 256
                        VkSurfacePresentModeCompatibilityEXT:
                                presentModeCount                = 1
                                pPresentModes: count = 1
                                        PRESENT_MODE_FIFO_KHR
                PRESENT_MODE_FIFO_RELAXED_KHR:
                        VkSurfacePresentScalingCapabilitiesEXT:
                                supportedPresentScaling:
                                        None
                                supportedPresentGravityX:
                                        None
                                supportedPresentGravityY:
                                        None
                                minScaledImageExtent:
                                        width  = 256
                                        height = 256
                                maxScaledImageExtent:
                                        width  = 256
                                        height = 256
                        VkSurfacePresentModeCompatibilityEXT:
                                presentModeCount                = 1
                                pPresentModes: count = 1
                                        PRESENT_MODE_FIFO_RELAXED_KHR

GPU id : 0 (Microsoft Direct3D12 (NVIDIA GeForce RTX 3060)):
        Surface type = VK_KHR_wayland_surface
        Formats: count = 3
                SurfaceFormat[0]:
                        format = FORMAT_B8G8R8A8_SRGB
                        colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
                SurfaceFormat[1]:
                        format = FORMAT_B8G8R8A8_UNORM
                        colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
                SurfaceFormat[2]:
                        format = FORMAT_R5G6B5_UNORM_PACK16
                        colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
        Present Modes: count = 2
                PRESENT_MODE_MAILBOX_KHR
                PRESENT_MODE_FIFO_KHR
        VkSurfaceCapabilitiesKHR:
        -------------------------
                minImageCount = 4
                maxImageCount = 0
                currentExtent:
                        width  = 4294967295
                        height = 4294967295
                minImageExtent:
                        width  = 1
                        height = 1
                maxImageExtent:
                        width  = 16384
                        height = 16384
                maxImageArrayLayers = 1
                supportedTransforms: count = 1
                        SURFACE_TRANSFORM_IDENTITY_BIT_KHR
                currentTransform = SURFACE_TRANSFORM_IDENTITY_BIT_KHR
                supportedCompositeAlpha: count = 2
                        COMPOSITE_ALPHA_OPAQUE_BIT_KHR
                        COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR
                supportedUsageFlags: count = 6
                        IMAGE_USAGE_TRANSFER_SRC_BIT
                        IMAGE_USAGE_TRANSFER_DST_BIT
                        IMAGE_USAGE_SAMPLED_BIT
                        IMAGE_USAGE_STORAGE_BIT
                        IMAGE_USAGE_COLOR_ATTACHMENT_BIT
                        IMAGE_USAGE_INPUT_ATTACHMENT_BIT
        VkSurfaceProtectedCapabilitiesKHR:
        ----------------------------------
                supportsProtected = false

        VK_EXT_surface_maintenance_1:
        -----------------------------
                PRESENT_MODE_MAILBOX_KHR:
                        VkSurfacePresentScalingCapabilitiesEXT:
                                supportedPresentScaling:
                                        None
                                supportedPresentGravityX:
                                        None
                                supportedPresentGravityY:
                                        None
                                minScaledImageExtent:
                                        width  = 1
                                        height = 1
                                maxScaledImageExtent:
                                        width  = 16384
                                        height = 16384
                        VkSurfacePresentModeCompatibilityEXT:
                                presentModeCount                = 2
                                pPresentModes: count = 2
                                        PRESENT_MODE_MAILBOX_KHR
                                        PRESENT_MODE_FIFO_KHR
                PRESENT_MODE_FIFO_KHR:
                        VkSurfacePresentScalingCapabilitiesEXT:
                                supportedPresentScaling:
                                        None
                                supportedPresentGravityX:
                                        None
                                supportedPresentGravityY:
                                        None
                                minScaledImageExtent:
                                        width  = 1
                                        height = 1
                                maxScaledImageExtent:
                                        width  = 16384
                                        height = 16384
                        VkSurfacePresentModeCompatibilityEXT:
                                presentModeCount                = 2
                                pPresentModes: count = 2
                                        PRESENT_MODE_FIFO_KHR
                                        PRESENT_MODE_MAILBOX_KHR

GPU id : 1 (llvmpipe (LLVM 16.0.6, 256 bits)):
        Surface type = VK_KHR_wayland_surface
        Formats: count = 3
                SurfaceFormat[0]:
                        format = FORMAT_B8G8R8A8_SRGB
                        colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
                SurfaceFormat[1]:
                        format = FORMAT_B8G8R8A8_UNORM
                        colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
                SurfaceFormat[2]:
                        format = FORMAT_R5G6B5_UNORM_PACK16
                        colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
        Present Modes: count = 2
                PRESENT_MODE_MAILBOX_KHR
                PRESENT_MODE_FIFO_KHR
        VkSurfaceCapabilitiesKHR:
        -------------------------
                minImageCount = 4
                maxImageCount = 0
                currentExtent:
                        width  = 4294967295
                        height = 4294967295
                minImageExtent:
                        width  = 1
                        height = 1
                maxImageExtent:
                        width  = 16384
                        height = 16384
                maxImageArrayLayers = 1
                supportedTransforms: count = 1
                        SURFACE_TRANSFORM_IDENTITY_BIT_KHR
                currentTransform = SURFACE_TRANSFORM_IDENTITY_BIT_KHR
                supportedCompositeAlpha: count = 2
                        COMPOSITE_ALPHA_OPAQUE_BIT_KHR
                        COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR
                supportedUsageFlags: count = 7
                        IMAGE_USAGE_TRANSFER_SRC_BIT
                        IMAGE_USAGE_TRANSFER_DST_BIT
                        IMAGE_USAGE_SAMPLED_BIT
                        IMAGE_USAGE_STORAGE_BIT
                        IMAGE_USAGE_COLOR_ATTACHMENT_BIT
                        IMAGE_USAGE_INPUT_ATTACHMENT_BIT
                        IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
        VkSurfaceProtectedCapabilitiesKHR:
        ----------------------------------
                supportsProtected = false

        VK_EXT_surface_maintenance_1:
        -----------------------------
                PRESENT_MODE_MAILBOX_KHR:
                        VkSurfacePresentScalingCapabilitiesEXT:
                                supportedPresentScaling:
                                        None
                                supportedPresentGravityX:
                                        None
                                supportedPresentGravityY:
                                        None
                                minScaledImageExtent:
                                        width  = 1
                                        height = 1
                                maxScaledImageExtent:
                                        width  = 16384
                                        height = 16384
                        VkSurfacePresentModeCompatibilityEXT:
                                presentModeCount                = 2
                                pPresentModes: count = 2
                                        PRESENT_MODE_MAILBOX_KHR
                                        PRESENT_MODE_FIFO_KHR
                PRESENT_MODE_FIFO_KHR:
                        VkSurfacePresentScalingCapabilitiesEXT:
                                supportedPresentScaling:
                                        None
                                supportedPresentGravityX:
                                        None
                                supportedPresentGravityY:
                                        None
                                minScaledImageExtent:
                                        width  = 1
                                        height = 1
                                maxScaledImageExtent:
                                        width  = 16384
                                        height = 16384
                        VkSurfacePresentModeCompatibilityEXT:
                                presentModeCount                = 2
                                pPresentModes: count = 2
                                        PRESENT_MODE_FIFO_KHR
                                        PRESENT_MODE_MAILBOX_KHR


Device Properties and Extensions:
=================================
GPU0:
VkPhysicalDeviceProperties:
---------------------------
        apiVersion        = 1.2.246 (4202742)
        driverVersion     = 23.1.9 (96473097)
        vendorID          = 0x10de
        deviceID          = 0x2504
        deviceType        = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
        deviceName        = Microsoft Direct3D12 (NVIDIA GeForce RTX 3060)
        pipelineCacheUUID = 8080c838-0ce0-f5d6-bff4-ce3858d84f7b

VkPhysicalDeviceLimits:
-----------------------
        maxImageDimension1D                             = 16384
        maxImageDimension2D                             = 16384
        maxImageDimension3D                             = 2048
        maxImageDimensionCube                           = 16384
        maxImageArrayLayers                             = 2048
        maxTexelBufferElements                          = 134217728
        maxUniformBufferRange                           = 65536
        maxStorageBufferRange                           = 134217728
        maxPushConstantsSize                            = 128
        maxMemoryAllocationCount                        = 4096
        maxSamplerAllocationCount                       = 4000
        bufferImageGranularity                          = 0x00010000
        sparseAddressSpaceSize                          = 0x00000000
        maxBoundDescriptorSets                          = 8
        maxPerStageDescriptorSamplers                   = 2048
        maxPerStageDescriptorUniformBuffers             = 1000000
        maxPerStageDescriptorStorageBuffers             = 1000000
        maxPerStageDescriptorSampledImages              = 1000000
        maxPerStageDescriptorStorageImages              = 1000000
        maxPerStageDescriptorInputAttachments           = 1000000
        maxPerStageResources                            = 1000000
        maxDescriptorSetSamplers                        = 2048
        maxDescriptorSetUniformBuffers                  = 1000000
        maxDescriptorSetUniformBuffersDynamic           = 8
        maxDescriptorSetStorageBuffers                  = 1000000
        maxDescriptorSetStorageBuffersDynamic           = 4
        maxDescriptorSetSampledImages                   = 1000000
        maxDescriptorSetStorageImages                   = 1000000
        maxDescriptorSetInputAttachments                = 1000000
        maxVertexInputAttributes                        = 16
        maxVertexInputBindings                          = 32
        maxVertexInputAttributeOffset                   = 2047
        maxVertexInputBindingStride                     = 2048
        maxVertexOutputComponents                       = 128
        maxTessellationGenerationLevel                  = 0
        maxTessellationPatchSize                        = 0
        maxTessellationControlPerVertexInputComponents  = 0
        maxTessellationControlPerVertexOutputComponents = 0
        maxTessellationControlPerPatchOutputComponents  = 0
        maxTessellationControlTotalOutputComponents     = 0
        maxTessellationEvaluationInputComponents        = 0
        maxTessellationEvaluationOutputComponents       = 0
        maxGeometryShaderInvocations                    = 32
        maxGeometryInputComponents                      = 128
        maxGeometryOutputComponents                     = 128
        maxGeometryOutputVertices                       = 1024
        maxGeometryTotalOutputComponents                = 1024
        maxFragmentInputComponents                      = 128
        maxFragmentOutputAttachments                    = 8
        maxFragmentDualSrcAttachments                   = 0
        maxFragmentCombinedOutputResources              = 8
        maxComputeSharedMemorySize                      = 32768
        maxComputeWorkGroupCount: count = 3
                65535
                65535
                65535
        maxComputeWorkGroupInvocations                  = 1024
        maxComputeWorkGroupSize: count = 3
                1024
                1024
                64
        subPixelPrecisionBits                           = 8
        subTexelPrecisionBits                           = 8
        mipmapPrecisionBits                             = 8
        maxDrawIndexedIndexValue                        = 16777215
        maxDrawIndirectCount                            = 4294967295
        maxSamplerLodBias                               = 15.99
        maxSamplerAnisotropy                            = 16
        maxViewports                                    = 16
        maxViewportDimensions: count = 2
                16384
                16384
        viewportBoundsRange: count = 2
                -32768
                32767
        viewportSubPixelBits                            = 0
        minMemoryMapAlignment                           = 64
        minTexelBufferOffsetAlignment                   = 0x00000020
        minUniformBufferOffsetAlignment                 = 0x00000100
        minStorageBufferOffsetAlignment                 = 0x00000010
        minTexelOffset                                  = -8
        maxTexelOffset                                  = 7
        minTexelGatherOffset                            = -32
        maxTexelGatherOffset                            = 31
        minInterpolationOffset                          = -0.5
        maxInterpolationOffset                          = 0.5
        subPixelInterpolationOffsetBits                 = 4
        maxFramebufferWidth                             = 16384
        maxFramebufferHeight                            = 16384
        maxFramebufferLayers                            = 2048
        framebufferColorSampleCounts: count = 5
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_2_BIT
                SAMPLE_COUNT_4_BIT
                SAMPLE_COUNT_8_BIT
                SAMPLE_COUNT_16_BIT
        framebufferDepthSampleCounts: count = 5
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_2_BIT
                SAMPLE_COUNT_4_BIT
                SAMPLE_COUNT_8_BIT
                SAMPLE_COUNT_16_BIT
        framebufferStencilSampleCounts: count = 5
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_2_BIT
                SAMPLE_COUNT_4_BIT
                SAMPLE_COUNT_8_BIT
                SAMPLE_COUNT_16_BIT
        framebufferNoAttachmentsSampleCounts: count = 5
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_2_BIT
                SAMPLE_COUNT_4_BIT
                SAMPLE_COUNT_8_BIT
                SAMPLE_COUNT_16_BIT
        maxColorAttachments                             = 8
        sampledImageColorSampleCounts: count = 5
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_2_BIT
                SAMPLE_COUNT_4_BIT
                SAMPLE_COUNT_8_BIT
                SAMPLE_COUNT_16_BIT
        sampledImageIntegerSampleCounts: count = 1
                SAMPLE_COUNT_1_BIT
        sampledImageDepthSampleCounts: count = 5
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_2_BIT
                SAMPLE_COUNT_4_BIT
                SAMPLE_COUNT_8_BIT
                SAMPLE_COUNT_16_BIT
        sampledImageStencilSampleCounts: count = 5
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_2_BIT
                SAMPLE_COUNT_4_BIT
                SAMPLE_COUNT_8_BIT
                SAMPLE_COUNT_16_BIT
        storageImageSampleCounts: count = 1
                SAMPLE_COUNT_1_BIT
        maxSampleMaskWords                              = 1
        timestampComputeAndGraphics                     = true
        timestampPeriod                                 = 1
        maxClipDistances                                = 8
        maxCullDistances                                = 8
        maxCombinedClipAndCullDistances                 = 8
        discreteQueuePriorities                         = 2
        pointSizeRange: count = 2
                1
                1
        lineWidthRange: count = 2
                1
                1
        pointSizeGranularity                            = 0
        lineWidthGranularity                            = 0
        strictLines                                     = false
        standardSampleLocations                         = true
        optimalBufferCopyOffsetAlignment                = 0x00000200
        optimalBufferCopyRowPitchAlignment              = 0x00000100
        nonCoherentAtomSize                             = 0x00000100

VkPhysicalDeviceSparseProperties:
---------------------------------
        residencyStandard2DBlockShape            = false
        residencyStandard2DMultisampleBlockShape = false
        residencyStandard3DBlockShape            = false
        residencyAlignedMipSize                  = false
        residencyNonResidentStrict               = false

VkPhysicalDeviceDepthStencilResolveProperties:
----------------------------------------------
        supportedDepthResolveModes: count = 1
                RESOLVE_MODE_AVERAGE_BIT
        supportedStencilResolveModes: count = 1
                RESOLVE_MODE_SAMPLE_ZERO_BIT
        independentResolveNone = false
        independentResolve     = false

VkPhysicalDeviceDescriptorIndexingProperties:
---------------------------------------------
        maxUpdateAfterBindDescriptorsInAllPools              = 1000000
        shaderUniformBufferArrayNonUniformIndexingNative     = true
        shaderSampledImageArrayNonUniformIndexingNative      = true
        shaderStorageBufferArrayNonUniformIndexingNative     = true
        shaderStorageImageArrayNonUniformIndexingNative      = true
        shaderInputAttachmentArrayNonUniformIndexingNative   = true
        robustBufferAccessUpdateAfterBind                    = true
        quadDivergentImplicitLod                             = false
        maxPerStageDescriptorUpdateAfterBindSamplers         = 1000000
        maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 1000000
        maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 1000000
        maxPerStageDescriptorUpdateAfterBindSampledImages    = 1000000
        maxPerStageDescriptorUpdateAfterBindStorageImages    = 1000000
        maxPerStageDescriptorUpdateAfterBindInputAttachments = 1000000
        maxPerStageUpdateAfterBindResources                  = 1000000
        maxDescriptorSetUpdateAfterBindSamplers              = 1000000
        maxDescriptorSetUpdateAfterBindUniformBuffers        = 1000000
        maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 8
        maxDescriptorSetUpdateAfterBindStorageBuffers        = 1000000
        maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 4
        maxDescriptorSetUpdateAfterBindSampledImages         = 1000000
        maxDescriptorSetUpdateAfterBindStorageImages         = 1000000
        maxDescriptorSetUpdateAfterBindInputAttachments      = 1000000

VkPhysicalDeviceDriverProperties:
---------------------------------
        driverID        = DRIVER_ID_MESA_DOZEN
        driverName      = Dozen
        driverInfo      = Mesa 23.1.9
        conformanceVersion:
                major    = 0
                minor    = 0
                subminor = 0
                patch    = 0

VkPhysicalDeviceFloatControlsProperties:
----------------------------------------
        denormBehaviorIndependence            = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
        roundingModeIndependence              = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
        shaderSignedZeroInfNanPreserveFloat16 = false
        shaderSignedZeroInfNanPreserveFloat32 = false
        shaderSignedZeroInfNanPreserveFloat64 = false
        shaderDenormPreserveFloat16           = true
        shaderDenormPreserveFloat32           = true
        shaderDenormPreserveFloat64           = true
        shaderDenormFlushToZeroFloat16        = false
        shaderDenormFlushToZeroFloat32        = true
        shaderDenormFlushToZeroFloat64        = false
        shaderRoundingModeRTEFloat16          = true
        shaderRoundingModeRTEFloat32          = true
        shaderRoundingModeRTEFloat64          = true
        shaderRoundingModeRTZFloat16          = false
        shaderRoundingModeRTZFloat32          = false
        shaderRoundingModeRTZFloat64          = false

VkPhysicalDeviceIDProperties:
-----------------------------
        deviceUUID      = 4eff02a2-4058-1ef7-8d19-864f058866f8
        driverUUID      = 79e8d58c-a5cc-f8c3-1135-6549ae93f4d7
        deviceLUID      = 19563f00-00000000
        deviceNodeMask  = 0
        deviceLUIDValid = true

VkPhysicalDeviceMaintenance3Properties:
---------------------------------------
        maxPerSetDescriptors    = 1024
        maxMemoryAllocationSize = 0x80000000

VkPhysicalDeviceMultiviewProperties:
------------------------------------
        maxMultiviewViewCount     = 6
        maxMultiviewInstanceIndex = 4294967295

VkPhysicalDevicePointClippingProperties:
----------------------------------------
        pointClippingBehavior = POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES

VkPhysicalDeviceProtectedMemoryProperties:
------------------------------------------
        protectedNoFault = false

VkPhysicalDeviceSamplerFilterMinmaxProperties:
----------------------------------------------
        filterMinmaxSingleComponentFormats = false
        filterMinmaxImageComponentMapping  = false

VkPhysicalDeviceSubgroupProperties:
-----------------------------------
        subgroupSize              = 32
        supportedStages: count = 2
                SHADER_STAGE_FRAGMENT_BIT
                SHADER_STAGE_COMPUTE_BIT
        supportedOperations: count = 7
                SUBGROUP_FEATURE_BASIC_BIT
                SUBGROUP_FEATURE_VOTE_BIT
                SUBGROUP_FEATURE_ARITHMETIC_BIT
                SUBGROUP_FEATURE_BALLOT_BIT
                SUBGROUP_FEATURE_SHUFFLE_BIT
                SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
                SUBGROUP_FEATURE_QUAD_BIT
        quadOperationsInAllStages = false

VkPhysicalDeviceSubgroupSizeControlPropertiesEXT:
-------------------------------------------------
        minSubgroupSize              = 32
        maxSubgroupSize              = 32
        maxComputeWorkgroupSubgroups = 32
        requiredSubgroupSizeStages: count = 1
                SHADER_STAGE_COMPUTE_BIT

VkPhysicalDeviceTimelineSemaphoreProperties:
--------------------------------------------
        maxTimelineSemaphoreValueDifference = 18446744073709551615

VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT:
----------------------------------------------------
        maxVertexAttribDivisor = 4294967295

VkPhysicalDeviceVulkan11Properties:
-----------------------------------
        deviceUUID                        = 4eff02a2-4058-1ef7-8d19-864f058866f8
        driverUUID                        = 79e8d58c-a5cc-f8c3-1135-6549ae93f4d7
        deviceLUID                        = 19563f00-00000000
        deviceNodeMask                    = 0
        deviceLUIDValid                   = true
        subgroupSize                      = 32
        subgroupSupportedStages: count = 2
                SHADER_STAGE_FRAGMENT_BIT
                SHADER_STAGE_COMPUTE_BIT
        subgroupSupportedOperations: count = 7
                SUBGROUP_FEATURE_BASIC_BIT
                SUBGROUP_FEATURE_VOTE_BIT
                SUBGROUP_FEATURE_ARITHMETIC_BIT
                SUBGROUP_FEATURE_BALLOT_BIT
                SUBGROUP_FEATURE_SHUFFLE_BIT
                SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
                SUBGROUP_FEATURE_QUAD_BIT
        subgroupQuadOperationsInAllStages = false
        pointClippingBehavior             = POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES
        maxMultiviewViewCount             = 6
        maxMultiviewInstanceIndex         = 4294967295
        protectedNoFault                  = false
        maxPerSetDescriptors              = 1024
        maxMemoryAllocationSize           = 0x80000000

VkPhysicalDeviceVulkan12Properties:
-----------------------------------
        driverID                                             = DRIVER_ID_MESA_DOZEN
        driverName                                           = Dozen
        driverInfo                                           = Mesa 23.1.9
        conformanceVersion:
                major    = 0
                minor    = 0
                subminor = 0
                patch    = 0
        denormBehaviorIndependence                           = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
        roundingModeIndependence                             = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
        shaderSignedZeroInfNanPreserveFloat16                = false
        shaderSignedZeroInfNanPreserveFloat32                = false
        shaderSignedZeroInfNanPreserveFloat64                = false
        shaderDenormPreserveFloat16                          = true
        shaderDenormPreserveFloat32                          = true
        shaderDenormPreserveFloat64                          = true
        shaderDenormFlushToZeroFloat16                       = false
        shaderDenormFlushToZeroFloat32                       = true
        shaderDenormFlushToZeroFloat64                       = false
        shaderRoundingModeRTEFloat16                         = true
        shaderRoundingModeRTEFloat32                         = true
        shaderRoundingModeRTEFloat64                         = true
        shaderRoundingModeRTZFloat16                         = false
        shaderRoundingModeRTZFloat32                         = false
        shaderRoundingModeRTZFloat64                         = false
        maxUpdateAfterBindDescriptorsInAllPools              = 1000000
        shaderUniformBufferArrayNonUniformIndexingNative     = true
        shaderSampledImageArrayNonUniformIndexingNative      = true
        shaderStorageBufferArrayNonUniformIndexingNative     = true
        shaderStorageImageArrayNonUniformIndexingNative      = true
        shaderInputAttachmentArrayNonUniformIndexingNative   = true
        robustBufferAccessUpdateAfterBind                    = true
        quadDivergentImplicitLod                             = false
        maxPerStageDescriptorUpdateAfterBindSamplers         = 1000000
        maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 1000000
        maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 1000000
        maxPerStageDescriptorUpdateAfterBindSampledImages    = 1000000
        maxPerStageDescriptorUpdateAfterBindStorageImages    = 1000000
        maxPerStageDescriptorUpdateAfterBindInputAttachments = 1000000
        maxPerStageUpdateAfterBindResources                  = 1000000
        maxDescriptorSetUpdateAfterBindSamplers              = 1000000
        maxDescriptorSetUpdateAfterBindUniformBuffers        = 1000000
        maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 8
        maxDescriptorSetUpdateAfterBindStorageBuffers        = 1000000
        maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 4
        maxDescriptorSetUpdateAfterBindSampledImages         = 1000000
        maxDescriptorSetUpdateAfterBindStorageImages         = 1000000
        maxDescriptorSetUpdateAfterBindInputAttachments      = 1000000
        supportedDepthResolveModes: count = 1
                RESOLVE_MODE_AVERAGE_BIT
        supportedStencilResolveModes: count = 1
                RESOLVE_MODE_SAMPLE_ZERO_BIT
        independentResolveNone                               = false
        independentResolve                                   = false
        filterMinmaxSingleComponentFormats                   = false
        filterMinmaxImageComponentMapping                    = false
        maxTimelineSemaphoreValueDifference                  = 18446744073709551615
        framebufferIntegerColorSampleCounts: count = 1
                SAMPLE_COUNT_1_BIT


VkPhysicalDeviceHostImageCopyPropertiesEXT:
-------------------------------------------
        copySrcLayoutCount                  = 0
        pCopySrcLayouts:
        copyDstLayoutCount                  = 0
        pCopyDstLayouts:
        optimalTilingLayoutUUID             = 00000000-0000-0000-0000-000000000000
        identicalMemoryTypeRequirements     = false
Device Extensions: count = 22
        VK_EXT_descriptor_indexing          : extension revision 2
        VK_EXT_shader_subgroup_ballot       : extension revision 1
        VK_EXT_shader_subgroup_vote         : extension revision 1
        VK_EXT_subgroup_size_control        : extension revision 2
        VK_EXT_vertex_attribute_divisor     : extension revision 3
        VK_KHR_16bit_storage                : extension revision 1
        VK_KHR_bind_memory2                 : extension revision 1
        VK_KHR_create_renderpass2           : extension revision 1
        VK_KHR_depth_stencil_resolve        : extension revision 1
        VK_KHR_descriptor_update_template   : extension revision 1
        VK_KHR_draw_indirect_count          : extension revision 1
        VK_KHR_driver_properties            : extension revision 1
        VK_KHR_dynamic_rendering            : extension revision 1
        VK_KHR_get_memory_requirements2     : extension revision 1
        VK_KHR_maintenance1                 : extension revision 2
        VK_KHR_maintenance2                 : extension revision 1
        VK_KHR_maintenance3                 : extension revision 1
        VK_KHR_multiview                    : extension revision 1
        VK_KHR_shader_draw_parameters       : extension revision 1
        VK_KHR_shader_float16_int8          : extension revision 1
        VK_KHR_storage_buffer_storage_class : extension revision 1
        VK_KHR_swapchain                    : extension revision 70

VkQueueFamilyProperties:
========================
        queueProperties[0]:
        -------------------
                minImageTransferGranularity = (0,0,0)
                queueCount                  = 4
                queueFlags                  = QUEUE_GRAPHICS_BIT | QUEUE_COMPUTE_BIT | QUEUE_TRANSFER_BIT
                timestampValidBits          = 64
                present support             = true

        queueProperties[1]:
        -------------------
                minImageTransferGranularity = (0,0,0)
                queueCount                  = 8
                queueFlags                  = QUEUE_COMPUTE_BIT | QUEUE_TRANSFER_BIT
                timestampValidBits          = 64
                present support             = true

        queueProperties[2]:
        -------------------
                minImageTransferGranularity = (0,0,0)
                queueCount                  = 1
                queueFlags                  = QUEUE_TRANSFER_BIT
                timestampValidBits          = 0
                present support             = true

VkPhysicalDeviceMemoryProperties:
=================================
memoryHeaps: count = 2
        memoryHeaps[0]:
                size   = 25719283712 (0x5fcfd2000) (23.95 GiB)
                flags:
                        None
        memoryHeaps[1]:
                size   = 12718178304 (0x2f6100000) (11.84 GiB)
                flags: count = 1
                        MEMORY_HEAP_DEVICE_LOCAL_BIT
memoryTypes: count = 3
        memoryTypes[0]:
                heapIndex     = 0
                propertyFlags = 0x0006: count = 2
                        MEMORY_PROPERTY_HOST_VISIBLE_BIT
                        MEMORY_PROPERTY_HOST_COHERENT_BIT
                usable for:
                        IMAGE_TILING_OPTIMAL:
                                color images
                                FORMAT_D16_UNORM
                                FORMAT_X8_D24_UNORM_PACK32
                                FORMAT_D32_SFLOAT
                                FORMAT_D24_UNORM_S8_UINT
                                FORMAT_D32_SFLOAT_S8_UINT
                                (non-sparse)
                        IMAGE_TILING_LINEAR:
                                color images
                                (non-sparse, non-transient)
        memoryTypes[1]:
                heapIndex     = 0
                propertyFlags = 0x000e: count = 3
                        MEMORY_PROPERTY_HOST_VISIBLE_BIT
                        MEMORY_PROPERTY_HOST_COHERENT_BIT
                        MEMORY_PROPERTY_HOST_CACHED_BIT
                usable for:
                        IMAGE_TILING_OPTIMAL:
                                color images
                                FORMAT_D16_UNORM
                                FORMAT_X8_D24_UNORM_PACK32
                                FORMAT_D32_SFLOAT
                                FORMAT_D24_UNORM_S8_UINT
                                FORMAT_D32_SFLOAT_S8_UINT
                                (non-sparse)
                        IMAGE_TILING_LINEAR:
                                color images
                                (non-sparse, non-transient)
        memoryTypes[2]:
                heapIndex     = 1
                propertyFlags = 0x0001: count = 1
                        MEMORY_PROPERTY_DEVICE_LOCAL_BIT
                usable for:
                        IMAGE_TILING_OPTIMAL:
                                color images
                                FORMAT_D16_UNORM
                                FORMAT_X8_D24_UNORM_PACK32
                                FORMAT_D32_SFLOAT
                                FORMAT_D24_UNORM_S8_UINT
                                FORMAT_D32_SFLOAT_S8_UINT
                                (non-sparse)
                        IMAGE_TILING_LINEAR:
                                color images
                                (non-sparse, non-transient)

VkPhysicalDeviceFeatures:
=========================
        robustBufferAccess                      = true
        fullDrawIndexUint32                     = false
        imageCubeArray                          = true
        independentBlend                        = true
        geometryShader                          = true
        tessellationShader                      = false
        sampleRateShading                       = true
        dualSrcBlend                            = false
        logicOp                                 = false
        multiDrawIndirect                       = true
        drawIndirectFirstInstance               = true
        depthClamp                              = true
        depthBiasClamp                          = true
        fillModeNonSolid                        = true
        depthBounds                             = true
        wideLines                               = false
        largePoints                             = false
        alphaToOne                              = false
        multiViewport                           = false
        samplerAnisotropy                       = true
        textureCompressionETC2                  = false
        textureCompressionASTC_LDR              = false
        textureCompressionBC                    = true
        occlusionQueryPrecise                   = true
        pipelineStatisticsQuery                 = true
        vertexPipelineStoresAndAtomics          = true
        fragmentStoresAndAtomics                = true
        shaderTessellationAndGeometryPointSize  = false
        shaderImageGatherExtended               = true
        shaderStorageImageExtendedFormats       = true
        shaderStorageImageMultisample           = false
        shaderStorageImageReadWithoutFormat     = true
        shaderStorageImageWriteWithoutFormat    = true
        shaderUniformBufferArrayDynamicIndexing = true
        shaderSampledImageArrayDynamicIndexing  = true
        shaderStorageBufferArrayDynamicIndexing = true
        shaderStorageImageArrayDynamicIndexing  = true
        shaderClipDistance                      = true
        shaderCullDistance                      = true
        shaderFloat64                           = false
        shaderInt64                             = false
        shaderInt16                             = true
        shaderResourceResidency                 = false
        shaderResourceMinLod                    = false
        sparseBinding                           = false
        sparseResidencyBuffer                   = false
        sparseResidencyImage2D                  = false
        sparseResidencyImage3D                  = false
        sparseResidency2Samples                 = false
        sparseResidency4Samples                 = false
        sparseResidency8Samples                 = false
        sparseResidency16Samples                = false
        sparseResidencyAliased                  = false
        variableMultisampleRate                 = false
        inheritedQueries                        = false

VkPhysicalDevice16BitStorageFeatures:
-------------------------------------
        storageBuffer16BitAccess           = true
        uniformAndStorageBuffer16BitAccess = true
        storagePushConstant16              = false
        storageInputOutput16               = false

VkPhysicalDevice8BitStorageFeatures:
------------------------------------
        storageBuffer8BitAccess           = false
        uniformAndStorageBuffer8BitAccess = false
        storagePushConstant8              = false

VkPhysicalDeviceBufferDeviceAddressFeatures:
--------------------------------------------
        bufferDeviceAddress              = false
        bufferDeviceAddressCaptureReplay = false
        bufferDeviceAddressMultiDevice   = false

VkPhysicalDeviceDescriptorIndexingFeatures:
-------------------------------------------
        shaderInputAttachmentArrayDynamicIndexing          = true
        shaderUniformTexelBufferArrayDynamicIndexing       = true
        shaderStorageTexelBufferArrayDynamicIndexing       = true
        shaderUniformBufferArrayNonUniformIndexing         = true
        shaderSampledImageArrayNonUniformIndexing          = true
        shaderStorageBufferArrayNonUniformIndexing         = true
        shaderStorageImageArrayNonUniformIndexing          = true
        shaderInputAttachmentArrayNonUniformIndexing       = true
        shaderUniformTexelBufferArrayNonUniformIndexing    = true
        shaderStorageTexelBufferArrayNonUniformIndexing    = true
        descriptorBindingUniformBufferUpdateAfterBind      = true
        descriptorBindingSampledImageUpdateAfterBind       = true
        descriptorBindingStorageImageUpdateAfterBind       = true
        descriptorBindingStorageBufferUpdateAfterBind      = true
        descriptorBindingUniformTexelBufferUpdateAfterBind = true
        descriptorBindingStorageTexelBufferUpdateAfterBind = true
        descriptorBindingUpdateUnusedWhilePending          = true
        descriptorBindingPartiallyBound                    = true
        descriptorBindingVariableDescriptorCount           = true
        runtimeDescriptorArray                             = true

VkPhysicalDeviceDynamicRenderingFeaturesKHR:
--------------------------------------------
        dynamicRendering = true

VkPhysicalDeviceHostQueryResetFeatures:
---------------------------------------
        hostQueryReset = true

VkPhysicalDeviceImagelessFramebufferFeatures:
---------------------------------------------
        imagelessFramebuffer = true

VkPhysicalDeviceMultiviewFeatures:
----------------------------------
        multiview                   = true
        multiviewGeometryShader     = true
        multiviewTessellationShader = false

VkPhysicalDeviceProtectedMemoryFeatures:
----------------------------------------
        protectedMemory = false

VkPhysicalDeviceSamplerYcbcrConversionFeatures:
-----------------------------------------------
        samplerYcbcrConversion = false

VkPhysicalDeviceScalarBlockLayoutFeatures:
------------------------------------------
        scalarBlockLayout = false

VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures:
----------------------------------------------------
        separateDepthStencilLayouts = true

VkPhysicalDeviceShaderAtomicInt64Features:
------------------------------------------
        shaderBufferInt64Atomics = false
        shaderSharedInt64Atomics = false

VkPhysicalDeviceShaderDrawParametersFeatures:
---------------------------------------------
        shaderDrawParameters = true

VkPhysicalDeviceShaderFloat16Int8Features:
------------------------------------------
        shaderFloat16 = true
        shaderInt8    = false

VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures:
----------------------------------------------------
        shaderSubgroupExtendedTypes = true

VkPhysicalDeviceSubgroupSizeControlFeaturesEXT:
-----------------------------------------------
        subgroupSizeControl  = true
        computeFullSubgroups = true

VkPhysicalDeviceTimelineSemaphoreFeatures:
------------------------------------------
        timelineSemaphore = true

VkPhysicalDeviceUniformBufferStandardLayoutFeatures:
----------------------------------------------------
        uniformBufferStandardLayout = true

VkPhysicalDeviceVariablePointersFeatures:
-----------------------------------------
        variablePointersStorageBuffer = false
        variablePointers              = false

VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT:
--------------------------------------------------
        vertexAttributeInstanceRateDivisor     = true
        vertexAttributeInstanceRateZeroDivisor = true

VkPhysicalDeviceVulkan11Features:
---------------------------------
        storageBuffer16BitAccess           = true
        uniformAndStorageBuffer16BitAccess = true
        storagePushConstant16              = false
        storageInputOutput16               = false
        multiview                          = true
        multiviewGeometryShader            = true
        multiviewTessellationShader        = false
        variablePointersStorageBuffer      = false
        variablePointers                   = false
        protectedMemory                    = false
        samplerYcbcrConversion             = false
        shaderDrawParameters               = true

VkPhysicalDeviceVulkan12Features:
---------------------------------
        samplerMirrorClampToEdge                           = false
        drawIndirectCount                                  = true
        storageBuffer8BitAccess                            = false
        uniformAndStorageBuffer8BitAccess                  = false
        storagePushConstant8                               = false
        shaderBufferInt64Atomics                           = false
        shaderSharedInt64Atomics                           = false
        shaderFloat16                                      = true
        shaderInt8                                         = false
        descriptorIndexing                                 = true
        shaderInputAttachmentArrayDynamicIndexing          = true
        shaderUniformTexelBufferArrayDynamicIndexing       = true
        shaderStorageTexelBufferArrayDynamicIndexing       = true
        shaderUniformBufferArrayNonUniformIndexing         = true
        shaderSampledImageArrayNonUniformIndexing          = true
        shaderStorageBufferArrayNonUniformIndexing         = true
        shaderStorageImageArrayNonUniformIndexing          = true
        shaderInputAttachmentArrayNonUniformIndexing       = true
        shaderUniformTexelBufferArrayNonUniformIndexing    = true
        shaderStorageTexelBufferArrayNonUniformIndexing    = true
        descriptorBindingUniformBufferUpdateAfterBind      = true
        descriptorBindingSampledImageUpdateAfterBind       = true
        descriptorBindingStorageImageUpdateAfterBind       = true
        descriptorBindingStorageBufferUpdateAfterBind      = true
        descriptorBindingUniformTexelBufferUpdateAfterBind = true
        descriptorBindingStorageTexelBufferUpdateAfterBind = true
        descriptorBindingUpdateUnusedWhilePending          = true
        descriptorBindingPartiallyBound                    = true
        descriptorBindingVariableDescriptorCount           = true
        runtimeDescriptorArray                             = true
        samplerFilterMinmax                                = false
        scalarBlockLayout                                  = false
        imagelessFramebuffer                               = true
        uniformBufferStandardLayout                        = true
        shaderSubgroupExtendedTypes                        = true
        separateDepthStencilLayouts                        = true
        hostQueryReset                                     = true
        timelineSemaphore                                  = true
        bufferDeviceAddress                                = false
        bufferDeviceAddressCaptureReplay                   = false
        bufferDeviceAddressMultiDevice                     = false
        vulkanMemoryModel                                  = false
        vulkanMemoryModelDeviceScope                       = false
        vulkanMemoryModelAvailabilityVisibilityChains      = false
        shaderOutputViewportIndex                          = false
        shaderOutputLayer                                  = false
        subgroupBroadcastDynamicId                         = true

VkPhysicalDeviceVulkanMemoryModelFeatures:
------------------------------------------
        vulkanMemoryModel                             = false
        vulkanMemoryModelDeviceScope                  = false
        vulkanMemoryModelAvailabilityVisibilityChains = false


GPU1:
VkPhysicalDeviceProperties:
---------------------------
        apiVersion        = 1.3.246 (4206838)
        driverVersion     = 0.0.1 (1)
        vendorID          = 0x10005
        deviceID          = 0x0000
        deviceType        = PHYSICAL_DEVICE_TYPE_CPU
        deviceName        = llvmpipe (LLVM 16.0.6, 256 bits)
        pipelineCacheUUID = 32332e31-2e39-6161-6161-616161616161

VkPhysicalDeviceLimits:
-----------------------
        maxImageDimension1D                             = 16384
        maxImageDimension2D                             = 16384
        maxImageDimension3D                             = 4096
        maxImageDimensionCube                           = 32768
        maxImageArrayLayers                             = 2048
        maxTexelBufferElements                          = 134217728
        maxUniformBufferRange                           = 65536
        maxStorageBufferRange                           = 134217728
        maxPushConstantsSize                            = 128
        maxMemoryAllocationCount                        = 4294967295
        maxSamplerAllocationCount                       = 32768
        bufferImageGranularity                          = 0x00000040
        sparseAddressSpaceSize                          = 0x00000000
        maxBoundDescriptorSets                          = 8
        maxPerStageDescriptorSamplers                   = 32
        maxPerStageDescriptorUniformBuffers             = 15
        maxPerStageDescriptorStorageBuffers             = 32
        maxPerStageDescriptorSampledImages              = 128
        maxPerStageDescriptorStorageImages              = 64
        maxPerStageDescriptorInputAttachments           = 8
        maxPerStageResources                            = 128
        maxDescriptorSetSamplers                        = 32768
        maxDescriptorSetUniformBuffers                  = 256
        maxDescriptorSetUniformBuffersDynamic           = 256
        maxDescriptorSetStorageBuffers                  = 256
        maxDescriptorSetStorageBuffersDynamic           = 256
        maxDescriptorSetSampledImages                   = 256
        maxDescriptorSetStorageImages                   = 256
        maxDescriptorSetInputAttachments                = 256
        maxVertexInputAttributes                        = 32
        maxVertexInputBindings                          = 32
        maxVertexInputAttributeOffset                   = 2047
        maxVertexInputBindingStride                     = 2048
        maxVertexOutputComponents                       = 128
        maxTessellationGenerationLevel                  = 64
        maxTessellationPatchSize                        = 32
        maxTessellationControlPerVertexInputComponents  = 128
        maxTessellationControlPerVertexOutputComponents = 128
        maxTessellationControlPerPatchOutputComponents  = 128
        maxTessellationControlTotalOutputComponents     = 4096
        maxTessellationEvaluationInputComponents        = 128
        maxTessellationEvaluationOutputComponents       = 128
        maxGeometryShaderInvocations                    = 32
        maxGeometryInputComponents                      = 64
        maxGeometryOutputComponents                     = 128
        maxGeometryOutputVertices                       = 1024
        maxGeometryTotalOutputComponents                = 1024
        maxFragmentInputComponents                      = 128
        maxFragmentOutputAttachments                    = 8
        maxFragmentDualSrcAttachments                   = 2
        maxFragmentCombinedOutputResources              = 104
        maxComputeSharedMemorySize                      = 32768
        maxComputeWorkGroupCount: count = 3
                65535
                65535
                65535
        maxComputeWorkGroupInvocations                  = 1024
        maxComputeWorkGroupSize: count = 3
                1024
                1024
                1024
        subPixelPrecisionBits                           = 8
        subTexelPrecisionBits                           = 8
        mipmapPrecisionBits                             = 4
        maxDrawIndexedIndexValue                        = 4294967295
        maxDrawIndirectCount                            = 4294967295
        maxSamplerLodBias                               = 16
        maxSamplerAnisotropy                            = 16
        maxViewports                                    = 16
        maxViewportDimensions: count = 2
                16384
                16384
        viewportBoundsRange: count = 2
                -32768
                32768
        viewportSubPixelBits                            = 0
        minMemoryMapAlignment                           = 64
        minTexelBufferOffsetAlignment                   = 0x00000010
        minUniformBufferOffsetAlignment                 = 0x00000010
        minStorageBufferOffsetAlignment                 = 0x00000010
        minTexelOffset                                  = -32
        maxTexelOffset                                  = 31
        minTexelGatherOffset                            = -32
        maxTexelGatherOffset                            = 31
        minInterpolationOffset                          = -2
        maxInterpolationOffset                          = 2
        subPixelInterpolationOffsetBits                 = 8
        maxFramebufferWidth                             = 16384
        maxFramebufferHeight                            = 16384
        maxFramebufferLayers                            = 2048
        framebufferColorSampleCounts: count = 2
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_4_BIT
        framebufferDepthSampleCounts: count = 2
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_4_BIT
        framebufferStencilSampleCounts: count = 2
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_4_BIT
        framebufferNoAttachmentsSampleCounts: count = 2
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_4_BIT
        maxColorAttachments                             = 8
        sampledImageColorSampleCounts: count = 2
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_4_BIT
        sampledImageIntegerSampleCounts: count = 2
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_4_BIT
        sampledImageDepthSampleCounts: count = 2
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_4_BIT
        sampledImageStencilSampleCounts: count = 2
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_4_BIT
        storageImageSampleCounts: count = 2
                SAMPLE_COUNT_1_BIT
                SAMPLE_COUNT_4_BIT
        maxSampleMaskWords                              = 1
        timestampComputeAndGraphics                     = true
        timestampPeriod                                 = 1
        maxClipDistances                                = 8
        maxCullDistances                                = 8
        maxCombinedClipAndCullDistances                 = 8
        discreteQueuePriorities                         = 2
        pointSizeRange: count = 2
                0
                255
        lineWidthRange: count = 2
                1
                255
        pointSizeGranularity                            = 0.125
        lineWidthGranularity                            = 0.0078125
        strictLines                                     = true
        standardSampleLocations                         = true
        optimalBufferCopyOffsetAlignment                = 0x00000080
        optimalBufferCopyRowPitchAlignment              = 0x00000080
        nonCoherentAtomSize                             = 0x00000040

VkPhysicalDeviceSparseProperties:
---------------------------------
        residencyStandard2DBlockShape            = false
        residencyStandard2DMultisampleBlockShape = false
        residencyStandard3DBlockShape            = false
        residencyAlignedMipSize                  = false
        residencyNonResidentStrict               = false

VkPhysicalDeviceCustomBorderColorPropertiesEXT:
-----------------------------------------------
        maxCustomBorderColorSamplers = 32768

VkPhysicalDeviceDepthStencilResolveProperties:
----------------------------------------------
        supportedDepthResolveModes: count = 2
                RESOLVE_MODE_SAMPLE_ZERO_BIT
                RESOLVE_MODE_AVERAGE_BIT
        supportedStencilResolveModes: count = 1
                RESOLVE_MODE_SAMPLE_ZERO_BIT
        independentResolveNone = false
        independentResolve     = false

VkPhysicalDeviceDescriptorIndexingProperties:
---------------------------------------------
        maxUpdateAfterBindDescriptorsInAllPools              = 67108863
        shaderUniformBufferArrayNonUniformIndexingNative     = false
        shaderSampledImageArrayNonUniformIndexingNative      = false
        shaderStorageBufferArrayNonUniformIndexingNative     = false
        shaderStorageImageArrayNonUniformIndexingNative      = false
        shaderInputAttachmentArrayNonUniformIndexingNative   = false
        robustBufferAccessUpdateAfterBind                    = true
        quadDivergentImplicitLod                             = false
        maxPerStageDescriptorUpdateAfterBindSamplers         = 65536
        maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 65536
        maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 65536
        maxPerStageDescriptorUpdateAfterBindSampledImages    = 65536
        maxPerStageDescriptorUpdateAfterBindStorageImages    = 65536
        maxPerStageDescriptorUpdateAfterBindInputAttachments = 65536
        maxPerStageUpdateAfterBindResources                  = 65536
        maxDescriptorSetUpdateAfterBindSamplers              = 65536
        maxDescriptorSetUpdateAfterBindUniformBuffers        = 65536
        maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 16
        maxDescriptorSetUpdateAfterBindStorageBuffers        = 65536
        maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 16
        maxDescriptorSetUpdateAfterBindSampledImages         = 65536
        maxDescriptorSetUpdateAfterBindStorageImages         = 65536
        maxDescriptorSetUpdateAfterBindInputAttachments      = 65536

VkPhysicalDeviceDriverProperties:
---------------------------------
        driverID        = DRIVER_ID_MESA_LLVMPIPE
        driverName      = llvmpipe
        driverInfo      = Mesa 23.1.9 (LLVM 16.0.6)
        conformanceVersion:
                major    = 1
                minor    = 3
                subminor = 1
                patch    = 1

VkPhysicalDeviceExtendedDynamicState3PropertiesEXT:
---------------------------------------------------
        dynamicPrimitiveTopologyUnrestricted = true

VkPhysicalDeviceExternalMemoryHostPropertiesEXT:
------------------------------------------------
        minImportedHostPointerAlignment = 0x00001000

VkPhysicalDeviceFloatControlsProperties:
----------------------------------------
        denormBehaviorIndependence            = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
        roundingModeIndependence              = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
        shaderSignedZeroInfNanPreserveFloat16 = true
        shaderSignedZeroInfNanPreserveFloat32 = true
        shaderSignedZeroInfNanPreserveFloat64 = true
        shaderDenormPreserveFloat16           = false
        shaderDenormPreserveFloat32           = false
        shaderDenormPreserveFloat64           = false
        shaderDenormFlushToZeroFloat16        = false
        shaderDenormFlushToZeroFloat32        = false
        shaderDenormFlushToZeroFloat64        = false
        shaderRoundingModeRTEFloat16          = true
        shaderRoundingModeRTEFloat32          = true
        shaderRoundingModeRTEFloat64          = true
        shaderRoundingModeRTZFloat16          = false
        shaderRoundingModeRTZFloat32          = false
        shaderRoundingModeRTZFloat64          = false

VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT:
-----------------------------------------------------
        graphicsPipelineLibraryFastLinking                        = true
        graphicsPipelineLibraryIndependentInterpolationDecoration = true

VkPhysicalDeviceIDProperties:
-----------------------------
        deviceUUID      = 6d657361-3233-2e31-2e39-000000000000
        driverUUID      = 6c6c766d-7069-7065-5555-494400000000
        deviceNodeMask  = 0
        deviceLUIDValid = false

VkPhysicalDeviceInlineUniformBlockProperties:
---------------------------------------------
        maxInlineUniformBlockSize                               = 4096
        maxPerStageDescriptorInlineUniformBlocks                = 8
        maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = 8
        maxDescriptorSetInlineUniformBlocks                     = 8
        maxDescriptorSetUpdateAfterBindInlineUniformBlocks      = 8

VkPhysicalDeviceLineRasterizationPropertiesEXT:
-----------------------------------------------
        lineSubPixelPrecisionBits = 8

VkPhysicalDeviceMaintenance3Properties:
---------------------------------------
        maxPerSetDescriptors    = 1024
        maxMemoryAllocationSize = 0x80000000

VkPhysicalDeviceMaintenance4Properties:
---------------------------------------
        maxBufferSize = 0xffffffff

VkPhysicalDeviceMultiDrawPropertiesEXT:
---------------------------------------
        maxMultiDrawCount = 2048

VkPhysicalDeviceMultiviewProperties:
------------------------------------
        maxMultiviewViewCount     = 6
        maxMultiviewInstanceIndex = 2147483647

VkPhysicalDevicePointClippingProperties:
----------------------------------------
        pointClippingBehavior = POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES

VkPhysicalDeviceProtectedMemoryProperties:
------------------------------------------
        protectedNoFault = false

VkPhysicalDeviceProvokingVertexPropertiesEXT:
---------------------------------------------
        provokingVertexModePerPipeline                       = true
        transformFeedbackPreservesTriangleFanProvokingVertex = true

VkPhysicalDevicePushDescriptorPropertiesKHR:
--------------------------------------------
        maxPushDescriptors = 32

VkPhysicalDeviceRobustness2PropertiesEXT:
-----------------------------------------
        robustStorageBufferAccessSizeAlignment = 0x00000001
        robustUniformBufferAccessSizeAlignment = 0x00000001

VkPhysicalDeviceSamplerFilterMinmaxProperties:
----------------------------------------------
        filterMinmaxSingleComponentFormats = true
        filterMinmaxImageComponentMapping  = true

VkPhysicalDeviceShaderIntegerDotProductProperties:
--------------------------------------------------
        integerDotProduct8BitUnsignedAccelerated                                      = false
        integerDotProduct8BitSignedAccelerated                                        = false
        integerDotProduct8BitMixedSignednessAccelerated                               = false
        integerDotProduct4x8BitPackedUnsignedAccelerated                              = false
        integerDotProduct4x8BitPackedSignedAccelerated                                = false
        integerDotProduct4x8BitPackedMixedSignednessAccelerated                       = false
        integerDotProduct16BitUnsignedAccelerated                                     = false
        integerDotProduct16BitSignedAccelerated                                       = false
        integerDotProduct16BitMixedSignednessAccelerated                              = false
        integerDotProduct32BitUnsignedAccelerated                                     = false
        integerDotProduct32BitSignedAccelerated                                       = false
        integerDotProduct32BitMixedSignednessAccelerated                              = false
        integerDotProduct64BitUnsignedAccelerated                                     = false
        integerDotProduct64BitSignedAccelerated                                       = false
        integerDotProduct64BitMixedSignednessAccelerated                              = false
        integerDotProductAccumulatingSaturating8BitUnsignedAccelerated                = false
        integerDotProductAccumulatingSaturating8BitSignedAccelerated                  = false
        integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated         = false
        integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated        = false
        integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated          = false
        integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = false
        integerDotProductAccumulatingSaturating16BitUnsignedAccelerated               = false
        integerDotProductAccumulatingSaturating16BitSignedAccelerated                 = false
        integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated        = false
        integerDotProductAccumulatingSaturating32BitUnsignedAccelerated               = false
        integerDotProductAccumulatingSaturating32BitSignedAccelerated                 = false
        integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated        = false
        integerDotProductAccumulatingSaturating64BitUnsignedAccelerated               = false
        integerDotProductAccumulatingSaturating64BitSignedAccelerated                 = false
        integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated        = false

VkPhysicalDeviceShaderObjectPropertiesEXT:
------------------------------------------
        shaderBinaryUUID     = 32332e31-2e39-6161-6161-616161616161
        shaderBinaryVersion  = 1

VkPhysicalDeviceSubgroupProperties:
-----------------------------------
        subgroupSize              = 8
        supportedStages: count = 2
                SHADER_STAGE_FRAGMENT_BIT
                SHADER_STAGE_COMPUTE_BIT
        supportedOperations: count = 7
                SUBGROUP_FEATURE_BASIC_BIT
                SUBGROUP_FEATURE_VOTE_BIT
                SUBGROUP_FEATURE_ARITHMETIC_BIT
                SUBGROUP_FEATURE_BALLOT_BIT
                SUBGROUP_FEATURE_SHUFFLE_BIT
                SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
                SUBGROUP_FEATURE_QUAD_BIT
        quadOperationsInAllStages = false

VkPhysicalDeviceSubgroupSizeControlProperties:
----------------------------------------------
        minSubgroupSize              = 8
        maxSubgroupSize              = 8
        maxComputeWorkgroupSubgroups = 32
        requiredSubgroupSizeStages: count = 2
                SHADER_STAGE_FRAGMENT_BIT
                SHADER_STAGE_COMPUTE_BIT

VkPhysicalDeviceTexelBufferAlignmentProperties:
-----------------------------------------------
        storageTexelBufferOffsetAlignmentBytes       = 0x00000010
        storageTexelBufferOffsetSingleTexelAlignment = true
        uniformTexelBufferOffsetAlignmentBytes       = 0x00000010
        uniformTexelBufferOffsetSingleTexelAlignment = true

VkPhysicalDeviceTimelineSemaphoreProperties:
--------------------------------------------
        maxTimelineSemaphoreValueDifference = 18446744073709551615

VkPhysicalDeviceTransformFeedbackPropertiesEXT:
-----------------------------------------------
        maxTransformFeedbackStreams                = 4
        maxTransformFeedbackBuffers                = 4
        maxTransformFeedbackBufferSize             = 0xffffffff
        maxTransformFeedbackStreamDataSize         = 512
        maxTransformFeedbackBufferDataSize         = 512
        maxTransformFeedbackBufferDataStride       = 512
        transformFeedbackQueries                   = true
        transformFeedbackStreamsLinesTriangles     = false
        transformFeedbackRasterizationStreamSelect = false
        transformFeedbackDraw                      = true

VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT:
----------------------------------------------------
        maxVertexAttribDivisor = 4294967295

VkPhysicalDeviceVulkan11Properties:
-----------------------------------
        deviceUUID                        = 6d657361-3233-2e31-2e39-000000000000
        driverUUID                        = 6c6c766d-7069-7065-5555-494400000000
        deviceNodeMask                    = 0
        deviceLUIDValid                   = false
        subgroupSize                      = 8
        subgroupSupportedStages: count = 2
                SHADER_STAGE_FRAGMENT_BIT
                SHADER_STAGE_COMPUTE_BIT
        subgroupSupportedOperations: count = 7
                SUBGROUP_FEATURE_BASIC_BIT
                SUBGROUP_FEATURE_VOTE_BIT
                SUBGROUP_FEATURE_ARITHMETIC_BIT
                SUBGROUP_FEATURE_BALLOT_BIT
                SUBGROUP_FEATURE_SHUFFLE_BIT
                SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
                SUBGROUP_FEATURE_QUAD_BIT
        subgroupQuadOperationsInAllStages = false
        pointClippingBehavior             = POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES
        maxMultiviewViewCount             = 6
        maxMultiviewInstanceIndex         = 2147483647
        protectedNoFault                  = false
        maxPerSetDescriptors              = 1024
        maxMemoryAllocationSize           = 0x80000000

VkPhysicalDeviceVulkan12Properties:
-----------------------------------
        driverID                                             = DRIVER_ID_MESA_LLVMPIPE
        driverName                                           = llvmpipe
        driverInfo                                           = Mesa 23.1.9 (LLVM 16.0.6)
        conformanceVersion:
                major    = 1
                minor    = 3
                subminor = 1
                patch    = 1
        denormBehaviorIndependence                           = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
        roundingModeIndependence                             = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
        shaderSignedZeroInfNanPreserveFloat16                = true
        shaderSignedZeroInfNanPreserveFloat32                = true
        shaderSignedZeroInfNanPreserveFloat64                = true
        shaderDenormPreserveFloat16                          = false
        shaderDenormPreserveFloat32                          = false
        shaderDenormPreserveFloat64                          = false
        shaderDenormFlushToZeroFloat16                       = false
        shaderDenormFlushToZeroFloat32                       = false
        shaderDenormFlushToZeroFloat64                       = false
        shaderRoundingModeRTEFloat16                         = true
        shaderRoundingModeRTEFloat32                         = true
        shaderRoundingModeRTEFloat64                         = true
        shaderRoundingModeRTZFloat16                         = false
        shaderRoundingModeRTZFloat32                         = false
        shaderRoundingModeRTZFloat64                         = false
        maxUpdateAfterBindDescriptorsInAllPools              = 67108863
        shaderUniformBufferArrayNonUniformIndexingNative     = false
        shaderSampledImageArrayNonUniformIndexingNative      = false
        shaderStorageBufferArrayNonUniformIndexingNative     = false
        shaderStorageImageArrayNonUniformIndexingNative      = false
        shaderInputAttachmentArrayNonUniformIndexingNative   = false
        robustBufferAccessUpdateAfterBind                    = true
        quadDivergentImplicitLod                             = false
        maxPerStageDescriptorUpdateAfterBindSamplers         = 65536
        maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 65536
        maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 65536
        maxPerStageDescriptorUpdateAfterBindSampledImages    = 65536
        maxPerStageDescriptorUpdateAfterBindStorageImages    = 65536
        maxPerStageDescriptorUpdateAfterBindInputAttachments = 65536
        maxPerStageUpdateAfterBindResources                  = 65536
        maxDescriptorSetUpdateAfterBindSamplers              = 65536
        maxDescriptorSetUpdateAfterBindUniformBuffers        = 65536
        maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 16
        maxDescriptorSetUpdateAfterBindStorageBuffers        = 65536
        maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 16
        maxDescriptorSetUpdateAfterBindSampledImages         = 65536
        maxDescriptorSetUpdateAfterBindStorageImages         = 65536
        maxDescriptorSetUpdateAfterBindInputAttachments      = 65536
        supportedDepthResolveModes: count = 2
                RESOLVE_MODE_SAMPLE_ZERO_BIT
                RESOLVE_MODE_AVERAGE_BIT
        supportedStencilResolveModes: count = 1
                RESOLVE_MODE_SAMPLE_ZERO_BIT
        independentResolveNone                               = false
        independentResolve                                   = false
        filterMinmaxSingleComponentFormats                   = true
        filterMinmaxImageComponentMapping                    = true
        maxTimelineSemaphoreValueDifference                  = 18446744073709551615
        framebufferIntegerColorSampleCounts: count = 1
                SAMPLE_COUNT_1_BIT

VkPhysicalDeviceVulkan13Properties:
-----------------------------------
        minSubgroupSize                                                               = 8
        maxSubgroupSize                                                               = 8
        maxComputeWorkgroupSubgroups                                                  = 32
        requiredSubgroupSizeStages: count = 2
                SHADER_STAGE_FRAGMENT_BIT
                SHADER_STAGE_COMPUTE_BIT
        maxInlineUniformBlockSize                                                     = 4096
        maxPerStageDescriptorInlineUniformBlocks                                      = 8
        maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks                       = 8
        maxDescriptorSetInlineUniformBlocks                                           = 8
        maxDescriptorSetUpdateAfterBindInlineUniformBlocks                            = 8
        maxInlineUniformTotalSize                                                     = 262144
        integerDotProduct8BitUnsignedAccelerated                                      = false
        integerDotProduct8BitSignedAccelerated                                        = false
        integerDotProduct8BitMixedSignednessAccelerated                               = false
        integerDotProduct4x8BitPackedUnsignedAccelerated                              = false
        integerDotProduct4x8BitPackedSignedAccelerated                                = false
        integerDotProduct4x8BitPackedMixedSignednessAccelerated                       = false
        integerDotProduct16BitUnsignedAccelerated                                     = false
        integerDotProduct16BitSignedAccelerated                                       = false
        integerDotProduct16BitMixedSignednessAccelerated                              = false
        integerDotProduct32BitUnsignedAccelerated                                     = false
        integerDotProduct32BitSignedAccelerated                                       = false
        integerDotProduct32BitMixedSignednessAccelerated                              = false
        integerDotProduct64BitUnsignedAccelerated                                     = false
        integerDotProduct64BitSignedAccelerated                                       = false
        integerDotProduct64BitMixedSignednessAccelerated                              = false
        integerDotProductAccumulatingSaturating8BitUnsignedAccelerated                = false
        integerDotProductAccumulatingSaturating8BitSignedAccelerated                  = false
        integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated         = false
        integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated        = false
        integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated          = false
        integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = false
        integerDotProductAccumulatingSaturating16BitUnsignedAccelerated               = false
        integerDotProductAccumulatingSaturating16BitSignedAccelerated                 = false
        integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated        = false
        integerDotProductAccumulatingSaturating32BitUnsignedAccelerated               = false
        integerDotProductAccumulatingSaturating32BitSignedAccelerated                 = false
        integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated        = false
        integerDotProductAccumulatingSaturating64BitUnsignedAccelerated               = false
        integerDotProductAccumulatingSaturating64BitSignedAccelerated                 = false
        integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated        = false
        storageTexelBufferOffsetAlignmentBytes                                        = 0x00000010
        storageTexelBufferOffsetSingleTexelAlignment                                  = true
        uniformTexelBufferOffsetAlignmentBytes                                        = 0x00000010
        uniformTexelBufferOffsetSingleTexelAlignment                                  = true
        maxBufferSize                                                                 = 0xffffffff


VkPhysicalDeviceHostImageCopyPropertiesEXT:
        copySrcLayoutCount                  = 0
        pCopySrcLayouts:
        copyDstLayoutCount                  = 0
        pCopyDstLayouts:
        optimalTilingLayoutUUID             = 00000000-0000-0000-0000-000000000000
        identicalMemoryTypeRequirements     = false
Device Extensions: count = 104
        VK_ARM_rasterization_order_attachment_access : extension revision 1
        VK_EXT_4444_formats                          : extension revision 1
        VK_EXT_attachment_feedback_loop_layout       : extension revision 2
        VK_EXT_border_color_swizzle                  : extension revision 1
        VK_EXT_calibrated_timestamps                 : extension revision 2
        VK_EXT_color_write_enable                    : extension revision 1
        VK_EXT_conditional_rendering                 : extension revision 2
        VK_EXT_custom_border_color                   : extension revision 12
        VK_EXT_depth_clip_control                    : extension revision 1
        VK_EXT_depth_clip_enable                     : extension revision 1
        VK_EXT_depth_range_unrestricted              : extension revision 1
        VK_EXT_extended_dynamic_state                : extension revision 1
        VK_EXT_extended_dynamic_state2               : extension revision 1
        VK_EXT_extended_dynamic_state3               : extension revision 2
        VK_EXT_external_memory_host                  : extension revision 1
        VK_EXT_graphics_pipeline_library             : extension revision 1
        VK_EXT_host_query_reset                      : extension revision 1
        VK_EXT_image_2d_view_of_3d                   : extension revision 1
        VK_EXT_image_robustness                      : extension revision 1
        VK_EXT_image_sliced_view_of_3d               : extension revision 1
        VK_EXT_index_type_uint8                      : extension revision 1
        VK_EXT_inline_uniform_block                  : extension revision 1
        VK_EXT_line_rasterization                    : extension revision 1
        VK_EXT_multi_draw                            : extension revision 1
        VK_EXT_multisampled_render_to_single_sampled : extension revision 1
        VK_EXT_non_seamless_cube_map                 : extension revision 1
        VK_EXT_pipeline_creation_cache_control       : extension revision 3
        VK_EXT_pipeline_creation_feedback            : extension revision 1
        VK_EXT_post_depth_coverage                   : extension revision 1
        VK_EXT_primitive_topology_list_restart       : extension revision 1
        VK_EXT_primitives_generated_query            : extension revision 1
        VK_EXT_private_data                          : extension revision 1
        VK_EXT_provoking_vertex                      : extension revision 1
        VK_EXT_rasterization_order_attachment_access : extension revision 1
        VK_EXT_robustness2                           : extension revision 1
        VK_EXT_sampler_filter_minmax                 : extension revision 2
        VK_EXT_scalar_block_layout                   : extension revision 1
        VK_EXT_separate_stencil_usage                : extension revision 1
        VK_EXT_shader_atomic_float                   : extension revision 1
        VK_EXT_shader_atomic_float2                  : extension revision 1
        VK_EXT_shader_demote_to_helper_invocation    : extension revision 1
        VK_EXT_shader_object                         : extension revision 1
        VK_EXT_shader_stencil_export                 : extension revision 1
        VK_EXT_shader_subgroup_ballot                : extension revision 1
        VK_EXT_shader_subgroup_vote                  : extension revision 1
        VK_EXT_shader_viewport_index_layer           : extension revision 1
        VK_EXT_subgroup_size_control                 : extension revision 2
        VK_EXT_texel_buffer_alignment                : extension revision 1
        VK_EXT_transform_feedback                    : extension revision 1
        VK_EXT_vertex_attribute_divisor              : extension revision 3
        VK_EXT_vertex_input_dynamic_state            : extension revision 2
        VK_GOOGLE_decorate_string                    : extension revision 1
        VK_GOOGLE_hlsl_functionality1                : extension revision 1
        VK_KHR_16bit_storage                         : extension revision 1
        VK_KHR_8bit_storage                          : extension revision 1
        VK_KHR_bind_memory2                          : extension revision 1
        VK_KHR_buffer_device_address                 : extension revision 1
        VK_KHR_copy_commands2                        : extension revision 1
        VK_KHR_create_renderpass2                    : extension revision 1
        VK_KHR_dedicated_allocation                  : extension revision 3
        VK_KHR_depth_stencil_resolve                 : extension revision 1
        VK_KHR_descriptor_update_template            : extension revision 1
        VK_KHR_device_group                          : extension revision 4
        VK_KHR_draw_indirect_count                   : extension revision 1
        VK_KHR_driver_properties                     : extension revision 1
        VK_KHR_dynamic_rendering                     : extension revision 1
        VK_KHR_external_fence                        : extension revision 1
        VK_KHR_external_memory                       : extension revision 1
        VK_KHR_external_memory_fd                    : extension revision 1
        VK_KHR_external_semaphore                    : extension revision 1
        VK_KHR_format_feature_flags2                 : extension revision 2
        VK_KHR_get_memory_requirements2              : extension revision 1
        VK_KHR_image_format_list                     : extension revision 1
        VK_KHR_imageless_framebuffer                 : extension revision 1
        VK_KHR_incremental_present                   : extension revision 2
        VK_KHR_maintenance1                          : extension revision 2
        VK_KHR_maintenance2                          : extension revision 1
        VK_KHR_maintenance3                          : extension revision 1
        VK_KHR_maintenance4                          : extension revision 2
        VK_KHR_multiview                             : extension revision 1
        VK_KHR_pipeline_library                      : extension revision 1
        VK_KHR_push_descriptor                       : extension revision 2
        VK_KHR_relaxed_block_layout                  : extension revision 1
        VK_KHR_sampler_mirror_clamp_to_edge          : extension revision 3
        VK_KHR_separate_depth_stencil_layouts        : extension revision 1
        VK_KHR_shader_atomic_int64                   : extension revision 1
        VK_KHR_shader_clock                          : extension revision 1
        VK_KHR_shader_draw_parameters                : extension revision 1
        VK_KHR_shader_float16_int8                   : extension revision 1
        VK_KHR_shader_float_controls                 : extension revision 4
        VK_KHR_shader_integer_dot_product            : extension revision 1
        VK_KHR_shader_non_semantic_info              : extension revision 1
        VK_KHR_shader_subgroup_extended_types        : extension revision 1
        VK_KHR_shader_terminate_invocation           : extension revision 1
        VK_KHR_spirv_1_4                             : extension revision 1
        VK_KHR_storage_buffer_storage_class          : extension revision 1
        VK_KHR_swapchain                             : extension revision 70
        VK_KHR_swapchain_mutable_format              : extension revision 1
        VK_KHR_synchronization2                      : extension revision 1
        VK_KHR_timeline_semaphore                    : extension revision 2
        VK_KHR_uniform_buffer_standard_layout        : extension revision 1
        VK_KHR_variable_pointers                     : extension revision 1
        VK_KHR_vulkan_memory_model                   : extension revision 3
        VK_KHR_zero_initialize_workgroup_memory      : extension revision 1

VkQueueFamilyProperties:
========================
        queueProperties[0]:
        -------------------
                minImageTransferGranularity = (1,1,1)
                queueCount                  = 1
                queueFlags                  = QUEUE_GRAPHICS_BIT | QUEUE_COMPUTE_BIT | QUEUE_TRANSFER_BIT
                timestampValidBits          = 64
                present support             = true

VkPhysicalDeviceMemoryProperties:
=================================
memoryHeaps: count = 1
        memoryHeaps[0]:
                size   = 2147483648 (0x80000000) (2.00 GiB)
                flags: count = 1
                        MEMORY_HEAP_DEVICE_LOCAL_BIT
memoryTypes: count = 1
        memoryTypes[0]:
                heapIndex     = 0
                propertyFlags = 0x000f: count = 4
                        MEMORY_PROPERTY_DEVICE_LOCAL_BIT
                        MEMORY_PROPERTY_HOST_VISIBLE_BIT
                        MEMORY_PROPERTY_HOST_COHERENT_BIT
                        MEMORY_PROPERTY_HOST_CACHED_BIT
                usable for:
                        IMAGE_TILING_OPTIMAL:
                                color images
                                FORMAT_D16_UNORM
                                FORMAT_X8_D24_UNORM_PACK32
                                FORMAT_D32_SFLOAT
                                FORMAT_S8_UINT
                                FORMAT_D24_UNORM_S8_UINT
                                FORMAT_D32_SFLOAT_S8_UINT
                                (non-sparse)
                        IMAGE_TILING_LINEAR:
                                color images
                                (non-sparse)

VkPhysicalDeviceFeatures:
=========================
        robustBufferAccess                      = true
        fullDrawIndexUint32                     = true
        imageCubeArray                          = true
        independentBlend                        = true
        geometryShader                          = true
        tessellationShader                      = true
        sampleRateShading                       = true
        dualSrcBlend                            = true
        logicOp                                 = true
        multiDrawIndirect                       = true
        drawIndirectFirstInstance               = true
        depthClamp                              = true
        depthBiasClamp                          = true
        fillModeNonSolid                        = true
        depthBounds                             = false
        wideLines                               = true
        largePoints                             = true
        alphaToOne                              = true
        multiViewport                           = true
        samplerAnisotropy                       = true
        textureCompressionETC2                  = false
        textureCompressionASTC_LDR              = false
        textureCompressionBC                    = true
        occlusionQueryPrecise                   = true
        pipelineStatisticsQuery                 = true
        vertexPipelineStoresAndAtomics          = true
        fragmentStoresAndAtomics                = true
        shaderTessellationAndGeometryPointSize  = true
        shaderImageGatherExtended               = true
        shaderStorageImageExtendedFormats       = true
        shaderStorageImageMultisample           = true
        shaderStorageImageReadWithoutFormat     = false
        shaderStorageImageWriteWithoutFormat    = true
        shaderUniformBufferArrayDynamicIndexing = true
        shaderSampledImageArrayDynamicIndexing  = false
        shaderStorageBufferArrayDynamicIndexing = true
        shaderStorageImageArrayDynamicIndexing  = false
        shaderClipDistance                      = true
        shaderCullDistance                      = true
        shaderFloat64                           = true
        shaderInt64                             = true
        shaderInt16                             = true
        shaderResourceResidency                 = false
        shaderResourceMinLod                    = false
        sparseBinding                           = false
        sparseResidencyBuffer                   = false
        sparseResidencyImage2D                  = false
        sparseResidencyImage3D                  = false
        sparseResidency2Samples                 = false
        sparseResidency4Samples                 = false
        sparseResidency8Samples                 = false
        sparseResidency16Samples                = false
        sparseResidencyAliased                  = false
        variableMultisampleRate                 = false
        inheritedQueries                        = false

VkPhysicalDevice16BitStorageFeatures:
-------------------------------------
        storageBuffer16BitAccess           = true
        uniformAndStorageBuffer16BitAccess = true
        storagePushConstant16              = true
        storageInputOutput16               = false

VkPhysicalDevice4444FormatsFeaturesEXT:
---------------------------------------
        formatA4R4G4B4 = true
        formatA4B4G4R4 = true

VkPhysicalDevice8BitStorageFeatures:
------------------------------------
        storageBuffer8BitAccess           = true
        uniformAndStorageBuffer8BitAccess = true
        storagePushConstant8              = true

VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT:
--------------------------------------------------------
        attachmentFeedbackLoopLayout = true

VkPhysicalDeviceBorderColorSwizzleFeaturesEXT:
----------------------------------------------
        borderColorSwizzle          = true
        borderColorSwizzleFromImage = true

VkPhysicalDeviceBufferDeviceAddressFeatures:
--------------------------------------------
        bufferDeviceAddress              = true
        bufferDeviceAddressCaptureReplay = false
        bufferDeviceAddressMultiDevice   = false

VkPhysicalDeviceColorWriteEnableFeaturesEXT:
--------------------------------------------
        colorWriteEnable = true

VkPhysicalDeviceConditionalRenderingFeaturesEXT:
------------------------------------------------
        conditionalRendering          = true
        inheritedConditionalRendering = false

VkPhysicalDeviceCustomBorderColorFeaturesEXT:
---------------------------------------------
        customBorderColors             = true
        customBorderColorWithoutFormat = true

VkPhysicalDeviceDepthClipControlFeaturesEXT:
--------------------------------------------
        depthClipControl = true

VkPhysicalDeviceDepthClipEnableFeaturesEXT:
-------------------------------------------
        depthClipEnable = true

VkPhysicalDeviceDescriptorIndexingFeatures:
-------------------------------------------
        shaderInputAttachmentArrayDynamicIndexing          = false
        shaderUniformTexelBufferArrayDynamicIndexing       = false
        shaderStorageTexelBufferArrayDynamicIndexing       = false
        shaderUniformBufferArrayNonUniformIndexing         = false
        shaderSampledImageArrayNonUniformIndexing          = false
        shaderStorageBufferArrayNonUniformIndexing         = false
        shaderStorageImageArrayNonUniformIndexing          = false
        shaderInputAttachmentArrayNonUniformIndexing       = false
        shaderUniformTexelBufferArrayNonUniformIndexing    = false
        shaderStorageTexelBufferArrayNonUniformIndexing    = false
        descriptorBindingUniformBufferUpdateAfterBind      = false
        descriptorBindingSampledImageUpdateAfterBind       = false
        descriptorBindingStorageImageUpdateAfterBind       = false
        descriptorBindingStorageBufferUpdateAfterBind      = false
        descriptorBindingUniformTexelBufferUpdateAfterBind = false
        descriptorBindingStorageTexelBufferUpdateAfterBind = false
        descriptorBindingUpdateUnusedWhilePending          = false
        descriptorBindingPartiallyBound                    = false
        descriptorBindingVariableDescriptorCount           = false
        runtimeDescriptorArray                             = false

VkPhysicalDeviceDynamicRenderingFeatures:
-----------------------------------------
        dynamicRendering = true

VkPhysicalDeviceExtendedDynamicState2FeaturesEXT:
-------------------------------------------------
        extendedDynamicState2                   = true
        extendedDynamicState2LogicOp            = true
        extendedDynamicState2PatchControlPoints = true

VkPhysicalDeviceExtendedDynamicState3FeaturesEXT:
-------------------------------------------------
        extendedDynamicState3TessellationDomainOrigin         = true
        extendedDynamicState3DepthClampEnable                 = true
        extendedDynamicState3PolygonMode                      = true
        extendedDynamicState3RasterizationSamples             = true
        extendedDynamicState3SampleMask                       = true
        extendedDynamicState3AlphaToCoverageEnable            = true
        extendedDynamicState3AlphaToOneEnable                 = true
        extendedDynamicState3LogicOpEnable                    = true
        extendedDynamicState3ColorBlendEnable                 = true
        extendedDynamicState3ColorBlendEquation               = true
        extendedDynamicState3ColorWriteMask                   = true
        extendedDynamicState3RasterizationStream              = false
        extendedDynamicState3ConservativeRasterizationMode    = false
        extendedDynamicState3ExtraPrimitiveOverestimationSize = false
        extendedDynamicState3DepthClipEnable                  = true
        extendedDynamicState3SampleLocationsEnable            = false
        extendedDynamicState3ColorBlendAdvanced               = false
        extendedDynamicState3ProvokingVertexMode              = true
        extendedDynamicState3LineRasterizationMode            = true
        extendedDynamicState3LineStippleEnable                = true
        extendedDynamicState3DepthClipNegativeOneToOne        = true
        extendedDynamicState3ViewportWScalingEnable           = false
        extendedDynamicState3ViewportSwizzle                  = false
        extendedDynamicState3CoverageToColorEnable            = false
        extendedDynamicState3CoverageToColorLocation          = false
        extendedDynamicState3CoverageModulationMode           = false
        extendedDynamicState3CoverageModulationTableEnable    = false
        extendedDynamicState3CoverageModulationTable          = false
        extendedDynamicState3CoverageReductionMode            = false
        extendedDynamicState3RepresentativeFragmentTestEnable = false
        extendedDynamicState3ShadingRateImageEnable           = false

VkPhysicalDeviceExtendedDynamicStateFeaturesEXT:
------------------------------------------------
        extendedDynamicState = true

VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT:
---------------------------------------------------
        graphicsPipelineLibrary = true

VkPhysicalDeviceHostQueryResetFeatures:
---------------------------------------
        hostQueryReset = true

VkPhysicalDeviceImage2DViewOf3DFeaturesEXT:
-------------------------------------------
        image2DViewOf3D   = true
        sampler2DViewOf3D = true

VkPhysicalDeviceImageRobustnessFeatures:
----------------------------------------
        robustImageAccess = true

VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT:
-----------------------------------------------
        imageSlicedViewOf3D = true

VkPhysicalDeviceImagelessFramebufferFeatures:
---------------------------------------------
        imagelessFramebuffer = true

VkPhysicalDeviceIndexTypeUint8FeaturesEXT:
------------------------------------------
        indexTypeUint8 = true

VkPhysicalDeviceInlineUniformBlockFeatures:
-------------------------------------------
        inlineUniformBlock                                 = true
        descriptorBindingInlineUniformBlockUpdateAfterBind = true

VkPhysicalDeviceLineRasterizationFeaturesEXT:
---------------------------------------------
        rectangularLines         = true
        bresenhamLines           = true
        smoothLines              = true
        stippledRectangularLines = true
        stippledBresenhamLines   = true
        stippledSmoothLines      = true

VkPhysicalDeviceMaintenance4Features:
-------------------------------------
        maintenance4 = true

VkPhysicalDeviceMultiDrawFeaturesEXT:
-------------------------------------
        multiDraw = true

VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT:
-------------------------------------------------------------
        multisampledRenderToSingleSampled = true

VkPhysicalDeviceMultiviewFeatures:
----------------------------------
        multiview                   = true
        multiviewGeometryShader     = true
        multiviewTessellationShader = true

VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT:
----------------------------------------------
        nonSeamlessCubeMap = true

VkPhysicalDevicePipelineCreationCacheControlFeatures:
-----------------------------------------------------
        pipelineCreationCacheControl = true

VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT:
--------------------------------------------------------
        primitiveTopologyListRestart      = true
        primitiveTopologyPatchListRestart = true

VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT:
----------------------------------------------------
        primitivesGeneratedQuery                      = true
        primitivesGeneratedQueryWithRasterizerDiscard = true
        primitivesGeneratedQueryWithNonZeroStreams    = true

VkPhysicalDevicePrivateDataFeatures:
------------------------------------
        privateData = true

VkPhysicalDeviceProtectedMemoryFeatures:
----------------------------------------
        protectedMemory = false

VkPhysicalDeviceProvokingVertexFeaturesEXT:
-------------------------------------------
        provokingVertexLast                       = true
        transformFeedbackPreservesProvokingVertex = true

VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT:
--------------------------------------------------------------
        rasterizationOrderColorAttachmentAccess   = true
        rasterizationOrderDepthAttachmentAccess   = true
        rasterizationOrderStencilAttachmentAccess = true

VkPhysicalDeviceRobustness2FeaturesEXT:
---------------------------------------
        robustBufferAccess2 = true
        robustImageAccess2  = true
        nullDescriptor      = true

VkPhysicalDeviceSamplerYcbcrConversionFeatures:
-----------------------------------------------
        samplerYcbcrConversion = false

VkPhysicalDeviceScalarBlockLayoutFeatures:
------------------------------------------
        scalarBlockLayout = true

VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures:
----------------------------------------------------
        separateDepthStencilLayouts = true

VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT:
----------------------------------------------
        shaderBufferFloat16Atomics      = false
        shaderBufferFloat16AtomicAdd    = false
        shaderBufferFloat16AtomicMinMax = false
        shaderBufferFloat32AtomicMinMax = true
        shaderBufferFloat64AtomicMinMax = false
        shaderSharedFloat16Atomics      = false
        shaderSharedFloat16AtomicAdd    = false
        shaderSharedFloat16AtomicMinMax = false
        shaderSharedFloat32AtomicMinMax = true
        shaderSharedFloat64AtomicMinMax = false
        shaderImageFloat32AtomicMinMax  = true
        sparseImageFloat32AtomicMinMax  = false

VkPhysicalDeviceShaderAtomicFloatFeaturesEXT:
---------------------------------------------
        shaderBufferFloat32Atomics   = true
        shaderBufferFloat32AtomicAdd = true
        shaderBufferFloat64Atomics   = false
        shaderBufferFloat64AtomicAdd = false
        shaderSharedFloat32Atomics   = true
        shaderSharedFloat32AtomicAdd = true
        shaderSharedFloat64Atomics   = false
        shaderSharedFloat64AtomicAdd = false
        shaderImageFloat32Atomics    = true
        shaderImageFloat32AtomicAdd  = true
        sparseImageFloat32Atomics    = false
        sparseImageFloat32AtomicAdd  = false

VkPhysicalDeviceShaderAtomicInt64Features:
------------------------------------------
        shaderBufferInt64Atomics = true
        shaderSharedInt64Atomics = true

VkPhysicalDeviceShaderClockFeaturesKHR:
---------------------------------------
        shaderSubgroupClock = true
        shaderDeviceClock   = true

VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures:
-------------------------------------------------------
        shaderDemoteToHelperInvocation = true

VkPhysicalDeviceShaderDrawParametersFeatures:
---------------------------------------------
        shaderDrawParameters = true

VkPhysicalDeviceShaderFloat16Int8Features:
------------------------------------------
        shaderFloat16 = true
        shaderInt8    = true

VkPhysicalDeviceShaderIntegerDotProductFeatures:
------------------------------------------------
        shaderIntegerDotProduct = true

VkPhysicalDeviceShaderObjectFeaturesEXT:
----------------------------------------
        shaderObject = true

VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures:
----------------------------------------------------
        shaderSubgroupExtendedTypes = true

VkPhysicalDeviceShaderTerminateInvocationFeatures:
--------------------------------------------------
        shaderTerminateInvocation = true

VkPhysicalDeviceSubgroupSizeControlFeatures:
--------------------------------------------
        subgroupSizeControl  = true
        computeFullSubgroups = true

VkPhysicalDeviceSynchronization2Features:
-----------------------------------------
        synchronization2 = true

VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT:
------------------------------------------------
        texelBufferAlignment = true

VkPhysicalDeviceTextureCompressionASTCHDRFeatures:
--------------------------------------------------
        textureCompressionASTC_HDR = false

VkPhysicalDeviceTimelineSemaphoreFeatures:
------------------------------------------
        timelineSemaphore = true

VkPhysicalDeviceTransformFeedbackFeaturesEXT:
---------------------------------------------
        transformFeedback = true
        geometryStreams   = true

VkPhysicalDeviceUniformBufferStandardLayoutFeatures:
----------------------------------------------------
        uniformBufferStandardLayout = true

VkPhysicalDeviceVariablePointersFeatures:
-----------------------------------------
        variablePointersStorageBuffer = true
        variablePointers              = true

VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT:
--------------------------------------------------
        vertexAttributeInstanceRateDivisor     = true
        vertexAttributeInstanceRateZeroDivisor = true

VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT:
---------------------------------------------------
        vertexInputDynamicState = true

VkPhysicalDeviceVulkan11Features:
---------------------------------
        storageBuffer16BitAccess           = true
        uniformAndStorageBuffer16BitAccess = true
        storagePushConstant16              = true
        storageInputOutput16               = false
        multiview                          = true
        multiviewGeometryShader            = true
        multiviewTessellationShader        = true
        variablePointersStorageBuffer      = true
        variablePointers                   = true
        protectedMemory                    = false
        samplerYcbcrConversion             = false
        shaderDrawParameters               = true

VkPhysicalDeviceVulkan12Features:
---------------------------------
        samplerMirrorClampToEdge                           = true
        drawIndirectCount                                  = true
        storageBuffer8BitAccess                            = true
        uniformAndStorageBuffer8BitAccess                  = true
        storagePushConstant8                               = true
        shaderBufferInt64Atomics                           = true
        shaderSharedInt64Atomics                           = true
        shaderFloat16                                      = true
        shaderInt8                                         = true
        descriptorIndexing                                 = false
        shaderInputAttachmentArrayDynamicIndexing          = false
        shaderUniformTexelBufferArrayDynamicIndexing       = false
        shaderStorageTexelBufferArrayDynamicIndexing       = false
        shaderUniformBufferArrayNonUniformIndexing         = false
        shaderSampledImageArrayNonUniformIndexing          = false
        shaderStorageBufferArrayNonUniformIndexing         = false
        shaderStorageImageArrayNonUniformIndexing          = false
        shaderInputAttachmentArrayNonUniformIndexing       = false
        shaderUniformTexelBufferArrayNonUniformIndexing    = false
        shaderStorageTexelBufferArrayNonUniformIndexing    = false
        descriptorBindingUniformBufferUpdateAfterBind      = false
        descriptorBindingSampledImageUpdateAfterBind       = false
        descriptorBindingStorageImageUpdateAfterBind       = false
        descriptorBindingStorageBufferUpdateAfterBind      = false
        descriptorBindingUniformTexelBufferUpdateAfterBind = false
        descriptorBindingStorageTexelBufferUpdateAfterBind = false
        descriptorBindingUpdateUnusedWhilePending          = false
        descriptorBindingPartiallyBound                    = false
        descriptorBindingVariableDescriptorCount           = false
        runtimeDescriptorArray                             = false
        samplerFilterMinmax                                = true
        scalarBlockLayout                                  = true
        imagelessFramebuffer                               = true
        uniformBufferStandardLayout                        = true
        shaderSubgroupExtendedTypes                        = true
        separateDepthStencilLayouts                        = true
        hostQueryReset                                     = true
        timelineSemaphore                                  = true
        bufferDeviceAddress                                = true
        bufferDeviceAddressCaptureReplay                   = false
        bufferDeviceAddressMultiDevice                     = false
        vulkanMemoryModel                                  = true
        vulkanMemoryModelDeviceScope                       = true
        vulkanMemoryModelAvailabilityVisibilityChains      = true
        shaderOutputViewportIndex                          = true
        shaderOutputLayer                                  = true
        subgroupBroadcastDynamicId                         = true

VkPhysicalDeviceVulkan13Features:
---------------------------------
        robustImageAccess                                  = true
        inlineUniformBlock                                 = true
        descriptorBindingInlineUniformBlockUpdateAfterBind = true
        pipelineCreationCacheControl                       = true
        privateData                                        = true
        shaderDemoteToHelperInvocation                     = true
        shaderTerminateInvocation                          = true
        subgroupSizeControl                                = true
        computeFullSubgroups                               = true
        synchronization2                                   = true
        textureCompressionASTC_HDR                         = false
        shaderZeroInitializeWorkgroupMemory                = true
        dynamicRendering                                   = true
        shaderIntegerDotProduct                            = true
        maintenance4                                       = true

VkPhysicalDeviceVulkanMemoryModelFeatures:
------------------------------------------
        vulkanMemoryModel                             = true
        vulkanMemoryModelDeviceScope                  = true
        vulkanMemoryModelAvailabilityVisibilityChains = true

VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures:
------------------------------------------------------
        shaderZeroInitializeWorkgroupMemory = true

@Atry Atry requested a review from K900 December 17, 2023 21:22
modules/wsl-distro.nix Outdated Show resolved Hide resolved
@Atry Atry requested a review from K900 December 22, 2023 23:43
@K900
Copy link
Contributor

K900 commented Dec 23, 2023

Change looks OK, can you please squash all the commits?

@Atry
Copy link
Contributor Author

Atry commented Dec 23, 2023

Squashed

@K900 K900 merged commit 70d7e2e into nix-community:main Dec 30, 2023
@Atry Atry deleted the patch-2 branch December 30, 2023 23:05
extraPackages = mkIf cfg.useWindowsDriver [
(pkgs.runCommand "wsl-lib" { } ''
mkdir "$out"
ln -s /usr/lib/wsl/lib "$out/lib"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This breaks if any other opengl-driver provides $out/lib which is basically any

opengl-drivers> building '/nix/store/gzizcchmspk8bpl0fpjj615in842fn66-opengl-drivers.drv'
opengl-drivers> warning: creating dangling symlink `/nix/store/c4ja1apm7lfb8llqqs79bg3s9lxmyrp5-opengl-drivers//lib' -> `/nix/store/q18kz23pnlnahbbgfb1rgx85vgpw57yz-wsl-lib/lib' -> `/usr/lib/wsl/lib'
opengl-drivers> error: collision between `/nix/store/kljglapjihjav85vd69g6nf0i2bwb1pk-intel-compute-runtime-23.35.27191.9/lib' and dangling symlink `/nix/store/q18kz23pnlnahbbgfb1rgx85vgpw57yz-wsl-lib/lib'

@terlar
Copy link
Contributor

terlar commented Jul 8, 2024

Where do you get the nvidia-smi from? Is it the one bundled with WSL, e.g. /usr/lib/wsl/lib/nvidia-smi.

For convenience, shouldn't this also be added to programs.nix-ld.libraries?

I got this working by having:

{ config, ... }: {
  programs.nix-ld = {
    enable = true;
    libraries = config.hardware.opengl.extraPackages;
  };
}

I'm not sure if it is possible to get working in another way?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants