Skip to content

Instantly share code, notes, and snippets.

@Usulyre
Last active March 31, 2024 01:59
Show Gist options
  • Star 14 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save Usulyre/bb33f77b225b8d9336c1f9e744114fba to your computer and use it in GitHub Desktop.
Save Usulyre/bb33f77b225b8d9336c1f9e744114fba to your computer and use it in GitHub Desktop.
Compiling/installing the mesa virtio-venus-driver-(below done with new linux container)
For: Chrome OS crostini-default debian container bookworm
Best viewed in "raw" format
In chrome browser type or paste
chrome://flags
type in "search flags" box "crostini" without quotes.
Enable "Crostini GPU Support" and select "Bookworm" for
"Debian version for new Crostini containers"
Restart your chromebook
In chrome os settings, enable "Linux development environment"
Close the "Terminal" program that opens.
In chrome browser press "ctrl+alt+t" to get crosh
Always start with the below command(s) in crosh and add to your existing vmc start cmdline (before starting any linux program that you want to use the vulkan driver!).
--enable-vulkan termina
Example in crosh:
vmc start --enable-vulkan termina
After your cmdline is entered wait until it is finished you should see "(termina) chronos@localhost ~ $"
Make sure to keep that tab/window open.
Open the linux "Terminal" program located in linux apps.
Type or paste the following cmd(s) one at a time in linux terminal program and press "Y" key if prompted:
sudo apt update
sudo apt upgrade
sudo apt-get install nano
sudo nano /etc/apt/sources.list
Add the (type or copy/paste) below lines to the opened text file:
deb-src [arch=amd64,i386] http://deb.debian.org/debian bookworm main
deb http://http.us.debian.org/debian sid main non-free contrib
Press ctrl+x, press the "y" key and press enter to save.
Type or paste the following cmd(s) one at a time in the linux terminal program:
sudo apt update
sudo apt full-upgrade -y
git clone https://gitlab.freedesktop.org/mesa/mesa.git
sudo apt-get build-dep mesa
sudo apt-get install libunwind-dev
sudo apt-get install libudev-dev
sudo apt-get install libxcb-keysyms1-dev
(Press the "y" key if prompted and wait for the process to complete)
cd mesa
If you want to update the mesa git repository use the cmd below in mesa folder
git pull origin
64 bit mesa driver:
Paste the below in the linux terminal program and press enter (the part in quotes, but don't paste the quotes, note that this a sample one can edit it for their system):
"meson setup build64 --libdir /usr/lib/x86_64-linux-gnu -Ddri3=enabled \
-Dprefix=/usr \
-Dglx=dri \
-Degl=enabled \
-Dgbm=enabled \
-Dgallium-vdpau=disabled \
-Dvalgrind=disabled \
-Dgallium-drivers=virgl \
-Dvulkan-drivers=virtio \
-Dvulkan-layers=device-select"
Type or paste the following cmd in the linux terminal program (the compiling/installation process may take some time):
sudo ninja -C build64 install
If you need to rebuild the 64 bit mesa driver, just delete the build64 folder which is inside the mesa folder and repaste the build/install cmdlines.
Example: sudo rm -rf build64
32 bit mesa driver:
Type or paste the following cmd(s) one at a time in the linux terminal program:
mkdir -p ~/.local/share/meson/cross
sudo nano ~/.local/share/meson/cross/gcc-i686
Paste the below into the opened text file:
# gcc-i686
[binaries]
c = '/usr/bin/gcc'
cpp = '/usr/bin/g++'
ar = '/usr/bin/gcc-ar'
strip = '/usr/bin/strip'
pkg-config = '/usr/bin/i686-linux-gnu-pkg-config'
llvm-config = '/usr/bin/llvm-config'
[built-in options]
c_args = ['-m32']
c_link_args = ['-m32']
cpp_args = ['-m32']
cpp_link_args = ['-m32']
[host_machine]
system = 'linux'
cpu_family = 'x86'
cpu = 'i686'
endian = 'little'
Press ctrl+x, press the "y" key and press enter to save.
Note: At this time, llvm doesn't build/install for 32 bit. Don't actually know if it is necessary at all.
Type or paste the following cmd(s) one at a time in the linux terminal program and Press the "y" key if prompted at any time.
(The reason why one has to enter so many commands is because I don't know if mesa has a 32 bit build dependency package for debian, welcome to find out if they do which would greatly simplify the process)
sudo apt-get install gcc-multilib
sudo apt-get install g++-multilib
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install pkg-config:i386
sudo apt-get -t sid install libdrm-dev:i386
sudo apt-get install libwayland-dev:i386
sudo apt-get install libwayland-egl-backend-dev:i386
sudo apt-get install libxext-dev:i386
sudo apt-get install libxfixes-dev:i386
sudo apt-get install x11proto-dev:i386
sudo apt-get install libxcb-glx0-dev:i386
sudo apt-get install libxcb-shm0-dev:i386
sudo apt-get install libx11-xcb-dev:i386
sudo apt-get install libxcb-dri2-0-dev:i386
sudo apt-get install libxcb-dri3-dev:i386
sudo apt-get install libxcb-present-dev:i386
sudo apt-get install libxshmfence-dev:i386
sudo apt-get install libxxf86vm-dev:i386
sudo apt-get install libxrandr-dev:i386
sudo apt-get install libunwind-dev:i386
sudo apt-get install libudev-dev:i386
sudo apt-get install libelf-dev:i386
sudo apt-get install libzstd-dev:i386
sudo apt-get install libbsd-dev:i386
sudo apt-get install libsensors-dev:i386
sudo apt-get install libxcb-keysyms1-dev:i386
Paste the below in the linux terminal program and press enter (the part in quotes, but don't paste the quotes, note that this a sample one can edit it for their system):
"meson setup build32 --cross-file gcc-i686 --libdir /usr/lib/i386-linux-gnu -Ddri3=enabled \
-Dprefix=/usr \
-Dglx=dri \
-Degl=enabled \
-Dgbm=enabled \
-Dgallium-vdpau=disabled \
-Dvalgrind=disabled \
-Dgallium-drivers=virgl \
-Dvulkan-drivers=virtio \
-Dvulkan-layers=device-select"
Type or paste the following cmd in the linux terminal program (the compiling/installation process may take some time):
sudo ninja -C build32 install
If you need to rebuild the 32 bit mesa driver, just delete the build32 folder which is inside the mesa folder and repaste the build/install cmdlines.
Example: sudo rm -rf build32
Type or paste the following cmd(s) into the linux terminal program:
sudo apt-get install vulkan-tools
You can then list your installed vulkan drivers with the cmd below:
ls /usr/share/vulkan/icd.d/
You should see "virtio_icd.x86_64.json"and
"virtio_icd.i686.json"
To test drivers:
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/virtio_icd.i686.json:/usr/share/vulkan/icd.d/virtio_icd.x86_64.json vkcube
For permanent 32/64 bit driver(no need to enter the above command with every program you want to use vulkan driver).
Type/paste the following cmd:
sudo nano /etc/environment
In the text file paste the below:
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/virtio_icd.i686.json:/usr/share/vulkan/icd.d/virtio_icd.x86_64.json
Press ctrl+x, press the "y" key and press enter to save.
Try typing "vulkaninfo" without quotes to get vulkan driver information.
The command "vulkaninfo | grep driverName" should return something like this:
driverName = venus
driverName = venus
If you enter the below "vkcube" without quotes in the linux terminal program, you should see something like below, and also a spinning cube:
usulyre@penguin:~$ vkcube
Selected GPU 0: Virtio-GPU Venus (AMD RADV STONEY), type: 1
On an intel based chromebook:
usulyre@penguin:~$ vkcube
Selected GPU 0: Virtio-GPU Venus (Intel(R) UHD Graphics 600 (GLK 2)), type: 1
If vkcube doesn't work, either restart the chromebook and go to crosh enter your vmc start cmdline and try vkcube again in terminal or go to crosh and type "exit" and then after that in crosh type "vmc stop termina" then you enter your vmc start cmdline and try vkcube again in termina.
Useful/optional flags in "chrome://flags:"
chrome://flags/#exo-ordinal-motion
Some notes:
There may be bugs, errors, etc. You can update the driver by deleting the mesa folder and use git clone to redownload the latest version of the driver,then go to the mesa folder and build/install the driver. Or go to the mesa folder and type without quotes "git pull origin" which will pull the newest updates to mesa to your system. You can then run the install cmds which should incorporate the newest updates. No need to redownload the dependencies, etc.
For an FPS counter vulkan apps only: add to /etc/environment this "VK_INSTANCE_LAYERS=VK_LAYER_MESA_overlay" without quotes.
For Lutris:
After installing Lutris you need to go to the mesa folder and run the install cmds again:
cd mesa
sudo ninja -C build64 install
sudo ninja -C build32 install
@Usulyre
Copy link
Author

Usulyre commented Nov 21, 2022

"vulkaninfo" and "vulkaninfo | grep driverName" work now i think.

Did a lot of editing to the guide.

For now, it's best to view the guide in "raw" format as some things don't show up completely in the original post

@CoolPenguin27
Copy link

ok

@CoolPenguin27
Copy link

it seems like every backports bubblewrap update improves flapak vulkan compatibility (not sure if I'm right)

@Usulyre
Copy link
Author

Usulyre commented Dec 14, 2022

it seems like every backports bubblewrap update improves flapak vulkan compatibility (not sure if I'm right)

Sorry, but I don't understand your comment.

@thawkins
Copy link

Tried running this but got the following two issues

  1. Line 70 should be "sudo apt full-upgrade -y" otherwise you get a lot of package conflicts.
  2. When trying to run the 64 bit version i get the following:

$ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/virtio_icd.i686.json:/usr/share/vulkan/icd.d/virtio_icd.x86_64.json vkcube
vkcube: ../src/virtio/vulkan/vn_renderer_virtgpu.c:1448: virtgpu_init_shmem_blob_mem: Assertion `gpu->capset.data.supports_blob_id_0' failed.
Aborted (core dumped)

My device is an Acer Spin 713, I created a brand new linux system to run this in after first backing up my existing one

Google Chrome: Version 112.0.5615.45 (Official Build) beta (64-bit)
Platform: 15359.37.0 (Official Build) beta-channel volteer
Channel: beta-channel
Firmware Version: Google_Voxel.13672.299.0
ARC Enabled: true
ARC: 9741620
Enterprise Enrolled: false
Developer Mode: false

@Usulyre
Copy link
Author

Usulyre commented Apr 17, 2023

Tried running this but got the following two issues

1. Line 70 should be "sudo apt full-upgrade -y" otherwise you get a lot of package conflicts.

2. When trying to run the 64 bit version i get the following:

$ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/virtio_icd.i686.json:/usr/share/vulkan/icd.d/virtio_icd.x86_64.json vkcube vkcube: ../src/virtio/vulkan/vn_renderer_virtgpu.c:1448: virtgpu_init_shmem_blob_mem: Assertion `gpu->capset.data.supports_blob_id_0' failed. Aborted (core dumped)

My device is an Acer Spin 713, I created a brand new linux system to run this in after first backing up my existing one

Google Chrome: Version 112.0.5615.45 (Official Build) beta (64-bit) Platform: 15359.37.0 (Official Build) beta-channel volteer Channel: beta-channel Firmware Version: Google_Voxel.13672.299.0 ARC Enabled: true ARC: 9741620 Enterprise Enrolled: false Developer Mode: false

Hi, looking into this issue: I also just recently encountered this error message.

@Usulyre
Copy link
Author

Usulyre commented Apr 21, 2023

Tried running this but got the following two issues

  1. Line 70 should be "sudo apt full-upgrade -y" otherwise you get a lot of package conflicts.
  2. When trying to run the 64 bit version i get the following:

$ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/virtio_icd.i686.json:/usr/share/vulkan/icd.d/virtio_icd.x86_64.json vkcube vkcube: ../src/virtio/vulkan/vn_renderer_virtgpu.c:1448: virtgpu_init_shmem_blob_mem: Assertion `gpu->capset.data.supports_blob_id_0' failed. Aborted (core dumped)

My device is an Acer Spin 713, I created a brand new linux system to run this in after first backing up my existing one

Google Chrome: Version 112.0.5615.45 (Official Build) beta (64-bit) Platform: 15359.37.0 (Official Build) beta-channel volteer Channel: beta-channel Firmware Version: Google_Voxel.13672.299.0 ARC Enabled: true ARC: 9741620 Enterprise Enrolled: false Developer Mode: false

Hi, you can try this branch/commit as there may be an issue with the latest version of mesa:

cd mesa

git checkout -t origin/23.1

git checkout 2c40215ab9 .

Then you can compile/build/install the drivers.

Let me know if it works.

@Usulyre
Copy link
Author

Usulyre commented Jun 13, 2023

for users of Chrome OS latest beta 115, the newest branch of mesa works now.

Change "-Dvulkan-drivers=virtio-experimental " to "-Dvulkan-drivers=virtio " without quotes of course for both build64 and build32

@Usulyre
Copy link
Author

Usulyre commented Oct 9, 2023

For anybody using "bookworm" debian version 12 in crostini:

For the line #59 above change " deb-src [arch=amd64,i386] http://deb.debian.org/debian bullseye main " to

" deb-src [arch=amd64,i386] http://deb.debian.org/debian bookworm main " without quotes.

For the line #61 above "deb http://http.us.debian.org/debian sid main non-free contrib " don't use this.

For the line #171 above change "sudo apt-get -t sid install libdrm-dev:i386 " to "sudo apt-get install libdrm-dev:i386 " without quotes

@livexia
Copy link

livexia commented Jan 17, 2024

During compile for 32bit, the meson show warning: DEPRECATION: c_args in the [properties] section of the machine file is deprecated, use the [built-in options] section, I think should change line #140 from [properties] to [built-in options].

Also when complie on my setup show error /usr/bin/ld: cannot find -lLLVM-14: No such file or directory, after install llvm:i386 and llvm-dev:i386 with command sudo apt install llvm:i386 llvm-dev:i386, the 32 bit driver comiple.

Now the game runs on vulkan, but the framerate still low, still thanks for the writeup.

@Usulyre
Copy link
Author

Usulyre commented Jan 19, 2024

During compile for 32bit, the meson show warning: DEPRECATION: c_args in the [properties] section of the machine file is deprecated, use the [built-in options] section, I think should change line #140 from [properties] to [built-in options].

Also when complie on my setup show error /usr/bin/ld: cannot find -lLLVM-14: No such file or directory, after install llvm:i386 and llvm-dev:i386 with command sudo apt install llvm:i386 llvm-dev:i386, the 32 bit driver comiple.

Now the game runs on vulkan, but the framerate still low, still thanks for the writeup.

Hi, I changed "[properties]" to "[built-in options]" .

How did you get llvm:i386 and llvm-dev:i386 to install? For me it removes python3-mako, etc. and I can't get past the configuration part.

I had been skipping llvm 32 bit and the driver does compile/install, but I don't know if not compiling/installing has any effect.

@livexia
Copy link

livexia commented Jan 20, 2024

How did you get llvm:i386 and llvm-dev:i386 to install? For me it removes python3-mako, etc. and I can't get past the configuration part.

I think my soultion for my problem is wrong, but beacuse I din't have python3 install from the apt source so the problem is not occur on my machine, but you are right the conflict is true. I didn't create a new crostini container, maybe this is the reason why it's different for me.

I had been skipping llvm 32 bit and the driver does compile/install, but I don't know if not compiling/installing has any effect.

Yeah, I agree with you, after fail to compile the 32bit driver, I run the vkcube and vulkaninfo, they show the expect output. I think my tested game is also able to run with the vulkan 64bit driver. So I don't think I need the 32bit driver, maybe some old 32bit game will need 32 bit driver.

@livexia
Copy link

livexia commented Mar 18, 2024

Here's the corrected version of your text:

"Last time, due to dependency conflicts, I removed the llvm:i386 and llvm-dev:i386 packages. Afterward, I assumed everything would work as normal. However, today when I attempted to launch Steam, it displayed an error stating it was unable to locate the DRI driver. I then tried updating the Mesa repository and meson from the sid source, and recompiled the 64-bit driver, but Steam still wouldn't launch. Subsequently, I attempted to compile the 32-bit driver, only to encounter the same problem: /usr/bin/ld: cannot find -lLLVM-14: No such file or directory.

To address this properly, I decided to change llvm-config to llvm-config-15 in the file ~/.local/share/meson/cross/gcc-i686. The version of llvm-config should match the LLVM version used when compiling the 64-bit driver. This resolved the compilation issue for the 32-bit driver. After installing the 32-bit driver, Steam ran perfectly.

It seems the complication arises from having two versions of LLVM on my system. While the default version is llvm-14, the 64-bit driver compilation seems to be using llvm-15, though I'm unsure why. Perhaps examining the meson.build file under the Mesa folder could shed some light on this issue.

Additionally, with meson version 1.4.0, it specifies that 'pkgconfig' should be 'pkg-config' in the file '~/.local/share/meson/cross/gcc-i686'."

Hope this will help others, have a nice day.

@Usulyre
Copy link
Author

Usulyre commented Mar 20, 2024

Here's the corrected version of your text:

"Last time, due to dependency conflicts, I removed the llvm:i386 and llvm-dev:i386 packages. Afterward, I assumed everything would work as normal. However, today when I attempted to launch Steam, it displayed an error stating it was unable to locate the DRI driver. I then tried updating the Mesa repository and meson from the sid source, and recompiled the 64-bit driver, but Steam still wouldn't launch. Subsequently, I attempted to compile the 32-bit driver, only to encounter the same problem: /usr/bin/ld: cannot find -lLLVM-14: No such file or directory.

To address this properly, I decided to change llvm-config to llvm-config-15 in the file ~/.local/share/meson/cross/gcc-i686. The version of llvm-config should match the LLVM version used when compiling the 64-bit driver. This resolved the compilation issue for the 32-bit driver. After installing the 32-bit driver, Steam ran perfectly.

It seems the complication arises from having two versions of LLVM on my system. While the default version is llvm-14, the 64-bit driver compilation seems to be using llvm-15, though I'm unsure why. Perhaps examining the meson.build file under the Mesa folder could shed some light on this issue.

Additionally, with meson version 1.4.0, it specifies that 'pkgconfig' should be 'pkg-config' in the file '~/.local/share/meson/cross/gcc-i686'."

Hope this will help others, have a nice day.

Hi, regarding llvm-config, I'm not able to install llvm-16:i386 if llvm-16 is installed, it keeps saying that it wants to remove llvm-16 and some python packages.

I tried to use llvm-config-16 in crossfile but compiling error happens when almost finished. I believe this has something to do with not having llvm-16:i386 installed.

For pkgconfig changed to pkg-config, I can change that.

@livexia
Copy link

livexia commented Mar 21, 2024

The default llvm version is llvm-14 in my system. The 64 bit driver compiles perfectly but I notice ninja using llvm-15 instead of using default llvm-14 when compile the 64 bit driver.In the cross compile file the llvm-config is llvm-config-14. If I use llvm-config(llvm-config-14), compile 32 bit driver will failed when almost finished.

First time I installed the llvm-14:i386 but as you said, it introduced package conflicts.So I think solve the 32 bit drive compile fail by installing the llvm:i386 pakckage is wrong. I think compile the 32 bit driver does not need llvm:i386.

So this time I change llvm-config to llvm-config-15, make sure using the same llvm version when complie 64 bit driver and 32 bit driver. After that, both compiles success.Due to my limited understanding of cross compile, I am not sure this solution is right, maybe this solution works only in my system.

pkgconfig change see: https://mesonbuild.com/Release-notes-for-1-3-0.html#machine-files-pkgconfig-field-deprecated-and-replaced-by-pkgconfig

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment