JHRobotics / softgpu

SW and HW accelerated GPU driver for Windows 9x Virtual Machines
MIT License
693 stars 20 forks source link

newest v0.5.2024.24-alpha2 don't work at all (previous versions worked) #73

Open B3HKO opened 7 months ago

B3HKO commented 7 months ago

I have a "Win 98 SE" guest in "VirtualBox 5.1" (and 6.0). Previous versions worked fine, I had "llvmpipe" working and game compatibility expanding with every new version. Then "v0.5.2024.24-alpha2" came around and EVERY game I try to run (previously working well) crash with this : VirtualBox_5 1 28 I'm open to provide more info and testing.

P.S. : I'm stuck to old VirtualBox versions for a reason.

JHRobotics commented 6 months ago

Hi, sorry for this, please try the newest version - there were some fixed for llvmpipe/softpipe. If it still doesn't work, please post here screens of error but also please scroll down the error message and post second screenshot with visible stack dump.

With this I should be able to trace the error.

B3HKO commented 6 months ago

The newest version didn't work either. Something fundamental is broken. :( Absolutely ANYTHING 3D deny to run, even the GL test programs : 1 2 3 4

Carmageddon 1 : 5 6

JHRobotics commented 6 months ago

OK, this is same error as I saw if I tested LLVMPIPE on Pentium G3260 on some Lenovo desktop. This whole system was incredibly slow, so I thought it was a hardware error and didn't pay much attention. Maybe I was wrong. So, I pulled out this PC from garbage and do some testing.

You can try this: copy mesa3d.dl” from SoftGPU CD from extras/mesa-21.3.9.75.7z/sse3 and to WINDOWS/SYSTEM (and replace the file). If you need 7zip for 9x, installer is on CD in redist folder (7z920.exe). After it run glchecker benchmark to check if it works.

If you’re using Windows as host OS, you can also do this test: copy tools folder from SoftGPU CD to somewhere on your HDD and copy to this folder “opengl32.dll” from CD from driver/sse3-w98/extra. When you run checker.exe you can see llvmpipe as renderer and you can also check if benchmark work or if program crash. If you have same problem as my “garbage” PC, glchecker will crash in this test. You can check different mesa versions (7z achives in extras folder), but Mesa 21.3.9.75 should work.

Please post here your CPU model so we know the range of CPU series that have these problems.

B3HKO commented 6 months ago

If you’re using Windows as host OS, you can also do this test: copy tools folder from SoftGPU CD to somewhere on your HDD and copy to this folder “opengl32.dll” from CD from driver/sse3-w98/extra. When you run checker.exe you can see llvmpipe as renderer and you can also check if benchmark work or if program crash. If you have same problem as my “garbage” PC, glchecker will crash in this test. You can check different mesa versions (7z achives in extras folder), but Mesa 21.3.9.75 should work.

I should try this in the host OS (the real windows that hosts the emulator) or in the guest OS (inside the emulator)?

JHRobotics commented 6 months ago

If you’re using Windows as host OS, you can also do this test: copy tools folder from SoftGPU CD to somewhere on your HDD and copy to this folder “opengl32.dll” from CD from driver/sse3-w98/extra. When you run checker.exe you can see llvmpipe as renderer and you can also check if benchmark work or if program crash. If you have same problem as my “garbage” PC, glchecker will crash in this test. You can check different mesa versions (7z achives in extras folder), but Mesa 21.3.9.75 should work.

I should try this in the host OS (the real windows that hosts the emulator) or in the guest OS (inside the emulator)?

On host OS please (real Windows on real HW), sorry, this wasn't very clear.

B3HKO commented 6 months ago

You can try this: copy mesa3d.dll from SoftGPU CD from extras/mesa-21.3.9.75.7z/sse3 and to WINDOWS/SYSTEM (and replace the file). After it run glchecker benchmark to check if it works.

None of the three mesa versions there worked.

If you’re using Windows as host OS, you can also do this test: copy tools folder from SoftGPU CD to somewhere on your HDD and copy to this folder “opengl32.dll” from CD from driver/sse3-w98/extra. When you run checker.exe you can see llvmpipe as renderer and you can also check if benchmark work or if program crash.

It crashed in the real OS.

I have many old, but surprisingly fully working, OG desktops and laptops from the Windows 98 to XP era. The one, that do all the crashes, is a prehistoric laptop I use lying in bed for music, movies, internet and tests in VirtualBox obviously. Here is the CPU info : CPU

Someday, I will "test checker.exe in real OS" on some other prehistoric PCs, when I have the time and/or they are assembled, to help you fill the list with the not working CPUs.

