Game Development Community

TGEA Is Still Very Slow For Me

by William Lee Sims · in Torque Game Engine Advanced · 02/11/2009 (11:07 pm) · 15 replies

Running the Stronghold demo, I get about 12 FPS. If I move away from the buildings, Kork, and the water, and I just look at the terrain, I get about 13 FPS. If I look into the sky, I get about 90 FPS.

This is true whether I run at 800x600 or 1600x1200.

In the Atlas Demo, I get between 30 and 70 FPS. In the Forge Demo, I get about 130 FPS.

I have:
* Intel Core 2 6600 at 2.4 GHz
* 2 GB RAM
* NVIDIA GeForce 8800 GTS

Checking the Windows Task Manager, the game is only taking up 50% of the CPU, which leads me to believe that my video card is the hold-up.

I have the November SDK for Direct X (got the latest before learning there are some unspecified issues) and I just got the latest drivers for my video card about an hour ago and re-ran my test.

#1
02/12/2009 (12:53 am)
One way to tell if GPU or CPU is a bottleneck is to change your in game full screen display resolution. If FPS remain about the same in any resolution you are probably at CPU bottleneck( actually any computer part OTHER then GPU, I have even seen cheep sound cards become a chock point). More in depth information can be found google for 'fillrate'.

William Lee Sims; do you have your display settings at MAX with AA'ing? your FPS seem very low for your system. Do you know what speed type of RAM you have? And your Front Side Bus (just curious as it is very possible your system bus is slowing you down)?
#2
02/12/2009 (1:06 am)
That does seem very low... you should put some profiler tracing on, basically start the game open up the console and type:

profilerenable(1);

then play the game for a while and when finished:

profilerdump();

the results will show you where the game is spending most of its time.
#3
02/12/2009 (3:47 am)
You might also try checking your nVidia Control Panel, and under the 3D Settings->Adjust image settings with preview make sure it is set to Let the 3D application decide. I had been messing with my nVidia control panel and had it hard set to Quality and found myself VERY disappointed with TGEA 1.8.1's performance.. until I remember I had changed that setting. Now, the performance is outstanding.

Also, I believe it is recommended to use the August release of the SDK, as there were/are problems with the November release. However, if you are using the prebuilt executable then I don't think it would make a difference.
#4
02/12/2009 (6:00 am)
Also - please post your console.log, so we can see the particulars about your video card, mode, etc.
#5
02/12/2009 (6:17 am)
That system is identical to the system i'm using here (same cpu, same card, same ram) and in the same resolution I get about 70 fps when looking at the buildings, about 160 when looking away and over 400 when looking at the sky. I'd guess it has to be something with your local settings or drivers most likely.
#6
02/12/2009 (1:53 pm)
While I can't rule out a problem on my computer, I'm beginning to think this is due to Legacy Terrain.

I've run the game at 800x600 to 1600x1200, fullscreen and windowed. The framerates are almost identical. My nVidia Control Panel has the settings set for the 3D application to decide quality (which is obvious at 800x600 fullscreen... eeks to the jaggies!).

Like I mentioned before, I'm not seeing any real problems on the Forge or Atlas Demos.

I ran the profiler, which has some very interesting rusults. I will post that in the next message, along with the start of the console listing my machine "settings".
#7
02/12/2009 (1:55 pm)
CONSOLE INIT:
//-------------------------- 2/12/2009 -- 14:44:59 -----
Processor Init:
   Intel Core 2, ~2.40 Ghz
     (timed at roughly 2.39 Ghz)
   FPU detected
   MMX detected
   SSE detected
 
Math Init:
   Installing Standard C extensions
   Installing Assembly extensions
   Installing FPU extensions
   Installing MMX extensions
   Installing SSE extensions
 
Initializing platform...
Input Init:
   keyboard0 input device created.
   mouse0 input device created.
   DirectInput enabled.

Done
--------- Loading DIRS ---------

--------- Parsing Arguments ---------
Reading Display Device information...
   Primary Display Device Found:
      Vendor Id: VEN_10DE
      Device Id: DEV_0193
