tx00100xt / SeriousSamClassic

Open source game engine version developed by Croteam for Serious Sam Classic (Windows, Linux, FreeBSD, OpenBSD, NetBSD, macOS, Raspberry Pi OS). Based on https://github.com/Croteam-official/Serious-Engine and linux port https://github.com/icculus/Serious-Engine
GNU General Public License v2.0
120 stars 13 forks source link

Win64 full screen broken, same as VK version #22

Open just-thefacts opened 1 year ago

just-thefacts commented 1 year ago

Edit TLDR: The problem was refresh rate settings (120) on my end mismatching with my monitor's 144Hz. Setting refresh rate to "default" or "gap_iRefreshRate=(INDEX)0" fixes the full screen problem. Working settings follow: persistent extern user INDEX gap_iRefreshRate=(INDEX)0; persistent extern user INDEX sam_iMaxFPSActive=(INDEX)120; persistent extern user INDEX sam_iMaxFPSInactive=(INDEX)60;

Don't sweat my whining too much because I favor the Linux VK version, but just FYI, I get the same problem with this version as the VK version. Full screen doesn't work on the Win64 version. Was going to compare performance and see if one (vulkan vs opengl vs directx) was "smoother" than another (it looks a bit choppy at times, even at capped 120 FPS), but had the same issue with full screen refusing to work.

Ryzen 5 5600, Radeon RX 6600 (drivers: 23.10.1, 23.10.2, and 23.11.1) @ 1920x1080 144hz. Pretty standard stuff. I don't O/C, multi monitor complexity, or do any weird settings...that I can think of.

tx00100xt commented 1 year ago

Don't sweat my whining

There are no problems with this. Everything is fine. From my experience I can say that the worst here is DirectX which has a very old version (DirectX 8) and not a very good implementation, but the best is OpenGL. And the 64 bit version works better than the 32 bit one.

For example, using DirectX, even on modern hardware, drawdowns are below 60 frames in some places. An example of the entrance to a small pyramid in Hatshepsut.

Under Linux, the Vulkan version is slightly inferior to the OpenGL version; under Windows, there is more difference between them. The OpenGL version has a good implementation and is in the lead. Well, this is all adjusted for my hardware

It’s not difficult for me to compile an OpenGL version that will work for you in full screen. My game runs in full screen and so. At the same time, game works in Full-screen exclusive mode, as reported by PresentMon.

SeriousSam.exe,2396,0x0000000000000000,Other,0,0,0,40.67241340000000,0.00000000000000,0.15120000000000,1,Hardware: Legacy Flip,0.45980000000000,0.45980000000000,0.15990000000000
SeriousSam.exe,2396,0x0000000000000000,Other,0,0,0,40.67256530000000,0.00000000000000,0.15190000000000,1,Hardware: Legacy Flip,0.46500000000000,0.46500000000000,0.15710000000000
SeriousSam.exe,2396,0x0000000000000000,Other,0,0,0,40.67271810000000,0.00000000000000,0.15280000000000,1,Hardware: Legacy Flip,0.48110000000000,0.48110000000000,0.16890000000000

I'll make a build this evening and attach it here.

tx00100xt commented 1 year ago

This version should probably be full screen. But I don't promise a Hardware: Legacy Flip mode.

SeriousSamClassic-20231105-win64-bin.7z.zip

just-thefacts commented 1 year ago

Thanks again. For me, the GOG Directx version with Steam's updated Bin files is very smooth in Windows, but has other flaws, large HUD elements, OpenGL doesn't work (GOG version, your opengl does). Your Vulkan version works better for me on Linux than in Windows, but OpenGL in Linux means I can't use vkbasalt (similar to a built in reshade) to apply smaa antialiasing, so vulkan is preferred there. Windows with OpenGL, was what I was trying to do with this build.

I don't know what your tweaking to "fix" it for me, but any idea why I would be the only one with the full screen problem? Is it just an AMD GPU thing, or do you think I have changed some setting that is messing it up? I can't think of anything unusual about my configuration.

Also, I assume the best linux build for Debian 12.2 (Ryzen 5 5600) is the lnx-amd64 one? Not sure what alpine and glibc etc. are.

EDIT: This build worked (full screen), but it was still a bit "choppy", like on the brink of tearing all the time? Hard to explain. It is running at 120 FPS (on 144Hz monitor) but has a choppy feel/look when turning the camera for me. So it looks like the best versions for me are still GOG w/steam BIN (very smooth) for Windows in directx, and your Vulkan version w/vkbasalt (almost as smooth as GOG directx) for Linux.

