Aller au contenu

AMD Gpu's Opengl workaround (Well, sort of)


Messages recommandés

Posté(e)

Attention, this is mostly directed at gaming rigs, computers in arcade cabinets, etc. I do not recommend touching system files on work computers or computers with sensitive information, unless you know what you are doing! Use it at your own risk!


...and always back up your files and make a restore point.

 

 

What's this for? 

Well, AMD's OpenGL drivers (at least on Windows) are well known for being a real mess.
For example, games that worked perfectly with drivers 22.5.1 no longer work in later versions (after the mayor opengl driver rewrite), and other games work the other way around.


A very clear example is Teknoparrot. Games based on Sega Lindbergh (Linux) use OpenGL.

With an AMD card, it's impossible to run all games without any problems on Windows! Some work with the old drivers, while others with the new ones. Examples:


Games that need old drivers:


- Tokyo Cop (with the new ones, ther'es a massive slowdown)
- Too Spicy (With new ones, missing models and textures)
- Affterburner Climax (No Elf Loader 2) (With new drivers it crashes from the beginning)


Games that need new drivers:


- Virtua Tennis 3 (with old ones, players are invisible)


and so on... You get the idea.

 


Unfortunately, the solution isn't as simple as simply placing the DLL file in the game's installation folder. In Teknoparrot's case, that doesn't work.


So the solution I've found is to have two copies (they're just two dll files) and copy the one that's needed at the time into the drivers folder.

By default we will always have the new version in the folder and it will only be changed to the old one for the specific game that needs it.

 

In this case we are going to use AHK, because it is very versatile although it could also be automated with bat files.


Instructions:


First of all, the library in question is the file "atioglxx.dll" and is located, in my case, in:


C:\Windows\System32\DriverStore\FileRepository\u0407052.inf_amd64_84d15514ad17ffa0\B406619\


You have to look in your own directory: C:\Windows\System32\DriverStore\FileRepository\, for a folder that starts wit "u", like mine: u0407052.inf_amd64_84d15514ad17ffa0, but maybe with different numbers. Inside that folder is another one, similar as "B406619", maybe also with other numbers. And inside this folder is "atioglxx.dll"


1. Unzip the attached zip file.


2. Put the "Backup" folder (it contains a an "atioglxx" folder containing 2 "New" and "Old" folders with the new and old atioglxx.dll libraries inside) in the root of your C drive: C:/Backup.
Now, the file in the "New" folder is from my own drivers version : Adrenalin 24.9.1. If your opengl drivers are working great with newer games, keep your version (located in the folder mentioned before), replacing the one in the "New" folder. In any case, keep always a copy of your original file just in case!


3. Install "TakeOwnershipPro.exe" (Comes inside the zip) . Right click The "B406619" (in my case) folder and click on the "TakeOwnershipPro" tab. This will give us permission to replace the file in the folder.


4. Make a bat file or download and install "AutoHotkey" and make an AHK script (or just modify and use one of the included in the zip flle) to automate the file replacement process.

For convenience you could make and put 2 ahk scripts appart, to manually switch between the old and new driver. I.e: Old.ahk and New.ahk


A few examples (remember to change the scripts inside to match your own directories):


New.ahk:


FileDelete, C:\Windows\System32\DriverStore\FileRepository\u0407052.inf_amd64_84d15514ad17ffa0\B406619\atioglxx.dll
FileCopy, C:\Backup\atioglxx\New\atioglxx.dll, C:\Windows\System32\DriverStore\FileRepository\u0407052.inf_amd64_84d15514ad17ffa0\B406619\*.*

 

Old.ahk:


FileDelete, C:\Windows\System32\DriverStore\FileRepository\u0407052.inf_amd64_84d15514ad17ffa0\B406619\atioglxx.dll
FileCopy, C:\Backup\atioglxx\Old\atioglxx.dll, C:\Windows\System32\DriverStore\FileRepository\u0407052.inf_amd64_84d15514ad17ffa0\B406619\*.*

 

 

Loader.ahk (To automatically load in this case, the game "Too spicy" with Teknoparrot i.e.). In order to avoid the script not reverting back to the original (new) driver in case the program fails, this script checks every 3 seconds if Budgieloader.exe (Teknoparrot) is still active. If not it closes every other program started with the game (Mamehooker, etc.) and puts back the new atioglxx.dll. In this example it loads, as said, Mamehooker and Demulshooter (for Gun recoil and outputs), Rivatuner (limit fps). It also does the same and if you press the Escape key, to exit the game.


#NoEnv
SendMode Input
Gui -DPIScale
FileDelete, C:\Windows\System32\DriverStore\FileRepository\u0407052.inf_amd64_84d15514ad17ffa0\B406619\atioglxx.dll
FileCopy, C:\Backup\atioglxx\Old\atioglxx.dll, C:\Windows\System32\DriverStore\FileRepository\u0407052.inf_amd64_84d15514ad17ffa0\B406619\*.*
flag := False
BlockInput, On
sleep 500
run, C:\Mamehooker\mamehook.exe
sleep 1500
Run, DemulShooter.exe -target=lindbergh -rom=2spicy -noinput
sleep 2000
Run, C:\Teknoparrot\TeknoParrotUi.exe --profile=2Spicy.xml,, min
Sleep 1000
BlockInput, Off
sleep 1500
SetTimer, checker , 3000 ; check every 3000 ms
Return 

checker:
App = BudgieLoader.exe ; Change the name to application you are checking.
loop {
Process, Exist, % App,
    if !ErrorLevel {
      Process, Close, mamehook.exe
      Run, KillProcess.exe mamehook.exe,, min
      Process, Close, BudgieLoader.exe
      Run, KillProcess.exe BudgieLoader.exe,, min
      Process, Close, TeknoParrotUi.exe
      Run, KillProcess.exe TeknoParrotUi.exe,, min
      Process, Close, DemulShooter.exe
      Run, KillProcess.exe DemulShooter.exe,, min
      Process, Close, DemulShooter.exe
      Run, KillProcess.exe DemulShooter.exe,, min
      sleep 2000
      run, KillProcess.exe RTSS.exe,, min
      FileDelete, C:\Windows\System32\DriverStore\FileRepository\u0407052.inf_amd64_84d15514ad17ffa0\B406619\atioglxx.dll
      FileCopy, C:\Backup\atioglxx\New\atioglxx.dll, C:\Windows\System32\DriverStore\FileRepository\u0407052.inf_amd64_84d15514ad17ffa0\B406619\*.*
      ExitApp
}
    else
    return
}
*$Esc:: 
    Process, Close, mamehook.exe
    Run, KillProcess.exe mamehook.exe,, min
    Process, Close, BudgieLoader.exe
    Run, KillProcess.exe BudgieLoader.exe,, min
    Process, Close, TeknoParrotUi.exe
    Run, KillProcess.exe TeknoParrotUi.exe,, min
    Process, Close, DemulShooter.exe
    Run, KillProcess.exe DemulShooter.exe,, min
    Process, Close, DemulShooter.exe
    Run, KillProcess.exe DemulShooter.exe,, min
    sleep 2000
    run, KillProcess.exe RTSS.exe,, min
     FileDelete, C:\Windows\System32\DriverStore\FileRepository\u0407052.inf_amd64_84d15514ad17ffa0\B406619\atioglxx.dll
     FileCopy, C:\Backup\atioglxx\New\atioglxx.dll, C:\Windows\System32\DriverStore\FileRepository\u0407052.inf_amd64_84d15514ad17ffa0\B406619\*.*
    ExitApp

 

Btw. Put KillProcess.exe in the same directory as the script...

 

The example files are also inside the attached zip file.


If there are any questions, I will gladly answer.

AMDOpenglfix.zip

Posté(e)
Il y a 2 heures, ultrabub563 a dit :

Umm...is this working of Intel as Mario Kart AC GP DX?

No. It's only for AMD Gpu's. Sorry

Posté(e)

Thank you very much for this detailed guidance!  I'm trying to fix Tokyo cop's super-slowdown issue but am loading it on wine (on a Steam deck), and I don't have a atioglxx.dll file anywhere in my system32 folder (I don't even have.  I do have an opengl32.dll, and tried replacing that with an old version, but it had no effect.  Obviously I have little idea what I'm doing, but my file repository has very little in it - no subfolder starting with "u."  Any chance you have any ideas?

Posté(e)
3 hours ago, ultrabub563 said:

Umm...is this working on Mario Kart AC GP DX?

someone already replied to the first time you asked almost the exact same thing. 

 

No.

Posté(e)

Let's see, because I think there's a bit of confusion about all this: This is only an OpenGL workaround/fix for PCs running Windows and AMD graphic cards. So: No Nvidia, No Steam Deck, No Linux (on Linux you can run them natively with another emu and OpenGL support is superior), No PS5, No Commodore 64...

 

Le 30/04/2025 à 08:10, bbilford83 a dit :