Binding server port to default IP
UDP initialized on port 0
DirectX 8 version - 9.0c
DirectX 9 version - 9.0c
GLExtensions: Extension bind failed for glBufferRegionEnabledEXT
GLExtensions: Extension bind failed for glNewBufferRegionEXT
GLExtensions: Extension bind failed for glDeleteBufferRegionEXT
GLExtensions: Extension bind failed for glReadBufferRegionEXT
GLExtensions: Extension bind failed for glDrawBufferRegionEXT
GLExtensions: Extension bind failed for glVertexWeighthNV
GLExtensions: Extension bind failed for glVertexWeighthvNV
Attempting to create GFX device: NVIDIA GeForce 8800 GTS (D3D9)
GFXD3D9EnumTranslate: Unassigned value in GFXD3D9TextureFormat: 11
Device created, setting adapter and enumerating modes
GFXD3D9Device - using 'd3dx9_38.dll' for dynamic linking.
   Cur. D3DDevice ref count=1
   Maximum number of simultaneous samplers: 8
   Pix version detected: 3.000000
   Vert version detected: 3.000000
WMIVideoInfo: DxDiag initialized
Initializing GFXCardProfiler (D3D9)
   o Chipset : 'GeForce 8800 GTS'
   o Card    : 'GeForce 8800 GTS'
   o Version : '6.14.0011.8122'
   - Scanning card capabilities...
GFXCardProfiler (D3D9) - Setting capability 'autoMipMapLevel' to 1.
GFXCardProfiler (D3D9) - Setting capability 'maxTextureWidth' to 8192.
GFXCardProfiler (D3D9) - Setting capability 'maxTextureHeight' to 8192.
GFXCardProfiler (D3D9) - Setting capability 'maxTextureSize' to 8192.
GFXCardProfiler (D3D9) - Setting capability 'lerpDetailBlend' to 1.
GFXCardProfiler (D3D9) - Setting capability 'fourStageDetailBlend' to 1.
GFXCardProfiler (D3D9) - Setting capability 'allowRGB24BitTextures' to 0.
   - Loading card profiles...
      - Loaded card profile profile/D3D9.cs
      - No card profile profile/D3D9.GeForce8800GTS.cs exists
      - No card profile profile/D3D9.GeForce8800GTS.GeForce8800GTS.cs exists
      - No card profile profile/D3D9.GeForce8800GTS.GeForce8800GTS.61400118122.cs exists
 % - Initialized Common

--------- Initializing Directory: scriptsAndAssets ---------
sfxStartup...
SFXSystem::createDevice - created XAudio device 'SigmaTel Audio'
   Provider: XAudio
   Device: SigmaTel Audio
   Hardware: No
   Buffers: 16

--------- Initializing Stronghold: Server Scripts ---------

--------- Initializing Stronghold: Client Scripts ---------
--------------
Attempting to set resolution to "800 600 false 32 60 0"
Accepted Mode: 
--Resolution : 800 600
--Full Screen : No
--Bits Per Pixel : 32
--Refresh Rate : 60
--FSAA Level 0
#8
02/12/2009 (1:59 pm)
TOPS OF PROFILE DUMP SECTIONS
==>profilerDump();
Profiler Data Dump:
Ordered by non-sub total time -
%NSTime  % Time  Invoke #  Name
 84.964  84.964   100715 GFXDevice_updateStates
  2.492   2.761   954234 TerrainRender_renderChunkNormal
  1.455   2.591     2800 RenderMeshMgr_render
  1.299   1.597      700 TerrainRenderRecurse
  0.889   1.223     9694 GFXDevice_drawTextN
  0.615  79.175     3441 TerrainRender_DrawDiffusePass
  0.565   0.652   110547 GFXD3D9ShaderConstBuffer_activate
  0.520   0.729      700 SkyRender
  0.508   0.508     4795 Terrain_bufferCopy_lockV
  0.437  98.295      350 CanvasRenderControls
  0.392  99.771      350 MainLoop
  0.347   0.869     4795 Terrain_vbufferCopy
  0.322   0.322     4795 Terrain_bufferCopy_lockP
  0.270   0.323      700 PrecipRender
  0.269   0.269  1001927 TR_fixEdge
  0.252   2.084      700 TerrainRender_DrawFogPass
  0.226   0.336     1704 PrecipProcess
  0.212   2.137   959075 Terrain_batchEnd
  0.211   0.391      700 RenderTranslucentMgr_render
  0.199   0.536     4795 TRender_DIP
  0.197   0.197  1419863 GFont_getCharInfo
  0.178   0.178   476931 ClipMap_calculateClipMapLevels
  0.176   0.176      350 SwapBuffers
  0.171   0.276     9625 convertUTF8toUTF16
  0.151   0.262     7009 TSShapeInstanceRender
  0.140   0.140   397371 GenericConstBufferLayout_set
  0.131  92.087     4900 RenderObjectMgr_render
  0.121   0.121    13754 ContainerCastRay
  0.120   0.120   458874 TerrainRender_testSquareVisibility
  0.116   0.116      702 Swizzle32_Upload
#9
02/12/2009 (2:00 pm)
Ordered by stack trace total time -
% Time  % NSTime  Invoke #  Name
  1.453 -98.318        0 ROOT
 99.771   0.392      350   MainLoop
 98.295   0.437      350     CanvasRenderControls
 49.883   0.001      350       GameRenderWorld
 49.879   0.009      350         SceneGraphRender
 49.193   0.001      350           TraverseScene
 49.192   0.002      350             RenderCurrentImages
 49.154   0.001      350               RenderInstManagerRender
 49.153   0.008      350                 RenderPassManager_render
 47.210   0.093     2450                   RenderObjectMgr_render
 46.315   0.001      350                     TerrainRender
 45.402   0.009      350                       TerrainRenderEmit
 40.282   0.188     1750                         TerrainRender_DrawDiffusePass
 38.466  38.466     3500                           GFXDevice_updateStates
  0.940   0.795   242413                           TerrainRender_renderChunkNormal
#10
02/12/2009 (2:06 pm)
Quote: 84.964 84.964 100715 GFXDevice_updateStates
That is, beyond a doubt, utterly inexplicable. The update states call should be, essentially, free. The fact that it is not indicates that there is something going very very wrong in your d3d9.dll or in the actual driver.
#11
02/12/2009 (4:47 pm)
To everybody: Thanks for your support, but I'm sorry that I wasted your time.

Alex, your comment made me run "dxdiag". It immediately flagged the d3d9.dll... BECAUSE I WAS RUNNING THE DEBUG VERSON! As soon as I put that back to the runtime version, everything ran Very Fast And Very Smooth!

(I'm not blaming GG, but it was their documentation that told me to use the debug version. HEHE!)
#12
02/12/2009 (4:51 pm)
@William - Can you post a link to that line in the docs. I'd like to correct it.
#13
02/12/2009 (6:19 pm)
It's in the documentation that comes with the engine, as in

TGEA181/documentation/Documentation%20Overview.html

There is a section under "Getting Started" called "Run Debug Libs". It suggests that you run the debug version of the DirectX library. I wouldn't mind it being in a different section, though (you know, like "How to Make Your Machine Chug By Using DirectX Debug Libraries" *GRIN*).

Sorry... I'm easily entertained.
#14
02/12/2009 (6:56 pm)
Quote:Using these settings will slightly degrade your rendering performance, but the debug information it provides in your IDE output window makes it well worth it when you are programming D3D graphics or writing your own shaders.

As you can see from the dialog, you can switch it back to use the Retail D3D libraries very easily just by changing the selection.

Pretty clear about why you do that and what will be the results. Should I remove the word *slightly*??
#15
02/12/2009 (7:34 pm)
My problem was that I changed the library, migrated TGE 1.5 code to 1.8 over a few weeks, didn't immediately notice a performance problem, and then completely forgot about setting it. You can't fix my own stupid.

But removing "slightly" would make the statement more neutral.

Also, I don't know if this is a step that should be in the setup. It seems like there should be a separate section on debugging/profiling/etc. anyway.