Like ERP said - it can go a lot higher on a console (~2000 batches per frame was something you could see in PS2 games already).mikiex said:If sub 2000 batches is considered ok for PC and PC has more of an overhead, does this mean that consoles should achive a similar figure, with maybe weaker CPUs as they are to a modern PC?
The question, as stated, does not make sense, and you will not get answers that make sense.
The cost of a drawcall is by itself is meaningless; it's how much state you set between drawcalls that makes the drawcalls themselves expensive. On 360, the drawcall itself can become almost free (comparable to the cost of a cache miss). You can certainly sustain 10k drawcalls ("batches") per frame in real-world situations.
I remember someone stating (here in the forums) that there's around 2000 draw calls per frame in the PS3 version of Crysis 2. Might be a bit old info, but it seems that 2k-10k draw calls per frame is a pretty good ballpark estimate for current generation 30 fps console games.I wouldnt say it doesn't make sense because I'm not looking for absolute answer, all these answers are very useful to me. If 2k to 10k is feasable @ 30fps in realworld is the answer that is a good.
If they used a full core (33.3ms on Xbox and PS3), that would be a more than 9000 draw calls per frame (assuming the scene would be fully CPU bound).FWIW, there is a breakdown of a scene capture from our recent Dead Space 2 interview. There are some draw call numbers along with what they cover.
You can use command buffers (command lists) on PC as well. DirectX 11 allows you to record command buffers and reuse them later to save draw calls. Draw calls aren't that costly anymore either. All the GPU render/sampler state objects are now created beforehands and validated on creation time instead of the use time. And constants are stored in GPU memory (constant buffers) instead of transferred over bus to the GPU every frame. With DX11 you can push 50k draw calls per frame on a recent graphics card (using a single thread). Of course this in on i7 (a modern OOO CPU), so I agree that DX11 is still inefficient compared to consoles, but the situation isn't as bad as it was some years ago (DX9 + XP driver model).On the consoles you can also prepackage display lists and just submit those, that literally involves inserting a "call" into the FIFO.
The better question is why is it so expensive on PC, I believe a lot of the issue is the stupid reorganizing of commands the PC drivers try to do to remove stupid usage patterns. There is minimally one extra copy in a PC driver, but there is no ring transition in the API call so I don't see why we should see the overhead that we do.