Thanks again for all your help, and this whole project. Even the "worst" performing "flavor" performs very good. I am just trying to find the best version (for me) to archive for future play through. My original CDs are not so great these days.

tx00100xt commented 1 year ago

I don't know what your tweaking to "fix" it for me, but any idea why I would be the only one with the full screen problem.

I removed the call to the ChangeDisplaySettings function if the game resolution matches the display resolution. Also, I assume the best linux build for Debian 12.2 (Ryzen 5 5600) is the lynx-amd64 one? Not sure what alpine and glibc etc. are.

Yes. And Debian is a great choice. Versions named glibs for older distros. Is it just an AMD GPU thing, or do you think I have changed some setting that is messing it up?

I'm guessing it's something in the software or settings.

My configuration is a weaker. 5600G+RX580 and full screen mode works. But the monitor is 60Hz You can also try changing the monitor frequency to 60Hz if it allows it and try running the version without the fix. Perhaps the monitor does not like the data from the ChangeDisplaySettings function.

You can also specify the monitor frequency using the gap_iRefreshRate variable. https://github.com/tx00100xt/SeriousSamClassic/blob/main/SamTFE/Help/ShellSymbols.txt#L394 To do this, open the console and enter gap_iRefreshRate=144 By default the variable is zero .

just-thefacts commented 1 year ago

I use a "...\Scripts\Game_startup.ini" (like the old autoexec.cfg in old quake games) to pre-set a few settings:

persistent extern user INDEX gap_iRefreshRate=(INDEX)120; persistent extern user INDEX sam_iMaxFPSActive=(INDEX)120; persistent extern user INDEX sam_iMaxFPSInactive=(INDEX)60;

The in-game setting only allows gap_iRefreshRate up to 120, so I went with that. Maybe my gap_iRefreshRate=120 and monitor's 144Hz are causing a hiccup? I wonder if I set/force gap_iRefreshRate=144 and sam_iMaxFPSActive=120 would fix it? The goal being to cap the game at 120 FPS with monitor at 144 to avoid tearing or the need for vsync but allow it to run at a smooth FPS (I can't stomach 60 FPS any more).

I'll tinker with that and no "Game_startup.ini" stuff and report back.

just-thefacts commented 1 year ago

@tx00100xt BINGO! You got me looking in the right place. Tested with the main SeriousSamClassic-1.10.6-win64-bin release, not the tweaked one from above. I'm sure all this goes as well for your Vulkan version.

"gap_iRefreshRate=120" was the bad setting (at least on a 144Hz monitor in combination with my 120 FPS cap)! Setting it to "0" shows as "default" in-game and allows 144Hz, but I can still cap the frame rate with sam_iMaxFPSActive=120.

This in the "Game_startup.ini" gets the same result but with no full screen grief: persistent extern user INDEX gap_iRefreshRate=(INDEX)0; persistent extern user INDEX sam_iMaxFPSActive=(INDEX)120; persistent extern user INDEX sam_iMaxFPSInactive=(INDEX)60;

And that is that! Thanks for your help and info and sorry to bother you with my broken settings/config! At least we figured out the issue. SS doesn't like mismatching .ini settings vs hardware I guess...at least on my AMD stuff. Also the Win64, OpenGL version ran smooth as silk for me now. /thumbsup

Results on my rig Windows64: Stock directx and your opengl version run very smooth, but yours has better HUD. Lens flares crush the directx version but your opengl does ok. Vulkan is very choppy, lens flares don't work at all, but the FPS still tanks in those spots. Your opengl version seems best over all.

On Linux: Opengl and Vulkan are both smooth for me. I can use vkbasalt (antialiasing) under vulkan but not opengl. Vulkan has some minor graphical glitches. Weird lines under the trees in TSE, like the edge of the texture that should be transparent or something (may be just an AMD driver/filtering thing). Very minor though, both run very well, but I like vkbasalt, so vulkan + Linux wins!

Vulkan texture "glitch"

tse-textures

tx00100xt commented 1 year ago

It's great that everything worked as it should. Without this "fix", OpenGL began to work in FullScreen Exclusive, so it became smooth.

I noticed this too. They are only on one level of the Sierra de Chiapas, at the beginning, where the trees are. At other levels of TFE and TSE this defect is not present.