summary refs log tree commit diff
path: root/pkgs/tools/X11/primus/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/X11/primus/default.nix')
-rw-r--r--pkgs/tools/X11/primus/default.nix40
1 files changed, 40 insertions, 0 deletions
diff --git a/pkgs/tools/X11/primus/default.nix b/pkgs/tools/X11/primus/default.nix
new file mode 100644
index 000000000000..f457d25fe1b9
--- /dev/null
+++ b/pkgs/tools/X11/primus/default.nix
@@ -0,0 +1,40 @@
+# For a 64bit + 32bit system the LD_LIBRARY_PATH must contain both the 32bit and 64bit primus
+# libraries. Providing a different primusrun for each architecture will not work as expected. EG:
+# Using steam under wine can involve both 32bit and 64bit process. All of which inherit the
+# same LD_LIBRARY_PATH.
+# Other distributions do the same.
+{ stdenv
+, primusLib
+, writeScript
+, primusLib_i686 ? null
+}:
+with stdenv.lib;
+let
+  version = "1.0.0748176";
+  ldPath = makeLibraryPath ([primusLib] ++ optional (primusLib_i686 != null) primusLib_i686);
+  primusrun = writeScript "primusrun"
+''
+  export LD_LIBRARY_PATH=${ldPath}:\$LD_LIBRARY_PATH
+  # see: https://github.com/amonakov/primus/issues/138
+  # On my system, as of 3.16.6, the intel driver dies when the pixel buffers try to read from the
+  # source memory directly. Setting PRIMUS_UPLOAD causes an indirection through textures which
+  # avoids this issue.
+  export PRIMUS_UPLOAD=1
+  exec "$@"
+'';
+in
+stdenv.mkDerivation {
+  name = "primus-${version}";
+  builder = writeScript "builder"
+  ''
+  source $stdenv/setup
+  mkdir -p $out/bin
+  cp ${primusrun} $out/bin/primusrun
+  '';
+
+  meta = {
+    homepage = https://github.com/amonakov/primus;
+    description = "Faster OpenGL offloading for Bumblebee";
+    maintainer = maintainers.coconnor;
+  };
+}