Name NV_bindless_multi_draw_indirect_count Name Strings GL_NV_bindless_multi_draw_indirect_count Contact Christoph Kubisch, NVIDIA (ckubisch 'at' nvidia.com) Contributors Piers Daniell, NVIDIA Status DRAFT SPECIFICATION Version Last Modified Date: July 6, 2015 Revision: 3 Number OpenGL Extension #456 Dependencies NV_bindless_multi_draw_indirect is required. ARB_indirect_parameters is required. The extension is written against the OpenGL 4.3 Specification, Core Profile. Overview This extension adds the possibility to define the number of drawcalls within a multi-draw-indirect call from the GPU, as provided by ARB_indirect_parameters, for the functions added in NV_bindless_multi_draw_indirect. New Procedures and Functions void MultiDrawArraysIndirectBindlessCountNV(enum mode, const void *indirect, intptr drawCount, sizei maxDrawCount, sizei stride, int vertexBufferCount); void MultiDrawElementsIndirectBindlessCountNV(enum mode, enum type, const void *indirect, intptr drawCount, sizei maxDrawCount, sizei stride, int vertexBufferCount); New Tokens None. Additions to Chapter 10 of the OpenGL 4.3 (Core) Specification (OpenGL Operation) Additions to Section 10.5, "Drawing Commands Using Vertex Arrays" After the description of MultiDrawArraysIndirectBindlessNV and before the introduction of DrawElementsOneInstance, insert the following on p.311: The command void MultiDrawArraysIndirectBindlessCountNV(enum mode, const void *indirect, intptr drawCount, sizei maxDrawCount, sizei stride, int vertexBufferCount); behaves similarly to MultiDrawArraysIndirectBindlessNV, except that defines an offset (in bytes) into the buffer object bound to the PARAMETER_BUFFER_ARB binding point at which a single typed value is stored, which contains the draw count. specifies the maximum number of draws that are expected to be stored in the buffer, and as in ARB_indirect_parameters the buffer must be sized accordingly. If the value stored at into the buffer is greater than , an implementation may stop processing draws after parameter sets. must be a multiple of four, otherwiseINVALID_VALUE error will be generated must be positive, otherwise an INVALID_VALUE error will be generated. After the description of MultiDrawElementsIndirectBindlessNV and before the introduction of MultiDrawElementsBaseVertex, insert the following on p.316: The command void MultiDrawElementsIndirectBindlessCountNV(enum mode, enum type, const void *indirect, intptr drawCount, sizei maxDrawCount, sizei stride, int vertexBufferCount); behaves similarly to MultiDrawElementsIndirectBindlessNV, except that defines an offset (in bytes) into the buffer object bound to the PARAMETER_BUFFER_ARB binding point at which a single typed value is stored, which contains the draw count. specifies the maximum number of draws that are expected to be stored in the buffer, and as in ARB_indirect_parameters the buffer must be sized accordingly. If the value stored at into the buffer is greater than , an implementation may stop processing draws after parameter sets. must be a multiple of four, otherwise INVALID_VALUE error will be generated must be positive, otherwise an INVALID_VALUE error will be generated. Modifications to Section 10.3.10 (p. 305) "Indirect Commands in Buffer Objects" Modify both instances of "DrawArraysIndirect, DrawElementsIndirect, MultiDrawArraysIndirect and MultiDrawElementsIndirect" on p. 305 to read "DrawArraysIndirect, DrawElementsIndirect, MultiDrawArraysIndirect, MultiDrawArraysIndirectARB, MultiDrawElementsIndirect, MultiDrawElementsIndirectCountARB, MultiDrawArraysIndirectBindlessNV, MultiDrawArraysIndirectBindlessCountNV, MultiDrawElementsIndirectBindlessNV and MultiDrawElementsIndirectBindlessCountNV". Additions to the AGL/GLX/WGL Specifications None. GLX Protocol None. Errors INVALID_OPERATION is generated by MultiDrawArraysIndirectBindlessCountNV or MultiDrawElementsIndirectBindlessCountNV if no buffer is bound to the PARAMETER_BUFFER_ARB or DRAW_INDIRECT_BUFFER binding point. INVALID_VALUE is generated by MultiDrawArraysIndirectBindlessCountNV or MultiDrawElementsIndirectBindlessCountNV if is not aligned to found basic machine units. INVALID_VALUE is generated by MultiDrawArraysIndirectBindlessCountNV or MultiDrawElementsIndirectBindlessCountNV if is not positive. INVALID_OPERATION is generated by MultiDrawArraysIndirectBindlessCountNV or MultiDrawElementsIndirectBindlessCountNV if reading a typed value from the buffer bound to the PARAMETER_BUFFER_ARB target at the offset specified by would result in an out-of-bounds access. New State None. New Implementation Dependent State None. Issues Revision History Rev. Date Author Changes ---- -------- -------- ----------------------------------------- 3 07/06/2015 ckubisch stress that indirect buffer must be able to store commands 2 06/24/2013 ckubisch Sync to ARB_indirect_parameters 1 06/14/2013 ckubisch Initial draft