Search Issue Tracker

Feature Request

Votes

62

Found in

2021.3.47f1

2022.3.55f1

6000.0.32f1

6000.1.0a9

6000.2.0a1

6000.3.0a1

Issue ID

UUM-91617

Regression

No

Graphics.RenderMeshIndirect does not issue multi-draw rendering commands when using a graphics API capable of multi-draw commands

-

How to reproduce:
1. Open the attached "IN-87308" project
2. Open the "SampleScene" and enter Play mode
3. Navigate to “Window > Analysis > Frame Debugger” and open the Frame Debugger window
4. Enable the Frame Debugger from the window
5. Navigate to “Camera.Render > Drawing > Render.OpaqueGeometry > RenderForwardOpaque.Render > RenderForward.RenderLoopJob” and expand it to reveal the “Draw Mesh” calls
6. Observe the amount of “Draw Mesh” calls inside the Frame Debugger

Expected result: Frame Debugger outputs one “Draw Mesh” call that combines all four of the vkCmdDrawIndexedIndirect calls
Actual result: Frame Debugger outputs four “Draw Mesh” calls

Reproducible in: 2021.3.47f1, 2022.3.55f1, 6000.0.32f1, 6000.1.0a9

Reproducible on: Windows 11
Not reproducible on: No other environments tested

Notes:

* Also reproducible in Player (while using a graphics debugger)
* Reproducible using both Vulkan and DirectX12

  1. Resolution Note:

    Multi Draw Indirect (MDI) is currently not supported. We fixed the documentation error to reflect this. The current recommendation is to simply submit multiple indirect draw commands instead.

    We are evaluating the feature request for MDI support. It is important to note that unless trying to batch a large number of draws, we would not expect any tangible performance gain with MDI.

    When rendering many instances, the currently recommended approach is using the Batch Renderder Group API instead: https://docs.unity3d.com/6000.1/Documentation/ScriptReference/Rendering.BatchRendererGroup.

Comments (14)

  1. BragBiscuitz

    Jul 25, 2025 13:50

    I'm by no means a big voice in the industry, but I second Manuel and everyone else's stance in this ticket and on the rare related posts in the forums. I'd also like to add a few facts on the matter:
    - Both MultiDraw and MultiDrawIndirect(/Count) exist in Vulkan despite doing away with some OpenGL features that weren't deemed useful (like the shader subrountines).
    - The Vulkan docs still mention that these can reduce overhead.
    - D3D12 has support for MDI in the form of ExecuteIndirect (D3D11 has vendor-specific extensions for it).
    - OpenGL/ES have supported MultiDraw since the fixed function days and the indirect version since 12-13 years.
    - The somewhat recent interview of an Intel Arc engineer on GamersNexus showed that they realized MultiDrawIndirect is actually useful and can give a significant improvement in performance (when hardware-supported (?), which is the case for all dGPU vendors since Battlemage. Probably check against Vulkan 1.2 for mobile). That's knowing that Arc GPUs were always meant to be designed around low-level APIs.

    Adding support for MDI doesn't cost much to Unity at this point, and a fallback to separate indirect calls in the render pipelines (not the rendering API) when the hardware doesn't support the feature should be trivial. The fact that Unity still doesn't support this is completely insane. A proper GPU-driven workflow should visibly increase the scalability of scenes and should decrease user responsibility for batching their assets, which can allow them to focus more on the artistic vision rather than doing the renderer's job.

    I feel I could speak for days about this. If this actually won't provide a benefit, I feel it'd be necessary to have an unlocked, official, lengthy, technical forum thread about why. This SHOULD be a major point in the roadmap alongside the GPU driven rendering path. PLEASE.

    PS: how many captchas do I need to go through while writing this???

  2. Manuel_H

    Jul 25, 2025 10:41

    The resolution note has now changed from "won't fix" to an actual answer, thank you for that. I'll just copy my answer from your bug reporting tool over here as well.

    --------------------------------------------------------------------------------------------------------------

    That is disappointing to hear. Even if brg highly optimizes its direct draw calls on the cpu side, you will never reach the performance potential of indirect gpu driven rendering with it. Since we do frustum culling on the gpu, we have to issue every single possible draw call for every mesh and lod in the scene, even though most of them will end up empty. So yes, we DO have a large number of draws that could be batched. MDI could not only batch these draw calls, but could even create them directly on the gpu and cull the empty ones if implemented fully.

    I’m sure you’ve seen the votes and comments on the issue tracker and forum thread. My voice alone in this represents a medium sized studio that wants to switch to gpu driven rendering and already has developed the necessary systems, but the draw counts still stick out like a sore thumb. We were really banking on the functionality being fixed according to the docs, and not the docs being “corrected”.

    With all that being said, since this is now a feature request, I would appreciate it if you could 1) add the full MDI implementation to it, which includes draw call generation on the gpu, and 2) add it to your public roadmap so your customers can vote on it.

    Thank you.

  3. FromNorthProjekt

    Jul 24, 2025 21:27

    So really that is what you have to say? "There are no fixes planned for this Bug", are you fuck****ing kidding us ?

  4. Manuel_H

    Jul 24, 2025 09:07

    It is ridiculous that you are once again closing this with no comment, no explanation, no plans whatsoever, especially after so many of your customers have voted on it and voiced their need for MDI working correctly. Why even open the report back up after the first time? You actually cannot be serious.

  5. matt-stutzman

    Jul 16, 2025 20:18

    Really hoping this gets fixed soon...

  6. jccjccjccc

    Jul 16, 2025 20:03

    We really need MDI to draw large scenes. This feature not being properly implemented is negatively impacting us and our customers. Supporting a custom render api is expensive and difficult to maintain. Hope this is implemented soon.

  7. aboeck

    Jul 16, 2025 11:09

    Come on guys.. we need a solution for this, please!

  8. jribijed6

    Jun 01, 2025 23:34

    I am also in need of this feature as it could allow me to optimize my instance indirect foliage system. Currently by having to "emulate" all the commands instead of dispatching real commands. This not only causes all my vertex and index buffers to be redundantly rebound, but also breaks the GPU's ability to parallelize rendering vertex shaders of multiple command arg elements. A shame that this is implemented for the hybrid entities renderer (or what it looks like when viewing Radeon AMD profiler) and it isn't exposed to the user. Pls fix

  9. kostarev_vadim

    May 16, 2025 16:18

    In my case on an Android device this causes the frame rate to drop from 60 fps to 20 and it took me a few days to figure out what it was.

  10. jonjak94_unity

    May 08, 2025 17:26

    Any update on this?? our team is literally counting on this, also why SV_DrawID semantic s not provided ? it is easy to simulate and fix, i mean common unity this has been used by many games for a decade.

Add comment

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.