nowrep / obs-vkcapture

OBS Linux Vulkan/OpenGL game capture
GNU General Public License v2.0
522 stars 25 forks source link

opengl capture does not work on amd(mesa) for anything other than glxgears #10

Closed GloriousEggroll closed 3 years ago

GloriousEggroll commented 3 years ago

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.

nowrep commented 3 years ago

Logs please. Of course the library gets loaded, but it doesn't really say anything since what matters is if the functions get hooked. And there is no dlsym hooking, so that might be the reason.

GloriousEggroll commented 3 years ago

dlsym hook still doesnt work. let me know what/how you'd like me to capture logs and I can provide them.

nowrep commented 3 years ago

Standard terminal output.

It works for me with glmark2 now, I don't really have any native opengl games unfortunately. You need to use 32/64bit library accordingly.

GloriousEggroll commented 3 years ago

Standard terminal output.

It works for me with glmark2 now, I don't really have any native opengl games unfortunately. You need to use 32/64bit library accordingly.

I am using the 64 bit library with the 64 bit games mentioned in my first comment:

LD_PRELOAD=/usr/lib64/libobs_glcapture.so %command%

Here is the log from Last Epoch:

Last Epoch]$ LD_PRELOAD=/usr/lib64/libobs_glcapture.so "$PWD/Last Epoch.x86_64" | tee lastepoch.log
Found path: /mnt/Games/SteamGames/Steam/steamapps/common/Last Epoch/Last Epoch.x86_64
[obs-vkcapture] Init 0.5
[obs-vkcapture] Failed to load GL

64 bit check:

$ 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
GloriousEggroll commented 3 years ago

Even supertuxkart fails -- which is free and available on most distros.

 LD_PRELOAD=/usr/lib64/libobs_glcapture.so supertuxkart | tee tuxkart.log

 [obs-vkcapture] Init 0.5
[obs-vkcapture] Failed to load GL
[info   ] IrrDriver: OpenGL version: 4.6
[info   ] IrrDriver: OpenGL vendor: AMD
[info   ] IrrDriver: OpenGL renderer: AMD Radeon RX 6900 XT (SIENNA_CICHLID, DRM 3.40.0, 5.11.18-200.fc33.x86_64, LLVM 11.0.0)

64 bit check:

$ file $(which supertuxkart)
/usr/bin/supertuxkart: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=c395cff8e9332e390ec114151eba198f164c8d16, for GNU/Linux 3.2.0, stripped
nowrep commented 3 years ago

Alright, I can reproduce it with supertuxkart.

Btw does it work for you with glmark2?

GloriousEggroll commented 3 years ago

Sorry I don't have the 32 bit library built locally (requires running the rpm build in a chroot) so I can't check glmark2 at this moment. Last Epoch captures with the latest change, however the picture is very dark:

leopochobs

Also the mouse cursor is not captured.

The darkness issue seems to be specific to Last Epoch. supertuxcart, 0ad, and Mad Max are all fine. Filters can be used to adjust it in OBS. The mouse cursor does not capture on any of them however.

nowrep commented 3 years ago

There is no cursor support at all. It would require hooking the windowing system to get the geometry of the window (if not fullscreen) to calculate the cursor position. And also it would probably only work on X11.

For the Last Epoch issue, I would need the game to see what's going on. Or perhaps if it is related to engine, does it happen with other Unity games too?

Lepidos commented 3 years ago

Since version 0.7 don't work for me. Tried vkcube. 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
nowrep commented 3 years ago

Do you have multiple GPUs? Also, please open new issue.

Lepidos commented 3 years ago

Yes I do. What tittle do I start the issue?

nowrep commented 3 years ago

Doesn't matter :D

nowrep commented 3 years ago

@GloriousEggroll Any chance you can try the Last Epoch again? It should be fixed now.