In the last week I've been trying to bring an "old" game back to life, Star Wars Knights of the old republic (KOTOR, for short). It's from 2003 and uses OpenGL 1.4.

I have used Mesa, libtxc_dxtn and some trickery to decompress the textures to boost performance, and right now I have it up and running smoothly with Gallium on LLVMPipe, compiled on Windows. (I can upload a copy if someone is interested). This took me about 2 days of compiling and figuring out stuff.

Here's where the weirdness begins:
Turning on framebuffer effects or soft shadows make the game crash right after the menu. Using a disassembler and debugger and what little knowledge I have of reverse engineering, I managed to track down the issue to a function which uses wglGetProcAddress to get the addresses of several OpenGL functions. Some of these calls return a null pointer (even if there is a valid context and it is current), and when the game tries to call them, it crashes. The first one that makes it crash is a pointer to wglBindTexImageARB, but there are a few others. NOPing the offending instructions did not work, and returning a nop function just makes the game display artifacts.

This issue is not new: a guy named Miklós Máté, here in the Mesa mailing list somehow managed to fix it in Mesa 11, but his patches do not seem to work anymore (https://lists.freedesktop.org/archives/mesa-dev/2016-February/106695.html). I tried to contact him but without luck. The issue affects LLVMPipe, Softpipe and OpenSWR, so I think it's something in Gallium itself.

Nvidia's OpenGL driver is the only implementation that seems to work properly with this game at the moment, so if someone here's willing to help me out with this, a lot of people would be very grateful, and I am willing to pay too.

Thank you
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to