New Vulkan example: Indirect drawing ?>

New Vulkan example: Indirect drawing

I have added another example to my open source C++ Vulkan examples. The new one is about indirect drawing (including multi draw if supported). Contrary to their non-direct counterparts, the indirect drawing commands in Vulkan take their draw calls from a buffer that is ideally stored in device local memory. So instead of running single draw commands that get their index base, index count and instancing numbers passed by the host upon getting called, the indirect commands are backed by a buffer that stores an arbitrary number of draw commands. The example renders a huge number of plants with different geometries only using one single draw call. All plants geometries are stored in one buffer, and each indirect draw command uses different index offsets and also does instancing. indirectdraw This technique is the based for several GPU-based functions that have traditionally been handled by the CPU. As the draw commands are stored in a buffer that the GPU has access too, it's now possible to have a compute shader manipulate the draw commands that are issued so the GPU can take on tasks like culling or draw command generation in general.  

4 thoughts on “New Vulkan example: Indirect drawing

  1. Hi,
    Vegetation sieht gut aus mit GeForce 840M, aber das text-overlay flackert nur kurz beim Start auf und bleibt dann weg.

    Codeanalyse ergibt nur 3 Warnungen:

    C6386 Pufferüberlauf beim Schreiben nach “moduleCreateInfo.pCode”: die schreibbare Größe beträgt “moduleCreateInfo.codeSize” Byte, es können jedoch “8” Byte geschrieben werden. indirectdraw c:\users\stefan\downloads\vulkan-master\base\vulkantools.cpp 361 Aktiv

    C6001 Nicht initialisierter Speicher “shaderStages” wird verwendet. indirectdraw c:\users\stefan\downloads\vulkan-master\indirectdraw\indirectdraw.cpp 490 Aktiv

    C28251 Inkonsistente Anmerkung für “WinMain”: diese Instanz verfügt über keine Anmerkungen. Siehe c:\program files (x86)\windows kits\8.1\include\um\winbase.h(905). indirectdraw c:\users\stefan\downloads\vulkan-master\indirectdraw\indirectdraw.cpp 679 Aktiv Inkonsistente Anmerkung für die Funktion: diese Instanz weist einen Fehler auf.

    1. Danke für die Info. Der Text-Overlay funktioniert hier auf NVIDIA, AMD und Intel, aber bei NV und AMD aktuellere GPUs.

      Es gibt aber noch einen Bugf im Textoverlay bzgl. des Alignments, evtl. liegt es daran. Schaue ich mir bei Gelegenheit mal an.

      1. Problem hat sich erledigt mit dem Treiber R372.70
        Overlay ist nun flimmerfrei.

        Ich kontrolliere es dann bei Verfügbarkeit nochmal mit einem R375 Treiber (laut Datenbank fummelt NVIDIA schon damit rum).

Leave a Reply

Your email address will not be published. Required fields are marked *