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