This crash have something to do specifically with the SSE3 on old CPUs, because when I installed the latest SoftGPU, but the MMX version : 1 2 3 4 5 6 7 8 9 10 11

The newest version not only worked for me, but even compatibility with the games and demos increased nicely. Everything is slow as "a snail in slow motion" of course. A lot of games recognize SoftGPU as a graphic adapter and works now because of that. Carmageddon 1 the full version however is downgraded from working to not working now.

Now all this brings some questions: Is the MMX version slower than the SSE3, why is SSE3 preferable? What whent wrong with the mesa and/or SSE3 between versions 0.4 and 0.5, so SoftGPU SSE3 versions suddenly stoped working on some CPUs (I have to remind you SoftGPU v0.4 SSE3 worked for me)? Can this be fixed, or we will just blacklist CPUs? Can I help further? Will ever there be a useful 3D acceleration for the versions below VirtualBox v6.1?

Let's hope, that one day SoftGPU become good enough, to finally throw my real old iron/PCs to the junk...

kjliew commented 6 months ago

All the errors are executing 'invalid instruction'. I see SSSE3/SSE4.1 from the code bytes. Being able to play games on VM is a forward looking concept that always prefers modern CPUs and GPUs. It hardly makes any sense for me if you aren't using SoftGPU on something that is at least x86-64-v2 CPU and DirectX 11 feature level GPU.

B3HKO commented 6 months ago

I tested one more of my retro PCs. This CPU also crashes the test tools in the host OS : CPU

Being able to play games on VM is a forward looking concept that always prefers modern CPUs and GPUs.

Of course. I opened this issue with the idea, that altho with old CPUs, still some useful observations can be made from all this. Heck, I don't even need any emulator. I can run these titles flawlessly natively on my retro PCs. After all, I keep them for this.

B3HKO commented 6 months ago

@JHRobotics Should I continue to report not working CPUs (old or new) or should I stop bother at all?

JHRobotics commented 6 months ago

OK, I found problem: in 0.4.x.x, SSE variant was chosen only when CPU support SSE 4.2 - so, you probably installed MMX version. In 0.5.x.x I'm testing SSE3 bit, but I forget to test SSSE3 bit. SSE3 build is targeted as '-march core2' in GCC, so Intel Core2 platform is lowest CPUs to run this build. I fixed the detection in source and in the next release this detection should work right.

SSE version is much faster, but some OS (Windows 95) not support SSE, or you have to install system while CPU is emulated (usually in QEMU), that's why I also included MMX variant. I'm speaking about compile-time optimalizations, LLVM in llvmpipe can dynamically generate code based on what is currently supported. I choose Core2 as minimal target because I thought Core2 was the first reasonable processor to run (HW) virtualization and I ignored AMD because all my AMD processors older than about 15 years are dead (processors may not, but motherboards definitely yes).

I also cannot create HW GPU acceleration for VirtualBox 6.0 and below because there's no way how - in Chomium which old VB is using for 3D acceleration are missing some commonly used extensions (I think it was something with EXT_bgra, but maybe I'm remembering it wrong) - VirtualBox self will be need patched and I'm afraid this is beyond my capabilities.

@kjliew has right that SoftGPU is targeting on current CPUs and GPUs. MMX variant should work for you also in future but, I don't see much options to performance incasement. But thanks for reporting non-working CPUs, please continue with it, for me is important information which real CPU are usable and which not.

@kjliew: thanks for observation, I should have noticed that the error is on the SSE instruction not on some binary mess when this error appears usually...

TL;DR: Install MMX variant instead of SSE.

kjliew commented 6 months ago

..I choose Core2 as minimal target because I thought Core2 was the first reasonable processor to run (HW) virtualization..

I would consider even Core2 is too old for modern virtualization due to missing of SLAT. Microsoft WHPX doesn't work on Core2. It was the reason that I dumped Core2 for AMD FX upgrade many years ago. Just FYI, x86-64-v2 is probably the minimum target for reasonable performance in modern virtualization.

lorn10 commented 3 months ago

For the record, this problem should be fixed with release v0.6.2024.36-alpha3.

And for the case that the hardware requirements will be raised to x86-64-v2 (including SSSE3). Older hardware still can be used to play retro games by simply using Wine / Linux. I can confirm that this works perfectly fine even for really old games like Rayman 2. The result is better than it ever was in 1999 on my Voodoo 3 card because it is possible to run it with nGlide and Gallium Nine up to 2K UHD resolution. :smiley: