Can anybody explain me this...?

Started by
6 comments, last by Alex Red 18 years, 8 months ago
Hi All... This thing I already asked, but got no answer back, and now that it seems more clear to me, I ask again... I am improving a DX7 engine... I got an object in a VB, 522 Vertices, 1 Texture, 2 Renderer States I draw the object once in Indexed mode, and I get a drawing time of about 15 uSec I draw the SAME OBJECT from SAME VB twice, and time rises to about 20 uSec Again, draw it 3 times, time goes to 25 uSec ok... the more I draw, for each draw the time seems to rise of about 5 uSec each Draw + the initial overhead of about 15 uSec... till when I dnt reach a 'limit' ( seems about that number ) of a total of 5000 vertices drawn... then draw time steps suddently of about 300 uSeconds more... then, passed this 'step', again about 5 uSec for each more draw.. Such Rise Step seems to happen every 5000 Vertices of increase... I tested, this has nothing to do with number of Render States or Texture switches, I tried objects with many more Render states and Texture changes, and same behaviour... till I stay under 5000 ( about ) vertices, timings are fine, as I go over that level... time steps up by a nice 300 uSec at least... this happens both on nVidia and ATI Cards... Could any1 tell me if there is a way to avoid this...or what is it? tnx [R]ed
Advertisement
How are you timing this? It could be that the monitor refresh occurs during that time.
Chris ByersMicrosoft DirectX MVP - 2005
I am timing a Profiler made by me in Assembly, it's using processor performance registers, and even if checked with profilers like GlowCode or DevPartner results are the same ( even if they not so accurate and fast )...

Well, refresh time could be smthing to check, even if I dnt believe it could be the cause, the overall timing of a series of draws is about 800uSec, so, very little compared to the VSync of a monitor, but, effectively, the rendering is started every 40mSec synched by a Windows Timer, so may be it 'falls' in the timing area of VSync...
However, this 'Timing Step' seems to happen every about 5000 vertices, so, a very little time btween 1st Step and second, dealing with tenths of uSeconds... not the delay btw 2 VSyncs for sure...

Tnx for the Idea however SuperMat, I'll check...

[R]ed
When it comes to timing Direct3D calls I'd really recommend using PIX instead of rolling your own profiler - PIX can hook into the drivers and give you a lot more information about what time is being spent where. There's a set of plugins for PIX from ATI for their cards. On NVidia cards you may also want to look at NVPerfHUD.

Richard "Superpig" Fine - saving pigs from untimely fates - Microsoft DirectX MVP 2006/2007/2008/2009
"Shaders are not meant to do everything. Of course you can try to use it for everything, but it's like playing football using cabbage." - MickeyMouse

DX doesn't necessarily actually do any drawing when you call the drawing functions, it might add it to a queue to be dealt with at a later time (like when you lock a buffer or call present).
Tnx to all...
However... SuperPig... I am not interested in GPU performances... but CPU ones...
I have to deal with a big ( some Tenths MBs of sources ) big program, so, what is my interest is how much I can save for CPU Time... and I am actually measuring it...
I dnt have hook problems, my profiler is just 4 Assembly instructions to START the measure and STOP it, calculations are later done in dead time...

Infact, if as Dagget said and I suppose, DX is just caching, I wonder why CPU gets stuckked in there when passing such level of 'cached vertices'....

From what I have seen, I start to believe that GPU allocates an it's internal buffer ( may be of indexes ) to draw, and loads it...when u got too much vertices GPU has to allocate another one...not sure, but the timings and behaviour I got seem equal to that of switching btw VBs while drawing...

Howevere tnx for notes on Video Profilers... going to check for them...

[R]ed

[Edited by - Alex Red on August 23, 2005 9:14:29 AM]
I'm pretty sure that both PIX and NVPerfHUD give you some information how much time is spent in the driver (i.e. on the CPU) per call.

Richard "Superpig" Fine - saving pigs from untimely fates - Microsoft DirectX MVP 2006/2007/2008/2009
"Shaders are not meant to do everything. Of course you can try to use it for everything, but it's like playing football using cabbage." - MickeyMouse

Yep... U r perfectly right Superpig... I thought about it after... sorry...
however... tried to get the NVPerfHUD...
but seem to work only with DX9...
my engine is a DX7... I will seek round the net...
Dunno where to lok for PIX instead..

Tnx Again Mate

[R]ed

This topic is closed to new replies.

Advertisement