Intel Graphics: Difference between revisions

imported>Colemickens
Created page with "== Iris == To use the new Gallium <code>iris</code> driver, you can use the following in your system configuration: <syntaxHighlight lang=nix> hardware.opengl.package = (p..."
 
m Reword comment in the example
 
(19 intermediate revisions by 10 users not shown)
Line 1: Line 1:
== Iris ==
Example configuration with Hardware Acceleration & Quick Sync Video enabled on a modern Intel Graphics (Including ARC)
<syntaxhighlight lang="nix">
  services.xserver.videoDrivers = [ "modesetting" ];


To use the new Gallium <code>iris</code> driver, you can use the following in your system configuration:
  hardware.graphics = {
    enable = true;
    extraPackages = with pkgs; [
      # Required for modern Intel GPUs (Xe iGPU and ARC)
      intel-media-driver     # VA-API (iHD) userspace
      vpl-gpu-rt            # oneVPL (QSV) runtime


      # Optional (compute / tooling):
      intel-compute-runtime  # OpenCL (NEO) + Level Zero for Arc/Xe
      # NOTE: 'intel-ocl' also exists as a legacy package; not recommended for Arc/Xe.
      # libvdpau-va-gl      # Only if you must run VDPAU-only apps
    ];
  };
  environment.sessionVariables = {
    LIBVA_DRIVER_NAME = "iHD";    # Prefer the modern iHD backend
    # VDPAU_DRIVER = "va_gl";      # Only if using libvdpau-va-gl
  };
  # May help if FFmpeg/VAAPI/QSV init fails (esp. on Arc with i915):
  hardware.enableRedistributableFirmware = true;
  boot.kernelParams = [ "i915.enable_guc=3" ];
  # May help services that have trouble accessing /dev/dri (e.g., jellyfin/plex):
  # users.users.<service>.extraGroups = [ "video" "render" ];
</syntaxhighlight>
== Driver ==
Refer to the [https://nixos.org/manual/nixos/stable/#sec-x11--graphics-cards-intel Intel Graphics drivers] section of the NixOS manual.
== Video acceleration ==
To enable hardware (GPU) accelerated video decoding and encoding you need to add additional entries in <code>hardware.graphics.extraPackages</code> (see [[Accelerated_Video_Playback|accelerated video playback]]).
== Quick Sync Video ==
Intel Quick Sync Video (QSV) is a hardware accelerated media conversion framework for Intel GPUs.
Applications that can be accelerated using QSV include OBS Studio and ffmpeg.
QSV support can be used through either [https://github.com/Intel-Media-SDK/MediaSDK Intel Media SDK] or [https://github.com/intel/libvpl Intel VPL]. Intel VPL supersedes the now deprecated Media SDK.
Both libraries dispatch to a backing implementation that is different depending on the GPU generation at runtime. You need to add either <code>intel-media-sdk</code> or <code>vpl-gpu-rt</code> (previously <code>onevpl-intel-gpu</code>) to <code>hardware.graphics.extraPackages</code>. You can check the [https://github.com/intel/libvpl?tab=readme-ov-file#dispatcher-behavior-when-targeting-intel-gpus this] table to decide whether you need the Media SDK or VPL GPU runtime.
Sample configuration:
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
hardware.opengl.package =
  hardware.graphics = {
  (pkgs.mesa.override {
    enable = true;
     galliumDrivers = [
     extraPackages = with pkgs; [
       "r300" "r600" "radeonsi" "nouveau" "virgl" "svga" "swrast"
       ... # your Open GL, Vulkan and VAAPI drivers
       "iris"
       vpl-gpu-rt # or intel-media-sdk for QSV
     ];
     ];
   });
   };
</syntaxHighlight>
 
== 12th Gen (Alder Lake) ==
 
The X Server may fail to start with the newer 12th generation, Alder Lake, iRISxe integrated graphics chips. If this is the case, you can give the kernel a hint as to what driver to use. First confirm the graphic chip's device ID by running in a terminal:
 
<syntaxHighlight lang=console>
$ nix-shell -p pciutils --run "lspci -nn | grep VGA"
00:02.0 VGA compatible controller [0300]: Intel Corporation Alder Lake-UP3 GT2 [Iris Xe Graphics] [8086:46a8] (rev 0c)
</syntaxHighlight>
</syntaxHighlight>


Note that you might want additional entries in <code>extraPackages</code>, for example, to enable [[Accelerated_Video_Playback|"accelerated video playback"]].
In this example, "46a8" is the device ID. You can then add this to your configuration and reboot:
 
<pre>boot.kernelParams = [ "i915.force_probe=<device ID>" ];</pre>


(See this GitHub thread for context and explanation.)
[[Category:Video]]