[SlimDX] Draw time different between same complexity meshes..

Started by
3 comments, last by feal87 15 years ago
Hi all, I'm drawing 3 meshes (24 vertices the first, 288 vertices the second, 24 vertices the third) one after another with DrawIndexedInstanced/DrawIndexedPrimitives with DirectX9 and DirectX10. (Please note that the 3 meshes are drawed in the same identical way) Why am i getting less than 0,50 ms (tested with Stopwatch in c# on the single line DrawIndexedPrimitives/DrawIndexedInstanced) for each mesh in DirectX9, but in DirectX10 i get First Mesh) 6,10 ms (1 instances) Second Mesh) 0,49 ms (1 instances) Third Mesh) 0,04 ms (120 instances) Why the first mesh, only 24 vertices takes all this time to render? (it has only 1 instance though...) (Please note that the meshes are all OPTIMIZED with the related function (even thought i use raw vertexbuffer/indexbuffer to draw)) Any clue? (All the vertexbuffer are created with DYNAMIC as usage) [Edited by - feal87 on April 20, 2009 4:12:31 PM]
Advertisement
it seems that the time that the draw take differs depending on the order of the draw...
Am i doing the misuration wrongly? I thought the StopWatch was the best way to measure performance in c#...or maybe the order of drawing to impact on performance? (but why on DirectX9 it doesn't matter?)

Second Mesh) 5,936 ms (1 instances)
First Mesh) 0,4984 ms (1 instances)
Third Mesh) 0,0448 ms (120 instances)

Third Mesh) 0,0527 ms (120 instances)
Second Mesh) 1,4405 ms (1 instances)
First Mesh) 0,4512 ms (1 instances)

Second Mesh) 0,4483 ms (1 instances)
Third Mesh) 0,0453 ms (120 instances)
First Mesh) 1,4546 ms (1 instances)

I really don't know...
Read me.
SlimDX | Ventspace Blog | Twitter | Diverse teams make better games. I am currently hiring capable C++ engine developers in Baltimore, MD.
I've read the whole document and i tried to do a profiling of the whole scene to avoid the command buffer.

The whole scene takes without the present (regardless of the order of drawing) :

0.58 ms on DirectX9
8,01 ms on DirectX10

with the SAME shader, same mesh, same method to draw.
Tried to remove the 3D Objects and got :

0,37 ms on DirectX9
0,40 ms on DirectX10

There has to be some problems...i'll try to investigate...
Could this be a Driver problem? My only DX10 enabled video card is the Intel X3100 integrated. I've tried with pix to check the time spent on

Draw*
DrawPrimitive
DrawIndexedPrimitive

In DX9 mode it gives all the time on DrawIndexedPrimitive (i'm drawing only them after all), in DX10 mode it gives only DrawPrimitive even thought i'm drawing ONLY indexed primitives...
Is this a normal behaviour for Pix in DX10?

Here's my draw code for DX10 :

device.InputAssembler.SetInputLayout(_layout);device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding[]                                           {                                               new VertexBufferBinding(_meshVertexBuffer, 56, 0),                                               new VertexBufferBinding(_instancesVertexBuffer, 52,0)                                          });device.InputAssembler.SetIndexBuffer(_meshIndexBuffer, SlimDX.DXGI.Format.R16_UInt, 0);device.InputAssembler.SetPrimitiveTopology(PrimitiveTopology.TriangleList);_pass.Apply();device.DrawIndexedInstanced(MeshToRender.IndexCount * 3, NPrimitives, 0, 0, 0);


Here's the draw code for DX9 :

device.VertexDeclaration = _layout;device.SetStreamSource(0, _meshVertexBuffer, 0, 56);device.SetStreamSourceFrequency(0, NPrimitives, StreamSource.IndexedData);device.SetStreamSource(1, _instancesVertexBuffer, 0, 52);device.SetStreamSourceFrequency(1, 1, StreamSource.InstanceData);device.Indices = _meshIndexBuffer;int passes = _shader.Shader.Begin();for (int pass = 0; pass < passes; pass++){     _shader.Shader.BeginPass(pass);     device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, MeshToRender.VertexCount, 0, MeshToRender.IndexCount);     _shader.Shader.EndPass();}_shader.Shader.End();device.ResetStreamSourceFrequency(0);device.ResetStreamSourceFrequency(1);


Can somebody with a DX10 card from Nvidia or ATI try with Pix and tell me if the DrawIndexedPrimitives counter is working for them in DX10?
Thanks!!!

EDIT : I've tried on a friend machine with a Nvidia Card, it seems that is an Intel Driver problem...because there the timing is the same between DirectX9 and DirectX10. Anyway i'll wait for clues from you...

[Edited by - feal87 on April 20, 2009 6:30:01 PM]

This topic is closed to new replies.

Advertisement