Jump to content
  • Advertisement
Sign in to follow this  
_void_

Number of draw calls per command list

This topic is 682 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi guys!

 

Are there any recommendations on the number of draw/dispatch calls that you would/could record per one command list?

I am working on light propagation volume algorithm where you need repeatedly to run the same shader in ping-pong mode for input/output results.

I am wondering if I could record all the passes in one command list :-)

 

Thanks

 

Share this post


Link to post
Share on other sites
Advertisement
It'll vary by hardware/driver, but NVIDIA has some guidelines for their current gen stuff:

https://developer.nvidia.com/dx12-dos-and-donts

In particular:

Don’t record everything or big scene parts in just very few command lists
This limits your ability to fully utilize all your CPU cores
Also building a few large command lists means you’ll potentially find it harder to keep the GPU from going idle


Basically, if you're just making one big command list, that means you're obviously not multi-threading your renderer intelligently. Remember, a naive DX11 renderer will typically outperform a naive DX12 renderer. :)

Share this post


Link to post
Share on other sites
In my limited testing so far, I needed to have ~500 draw calls per command list to get any benefit out of multi-threading. Less than that, and the reward of multi-threading was cancelled out by the overheads involved per command list :o

Share this post


Link to post
Share on other sites

In my limited testing so far, I needed to have ~500 draw calls per command list to get any benefit out of multi-threading.

You've mentioned this number before... you mind if I ask how many command lists per executecommandlists you are using? 

Share this post


Link to post
Share on other sites

In my limited testing so far, I needed to have ~500 draw calls per command list to get any benefit out of multi-threading. Less than that, and the reward of multi-threading was cancelled out by the overheads involved per command list

Wow this is some great information!

Thank you. 

Share this post


Link to post
Share on other sites

Besides everyone else's advice page 7 of Practical_DX12_Programming_Model_and_Hardware_Capabilities.pdf has guidelines.  It's aim for 30 command lists with a maximum of 10 executecommandlists calls per frame.  I also read somewhere (forgot where but it was a DX12 presentation) a minimum of 12 to 20 draw calls per command list.

 

edit - the document I mention if google comes up with GDC16_gthomas_adunn_Practical_DX12.pdf instead... don't remember where I downloaded my document originally, maybe GDC website?

Edited by Infinisearch

Share this post


Link to post
Share on other sites
On a side, you do not need as many draw calls as before with dx12. Bindless resources allow to merge a lot of them into giants ExecuteIndirect, collapsing all materials, basically one call per PSO and you are done :)

Share this post


Link to post
Share on other sites

Guys, thank you for the input! Really appreciative.

 

On a side, you do not need as many draw calls as before with dx12. Bindless resources allow to merge a lot of them into giants ExecuteIndirect, collapsing all materials, basically one call per PSO and you are done :)

 

Hmmm, this somehow leaked out of my mind. Should work with my case! 

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!