diff -urN primus_vk-1.6.1.orig/Makefile primus_vk-1.6.1/Makefile
--- primus_vk-1.6.1.orig/Makefile	2020-12-26 02:37:10.000000000 +0100
+++ primus_vk-1.6.1/Makefile	2022-01-16 11:34:38.080354265 +0100
@@ -13,7 +13,7 @@
 
 override CXXFLAGS += --std=gnu++11 -g3
 
-all: libprimus_vk.so libnv_vulkan_wrapper.so
+all: libprimus_vk.so libnv_vulkan_wrapper.so primus_vk_diag
 
 libprimus_vk.so: primus_vk.cpp
 	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I/usr/include/vulkan -shared -fPIC $^ -o $@ -Wl,-soname,libprimus_vk.so.1 -ldl -lpthread $(LDFLAGS)
@@ -33,7 +33,7 @@
 	$(CXX) -g3 -o $@ $^ -lX11 -lvulkan -ldl $(LDFLAGS)
 
 clean:
-	rm -f libnv_vulkan_wrapper.so libprimus_vk.so
+	rm -f libnv_vulkan_wrapper.so libprimus_vk.so primus_vk_diag
 
 install: all
 	$(INSTALL) "libnv_vulkan_wrapper.so" "$(DESTDIR)$(libdir)/libnv_vulkan_wrapper.so.1"
