// Copyright 2021 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_EXT_multi_draw.txt[]

=== Other Extension Metadata

*Last Modified Date*::
    2021-05-19
*IP Status*::
    No known IP claims.
*Contributors*::
  - Mike Blumenkrantz, VALVE
  - Piers Daniell, NVIDIA
  - Jason Ekstrand, INTEL
  - Spencer Fricke, SAMSUNG
  - Ricardo Garcia, IGALIA
  - Jon Leech, KHRONOS
  - Stu Smith, AMD

=== Description

Processing multiple draw commands in sequence incurs measurable overhead
within drivers due to repeated state checks and updates during dispatch.
This extension enables passing the entire sequence of draws directly to the
driver in order to avoid any such overhead, using an array of
slink:VkMultiDrawInfoEXT or slink:VkMultiDrawIndexedInfoEXT structs with
fname:vkCmdDrawMultiEXT or fname:vkCmdDrawMultiIndexedEXT, respectively.
These functions could be used any time multiple draw commands are being
recorded without any state changes between them in order to maximize
performance.

include::{generated}/interfaces/VK_EXT_multi_draw.txt[]

=== New or Modified Built-In Variables

  * (modified)code:DrawIndex

=== Version History

  * Revision 1, 2021-01-20 (Mike Blumenkrantz)
    - Initial version
