| 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 <drawCount> |
| defines an offset (in bytes) into the buffer object bound to the |
| PARAMETER_BUFFER_ARB binding point at which a single <sizei> typed value |
| is stored, which contains the draw count. <maxDrawCount> 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 <drawCount> into the buffer is greater than |
| <maxDrawCount>, an implementation may stop processing draws after |
| <maxDrawCount> parameter sets. |
| |
| <drawCount> must be a multiple of four, otherwiseINVALID_VALUE error will |
| be generated |
| |
| <maxDrawCount> 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 |
| <drawCount> defines an offset (in bytes) into the buffer object bound |
| to the PARAMETER_BUFFER_ARB binding point at which a single <sizei> typed |
| value is stored, which contains the draw count. <maxDrawCount> 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 <drawCount> into the buffer is greater than |
| <maxDrawCount>, an implementation may stop processing draws after |
| <maxDrawCount> parameter sets. |
| |
| <drawCount> must be a multiple of four, otherwise INVALID_VALUE error will |
| be generated |
| |
| <maxDrawCount> 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 <drawCount> is not aligned |
| to found basic machine units. |
| |
| INVALID_VALUE is generated by MultiDrawArraysIndirectBindlessCountNV or |
| MultiDrawElementsIndirectBindlessCountNV if <maxDrawCount> is not positive. |
| |
| INVALID_OPERATION is generated by MultiDrawArraysIndirectBindlessCountNV or |
| MultiDrawElementsIndirectBindlessCountNV if reading a <sizei> typed value |
| from the buffer bound to the PARAMETER_BUFFER_ARB target at the offset |
| specified by <drawCount> 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 <maxDrawCount> commands |
| 2 06/24/2013 ckubisch Sync to ARB_indirect_parameters |
| 1 06/14/2013 ckubisch Initial draft |