diff -urN primus_vk-1.6.1.orig/Makefile.orig primus_vk-1.6.1/Makefile.orig
--- primus_vk-1.6.1.orig/Makefile.orig	1970-01-01 01:00:00.000000000 +0100
+++ primus_vk-1.6.1/Makefile.orig	2022-01-16 11:34:24.083300100 +0100
@@ -0,0 +1,43 @@
+DESTDIR      ?=
+PREFIX        = /usr/local
+INSTALL       = /usr/bin/install
+override INSTALL += -D
+MSGFMT        = /usr/bin/msgfmt
+SED           = /bin/sed
+LN            = /bin/ln
+bindir        = $(PREFIX)/bin
+libdir        = $(PREFIX)/lib
+sysconfdir    = $(PREFIX)/etc
+datarootdir   = ${PREFIX}/share
+datadir       = ${datarootdir}
+
+override CXXFLAGS += --std=gnu++11 -g3
+
+all: libprimus_vk.so libnv_vulkan_wrapper.so
+
+libprimus_vk.so: primus_vk.cpp
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I/usr/include/vulkan -shared -fPIC $^ -o $@ -Wl,-soname,libprimus_vk.so.1 -ldl -lpthread $(LDFLAGS)
+
+libnv_vulkan_wrapper.so: nv_vulkan_wrapper.cpp
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I/usr/include/vulkan -shared -fPIC $^ -o $@ -Wl,-soname,libnv_vulkan_wrapper.so.1 -lX11 -lGLX -ldl $(LDFLAGS)
+
+primus_vk_forwarding.h:
+	xsltproc surface_forwarding_functions.xslt /usr/share/vulkan/registry/vk.xml | tail -n +2 > $@
+
+primus_vk_forwarding_prototypes.h:
+	xsltproc surface_forwarding_prototypes.xslt /usr/share/vulkan/registry/vk.xml | tail -n +2 > $@
+
+primus_vk.cpp: primus_vk_forwarding.h primus_vk_forwarding_prototypes.h
+
+primus_vk_diag: primus_vk_diag.o
+	$(CXX) -g3 -o $@ $^ -lX11 -lvulkan -ldl $(LDFLAGS)
+
+clean:
+	rm -f libnv_vulkan_wrapper.so libprimus_vk.so
+
+install: all
+	$(INSTALL) "libnv_vulkan_wrapper.so" "$(DESTDIR)$(libdir)/libnv_vulkan_wrapper.so.1"
+	$(INSTALL) "libprimus_vk.so"  "$(DESTDIR)$(libdir)/libprimus_vk.so.1"
+	$(INSTALL) -m644 "primus_vk.json" -t "$(DESTDIR)$(datadir)/vulkan/implicit_layer.d/"
+	$(INSTALL) -m644 "nv_vulkan_wrapper.json" -t "$(DESTDIR)$(datadir)/vulkan/icd.d/"
+	$(INSTALL) -m755 "pvkrun.in.sh" "$(DESTDIR)$(bindir)/pvkrun"
diff -urN primus_vk-1.6.1.orig/Makefile.rej primus_vk-1.6.1/Makefile.rej
--- primus_vk-1.6.1.orig/Makefile.rej	1970-01-01 01:00:00.000000000 +0100
+++ primus_vk-1.6.1/Makefile.rej	2022-01-16 11:34:38.080354265 +0100
@@ -0,0 +1,9 @@
+--- Makefile	2021-08-15 02:04:17.397517761 +0200
++++ Makefile	2021-08-15 02:02:57.615081284 +0200
+@@ -41,4 +41,6 @@
+ 	$(INSTALL) -m644 "primus_vk.json" -t "$(DESTDIR)$(datadir)/vulkan/implicit_layer.d/"
+ 	$(INSTALL) -m644 "nv_vulkan_wrapper.json" -t "$(DESTDIR)$(datadir)/vulkan/icd.d/"
+ 	$(INSTALL) -m755 "pvkrun.in.sh" "$(DESTDIR)$(bindir)/pvkrun"
++	$(INSTALL) -m755 "primus_vk_diag.sh" "$(DESTDIR)$(bindir)/primus_vk_diag.sh"
++	$(INSTALL) -m755 "primus_vk_diag" "$(DESTDIR)$(bindir)/primus_vk_diag"
+ 
diff -urN primus_vk-1.6.1.orig/primus_vk_diag.sh.orig primus_vk-1.6.1/primus_vk_diag.sh.orig
--- primus_vk-1.6.1.orig/primus_vk_diag.sh.orig	1970-01-01 01:00:00.000000000 +0100
+++ primus_vk-1.6.1/primus_vk_diag.sh.orig	2022-01-16 11:29:45.961255686 +0100
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+export VK_LOADER_DEBUG=warn,error,info
+export LD_DEBUG=libs
+export ENABLE_PRIMUS_LAYER=0
+export PVK_DIAG_PATH=/usr/bin
+
+function step_0 {
+    printf "===== Round 0: Vulkaninfo =====\n"
+    if which vulkaninfo >> /dev/null; then
+	printf "==== Without Optirun ====\n"
+	vulkaninfo 2>&1
+	printf "==== With Optirun ====\n"
+	optirun vulkaninfo 2>&1
+    else
+	printf "ERROR: Vulkaninfo is missing. Please install for more diagnostic data\n"
+    fi
+}
+function step_1 {
+    printf "===== Round 1: Plain Vulkan =====\n"
+    ${PVK_DIAG_PATH}/primus_vk_diag vulkan 2>&1
+}
+function step_2 {
+    printf "===== Round 2: Vulkan with optirun =====\n"
+    optirun ${PVK_DIAG_PATH}/primus_vk_diag vulkan 2>&1
+}
+function step_3 {
+    printf "===== Round 3: Vulkan with optirun and Primus layer =====\n"
+    ENABLE_PRIMUS_LAYER=1 optirun ${PVK_DIAG_PATH}/primus_vk_diag vulkan 2>&1
+}
+function step_4 {
+    printf "===== Round 4: Mixed Vulkan and OpenGL with Primus layer =====\n"
+    ENABLE_PRIMUS_LAYER=1 optirun ${PVK_DIAG_PATH}/primus_vk_diag vulkan gl vulkan 2>&1
+}
+function step_5 {
+    printf "===== Round 5: Mixed Vulkan and OpenGL with Primus layer while forcing primus-libGLa =====\n"
+    ENABLE_PRIMUS_LAYER=1 optirun env PRIMUS_libGLa=/usr/lib/libGLX_nvidia.so.0 ${PVK_DIAG_PATH}/primus_vk_diag vulkan gl vulkan 2>&1
+}
+
+if [[ $# == 0 ]]; then
+    step_0
+    step_1
+    step_2
+    step_3
+    step_4
+    step_5
+else
+    for arg in "$@"; do
+	if [[ $arg == [0-5] ]]; then
+	    step_$arg
+	else
+	    printf "Invalid argument\n" >&2
+	fi
+    done
+fi
