nowrep / obs-vkcapture Goto Github PK
View Code? Open in Web Editor NEWOBS Linux Vulkan/OpenGL game capture
License: GNU General Public License v2.0
OBS Linux Vulkan/OpenGL game capture
License: GNU General Public License v2.0
Hello,
I made a Gentoo ebuild for this awesome project, in GURU (you can update the README to mention it if you are good with that), and I get a QA notice about two libraries:
* QA Notice: The following shared libraries lack a SONAME
* /usr/lib64/libVkLayer_obs_vkcapture.so
* /usr/lib64/libobs_glcapture.so
When manually installed with the instructions in the README, these files also find themselves at the same directory, here's what's in the install_manifest.txt
/usr/lib/libVkLayer_obs_vkcapture.so
/usr/lib/libobs_glcapture.so
The documentation about this QA notice seem to either suggest providing a SONAME for these libraries, or they actually are at the wrong place, since they're installed in a shared location, and need to be in /usr/lib64/obs-plugins/
instead ?
Thanks!
Adel
Well, generally speaking I start meeting crashes when I tried to close my game (it happens almost everytime with Deep Rock Galactic), but I also have noticed a few crashes when I minimize my games or they lose focus (happens with Metro 2033 in Proton). Tested with different version of Proton, but no success.
I don't think I need to provide logs from other games, because they look the same, so here is the logs files taken with Deep Rock Galactic.
Steam
[obs-vkcapture] Init 0.6
[obs-vkcapture] Injecting VK_KHR_external_memory_fd extension
[obs-vkcapture] Injecting VK_EXT_image_drm_format_modifier extension
[obs-vkcapture] DRM format modifiers support not available
Fossilize INFO: Overriding serialization path: "/mnt/evo/SteamLibrary/steamapps/shadercache/548430/fozpipelinesv5/steamapprun_pipeline_cache".
[obs-vkcapture] Texture VK_FORMAT_B8G8R8A8_UNORM 1920x1080
[obs-vkcapture] ------------------ vulkan capture started ------------------
RecordSteamInterfaceCreation (PID 8230): SteamNetworkingUtils003 /
RecordSteamInterfaceCreation (PID 8230): SteamNetworkingUtils003 /
[obs-vkcapture] ------------------- vulkan capture freed -------------------
obs doesn't say something interesting before actually crash, and the last line before its segfault is.
info: [linux-vkcapture] Creating texture from dmabuf 9 1920x1080 stride:7680 offset:0
gdb attached to an obs process.
[New LWP 7100]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
--Type <RET> for more, q to quit, c to continue without paging--
0x00007ff5f527037f in poll () from /usr/lib/libc.so.6
(gdb) continue
Continuing.
Thread 32 "libobs: graphic" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ff558f0e640 (LWP 7055)]
0x00007ff5d0002670 in ?? () from /usr//lib/obs-plugins/linux-vkcapture.so
(gdb) bt
#0 0x00007ff5d0002670 in () at /usr//lib/obs-plugins/linux-vkcapture.so
#1 0x00007ff5f6387441 in obs_source_video_tick () at /usr/lib/libobs.so.0
#2 0x00007ff5f63c46a1 in obs_graphics_thread_loop () at /usr/lib/libobs.so.0
#3 0x00007ff5f63c5cc9 in obs_graphics_thread () at /usr/lib/libobs.so.0
#4 0x00007ff5f5352299 in start_thread () at /usr/lib/libpthread.so.0
#5 0x00007ff5f527b053 in clone () at /usr/lib/libc.so.6
Obs stdout:
info: [linux-vkcapture] Creating texture from dmabuf 1276x1391 modifier:144115188085734146
info: [linux-vkcapture] [0] fd:39 stride:5120 offset:0
info: [linux-vkcapture] [1] fd:40 stride:1536 offset:7208960
error: Cannot create EGLImage: Arguments are inconsistent (for example, a valid context requires buffers not supplied by a valid surface).
error: [linux-vkcapture] Could not create texture from dmabuf source
When trying to use obs-glcapture to capture anything (including glxgears) I just get this output:
[obs-vkcapture] Init 0.7
297 shaders loaded in 0.3716s
[obs-vkcapture] Texture GL_RGBA 1920x1080
[obs-vkcapture] Failed to get buffer from pixmap
[obs-vkcapture] shtex init failed
[obs-vkcapture] gl_init failed
[obs-vkcapture] Texture GL_RGBA 1920x1080
[obs-vkcapture] Failed to get buffer from pixmap
[obs-vkcapture] shtex init failed
[obs-vkcapture] gl_init failed
[obs-vkcapture] Texture GL_RGBA 1920x1080
[obs-vkcapture] Failed to get buffer from pixmap
[obs-vkcapture] shtex init failed
[obs-vkcapture] gl_init failed
[obs-vkcapture] Texture GL_RGBA 1920x1080
[obs-vkcapture] Failed to get buffer from pixmap
[obs-vkcapture] shtex init failed
[obs-vkcapture] gl_init failed
[obs-vkcapture] Texture GL_RGBA 1920x1080
[obs-vkcapture] Failed to get buffer from pixmap
[obs-vkcapture] shtex init failed
[obs-vkcapture] gl_init failed
This is on an amd vega card with the latest mesa and amdgpu drivers
Looks like sometimes it aligned with wrong windows.
Chromium - not aligned
Blender - aligned
ClassiCube - aligned
Minecraft 1.16.5 (java 11) - not aligned
Minecraft 1.0 (java 8) - not aligned
Counter Strike 1.6 - aligned
mpv player - aligned
If you run a game like Stardew Valley or Rimworld in a Window, having run it with obs-glcapture
and then move the Window, it visually breaks with a result similar to this
I'm running the games on the Intel card of an Optimus Laptop
Intel HD 4600
nVidia GTX 950M
i7 4720HQ
12GB RAM
Arch Linux
Gnome
Hi.
Just imported obs-vkcapture to OpenMandriva Cooker repository. Package compile for x86_64 and znver1 but failing on ARM.
I know aarch64 is not very popular on desktops, but it would be nice to have this package working.
Error:
In file included from /builddir/build/BUILD/obs-vkcapture-0.8.1/src/dlsym.c:20:
DEBUG util.py:636: /builddir/build/BUILD/obs-vkcapture-0.8.1/src/elfhacks.h:60:4: error: neither __elf32 nor __elf64 is defined
DEBUG util.py:636: # error neither __elf32 nor __elf64 is defined
DEBUG util.py:636: ^
DEBUG util.py:636: 1 error generated.
/builddir/build/BUILD/obs-vkcapture-0.8.1/src/elfhacks.c:33:37: error: unknown type name 'ElfW_Sword'
DEBUG util.py:636: int eh_find_next_dyn(eh_obj_t *obj, ElfW_Sword tag, int i, ElfW(Dyn) **next);
Full build log here: https://file-store.openmandriva.org/api/v1/file_stores/c512a02995ce0cac2dec952024af1e65542628c5.log?show=true
Details:
OS: OpenMandriva Cooker
Compiler: LLVM/Clang 12.0.1
LTO: Enabled
Hello, I'm on Fedora 36 Beta with Plasma as the DE. I downloaded the project, built it and installed it. I lanched OBS with OBS_USE_EGL=1 obs
but the Game Capture source doesn't appear anywhere. Am I missing something?
Also downloaded the Flatpak OBS and VKCapture, there the source appears but it won't capture anything, potentially cause Steam is a repo package and not he Flatpak.
Hi again! obs-vkcapture got 32-bit programs support, but in Debian 11 it tricky to use. Obs-glcapture script don't preload 32-bit libraries in Debian, but LD_PRELOAD=/usr/local/lib/i686-linux-gnu/libobs_glcapture.so %command%
works fine. I compiled and installed plugin using my own script. I used /usr/local prefix because my OBS compiled from source and installed into /usr/local.
#! /bin/bash
cmake -B build -S . -DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_INSTALL_LIBDIR=lib \
-DCMAKE_INSTALL_DATADIR=/share \
-DCMAKE_BUILD_TYPE=Release
make -C build
export CFLAGS="-m32 ${CFLAGS}"
export CXXFLAGS="-m32 ${CXXFLAGS}"
export LDFLAGS="-m32 ${LDFLAGS}"
echo $CFLAGS
cmake -B build32 -S . -DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_INSTALL_LIBDIR=lib/i686-linux-gnu \
-DCMAKE_INSTALL_DATADIR=/share \
-DCMAKE_LIBRARY_PATH=/usr/local/lib/i686-linux-gnu \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_PLUGIN=OFF
make -C build32
sudo checkinstall --default --pkgname=obs-studio-local-vkcapture --fstrans=no --backup=no --pkgversion="$(date +%Y%m%d)" --deldoc=yes sh -c 'make -C build install; make -C build32 install'
But whereis libobs_glcapture.so
command shows only 64-bit library. I checked /etc/ld.so.conf.d/i386-linux-gnu.conf
file and it said that /usr/local/lib/i686-linux-gnu
directory is used by 'ldconfig', so 32-bit library must appear in whereis
command output too.
/usr/local/lib/i686-linux-gnu:
# Multiarch support
/usr/local/lib/i386-linux-gnu
/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu
/usr/local/lib/i686-linux-gnu
/lib/i686-linux-gnu
/usr/lib/i686-linux-gnu
So, how to make obs-glcapture script work for Debian 11?
When i wanna update the aur package on my install it keep failing with:
`CMake Error at CMakeLists.txt:44 (find_package):
By not providing "FindLibObs.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "LibObs", but
CMake did not find one.
Could not find a package configuration file provided by "LibObs" with any
of the following names:
LibObsConfig.cmake
libobs-config.cmake
Add the installation prefix of "LibObs" to CMAKE_PREFIX_PATH or set
"LibObs_DIR" to a directory containing one of the above files. If "LibObs"
provides a separate development package or SDK, be sure it has been
installed.
`
Same with building from here right away. Checking obs gits they do not provide the FindLibObs.cmake anymore, but refer to an updated wiki to check it how to.
If I have either amdvlk or vulkan-amdgpu-pro installed, OBS_VKCAPTURE=1 fails with 'Socket sendmsg error: Bad file descriptor'.
Explicitly setting VK_ICD_FILENAMES to use radeon_icd.x86_64.json fixes it.
Error only happen when running make && make install
/home/buymymojo/obs-vkcapture/src/vkcapture.c:20:10: fatal error: obs-nix-platform.h: No such file or directory 20 | #include <obs-nix-platform.h> | ^~~~~~~~~~~~~~~~~~~~ compilation terminated. make[2]: *** [CMakeFiles/linux-vkcapture.dir/build.make:82: CMakeFiles/linux-vkcapture.dir/src/vkcapture.c.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:124: CMakeFiles/linux-vkcapture.dir/all] Error 2 make: *** [Makefile:149: all] Error 2 [buymymojo@buymymojo build]$
obs-vkcapture captures the game without the effects applied by vkBasalt or MangoHUDs overlay. It used to capture those, but after a system update it stopped.
System
OS: Arch Linux
Kernel: 5.16.0-zen1-1-zen
xorg-server 21.1.3-1
Mesa version: Mesa 22.0.0-devel (git-307cdb7147)
obs-vkcapture(AUR package) version: obs-vkcapture-git r176.f8a6a71-1
When I'm trying to open in-game Steam overlay with obs-vkcapture enabled it crashes or freezes my game (tested with some
games, including Proton and native (at least Valheim does)).
I'm using X11 (AwesomeWM), OBS Studio 27.0.0-rc3-48-gca88ba8bb, vkcapture is c4e6728 and Mesa version is 21.1.0.
Here is a log file from Deep Rock Galactic.log with obs-vkcapture as example.
Running obs-glcapture glxgears
on the proprietary driver leads to the following output:
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
[obs-vkcapture] Init GLX 1.0.0
[obs-vkcapture] Texture GL_RGBA 841x444
[obs-vkcapture] Failed to get buffer from pixmap
[obs-vkcapture] shtex init failed
X connection to :0 broken (explicit kill or server shutdown).
X connection to :0 broken (explicit kill or server shutdown).
I tried following the debug steps outlined in #16 but running with that patch led to a segmentation fault, not sure why.
The output for xdpyinfo | grep DRI
is only DRI2
after a bit of trying I was unable to enable DRI3
on my system (i think it's because the driver doesn't support it).
I am also unable to capture egl, running obs-glcapture eglgears_x11
leads to a segmentation fault.
Not sure what other information is needed.
And thanks for writing an awesome piece of software :D.
Hello, so I ama trying to capture using OBS VKCapture for some days now with no sucess. Here are the logs when trying to capture HZD of both Steam and OBS:
OBS Log:
Attempted path: share/obs/obs-studio/locale/en-US.ini
Attempted path: /usr/share/obs/obs-studio/locale/en-US.ini
Attempted path: share/obs/obs-studio/locale.ini
Attempted path: /usr/share/obs/obs-studio/locale.ini
Attempted path: share/obs/obs-studio/locale/el-GR.ini
Attempted path: /usr/share/obs/obs-studio/locale/el-GR.ini
info: Using preferred locale 'el-GR'
Attempted path: share/obs/obs-studio/themes/Dark.qss
Attempted path: /usr/share/obs/obs-studio/themes/Dark.qss
info: Using EGL/X11
info: CPU Name: AMD Ryzen 9 5900HX with Radeon Graphics
info: CPU Speed: 4890.000MHz
info: Physical Cores: 8, Logical Cores: 16
info: Physical Memory: 63784MB Total, 51689MB Free
info: Kernel Version: Linux 5.17.3-xm1.0.fc36.x86_64
info: Distribution: "Fedora Linux" 36
info: Session Type: x11
info: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.20.14
info: Qt Version: 5.15.3 (runtime), 5.15.3 (compiled)
info: Portable mode: false
Attempted path: share/obs/obs-studio/themes/Dark/no_sources.svg
Attempted path: /usr/share/obs/obs-studio/themes/Dark/no_sources.svg
QMetaObject::connectSlotsByName: No matching signal for on_tbar_position_valueChanged(int)
QMetaObject::connectSlotsByName: No matching signal for on_actionShowTransitionProperties_triggered()
QMetaObject::connectSlotsByName: No matching signal for on_actionHideTransitionProperties_triggered()
info: OBS 27.2.4 (linux)
info: ---------------------------------
info: ---------------------------------
info: audio settings reset:
samples per sec: 48000
speakers: 2
info: ---------------------------------
info: Initializing OpenGL...
info: Loading up OpenGL on adapter AMD AMD RENOIR (LLVM 13.0.1, DRM 3.44, 5.17.3-xm1.0.fc36.x86_64)
info: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 22.0.1, shading language 4.60
info: ---------------------------------
info: video settings reset:
base resolution: 1920x1080
output resolution: 1280x720
downscale filter: Bicubic
fps: 30/1
format: NV12
YUV mode: 709/Partial
info: NV12 texture support not available
info: Audio monitoring device:
name: Προεπιλεγμένη
id: default
info: ---------------------------------
warning: Failed to load 'en-US' text for module: 'decklink-captions.so'
warning: Failed to load 'en-US' text for module: 'decklink-ouput-ui.so'
info: [pipewire] Available captures:
info: [pipewire] - Desktop capture
info: [pipewire] - Window capture
libDeckLinkAPI.so: cannot open shared object file: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
warning: A DeckLink iterator could not be created. The DeckLink drivers may not be installed
info: No blackmagic support
warning: v4l2loopback not installed, virtual camera disabled
warning: Failed to load 'el-GR' text for module: 'linux-vkcapture.so'
info: [linux-vkcapture] plugin loaded successfully (version 1.1.3)
error: os_dlopen(libnvidia-encode.so.1->libnvidia-encode.so.1): libnvidia-encode.so.1: cannot open shared object file: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
info: FFMPEG VAAPI supported
error: os_dlopen(libvlc.so.5->libvlc.so.5): libvlc.so.5: cannot open shared object file: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
info: [vlc-video]: Couldn't find VLC installation, VLC video source disabled
info: ---------------------------------
info: Loaded Modules:
info: vlc-video.so
info: text-freetype2.so
info: rtmp-services.so
info: obs-x264.so
info: obs-vst.so
info: obs-transitions.so
info: obs-outputs.so
info: obs-libfdk.so
info: obs-filters.so
info: obs-ffmpeg.so
info: linux-vkcapture.so
info: linux-v4l2.so
info: linux-pulseaudio.so
info: linux-jack.so
info: linux-decklink.so
info: linux-capture.so
info: linux-alsa.so
info: image-source.so
info: frontend-tools.so
info: decklink-ouput-ui.so
info: decklink-captions.so
info: ---------------------------------
info: ==== Startup complete ===============================================
info: All scene data cleared
info: ------------------------------------------------
info: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.49) 15.0.0'
info: pulse-input: Audio format: s32le, 48000 Hz, 2 channels
info: pulse-input: Started recording from 'alsa_output.pci-0000_08_00.6.analog-stereo.monitor'
info: [Loaded global audio device]: 'Ήχος Επιφάνειας Εργασίας'
info: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.49) 15.0.0'
info: pulse-input: Audio format: s32le, 48000 Hz, 2 channels
info: pulse-input: Started recording from 'alsa_input.pci-0000_08_00.6.analog-stereo'
info: [Loaded global audio device]: 'Μικρόφωνο/Aux'
info: Switched to scene 'Σκηνή'
info: ------------------------------------------------
info: Loaded scenes:
info: - scene 'Σκηνή':
info: - source: 'Game Capture' (vkcapture-source)
info: ------------------------------------------------
Attempted path: share/obs/obs-studio/images/overflow.png
Attempted path: /usr/share/obs/obs-studio/images/overflow.png
info: adding 42 milliseconds of audio buffering, total audio buffering is now 42 milliseconds (source: Ήχος Επιφάνειας Εργασίας)
info: ---------------------------------
info: [x264 encoder: 'simple_h264_stream'] preset: veryfast
info: [x264 encoder: 'simple_h264_stream'] settings:
rate_control: CBR
bitrate: 2500
buffer size: 2500
crf: 23
fps_num: 30
fps_den: 1
width: 1280
height: 720
keyint: 250
info: libfdk_aac encoder created
info: libfdk_aac bitrate: 160, channels: 2
info: ==== Recording Start ===============================================
info: [ffmpeg muxer: 'simple_file_output'] Writing file '/home/qushy/2022-04-16 20-37-25.mkv'...
info: Output format name and long_name: matroska, Matroska
/usr/bin/xdg-screensaver: γραμμή 600: xset: εντολή δεν βρέθηκε
info: [linux-vkcapture] Creating texture from dmabuf 1920x1080 modifier:144115188488387331
info: [linux-vkcapture] [0] fd:12 stride:7680 offset:0
info: [linux-vkcapture] [1] fd:13 stride:2048 offset:8847360
error: Cannot create EGLImage: Arguments are inconsistent (for example, a valid context requires buffers not supplied by a valid surface).
error: [linux-vkcapture] Could not create texture from dmabuf source
info: [linux-vkcapture] Creating texture from dmabuf 1920x1080 modifier:144115188488387331
info: [linux-vkcapture] [0] fd:14 stride:7680 offset:0
info: [linux-vkcapture] [1] fd:37 stride:2048 offset:8847360
error: Cannot create EGLImage: Arguments are inconsistent (for example, a valid context requires buffers not supplied by a valid surface).
error: [linux-vkcapture] Could not create texture from dmabuf source
info: [linux-vkcapture] Creating texture from dmabuf 1920x1080 modifier:144115188488387331
info: [linux-vkcapture] [0] fd:12 stride:7680 offset:0
info: [linux-vkcapture] [1] fd:13 stride:2048 offset:8847360
error: Cannot create EGLImage: Arguments are inconsistent (for example, a valid context requires buffers not supplied by a valid surface).
error: [linux-vkcapture] Could not create texture from dmabuf source
info: [linux-vkcapture] Creating texture from dmabuf 1920x1080 modifier:144115188488387331
info: [linux-vkcapture] [0] fd:14 stride:7680 offset:0
info: [linux-vkcapture] [1] fd:37 stride:2048 offset:8847360
error: Cannot create EGLImage: Arguments are inconsistent (for example, a valid context requires buffers not supplied by a valid surface).
error: [linux-vkcapture] Could not create texture from dmabuf source
info: [linux-vkcapture] Creating texture from dmabuf 1920x1080 modifier:144115188488387331
info: [linux-vkcapture] [0] fd:12 stride:7680 offset:0
info: [linux-vkcapture] [1] fd:13 stride:2048 offset:8847360
error: Cannot create EGLImage: Arguments are inconsistent (for example, a valid context requires buffers not supplied by a valid surface).
error: [linux-vkcapture] Could not create texture from dmabuf source
info: [linux-vkcapture] Creating texture from dmabuf 1920x1080 modifier:144115188488387331
info: [linux-vkcapture] [0] fd:14 stride:7680 offset:0
info: [linux-vkcapture] [1] fd:37 stride:2048 offset:8847360
error: Cannot create EGLImage: Arguments are inconsistent (for example, a valid context requires buffers not supplied by a valid surface).
error: [linux-vkcapture] Could not create texture from dmabuf source
info: [linux-vkcapture] Creating texture from dmabuf 1920x1080 modifier:144115188488387331
info: [linux-vkcapture] [0] fd:12 stride:7680 offset:0
info: [linux-vkcapture] [1] fd:13 stride:2048 offset:8847360
error: Cannot create EGLImage: Arguments are inconsistent (for example, a valid context requires buffers not supplied by a valid surface).
error: [linux-vkcapture] Could not create texture from dmabuf source
info: [linux-vkcapture] Creating texture from dmabuf 1920x1080 modifier:144115188488387331
info: [linux-vkcapture] [0] fd:14 stride:7680 offset:0
info: [linux-vkcapture] [1] fd:37 stride:2048 offset:8847360
error: Cannot create EGLImage: Arguments are inconsistent (for example, a valid context requires buffers not supplied by a valid surface).
error: [linux-vkcapture] Could not create texture from dmabuf source
/usr/bin/xdg-screensaver: γραμμή 600: xset: εντολή δεν βρέθηκε
info: [ffmpeg muxer: 'simple_file_output'] Output of file '/home/qushy/2022-04-16 20-37-25.mkv' stopped
info: Output 'simple_file_output': stopping
info: Output 'simple_file_output': Total frames output: 2052
info: Output 'simple_file_output': Total drawn frames: 2088
info: ==== Recording Stop ================================================
info: libfdk_aac encoder destroyed
Steam Log:
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] ResetCommandPool VK_SUCCESS
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] DestroySwapchainKHR
[obs-vkcapture] ------------------- vulkan capture freed -------------------
[obs-vkcapture] CreateSwapchainKHR VK_SUCCESS
[obs-vkcapture] GetSwapchainImagesKHR VK_SUCCESS
[obs-vkcapture] GetSwapchainImagesKHR VK_SUCCESS
Installing breakpad exception handler for appid(steam)/version(1650062193)
[obs-vkcapture] DestroySwapchainKHR
[obs-vkcapture] DestroySurfaceKHR
gamemodeauto: dlopen failed - libgamemode.so: cannot open shared object file: No such file or directory
gamemodeauto: dlopen failed - libgamemode.so: cannot open shared object file: No such file or directory
gamemodeauto: dlopen failed - libgamemode.so: cannot open shared object file: No such file or directory
gamemodeauto: dlopen failed - libgamemode.so: cannot open shared object file: No such file or directory
gamemodeauto: dlopen failed - libgamemode.so: cannot open shared object file: No such file or directory
gamemodeauto: dlopen failed - libgamemode.so: cannot open shared object file: No such file or directory
gamemodeauto: dlopen failed - libgamemode.so: cannot open shared object file: No such file or directory
gamemodeauto: dlopen failed - libgamemode.so: cannot open shared object file: No such file or directory
ThreadGetProcessExitCode: no such process 11607
ThreadGetProcessExitCode: no such process 11583
ThreadGetProcessExitCode: no such process 11386
ThreadGetProcessExitCode: no such process 11378
ThreadGetProcessExitCode: no such process 11372
ThreadGetProcessExitCode: no such process 11350
ThreadGetProcessExitCode: no such process 11347
ThreadGetProcessExitCode: no such process 11341
ThreadGetProcessExitCode: no such process 11337
gamemodeauto: dlopen failed - libgamemode.so: cannot open shared object file: No such file or directory
pid 11343 != 11342, skipping destruction (fork without exec?)
Game process removed: AppID 1151640 "obs-vkcapture gamemoderun /home/qushy/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=1151640 -- '/home/qushy/.local/share/Steam/steamapps/common/SteamLinuxRuntime_soldier'/_v2-entry-point --verb=waitforexitandrun -- '/home/qushy/.local/share/Steam/steamapps/common/Proton - Experimental'/proton waitforexitandrun '/run/media/qushy/d4e414d4-636c-46e5-a370-4c5c8400e4dc/SteamLibrary/steamapps/common/Horizon Zero Dawn/HorizonZeroDawn.exe'", ProcID 11603
ThreadGetProcessExitCode: no such process 11603
ThreadGetProcessExitCode: no such process 11359
ThreadGetProcessExitCode: no such process 11173
Game 1151640 created interface STEAMUSERSTATS_INTERFACE_VERSION011 /
Game 1151640 created interface SteamController007 / Controller
Game 1151640 created interface SteamFriends017 /
Game 1151640 created interface SteamInput001 /
Game 1151640 created interface SteamInput001 / Controller
Game 1151640 created interface SteamUser020 /
Game 1151640 created interface SteamUser020 / User
Game 1151640 created interface SteamUtils009 /
Game 1151640 created interface SteamUtils009 / Utils
Game 1151640 method call count for IClientUserStats::GetAchievementDisplayAttribute : 158
Game 1151640 method call count for IClientUserStats::GetAchievement : 79
Game 1151640 method call count for IClientUserStats::RequestCurrentStats : 1
Game 1151640 method call count for IClientUtils::RecordSteamInterfaceCreation : 10
Game 1151640 method call count for IClientUtils::GetSteamUILanguage : 1
Game 1151640 method call count for IClientUtils::GetAppID : 14
Game 1151640 method call count for IClientFriends::GetPersonaName : 1
Game 1151640 method call count for IClientUser::GetSteamID : 2
Uploaded AppInterfaceStats to Steam
(process:11769): GLib-GObject-CRITICAL **: 20:38:34.517: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
src/steamexe/main.cpp (253) : Assertion Failed: reaping pid: 11769 -- gameoverlayui
src/steamexe/main.cpp (253) : Assertion Failed: reaping pid: 11769 -- gameoverlayui
Installing breakpad exception handler for appid(steam)/version(1650062193)
assert_20220416203844_54.dmp[11892]: Uploading dump (out-of-process)
/tmp/dumps/assert_20220416203844_54.dmp
assert_20220416203844_54.dmp[11892]: Finished uploading minidump (out-of-process): success = yes
assert_20220416203844_54.dmp[11892]: response: CrashID=bp-8aa14b47-647e-4d2c-8468-c23032220416
assert_20220416203844_54.dmp[11892]: file ''/tmp/dumps/assert_20220416203844_54.dmp'', upload yes: ''CrashID=bp-8aa14b47-647e-4d2c-8468-c23032220416''
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Work thread 'CContentUpdateContext::m_pCPUTh' is marked exited, but we could not immediately join prior to deleting -- proceeding without join
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Installing breakpad exception handler for appid(steam)/version(1650062193)
Hello,
I would like to know how obs-vkcapture
works with obs
with respect to memory copies. Let's consider the use case of obs
with ffmpeg-vaapi
encoder with an AMD GPU, while capturing a vulkan game, does obs-vkcapture
do frame copies as follows GPU VRAM (game)
-> RAM (obs)
-> GPU VRAM (ffmpeg-vaapi)
? Or does it do an in-gpu copy GPU VRAM (game)
-> GPU VRAM (ffmpeg-vaapi)
? Or is it zero-copy ? I suppose zero-copy would need the use of the new vulkan video
extensions which are not implemented in mesa nor ffmpeg yet ?
I would love to have more information on how things work, thank you !
Adel
Game Capture pliugin cannot create texture and show black image because libVkLayer_obs_vkcapture.so
returns 0 strides size of image on Intel UHD 770 when using VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
tiling. I could solve the issue by compelling img_info.tiling = VK_IMAGE_TILING_LINEAR
(with OBS_VKCAPTURE_LINEAR switch, but some rework was needed). Please check out PR #58.
Vulkan-based program cannot be captured on Intel UHD 770. It returns 0 strides size when using DRM modifier support and it says, error: Cannot create EGLImage: EGL cannot access a requested resource (for example a context is bound in another thread).
. See the following output of the program.
OBS's linux-vkcapture output:
info: [linux-vkcapture] plugin loaded successfully (version 1.1.1)
info: [linux-vkcapture] Creating texture from dmabuf 1280x720 modifier:72057594037927938
info: [linux-vkcapture] [0] fd:47 stride:0 offset:0
error: Cannot create EGLImage: EGL cannot access a requested resource (for example a context is bound in another thread).
error: [linux-vkcapture] Could not create texture from dmabuf source
Captured program's obs-vkcapture output:
[obs-vkcapture] Init Vulkan 1.1.1
[obs-vkcapture] CreateInstance
[obs-vkcapture] CreateInstance VK_SUCCESS
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0
[obs-vkcapture] CreateDevice
[obs-vkcapture] Injecting VK_KHR_external_memory_fd extension
[obs-vkcapture] Injecting VK_EXT_image_drm_format_modifier extension
[obs-vkcapture] CreateDevice VK_SUCCESS
[obs-vkcapture] CreateXcbSurfaceKHR
[obs-vkcapture] CreateSwapchainKHR VK_SUCCESS
[obs-vkcapture] GetSwapchainImagesKHR VK_SUCCESS
[obs-vkcapture] GetSwapchainImagesKHR VK_SUCCESS
[obs-vkcapture] Texture VK_FORMAT_B8G8R8A8_UNORM 1280x720
[obs-vkcapture] Available modifiers:
[obs-vkcapture] 0: modifier:0 planes:1
[obs-vkcapture] 1: modifier:72057594037927937 planes:1
[obs-vkcapture] 2: modifier:72057594037927938 planes:1
[obs-vkcapture] Got planes 1 fd 12
[obs-vkcapture] Got modifier 72057594037927938
[obs-vkcapture] ------------------ vulkan capture started ------------------
[obs-vkcapture] CreateCommandPool VK_SUCCESS
[obs-vkcapture] AllocateCommandBuffers VK_SUCCESS
[obs-vkcapture] CreateFence VK_SUCCESS
...
[obs-vkcapture] BeginCommandBuffer VK_SUCCESS
[obs-vkcapture] QueueSubmit VK_SUCCESS
[obs-vkcapture] DestroySwapchainKHR
[obs-vkcapture] ------------------- vulkan capture freed -------------------
[obs-vkcapture] DestroySurfaceKHR
[obs-vkcapture] DestroyDevice
[obs-vkcapture] DestroyInstance
Commit: 29fb16ffafde962b1771966def2f50a3dbcb4b39
GPU: Intel UHD 770
OS: Fedora 35
Kernel: 5.16.8
Mesa: 21.3.6
Test program: Vulkan-sample's triangle
Intel UHD 770's supported DRM suported modifiers are both linear tiling (fourcc.h). I think it could returns rowpitch > 0, but vkGetImageSubresourceLayout
returns no row pitch in some implementations (cf. vkGetImageSubresourceLayout gives no row pitch). I don't know the issue is whether a driver's bug or not.
GL capture works without any problem. The issue is only for Vulkan capture.
I don't have anymore DX9 games to test. Don't know if that could be related.
For sure it related to 9ef7c68 talking about Vulkan, because with b8f9543 it works fine. Not sure if GL capture is working fine, but I can test it later.
An example output taken in Deep Rock Galactic, but the issue isn't game specific.
Terminal output
info: [linux-vkcapture] Creating texture from dmabuf 1920x1080 modifier:72057594037927935
info: [linux-vkcapture] [0] fd:111 stride:8192 offset:0
I just found this plugin via Google after being frustrated about getting stutters while gaming with Pipewire screen capture.
Took me about 30 seconds to install the AUR package and it worked immediately. I'm capturing 60 FPS at perfect quality while still getting a buttery smooth 200 FPS ingame and no stutters. I've only been playing with this for half an hour or so but so far nothing has crashed 🤞
It blows my mind that this is possible in Linux now!
For how insanely awesome this plugin is I think it's criminally undersupported. Have you considered making it possible to sponsor this project via GitHub Sponsors? Or alternatively, set up a Paypal donation link? I feel bad using this plugin for free.
https://github.com/snapcrafters/obs-studio#3rd-party-plugins
cheako@mx1:~/src/gitlab/obs-vkcapture/build$ cmake .. --target libobs -DCMAKE_INSTALL_PREFIX=~/bin -DCMAKE_INSTALL_LIBDIR=~/snap/obs-studio/current/.config/obs-studio/plugins
CMake Error: Unknown argument --target
CMake Error: Run 'cmake --help' for all supported options.
cheako@mx1:~/src/gitlab/obs-vkcapture/build$ cmake .. -DCMAKE_INSTALL_PREFIX=~/bin -DCMAKE_INSTALL_LIBDIR=~/snap/obs-studio/current/.config/obs-studio/plugins
-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Vulkan: /usr/lib/x86_64-linux-gnu/libvulkan.so
-- Found X11: /usr/include
-- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so
-- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so - found
-- Looking for gethostbyname
-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for connect - found
-- Looking for remove
-- Looking for remove - found
-- Looking for shmat
-- Looking for shmat - found
-- Looking for IceConnectionNumber in ICE
-- Looking for IceConnectionNumber in ICE - found
CMake Error at CMakeLists.txt:10 (find_package):
By not providing "FindLibObs.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "LibObs", but
CMake did not find one.
Could not find a package configuration file provided by "LibObs" with any
of the following names:
LibObsConfig.cmake
libobs-config.cmake
Add the installation prefix of "LibObs" to CMAKE_PREFIX_PATH or set
"LibObs_DIR" to a directory containing one of the above files. If "LibObs"
provides a separate development package or SDK, be sure it has been
installed.
-- Configuring incomplete, errors occurred!
See also "/home/cheako/src/gitlab/obs-vkcapture/build/CMakeFiles/CMakeOutput.log".
Heya,
So the opengl capture works for glxgears, but glmark2 fails. I thought this might be due to only having the 64 bit library, as glmark2 is 32 bit, so I tested it with a few linux native steam games that are 64 bit and use ogl.
I validated that the LD_PRELOAD is working by checking the libraries loaded via KDE's task manager (you can right click the process->detailed memory info to view a list of all loaded libraries)
Here's what it looks like from the task manager listing:
Library loaded:
144 KB /usr/lib64/libobs_glcapture.so
Here's the launch option being used:
LD_PRELOAD=/usr/lib64/libobs_glcapture.so %command%
64 bit check from Last Epoch:
$ file Last\ Epoch.x86_64
Last Epoch.x86_64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=2a1da7a4ffbc16bad3cab634551563522905febf, stripped
64 bit check from Mad Max:
$ file MadMax
MadMax: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=960c435f879a39e4e1046aee91f9047a6d16a0a5, stripped
64 bit check from Dying Light:
$ file DyingLightGame
DyingLightGame: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=c72b738701309c627b4499ed024cfd2224a03fcf, stripped
As mentioned, glxgears works:
$ file $(which glxgears)
/usr/bin/glxgears: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=9206f610e9d744622d7c83c8cafaaf3fa47b401b, for GNU/Linux 3.2.0, stripped
Note:
A resource that may help with improvement on opengl capture which I've tried in the past is the source from this:
https://github.com/MaartenBaert/ssr/tree/master/glinject
Relevant reddit discussion:
https://www.reddit.com/r/linux_gaming/comments/9j62uv/experimental_obs_plugin_for_gl_game_capturing/
Thanks again for your work, having a vulkan capture on linux is awesome.
When trying to capture 32bit game, it doesn't want to load library:
ERROR: ld.so: object '/usr/lib/libobs_glcapture.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS64): ignored.
I tried to compile it with crossbuild-essential-i386, but it can't link some files to OBS.
scaled@librem-15:~/git/obs-vkcapture/build32$ LANG=C cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_CXX_COMPILER=/usr/bin/i686-linux-gnu-g++ -DCMAKE_CXX_COMPILER_AR=/usr/bin/i686-linux-gnu-ar -DCMAKE_CXX_COMPILER_RANLIB=/usr/bin/i686-linux-gnu-ranlib -DCMAKE_C_COMPILER=/usr/bin/i686-linux-gnu-gcc -DCMAKE_C_COMPILER_AR=/usr/bin/i686-linux-gnu-ar -DCMAKE_C_COMPILER_RANLIB=/usr/bin/i686-linux-gnu-ranlib ..
-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/i686-linux-gnu-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/i686-linux-gnu-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Vulkan: /usr/lib/i386-linux-gnu/libvulkan.so
-- Could NOT find X11 (missing: X11_X11_LIB)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/scaled/git/obs-vkcapture/build32
scaled@librem-15:~/git/obs-vkcapture/build32$ LANG=C make
Scanning dependencies of target VkLayer_obs_vkcapture
[ 9%] Building C object CMakeFiles/VkLayer_obs_vkcapture.dir/src/vklayer.c.o
/home/scaled/git/obs-vkcapture/src/vklayer.c: In function 'init_device_data':
/home/scaled/git/obs-vkcapture/src/vklayer.c:247:28: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
247 | add_obj_data(&devices, (uint64_t)GET_LDT(device), data);
| ^
/home/scaled/git/obs-vkcapture/src/vklayer.c: In function 'get_device_data':
/home/scaled/git/obs-vkcapture/src/vklayer.c:254:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
254 | (uint64_t)GET_LDT(device));
| ^
/home/scaled/git/obs-vkcapture/src/vklayer.c: In function 'get_device_data_by_queue':
/home/scaled/git/obs-vkcapture/src/vklayer.c:260:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
260 | (uint64_t)GET_LDT(queue));
| ^
/home/scaled/git/obs-vkcapture/src/vklayer.c: In function 'remove_device_data':
/home/scaled/git/obs-vkcapture/src/vklayer.c:266:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
266 | (uint64_t)GET_LDT(device));
| ^
/home/scaled/git/obs-vkcapture/src/vklayer.c: In function 'add_queue_data':
/home/scaled/git/obs-vkcapture/src/vklayer.c:286:33: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
286 | add_obj_data(&data->queues, (uint64_t)queue, queue_data);
| ^
/home/scaled/git/obs-vkcapture/src/vklayer.c: In function 'get_queue_data':
/home/scaled/git/obs-vkcapture/src/vklayer.c:298:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
298 | (uint64_t)queue);
| ^
/home/scaled/git/obs-vkcapture/src/vklayer.c: In function 'init_inst_data':
/home/scaled/git/obs-vkcapture/src/vklayer.c:506:30: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
506 | add_obj_data(&instances, (uint64_t)GET_LDT(instance), idata);
| ^
/home/scaled/git/obs-vkcapture/src/vklayer.c: In function 'get_inst_data':
/home/scaled/git/obs-vkcapture/src/vklayer.c:513:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
513 | (uint64_t)GET_LDT(instance));
| ^
/home/scaled/git/obs-vkcapture/src/vklayer.c: In function 'get_inst_data_by_physical_device':
/home/scaled/git/obs-vkcapture/src/vklayer.c:527:25: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
527 | &instances, (uint64_t)GET_LDT(physicalDevice));
| ^
/home/scaled/git/obs-vkcapture/src/vklayer.c: In function 'remove_free_inst_data':
/home/scaled/git/obs-vkcapture/src/vklayer.c:543:25: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
543 | &instances, (uint64_t)GET_LDT(inst));
| ^
[ 18%] Building C object CMakeFiles/VkLayer_obs_vkcapture.dir/src/capture.c.o
[ 27%] Linking C shared module libVkLayer_obs_vkcapture.so
[ 27%] Built target VkLayer_obs_vkcapture
Scanning dependencies of target obs_glcapture
[ 36%] Building C object CMakeFiles/obs_glcapture.dir/src/dlsym.c.o
[ 45%] Building C object CMakeFiles/obs_glcapture.dir/src/elfhacks.c.o
[ 54%] Building C object CMakeFiles/obs_glcapture.dir/src/glinject.c.o
[ 63%] Building C object CMakeFiles/obs_glcapture.dir/src/glad/glad.c.o
[ 72%] Building C object CMakeFiles/obs_glcapture.dir/src/capture.c.o
[ 81%] Linking C shared module libobs_glcapture.so
[ 81%] Built target obs_glcapture
Scanning dependencies of target linux-vkcapture
[ 90%] Building C object CMakeFiles/linux-vkcapture.dir/src/vkcapture.c.o
/home/scaled/git/obs-vkcapture/src/vkcapture.c: In function 'vkcapture_source_show':
/home/scaled/git/obs-vkcapture/src/vkcapture.c:205:9: warning: implicit declaration of function 'pthread_mutex_lock' [-Wimplicit-function-declaration]
205 | pthread_mutex_lock(&server.mutex);
| ^~~~~~~~~~~~~~~~~~
/home/scaled/git/obs-vkcapture/src/vkcapture.c:210:9: warning: implicit declaration of function 'pthread_mutex_unlock' [-Wimplicit-function-declaration]
210 | pthread_mutex_unlock(&server.mutex);
| ^~~~~~~~~~~~~~~~~~~~
/home/scaled/git/obs-vkcapture/src/vkcapture.c: In function 'obs_module_load':
/home/scaled/git/obs-vkcapture/src/vkcapture.c:620:5: warning: implicit declaration of function 'pthread_mutex_init' [-Wimplicit-function-declaration]
620 | pthread_mutex_init(&server.mutex, NULL);
| ^~~~~~~~~~~~~~~~~~
/home/scaled/git/obs-vkcapture/src/vkcapture.c:621:9: warning: implicit declaration of function 'pthread_create'; did you mean 'timer_create'? [-Wimplicit-function-declaration]
621 | if (pthread_create(&server.thread, NULL, server_thread_run, NULL) != 0) {
| ^~~~~~~~~~~~~~
| timer_create
/home/scaled/git/obs-vkcapture/src/vkcapture.c: In function 'obs_module_unload':
/home/scaled/git/obs-vkcapture/src/vkcapture.c:634:5: warning: implicit declaration of function 'pthread_join' [-Wimplicit-function-declaration]
634 | pthread_join(server.thread, NULL);
| ^~~~~~~~~~~~
[100%] Linking C shared module linux-vkcapture.so
/usr/lib/gcc-cross/i686-linux-gnu/10/../../../../i686-linux-gnu/bin/ld: /usr/lib/libobs.so.0: error adding symbols: file in wrong format
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/linux-vkcapture.dir/build.make:104: linux-vkcapture.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:153: CMakeFiles/linux-vkcapture.dir/all] Error 2
make: *** [Makefile:149: all] Error 2
But i still tried to preload some generated files and program just crashed, when i opened OBS.
LD_PRELOAD=/home/scaled/git/obs-vkcapture/build32/libobs_glcapture.so
/home/scaled/.steam/debian-installation/steamapps/common/Half-Life/hl.sh: line 43: 161106 Segmentation fault ${DEBUGGER} "${GAMEROOT}"/${GAMEEXE} $@
obs-glcapture
doesn't seem to work when used at the same time as Mangohud. Instead, the outermost invocation gets precedence. For example, when running a OpenGL Steam game like:
obs-glcapture mangohud %command%
Game capture works, but Mangohud doesn't work.
If I use:
mangohud obs-glcapture %command%
Now Mangohud works, but game captures doesn't. (I just get a black screen.)
Is it possible to make them work at the same time?
While looking at the repo I didn't see a requirement, running obs gives me this
error: [linux-vkcapture] linux-vkcapture cannot run on non-EGL platforms warning: Failed to initialize module 'linux-vkcapture.so'
And I am running obs-studio-git.
If wayland is required, it might be a good idea to add it to readme.
Thanks in advance.
Generalize the IPC to allow development of vkcapture aware applications.
Edit: The issue is compatibility with other programming languages, it's unsafe to try and match a C struct... where the choice of llvm or gcc could become important. Specifically, I'm writing in Rust and as explicitly adding 4 bytes of padding would work it's not as ideal as switching to something else... The use of bool is also suspicious.
I've arbitrarily chosen: https://github.com/eerimoq/pbtools
Hi. Thank you for your plugin, with supported games it works great! I tried to capture Blender 2.92, 2.93, but got only some part of interface on screen. Blender 2.90 works fine. Can you help me to fix this strange capture artifacts?
P.S. Cmake 3.19 is necessary? I successfully compiled it with 3.18 on Debian 11.
Heya, so I'll admit I'm not quite sure what I'm doing here is correct for adding this as a submodule to be built with OBS, but I'm hitting a cmake issue with it not detecting vulkan on fedora.
First, I did this in OBS so that it picks up the module during compilation:
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
index a39f35771..43be4577b 100644
--- a/plugins/CMakeLists.txt
+++ b/plugins/CMakeLists.txt
@@ -81,6 +81,7 @@ if(BUILD_VST)
endif()
endif()
+add_subdirectory(obs-vkcapture)
add_subdirectory(image-source)
add_subdirectory(obs-x264)
add_subdirectory(obs-libfdk)
Then added the obs-vkcapture folder inside the plugins folder in OBS's source (where all the other plugins are).
But then it complains about not being able to find vulkan:
CMake Error at plugins/obs-vkcapture/CMakeLists.txt:34 (add_library):
Target "VkLayer_obs_vkcapture" links to target "Vulkan::Vulkan" but the
target was not found. Perhaps a find_package() call is missing for an
IMPORTED target, or an ALIAS target is missing?
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:
CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS_RELEASE
CMAKE_Fortran_FLAGS_RELEASE
CMAKE_INSTALL_DO_STRIP
CMAKE_VERBOSE_MAKEFILE
INCLUDE_INSTALL_DIR
LIB_INSTALL_DIR
SHARE_INSTALL_PREFIX
SYSCONF_INSTALL_DIR
I tried adding the vulkan sdk to the build, but no luck there either:
-DVULKAN_LIBRARY=../1.2.170.0/x86_64/lib \
-DVULKAN_INCLUDE_DIR=../1.2.170.0/x86_64/include/vulkan
Any tips on getting this to build with obs as a plugin?
Thanks
Tested with Deep Rock Galactic and Metro Exodus (Windows version) with Proton-6.9-GE-2 and Proton-6.3-4
[obs-vkcapture] Init 0.6
[obs-vkcapture] Injecting VK_KHR_external_memory_fd extension
Fossilize INFO: Overriding serialization path: "/mnt/evo/SteamLibrary/steamapps/shadercache/548430/fozpipelinesv5/steamapprun_pipeline_cache".
[obs-vkcapture] Injecting VK_KHR_external_memory_fd extension
Installing breakpad exception handler for appid(gameoverlayui)/version(20210519015400)
Installing breakpad exception handler for appid(gameoverlayui)/version(1.0)
Installing breakpad exception handler for appid(gameoverlayui)/version(1.0)
[0606/212425.215633:INFO:crash_reporting.cc(270)] Crash reporting enabled for process: renderer
Installing breakpad exception handler for appid(gameoverlayui)/version(1.0)
[0606/212425.399075:ERROR:frame_sink_video_capturer_impl.cc(206)] Invalid resolutions constraints: 0x0 must not be greater than 0x0; and also within media::limits.
ERROR: ld.so: object '/home/ogden/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
>>> Adding process 19231 for game ID 548430
[obs-vkcapture] Init 0.6
[obs-vkcapture] Injecting VK_KHR_external_memory_fd extension
Fossilize INFO: Overriding serialization path: "/mnt/evo/SteamLibrary/steamapps/shadercache/548430/fozpipelinesv5/steamapprun_pipeline_cache".
[obs-vkcapture] GetMemoryFdKHR failed -2
[obs-vkcapture] ------------------- vulkan capture freed -------------------
[obs-vkcapture] vk_shtex_init failed
RecordSteamInterfaceCreation (PID 19056): SteamNetworkingUtils003 /
RecordSteamInterfaceCreation (PID 19056): SteamNetworkingUtils003 /
If this plugin aimed to match the ease-of-use of "Game capture" in Windows, it would start recording for all games by default (Vulkan and OpenGL) and present a dropdown menu in the "Game capture" source in OBS to pick a game.
Currently this addon is amazing, but to gain more mainstream usage it would probably (?) need to be even simpler to set up and use. At some point it might even be bundled with OBS by default 🤞
Is this on the roadmap, or is it out of scope for this project?
Hello,
Thank you for this awesome plugin. I am on Gentoo, I manually installed OBS from git with cmake
and co. My game runs fine with obs-vkcapture
but I unfortunately cannot seem to have OBS show me the "Game Capture" option.
➜ ~ cd obs-vkcapture
➜ obs-vkcapture git:(master) git clean -fdx
Removing build/
➜ obs-vkcapture git:(master) mkdir build
➜ obs-vkcapture git:(master) cd build
➜ build git:(master) cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_DATADIR=/share ..
-- The C compiler identification is GNU 10.3.0
-- The CXX compiler identification is GNU 10.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Vulkan: /usr/lib64/libvulkan.so
-- Configuring done
-- Generating done
-- Build files have been written to: /home/adel/Documents/Gethings/obs-vkcapture/build
➜ build git:(master) make
[ 11%] Building C object CMakeFiles/VkLayer_obs_vkcapture.dir/src/vklayer.c.o
[ 22%] Building C object CMakeFiles/VkLayer_obs_vkcapture.dir/src/capture.c.o
[ 33%] Linking C shared module libVkLayer_obs_vkcapture.so
[ 33%] Built target VkLayer_obs_vkcapture
[ 44%] Building C object CMakeFiles/obs_glcapture.dir/src/glinject.c.o
[ 55%] Building C object CMakeFiles/obs_glcapture.dir/src/glad/glad.c.o
[ 66%] Building C object CMakeFiles/obs_glcapture.dir/src/capture.c.o
[ 77%] Linking C shared module libobs_glcapture.so
[ 77%] Built target obs_glcapture
[ 88%] Building C object CMakeFiles/linux-vkcapture.dir/src/vkcapture.c.o
/home/adel/Documents/Gethings/obs-vkcapture/src/vkcapture.c: In function ‘vkcapture_source_video_tick’:
/home/adel/Documents/Gethings/obs-vkcapture/src/vkcapture.c:118:13: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
118 | write(ctx->clientfd, &b, 1);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
[100%] Linking C shared module linux-vkcapture.so
[100%] Built target linux-vkcapture
➜ build git:(master) sudo make install
Password:
Consolidate compiler generated dependencies of target VkLayer_obs_vkcapture
[ 33%] Built target VkLayer_obs_vkcapture
Consolidate compiler generated dependencies of target obs_glcapture
[ 77%] Built target obs_glcapture
Consolidate compiler generated dependencies of target linux-vkcapture
[100%] Built target linux-vkcapture
Install the project...
-- Install configuration: "Release"
-- Installing: /usr/lib/obs-plugins/linux-vkcapture.so
-- Set runtime path of "/usr/lib/obs-plugins/linux-vkcapture.so" to ""
-- Up-to-date: /usr/share/obs/obs-plugins/linux-vkcapture/locale/cs-CZ.ini
-- Up-to-date: /usr/share/obs/obs-plugins/linux-vkcapture/locale/en-US.ini
-- Installing: /usr/lib/libVkLayer_obs_vkcapture.so
-- Installing: /usr/lib/libobs_glcapture.so
-- Installing: /usr/share/vulkan/implicit_layer.d/obs_vkcapture_64.json
-- Up-to-date: /usr/bin/obs-vkcapture
-- Up-to-date: /usr/bin/obs-glcapture
➜ build git:(master) OBS_USE_EGL=1 obs
Attempted path: share/obs/obs-studio/locale/en-US.ini
Attempted path: /usr/local/share/obs/obs-studio/locale/en-US.ini
Attempted path: share/obs/obs-studio/locale.ini
Attempted path: /usr/local/share/obs/obs-studio/locale.ini
Attempted path: share/obs/obs-studio/themes/Dark.qss
Attempted path: /usr/local/share/obs/obs-studio/themes/Dark.qss
info: Using EGL/X11
info: CPU Name: AMD Ryzen 7 3700X 8-Core Processor
info: CPU Speed: 3600.000MHz
info: Physical Cores: 8, Logical Cores: 16
info: Physical Memory: 32097MB Total, 10613MB Free
info: Kernel Version: Linux 5.11.16-tkg-pds
info: Distribution: Gentoo Unknown
info: Session Type: x11
info: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.20.11
info: Portable mode: false
Attempted path: share/obs/obs-studio/themes/Dark/no_sources.svg
Attempted path: /usr/local/share/obs/obs-studio/themes/Dark/no_sources.svg
QMetaObject::connectSlotsByName: No matching signal for on_tbar_position_valueChanged(int)
QMetaObject::connectSlotsByName: No matching signal for on_actionShowTransitionProperties_triggered()
QMetaObject::connectSlotsByName: No matching signal for on_actionHideTransitionProperties_triggered()
info: OBS 59603f4 (linux)
info: ---------------------------------
info: ---------------------------------
info: audio settings reset:
samples per sec: 48000
speakers: 2
info: ---------------------------------
info: Initializing OpenGL...
info: Loading up OpenGL on adapter AMD AMD Radeon RX 5700 XT (NAVI10, DRM 3.40.0, 5.11.16-tkg-pds, LLVM 11.1.0)
info: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 21.1.0-rc2, shading language 4.60
info: ---------------------------------
info: video settings reset:
base resolution: 1920x540
output resolution: 1920x540
downscale filter: Lanczos
fps: 60/1
format: NV12
YUV mode: 709/Partial
info: NV12 texture support not available
info: Audio monitoring device:
name: Default
id: default
info: ---------------------------------
warning: Failed to load 'en-US' text for module: 'decklink-captions.so'
warning: Failed to load 'en-US' text for module: 'decklink-ouput-ui.so'
libDeckLinkAPI.so: cannot open shared object file: No such file or directory
warning: A DeckLink iterator could not be created. The DeckLink drivers may not be installed
info: No blackmagic support
warning: v4l2loopback not installed, virtual camera disabled
info: FFMPEG VAAPI supported
info: VLC found, VLC video source enabled
info: ---------------------------------
info: Loaded Modules:
info: vlc-video.so
info: text-freetype2.so
info: rtmp-services.so
info: obs-x264.so
info: obs-vst.so
info: obs-transitions.so
info: obs-outputs.so
info: obs-libfdk.so
info: obs-filters.so
info: obs-ffmpeg.so
info: linux-v4l2.so
info: linux-pulseaudio.so
info: linux-decklink.so
info: linux-capture.so
info: linux-alsa.so
info: image-source.so
info: frontend-tools.so
info: decklink-ouput-ui.so
info: decklink-captions.so
info: ---------------------------------
info: ==== Startup complete ===============================================
It may be a newbie mistake, I apologize in advance if it is x)
Thanks for your help
Adel
In some cases, obs-vkcapture does not capture colours correctly. A good example is Call Of Duty: Black Ops 2, where vkcapture captures this image
when this is what is actually on my screen
A similar issue appears in DOOM Eternal with vkBasalt. To get vkcapture to load after vkBasalt, so that it actually captures the image with the effect applied, I launch the game with
VK_INSTANCE_LAYERS=VK_LAYER_vkbasalt:VK_LAYER_OBS_vkcapture_64
which results in vkcapture capturing this image
when this is what is actually on my screen
Name@Host:~/obs-vkcapture/build$ cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib ..
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Vulkan: /usr/lib/x86_64-linux-gnu/libvulkan.so
-- Found X11: /usr/include
-- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so
-- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so - found
-- Looking for gethostbyname
-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for connect - found
-- Looking for remove
-- Looking for remove - found
-- Looking for shmat
-- Looking for shmat - found
-- Looking for IceConnectionNumber in ICE
-- Looking for IceConnectionNumber in ICE - found
-- Configuring done
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
X11_xcb_xfixes_LIB
linked by target "linux-vkcapture" in directory /home/Name/obs-vkcapture
-- Generating done
CMake Generate step failed. Build files cannot be regenerated correctly.
The request is about capture the cursor when the cursor invades the canvas of the game-capture if it's possible.
Otherwise it's a solid plugin and thank you for it.
Is obs-vkcapture supposed to work on Optimus (Intel+NVIDIA) laptop? I tried on mine but I fail to capture anything when the application is rendered on the NVIDIA GPU:
$ obs-vkcapture vkcube
[obs-vkcapture] Init 0.4
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0
Selected GPU 1: GeForce GTX 1050, type: 2
[obs-vkcapture] Injecting VK_KHR_external_memory_fd extension
[obs-vkcapture] GetMemoryFdKHR failed -3
[obs-vkcapture] ------------------- vulkan capture freed -------------------
[obs-vkcapture] vk_shtex_init failed
$ obs-glcapture eglgears_x11
EGL_VERSION = 1.5
[obs-vkcapture] Init 0.4
[obs-vkcapture] Failed to query dmabuf export
[obs-vkcapture] shtex init failed
[obs-vkcapture] ------------------- opengl capture freed -------------------
[obs-vkcapture] gl_init failed
[obs-vkcapture] Failed to query dmabuf export
[obs-vkcapture] shtex init failed
[obs-vkcapture] ------------------- opengl capture freed -------------------
[obs-vkcapture] gl_init failed
[...]
$ obs-glcapture glxgears
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
[obs-vkcapture] Init 0.4
[obs-vkcapture] Failed to get buffer from pixmap
[obs-vkcapture] shtex init failed
[obs-vkcapture] ------------------- opengl capture freed -------------------
[obs-vkcapture] gl_init failed
[obs-vkcapture] Failed to get buffer from pixmap
[obs-vkcapture] shtex init failed
[obs-vkcapture] ------------------- opengl capture freed -------------------
[obs-vkcapture] gl_init failed
[...]
Packages used on Arch Linux:
OBS Studio logs: 2021-03-30 16-07-47.txt
First of all, this is not an issue, just a discussion/feedback/decision-log. Feel free to close it at any moment.
VKCapture is, from all the sources I have available in OBS, the one that less impacts gaming performance. And it does not capture my system's screen. It's awesome!
It would be cool to have it pipewire-compatible to share games directly to Firefox/Chromium/Electron/Telegram (I know those supports pipewire for screen sharing).
Or even maybe having OBS output back as a pipewire-source as it does when "virtualising camera".
obs-vkcapture works great with every 64bit game I've tried, but it doesn't work with any 32bit game. I'm not sure what has gone wrong, since I used the AUR package to install obs-vkcapture, which should install everything correctly.
The games I am trying to record are Far Cry 3, Call Of Duty Modern Warfare 3, and Call ff Duty Black Ops 2.
System:
OS: Arch Linux
Kernel: 5.15.12-zen1-1-zen
GPU: RX 6700XT
Mesa 22.0.0-devel (git-f43b0d5cdc)
OBS version: obs-studio 27.1.3-3
On Ubuntu 21.10 with glibc 2.34, libdl.so.2
exists, but is basically an empty library. The actual dlsym
function is in libc.so.6
. Because libdl.so
is successfully opened in dl_init_funcs
, that library gets used for resolving dlsym
, which then fails. This later results in a segfault (somewhere).
If that is changed to check for libc.so
first, then it succeeds, but this would break systems on older glibc versions.
Hi,
I compile v1.0.1 and I have a issue with OpenGL Capture
$ obs-glcapture glxgears
[obs-vkcapture] Failed to open libdl.so
Error: couldn't get an RGB, Double-buffered visual
I use an up to date Fedora 35 KDE on Wayland
Vulkan Capture work
$ obs-vkcapture vkcube
[obs-vkcapture] Init Vulkan 1.0.1
[obs-vkcapture] CreateInstance
[obs-vkcapture] CreateInstance VK_SUCCESS
WARNING: radv is not a conformant Vulkan implementation, testing use only.
Selected GPU 0: AMD RADV SIENNA_CICHLID, type: 2
[obs-vkcapture] CreateXcbSurfaceKHR
[obs-vkcapture] CreateDevice
[obs-vkcapture] Injecting VK_KHR_external_memory_fd extension
[obs-vkcapture] Injecting VK_EXT_image_drm_format_modifier extension
[obs-vkcapture] CreateDevice VK_SUCCESS
[obs-vkcapture] CreateSwapchainKHR VK_SUCCESS
[obs-vkcapture] GetSwapchainImagesKHR VK_SUCCESS
[obs-vkcapture] GetSwapchainImagesKHR VK_SUCCESS
Hello,
I must say that this plugin is a godsend with respect to added input lag. Unfortunately I cannot use it yet to stream: I use LXQt (because it does not have a compositor with OpenBox) and put the game in a separate virtual desktop. I sometimes switch on and off the game. And when using game capture
the twitch stream directly crashes. Please see the attached video.
Can you reproduce the error ? Using Xcomposite does not produce this error afaik, I tested it for a few minutes and it didn't get triggered.
I have obs-studio
and obs-vkcapture
compiled from Git. I use Gentoo, with mesa/radv 21.1.0_rc3
to run my games on my RX 5700 XT and to stream with FFMPEG-VAAPI with the GPU.
Thanks!
I'm not convinced if I should treat that like a real issue, but it adds some inconstancy, considering it doesn't appear in native Valheim and Metro Exodus. Also I can't tell for sure when it first appeared, but a month ago I didn't see in-game overlay in the capture.
What is the minimum version of the Vulkan Loader SDK (libvulkan1 and libvulkan-dev) that this plugin will build with?
I'm running elementaryOS 5.1.7 Hera (aka Ubuntu 18.0.4LTS), and the libvulkan version available via apt-get is 1.1.70, which is from 2018.
SIDE NOTE: I'd just go ahead and build the latest libvulkan from source and install it, but I have a delicate config that I'm afraid of messing up: I have to run some old versions of gpu and opencl drivers so DaVinci Resolve will run. Is anyone else trying to deal with this sort of situation?
CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
Could NOT find Vulkan (missing: Vulkan_LIBRARY Vulkan_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-3.16/Modules/FindVulkan.cmake:71 (find_package_handle_standard_args)
CMakeLists.txt:6 (find_package)
-- Configuring incomplete, errors occurred!
See also "/home/semen/Загрузки/obs-vkcapture-master/build/CMakeFiles/CMakeOutput.log".
After testing for a while with game capture on steam linux native games and proton games, I noticed that most of the recordings stutter heavily on fullscreen mode , but not on windowed mode ingame. Is it meant to only work with windowed mode?
Hey there.
i would like to try out this extension but no Vulkan program willl launch with VKCAPTURE=1
I get an [obs-vkcapture] Init 0.3 and then nothing.
Nothing in journal either. No crash no nothing.
Neither wayland nor x.
Any tips on how to debug this?
I am on arch with obs-vkcapture-git from AUR and i use an rx580 with the current mesa driver.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.