ZDoom / gzdoom

GZDoom is a feature centric port for all Doom engine games, based on ZDoom, adding an OpenGL renderer and powerful scripting capabilities
http://zdoom.org
GNU General Public License v3.0
2.33k stars 528 forks source link

[BUG] On ARM64 false GLES API is used! #1868

Closed Chatplosion closed 9 months ago

Chatplosion commented 1 year ago

GZDoom version

GZDoom g4.10pre-85-g6cf3dc045-m - 2022-11-27 10:08:48 -0500 - SDL version

Which game are you running with GZDoom?

Other

What Operating System are you using?

Other

Please describe your specific OS version

Linux odroid-n2plus 5.19.0-odroid-arm64 #1 SMP PREEMPT Ubuntu 5.19.17-202211021456~jammy (2022-11-02) aarch64 aarch64 aarch64 GNU/Linux

Relevant hardware info

Hardkernel N2+

Have you checked that no other similar issue already exists?

A clear and concise description of what the bug is.

The error occurs after the WAD selection. A full screen of an empty window and a changed mouse pointer are shown. It just stops here frozen. It seems to be a GL/GLES related error.

Steps to reproduce the behaviour.

  1. Get a Hardkernel N2+
  2. Change vid_preferbackend to vid_preferbackend=3
  3. Start gzdoom with whatever WAD you want to see it freezes.

Your configuration

[url=https://filehorst.de/d/emBcjIDq]Datei gzdoom.ini von filehorst.de laden[/url]

Provide a Log

https://filehorst.de/d/etakleIuDatei gzdoom-crash.log von filehorst.de laden

https://abload.de/thumb/bildschirmfotovom2022gpik3.pngScreenshot

coelckers commented 1 year ago

Let's be honest here: This is such an unusual hardware configuration that it is very unlikely to get help with it.

Chatplosion commented 1 year ago

In 4.9 releases everything was working completely correct and right. This is just a Amlogic S922x SoC. Raspberry is using same type of processors and graphic processor. If you show me how I can check out on specific commits, I can show when the break began. And others can help to fix it. For me it is an honour to help.

Chatplosion commented 1 year ago

I was able to identify the commit 7517b64aeece426cfea50db81749f680ca28b9d3 as the last working one. With trying f41f393e91579b5fe5c312926fcc0a611c8c5a5a it worked no more due to incorrect OpenGL versions. So I tracked down in which commit it happend to go bad. Something got very wrong with the "GLES: Added IQM bone support" improvement.

Chatplosion commented 1 year ago

And one additional error was introduced with commit 37da5268e10804fc766b75c4d09a013f501faae4. On my linux system it caused errors. CMake Error at libraries/discordrpc/src/CMakeLists.txt:122 (add_dependencies): The dependency target "clangformat" of target "discord-rpc" does not exist. And this is continuing since that commit with no fix.

alexey-lysiuk commented 1 year ago

And one additional error was introduced with commit 37da526. On my linux system it caused errors. CMake Error at libraries/discordrpc/src/CMakeLists.txt:122 (add_dependencies): The dependency target "clangformat" of target "discord-rpc" does not exist. And this is continuing since that commit with no fix.

Fixed in 561bce40fcc8a196d10b26c860152051fa73eeee.

mjr4077au commented 1 year ago
  1. Change vid_preferbackend to vid_preferbackend=3

I believe this should be 2 now, since Softpoly has been removed. As 3 is no longer valid, it's likely defaulting to plain OpenGL.

Chatplosion commented 1 year ago

I am using the master branch and did a complete download on commit 561bce4. The CMake Error doesn't occur anymore. Thank you alexey-lysiuk! I tried also the change in gzdoom.ini with no sucess. gzdoom_make.log

But the false api calls go on.Please look up my logs. With commit f41f393 everythin failed. I think that in this commit a flase api call is introduced that does stay until now. gzdoom-crash.log gzdoom_make.log glxinfo.txt

Chatplosion commented 1 year ago

I did look something important up. It is about version strings. OpenGL Shading Language has special version strings. In the file /src/common/rendering/gles/gles_system.cpp is in line 184 a GLES check. This check forces version 100 (GLES 2.0) or version 330 (OpenGL 3.3). In my opinion this is a total error, because the version string for GLES 3.0 should be 300! 330 is OpenGL 3.3 that is completly incompatible to GLES 3! This renders OpenGL ES useless.

emileb commented 1 year ago

Set https://github.com/ZDoom/gzdoom/blob/6f8901ea87601050c2b35ef5838992d50ed40e4e/src/common/rendering/gles/gles_system.h#L26 to 1.

This way it actually uses GLES only features. It's a bit of a confusing setup, with USE_GLES2 set to 0 it really for when running on PC, but uses GLES renderer. Set to 1 when actually on GLES hardware.

Chatplosion commented 1 year ago

I tried your suggestion. For me it fails. I can't even compile it. Look into the compiler log. 20221226_compiler_log.txt

Without your suggested change, it compiles perfectly. But it can't run anything. Bildschirmfoto vom 2022-12-26 03-12-50

All variants of ARM64 systems should be tested.

There is something terrible broken. But what exactly is it?

emileb commented 1 year ago

Oh yeah I see that need to be fixed, I'll find some hardware to test this. For now revert that change and try change the version string:

https://github.com/ZDoom/gzdoom/blob/6f8901ea87601050c2b35ef5838992d50ed40e4e/src/common/rendering/gles/gles_system.cpp#L194

To something supported like "310 es".

Chatplosion commented 1 year ago

I'm feeling very sorry for telling you, that your work arround suggestion also doesn't work. Compiling is still possible, but no more gaming. It is much more complicated than it seemed before.

emileb commented 1 year ago

I'm feeling very sorry for telling you, that your work arround suggestion also doesn't work. Compiling is still possible, but no more gaming. It is much more complicated than it seemed before.

Ah ok, what is the new problem with changing the version string? AFAIK that was the only possible breaking change, but really need to build on Raspberry or something

Chatplosion commented 1 year ago

I am not sure what exactly was the cause. Maybe something is connected to the mesa 3d panfrost driver? You can look up all supported functions here: mesa drivers matrix. The version string of GLES2 is "100" and everything above is "3XX es". This is a big difference in the length and style of the version string.

emileb commented 1 year ago

@Chatplosion If you get a chance please try the branch I have in this PR: https://github.com/ZDoom/gzdoom/pull/1991 Branch to try: https://github.com/emileb/gzdoom/tree/fix_gles_on_embedded_pcs

It works again on my Raspberry. You can also try with CVAR "gl_es" set to 1 and 0 if any issues. Thanks a lot

Chatplosion commented 1 year ago

Good news, your fix is working. I finally was able to compile and play!

emileb commented 1 year ago

Good news, your fix is working. I finally was able to compile and play!

Good news thanks for the update!

coelckers commented 9 months ago

Seems to have been resolved.