Thank you very much for this detailed guidance!  I'm trying to fix Tokyo cop's super-slowdown issue but am loading it on wine (on a Steam deck), and I don't have a atioglxx.dll file anywhere in my system32 folder (I don't even have.  I do have an opengl32.dll, and tried replacing that with an old version, but it had no effect.  Obviously I have little idea what I'm doing, but my file repository has very little in it - no subfolder starting with "u."  Any chance you have any ideas?

Ok. In your case I think the slowdown has nothing to do with AMD's OpenGL drivers... Let me try to explain it in an easy way: You are using a pc based handheld with a 2.4-3.5ghz cpu (not bad but not the fastest) and 1.6ghz Gpu, running a Linux based game on a Linux OS but using a Linux to  windows wrapper (wine) to run a windows to Linux wrapper (Teknoparrot)... You see? The workload is enormous. 

An ideal situation in your case would be to find a native Linux based loader if one exist (For Lindbergh there is one, but Gaelco PC I don't know).

Posté(e)

Thanks very much for your thoughts, but I do think it is still something to do with the OpenGL slowdown as it is unique to this game.  I'm running all kinds of stuff with much greater loads without any slowdown via TP - Aliens Armageddon, Terminator, ID Zero, etc... lots of extremely recent cpu-heavy games are all running beautifully.  It's something quirky specific to this game.  The Steam Deck does run an AMD processor and the wine/proton loading structure seems to use minimal overhead in general.  And the AMD does require various "fixes" in the form of patches/etc. for some other games.  Anyway, I know it's a totally different beast with lots of other potential complications, I was just hoping you might know a different .dll that needs to be replaced in my case :).

Posté(e)
Il y a 19 heures, bbilford83 a dit :

Thanks very much for your thoughts, but I do think it is still something to do with the OpenGL slowdown as it is unique to this game.  I'm running all kinds of stuff with much greater loads without any slowdown via TP - Aliens Armageddon, Terminator, ID Zero, etc... lots of extremely recent cpu-heavy games are all running beautifully.  It's something quirky specific to this game.  The Steam Deck does run an AMD processor and the wine/proton loading structure seems to use minimal overhead in general.  And the AMD does require various "fixes" in the form of patches/etc. for some other games.  Anyway, I know it's a totally different beast with lots of other potential complications, I was just hoping you might know a different .dll that needs to be replaced in my case :).

Sorry to hear that. Hmm. OpenGL drivers on Linux usually run much better than on Windows (thanks to community fixes). Anyway, the atioglxx.dll library is only for Windows.

Let's see how we fix this 😉. Ok, if your Steam Deck is powerful enough, try the following: download Mesa for Windows (Mesa3D Windows)(Try the 32 bit version first, if it doesn't work, try the 64bit one). I think the latest version is 21.0.3. Unzip and copy the opengl32.dll file into the ElfLdr2 folder in Teknoparrot. To avoid having to install and remove it every time for other games, if it works for you, I would install a copy of Teknoparrot with that file specifically for that game (and any others that run just as slow) in another folder, this way, you'll have two copies of Teknnoparrot. One normal and one for this game.

If you want to save some space, you can delete from the Teknoparrot version for for Tokyo Cop  the following files: The entire CefSharp folder inside the libs folder ofScoreSubmission.dll, ScoreSubmission64.dll,TeknoDraw64.dll, and TeknoParrot64.dll from the Teknoparrot folder. Remember: Only in the Teknoparrot folder specifically for Tokyo Cop.

Please tell us if it worked for you.

Posté(e)
On 5/3/2025 at 7:42 AM, Sky25es said:

Sorry to hear that. Hmm. OpenGL drivers on Linux usually run much better than on Windows (thanks to community fixes). Anyway, the atioglxx.dll library is only for Windows.

Let's see how we fix this 😉. Ok, if your Steam Deck is powerful enough, try the following: download Mesa for Windows (Mesa3D Windows)(Try the 32 bit version first, if it doesn't work, try the 64bit one). I think the latest version is 21.0.3. Unzip and copy the opengl32.dll file into the ElfLdr2 folder in Teknoparrot. To avoid having to install and remove it every time for other games, if it works for you, I would install a copy of Teknoparrot with that file specifically for that game (and any others that run just as slow) in another folder, this way, you'll have two copies of Teknnoparrot. One normal and one for this game.

If you want to save some space, you can delete from the Teknoparrot version for for Tokyo Cop  the following files: The entire CefSharp folder inside the libs folder ofScoreSubmission.dll, ScoreSubmission64.dll,TeknoDraw64.dll, and TeknoParrot64.dll from the Teknoparrot folder. Remember: Only in the Teknoparrot folder specifically for Tokyo Cop.

Please tell us if it worked for you.

 

