Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
GloriousEggroll opened this issue May 7, 2021 · 13 comments

Comments

@GloriousEggroll
Copy link

GloriousEggroll commented May 7, 2021

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
Copy link
Owner

nowrep commented May 7, 2021

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.

@nowrep nowrep closed this as completed in 87679e0 May 7, 2021
@GloriousEggroll
Copy link
Author

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

@nowrep
Copy link
Owner

nowrep commented May 10, 2021

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
Copy link
Author

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
Copy link
Author

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
Copy link
Owner

nowrep commented May 10, 2021

Alright, I can reproduce it with supertuxkart.

Btw does it work for you with glmark2?

@GloriousEggroll
Copy link
Author

GloriousEggroll commented May 10, 2021

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
Copy link
Owner

nowrep commented May 11, 2021

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
Copy link

Lepidos commented Jul 22, 2021

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
Copy link
Owner

nowrep commented Jul 22, 2021

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

@Lepidos
Copy link

Lepidos commented Jul 22, 2021

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

@nowrep
Copy link
Owner

nowrep commented Jul 22, 2021

Doesn't matter :D

@nowrep
Copy link
Owner

nowrep commented Aug 18, 2021

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants