Goal: We wanted to use iGPU for rendering images in chromium for my application.
About system:
We have a dedicated server with Ubuntu 24 and Intel Xeon processor & 64GB RAM.
After some research and experiments, we got webGL and some other things working, shown as output of `chrome://gpu` from **headless** **chromium browser.**
But see **vulkan** is still **disabled**, so as **webGPU**.
So we checked my system for vulkan and found that version 1.3 was installed.
```bash
$ vulkaninfo --summary
WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Received return code -3 from call to vkCreateInstance in ICD /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so. Skipping this driver.
'DISPLAY' environment variable not set... skipping surface info
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
==========
VULKANINFO
==========
Vulkan Instance Version: 1.3.275
Instance Extensions: count = 23
```
Then we researched about compatibility of Processor with Vulkan.
And then switched to v1.2
To setup vulkan v1.2, I followed this guide:
Even after switching to vulkan 1.2, we didnt get vulkan enabled for chrome.
```bash
$ google-chrome-stable --headless --no-sandbox --enable-features=Vulkan,webgpu --use-angle=vulkan --use-gl=vulkan --print-to-pdf=out.pdf 'chrome://gpu'
[0728/142120.205635:ERROR:gl_factory.cc(120)] Requested GL implementation (gl=none,angle=none) not found in allowed implementations: [(gl=egl-angle,angle=default),(gl=egl-gles2,angle=none)].
[0728/142120.207191:ERROR:viz_main_impl.cc(166)] Exiting GPU process due to errors during initialization
[0728/142120.214533bluez_dbus_manager.cc(248)] Floss manager not present, cannot set Floss enable/disable.
[0728/142120.218999:ERROR:gl_factory.cc(120)] Requested GL implementation (gl=none,angle=none) not found in allowed implementations: [(gl=egl-angle,angle=default),(gl=egl-gles2,angle=none)].
[0728/142120.220608:ERROR:viz_main_impl.cc(166)] Exiting GPU process due to errors during initialization
[0728/142120.227719:ERROR:gl_factory.cc(120)] Requested GL implementation (gl=none,angle=none) not found in allowed implementations: [(gl=egl-angle,angle=default),(gl=egl-gles2,angle=none)].
[0728/142120.229458:ERROR:viz_main_impl.cc(166)] Exiting GPU process due to errors during initialization
[0728/142120.328050sandbox_linux.cc(430)] InitializeSandbox() called with multiple threads in process gpu-process.
[0728/142120.332606:ERROR:command_buffer_proxy_impl.cc(132)] ContextResult::kTransientFailure: Failed to send GpuControl.CreateCommandBuffer.
Warning: terminator_CreateInstance: Received return code -3 from call to vkCreateInstance in ICD /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so. Skipping this driver.
681663 bytes written to file out.pdf
```
Some usful outputs:
```bash
$ vulkaninfo --summary
WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Failed to CreateInstance in ICD 0. Skipping ICD.
'DISPLAY' environment variable not set... skipping surface info
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
==========
VULKANINFO
==========
Vulkan Instance Version: 1.2.198
Instance Extensions: count = 20
-------------------------------
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_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_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
Instance Layers: count = 8
--------------------------
VK_LAYER_KHRONOS_synchronization2 Khronos Synchronization2 layer 1.2.198 version 1
VK_LAYER_KHRONOS_validation Khronos Validation Layer 1.2.198 version 1
VK_LAYER_LUNARG_api_dump LunarG API dump layer 1.2.198 version 2
VK_LAYER_LUNARG_device_simulation LunarG device simulation layer 1.2.198 version 1
VK_LAYER_LUNARG_gfxreconstruct GFXReconstruct Capture Layer Version 0.9.10 1.2.198 version 36874
VK_LAYER_LUNARG_monitor Execution Monitoring Layer 1.2.198 version 1
VK_LAYER_LUNARG_screenshot LunarG image capture layer 1.2.198 version 1
VK_LAYER_MESA_device_select Linux device selection layer 1.3.211 version 1
Devices:
========
GPU0:
apiVersion = 4206866 (1.3.274)
driverVersion = 100663305 (0x6000009)
vendorID = 0x8086
deviceID = 0x191d
deviceType = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
deviceName = Intel(R) HD Graphics P530 (SKL GT2)
driverID = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
driverName = Intel open-source Mesa driver
driverInfo = Mesa 24.0.9-0ubuntu0.1
conformanceVersion = 1.3.6.0
GPU1:
apiVersion = 4206866 (1.3.274)
driverVersion = 1 (0x0001)
vendorID = 0x10005
deviceID = 0x0000
deviceType = PHYSICAL_DEVICE_TYPE_CPU
deviceName = llvmpipe (LLVM 17.0.6, 256 bits)
driverID = DRIVER_ID_MESA_LLVMPIPE
driverName = llvmpipe
driverInfo = Mesa 24.0.9-0ubuntu0.1 (LLVM 17.0.6)
conformanceVersion = 1.3.1.1
```
```bash
$ lspci
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers (rev 07)
00:02.0 VGA compatible controller: Intel Corporation HD Graphics P530 (rev 06)
00:14.0 USB controller: Intel Corporation 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller (rev 31)
00:14.2 Signal processing controller: Intel Corporation 100 Series/C230 Series Chipset Family Thermal Subsystem (rev 31)
00:16.0 Communication controller: Intel Corporation 100 Series/C230 Series Chipset Family MEI Controller #1 (rev 31)
00:16.3 Serial controller: Intel Corporation 100 Series/C230 Series Chipset Family KT Redirection (rev 31)
00:17.0 SATA controller: Intel Corporation Q170/Q150/B150/H170/H110/Z170/CM236 Chipset SATA Controller [AHCI Mode] (rev 31)
00:1f.0 ISA bridge: Intel Corporation C236 Chipset LPC/eSPI Controller (rev 31)
00:1f.2 Memory controller: Intel Corporation 100 Series/C230 Series Chipset Family Power Management Controller (rev 31)
00:1f.4 SMBus: Intel Corporation 100 Series/C230 Series Chipset Family SMBus (rev 31)
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-LM (rev 31)
```
```bash
~$ glxinfo -B
Error: unable to open display
```
```bash
$ ls -la /dev/dri
total 0
drwxr-xr-x 3 root root 100 Jul 22 15:30 .
drwxr-xr-x 21 root root 4360 Jul 26 07:00 ..
drwxr-xr-x 2 root root 80 Jul 22 15:30 by-path
crw-rw---- 1 root video 226, 0 Jul 22 15:30 card0
crw-rw---- 1 root render 226, 128 Jul 22 15:30 renderD128
```
```bash
$ inxi -G
Graphics:
Device-1: Intel HD Graphics P530 driver: i915 v: kernel
Display: server: X.org v: 1.21.1.11 driver: N/A tty: 196x60
API: EGL v: 1.5 drivers: iris,swrast platforms: gbm,surfaceless,device
API: OpenGL v: 4.6 compat-v: 4.5 vendor: mesa v: 24.0.9-0ubuntu0.1 note: console (EGL sourced)
renderer: Mesa Intel HD Graphics P530 (SKL GT2), llvmpipe (LLVM 17.0.6 256 bits)
API: Vulkan v: 1.2.198 drivers: N/A surfaces: N/A
```