Interesting, thank you very much for the advice!  We had similar thoughts about not needing to install/remove every time, but I thought I would need to replace something in the C drive from the advice you gave above, which means a different wine prefix - I had set that up, but hadn't thought about creating a separate Teknoparrot install to use a different dll there.  An extra TP setup takes up much less room than an extra wine prefix, so that's great.

 

Unfortunately, adding the opengl32.dll file into the ElfLdr2 folder in the separate TP install doesn't affect the slowdown.  I tried it with both the 32 bit version of Mesa for Windows and the 64bit one.  I also tried putting in the "libs" subfolder of ElfLdr2 in case that was what you meant, but the slowdown was there too.  Happy to test out any other ideas you might have, and thanks again for taking the time to respond.

Posté(e)

Mesa for Windows should theoretically work, but of course, you need a somewhat powerful machine...

Well, other than that, I have no idea what else you could try. I don't have a Steam Deck, so I don't have anywhere to test. I'm sorry 🙁

Posté(e)
14 hours ago, Sky25es said:

Mesa for Windows should theoretically work, but of course, you need a somewhat powerful machine...

Well, other than that, I have no idea what else you could try. I don't have a Steam Deck, so I don't have anywhere to test. I'm sorry 🙁

Thank you again.  I think the problem may be that it is somehow not getting access to the opengl32.dll, that maybe it needs some sort of winedll override command.  I am researching, but I think it is a wine issue specifically.  I'll post back here if I solve it of course.

Posté(e)
Il y a 19 heures, MarianoRyu a dit :

I've tried this, but for some reason, now my 2 Spicy game will crash as soon as I try to start it.

If you put back your original atioglxx.dll file, it works ?

Posté(e)
On 5/5/2025 at 2:41 AM, Sky25es said:

Mesa for Windows should theoretically work, but of course, you need a somewhat powerful machine...

Well, other than that, I have no idea what else you could try. I don't have a Steam Deck, so I don't have anywhere to test. I'm sorry 🙁

 

Mesa is hit and miss, it works for some games but not for others and plenty of artefacts at times. The Vulkan or DX12 backends are fairly fast, but not a perfect solution either way.

 

On 4/24/2025 at 5:57 PM, Sky25es said:

A very clear example is Teknoparrot. Games based on Sega Lindbergh (Linux) use OpenGL.

With an AMD card, it's impossible to run all games without any problems on Windows! Some work with the old drivers, while others with the new ones.

 

You can put opengl dll in the Teknoparrot folder and it should work. It was fixed a while back. Which dll do you put in which folder?

 

I will try to see if there is a way to dynamically load different versions of atioglxx.dll without changing the system files. I am busy this week but will check next week maybe since I have the same issue and did not think previous atioglxx.dll would work better. AMD drivers are garbage, that is why now I only buy Nvidia. But my portable device is AMD, so I have noticed some of the issues you mentioned.

Posté(e) (modifié)
7 hours ago, Sky25es said:

If you put back your original atioglxx.dll file, it works ?

Yes, although I get only eyes (no character bodies at all) when trying to start a new game.

It might be helpful to know that my GPU is a RX 6800, and my driver is 25.5.1.

Modifié par MarianoRyu
Posté(e)
Le 13/05/2025 à 00:19, MarianoRyu a dit :

Yes, although I get only eyes (no character bodies at all) when trying to start a new game.

It might be helpful to know that my GPU is a RX 6800, and my driver is 25.5.1.

It's a bit strange. The only solution in your case would be to download the 22.5.1 drivers for your graphics card and see if it works properly. If it does, copy the atioglxx.dll file from that version, put it appart and reinstall the most up-to-date version again, using this file only for the required games....

Le 13/05/2025 à 00:09, ducon2016 a dit :

 

Mesa is hit and miss, it works for some games but not for others and plenty of artefacts at times. The Vulkan or DX12 backends are fairly fast, but not a perfect solution either way.

 

 

You can put opengl dll in the Teknoparrot folder and it should work. It was fixed a while back. Which dll do you put in which folder?

 

I will try to see if there is a way to dynamically load different versions of atioglxx.dll without changing the system files. I am busy this week but will check next week maybe since I have the same issue and did not think previous atioglxx.dll would work better. AMD drivers are garbage, that is why now I only buy Nvidia. But my portable device is AMD, so I have noticed some of the issues you mentioned.

It's true that Mesa isn't suitable for everything. Some games don't run well, but I've tested Tokyo Cop and it works, at least in my case, although you need a PC with enough power.

It would be great to be able to load the atioglxx.dll file on a per-game basis. Even better than my solution. 🙂

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...