TGB slooow in ATI cards
by Bruno · in Torque Game Builder · 09/09/2010 (9:02 pm) · 9 replies
Hello everyone,
I was just wondering, is anyone experiencing slow down's in ATI cards ?
I'm having reports of major gameplay slowdown in ATI cards, the following cards are having problems, both running in Direct3D and in XP machines :
Is there anything specific that ATI cards might not like ? Something that could give me a clue on where to look at ?
thanks,
Bruno
Card name: ATI MOBILITY RADEON X300
Manufacturer: ATI Technologies Inc.
Chip type: ATI Radeon Graphics Processor (0x5460)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_5460&SUBSYS_056E1014&REV_00
Display Memory: 64.0 MB
Card name: ATI RADEON XPRESS 200M SERIES
Manufacturer: ATI Technologies Inc.
Chip type: ATI Radeon Xpress Series (0x5955)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_5955&SUBSYS_308B103C&REV_00
Display Memory: 128.0 MB
Card name: ATI Mobility Radeon X1600
Manufacturer: ATI Technologies Inc.
Chip type: ATI Radeon Graphics Processor (0x71C5)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_71C5&SUBSYS_30A3103C&REV_00
Display Memory: 256.0 MB
Card name: RADEON 9500
Manufacturer: ATI Technologies Inc.
Chip type: RADEON 9500 AGP (0x4144)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_4144&SUBSYS_00021002&REV_00
Display Memory: 128.0 MB
Card name: ATI Radeon 9550 / X1050 Series
Manufacturer: ATI Technologies Inc.
Chip type: ATI Radeon Graphics Processor AGP (0x4153)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_4153&SUBSYS_2084148C&REV_00
Display Memory: 256.0 MB
Card name: RADEON 9250
Manufacturer: ATI Technologies Inc.
Chip type: RADEON 9250 (0x5960)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_5960&SUBSYS_01601092&REV_01
Display Memory: 256.0 MB
Card name: RADEON 9200 SERIES
Manufacturer: ATI Technologies Inc.
Chip type: RADEON 9250/9200 Series (0x5964)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_5964&SUBSYS_7C251545&REV_01
Display Memory: 128.0 MB
I was just wondering, is anyone experiencing slow down's in ATI cards ?
I'm having reports of major gameplay slowdown in ATI cards, the following cards are having problems, both running in Direct3D and in XP machines :
Is there anything specific that ATI cards might not like ? Something that could give me a clue on where to look at ?
thanks,
Bruno
Card name: ATI MOBILITY RADEON X300
Manufacturer: ATI Technologies Inc.
Chip type: ATI Radeon Graphics Processor (0x5460)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_5460&SUBSYS_056E1014&REV_00
Display Memory: 64.0 MB
Card name: ATI RADEON XPRESS 200M SERIES
Manufacturer: ATI Technologies Inc.
Chip type: ATI Radeon Xpress Series (0x5955)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_5955&SUBSYS_308B103C&REV_00
Display Memory: 128.0 MB
Card name: ATI Mobility Radeon X1600
Manufacturer: ATI Technologies Inc.
Chip type: ATI Radeon Graphics Processor (0x71C5)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_71C5&SUBSYS_30A3103C&REV_00
Display Memory: 256.0 MB
Card name: RADEON 9500
Manufacturer: ATI Technologies Inc.
Chip type: RADEON 9500 AGP (0x4144)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_4144&SUBSYS_00021002&REV_00
Display Memory: 128.0 MB
Card name: ATI Radeon 9550 / X1050 Series
Manufacturer: ATI Technologies Inc.
Chip type: ATI Radeon Graphics Processor AGP (0x4153)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_4153&SUBSYS_2084148C&REV_00
Display Memory: 256.0 MB
Card name: RADEON 9250
Manufacturer: ATI Technologies Inc.
Chip type: RADEON 9250 (0x5960)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_5960&SUBSYS_01601092&REV_01
Display Memory: 256.0 MB
Card name: RADEON 9200 SERIES
Manufacturer: ATI Technologies Inc.
Chip type: RADEON 9250/9200 Series (0x5964)
DAC type: Internal DAC(400MHz)
Device Key: Enum\PCI\VEN_1002&DEV_5964&SUBSYS_7C251545&REV_01
Display Memory: 128.0 MB
About the author
#2
May I ask how do you detect if it's an old ATI Card ?
And this, will this work in other OS's ? Can ATI cards run properly with OpenGL in Vista or Windows7 for example ?
Thanks again ,
Bruno
09/09/2010 (10:01 pm)
Thanks Tim.May I ask how do you detect if it's an old ATI Card ?
And this, will this work in other OS's ? Can ATI cards run properly with OpenGL in Vista or Windows7 for example ?
Thanks again ,
Bruno
#3
As for how to detect... look in defaultPrefs.cs for this:
switch$( $PCI_VEN )
There's an ATI section in there... VEN_1002 I think.
If your $PCI_VEN and $PCI_DEV variables are all junk data, I believe there's a resource around here somewhere for that. I think Amaranthia posted it back in the day. (it also may have ended up in 1.7.5 -- I didn't check).
-Tim
09/09/2010 (10:08 pm)
We haven't had much issue with Vista or Win7 (at least, I've never seen an issue where OpenGL was faster on one and slower on a different one, etc.)As for how to detect... look in defaultPrefs.cs for this:
switch$( $PCI_VEN )
There's an ATI section in there... VEN_1002 I think.
If your $PCI_VEN and $PCI_DEV variables are all junk data, I believe there's a resource around here somewhere for that. I think Amaranthia posted it back in the day. (it also may have ended up in 1.7.5 -- I didn't check).
-Tim
#4
And yup, my $PCI_VEN and $PCI_DEV are full of junk, that's why I was asking.
Let me see if I can find anything on this.
Thanks,
Bruno
09/09/2010 (10:10 pm)
Thanks again,And yup, my $PCI_VEN and $PCI_DEV are full of junk, that's why I was asking.
Let me see if I can find anything on this.
Thanks,
Bruno
#5
http://www.garagegames.com/community/forums/viewthread/76723
I've found that the first rule of TGB development is to search for "Amaranthia" in the forums and read every thread ever started by her.
:)
** edited to reflect working link **
09/09/2010 (10:16 pm)
Found it:http://www.garagegames.com/community/forums/viewthread/76723
I've found that the first rule of TGB development is to search for "Amaranthia" in the forums and read every thread ever started by her.
:)
** edited to reflect working link **
#7
The thing is, there’s this bit of code that refuses to compile :
1. // Ok, now we have the primary display device. Parse the device information.
2. char ven[9];
3. char dev[9];
4. ven[8] = dev[8] = '[[4c89bf6adcf04]]';
In line 4 the compiler complains that the variables are out of range. I believe this is because of something about Unicode and Ansi that needed to be
converted, so I ended up cleaning the variables this way :
ZeroMemory(ven,sizeof(ven));
ZeroMemory(dev,sizeof(dev));
I don’t think there’s anything wrong in doing this, works fine on my side, but I don’t want any crashes in other people’s machines.
Anyone knows if this is a safe code ?
Thanks,
Bruno
09/09/2010 (11:09 pm)
I’m implementing the resource you pointed out.The thing is, there’s this bit of code that refuses to compile :
1. // Ok, now we have the primary display device. Parse the device information.
2. char ven[9];
3. char dev[9];
4. ven[8] = dev[8] = '[[4c89bf6adcf04]]';
In line 4 the compiler complains that the variables are out of range. I believe this is because of something about Unicode and Ansi that needed to be
converted, so I ended up cleaning the variables this way :
ZeroMemory(ven,sizeof(ven));
ZeroMemory(dev,sizeof(dev));
I don’t think there’s anything wrong in doing this, works fine on my side, but I don’t want any crashes in other people’s machines.
Anyone knows if this is a safe code ?
Thanks,
Bruno
#8
Anyway I figured if anything those strings should be null terminated, so I changed line 4 from your list there to:
ven[8] = dev[8] = '\0';
Seemed to work fine, so I never looked back. :)
-Tim
09/14/2010 (7:43 pm)
My compiler (and myself) had no idea what was going on with that "[[4c89bf6adcf04]]" thing. The guy who did this particular fix literally speaks machine language... so I suspect his compiler is... modified.Anyway I figured if anything those strings should be null terminated, so I changed line 4 from your list there to:
ven[8] = dev[8] = '\0';
Seemed to work fine, so I never looked back. :)
-Tim
#9
Diff for cardProfile.cpp:
(This is a diff file, please do not copy + paste this into the C++ code!)
Manual patching:
At line 31 -
09/15/2010 (12:58 am)
Here's my quick and dirty fix for the problem (using TGB 1.7.5 on Windows 7):Diff for cardProfile.cpp:
(This is a diff file, please do not copy + paste this into the C++ code!)
31,35c31 < //pray very hard that we don't have unicode PIDs and VIDs in the future... < char devID[128]; < wcstombs(devID,ddData.DeviceID,128); < < char *pos = dStrstr( (const char*)devID,(const char *)"VEN_" ); --- > char *pos = dStrstr( (const char*)ddData.DeviceID,(const char *)"VEN_" ); 44c40 < pos = dStrstr( (const char*)devID, (const char *)"DEV_" ); --- > pos = dStrstr( (const char*)ddData.DeviceID, (const char *)"DEV_" );
Manual patching:
At line 31 -
//pray very hard that we don't have unicode PIDs and VIDs in the future... char devID[128]; wcstombs(devID,ddData.DeviceID,128);and finally, replace all instances of "ddData.DeviceID" with "devID" on lines 35 & 44
Torque 3D Owner Tim Scheiman
Ghost Ship Studios
It will solve all of your problems (until you get around to intel chipsets).
As to what is causing it -- I can't say... never properly debugged it myself. I just catch the card vendor and set it to OpenGL.
(The bizarre exception is a weird old series of ATI cards called "FireGL"... they seem to like D3D better)
-Tim