Difference between revisions of "GLAPI/glDispatchComputeIndirect"

From OpenGL.org
Jump to: navigation, search
(Bot: Adding better formatting.)
m (Description)
(One intermediate revision by the same user not shown)
Line 9: Line 9:
== Function Definition ==
== Function Definition ==
   void '''glDispatchCompute'''(GLintptr {{param|indirect}});
   void '''glDispatchComputeIndirect'''(GLintptr {{param|indirect}});
; indirect
; indirect
Line 33: Line 33:
     cmd = (const DispatchIndirectCommand  *)indirect;
     cmd = (const DispatchIndirectCommand  *)indirect;
     glDispatchComputeIndirect(cmd->num_groups_x, cmd->num_groups_y, cmd->num_groups_z);
     glDispatchComputeIndirect(cmd->num_groups_x, cmd->num_groups_y, cmd->num_groups_z);

Latest revision as of 03:38, 17 August 2012

Core in version 4.5
Core since version 4.3
Core ARB extension ARB_compute_shader

glDispatchComputeIndirect: launch one or more compute work groups using parameters stored in a buffer

Function Definition

 void glDispatchComputeIndirect(GLintptr indirect​);
The offset into the buffer object currently bound to the GL_DISPATCH_INDIRECT_BUFFER buffer target at which the dispatch parameters are stored.


glDispatchComputeIndirect launches one or more compute work groups using parameters stored in the buffer object currently bound to the GL_DISPATCH_INDIRECT_BUFFER target. Each work group is processed by the active program object for the compute shader stage. While the individual shader invocations within a work group are executed as a unit, work groups are executed completely independently and in unspecified order. indirect​ contains the offset into the data store of the buffer object bound to the GL_DISPATCH_INDIRECT_BUFFER target at which the parameters are stored.

The parameters addressed by indirect​ are packed a structure, which takes the form (in C):

    typedef  struct {
        uint  num_groups_x;
        uint  num_groups_y;
        uint  num_groups_z;
    } DispatchIndirectCommand;

A call to glDispatchComputeIndirect is equivalent, assuming no errors are generated, to:

    cmd = (const DispatchIndirectCommand  *)indirect;
    glDispatchComputeIndirect(cmd->num_groups_x, cmd->num_groups_y, cmd->num_groups_z);

Unlike glDispatchCompute, no error is generated if any of the num_groups_x​, num_groups_y​ or num_groups_z​ members of the DispatchIndirectCommand​ is larger than the value of GL_MAX_COMPUTE_WORK_GROUP_COUNT for the corresponding dimension. In such circumstances, behavior is undefined and may lead to application termination.


GL_INVALID_OPERATION is generated if there is no active program for the compute shader stage.

GL_INVALID_VALUE is generated if indirect​ is less than zero or not a multiple of four.

GL_INVALID_OPERATION is generated if no buffer is bound to the GL_DISPATCH_INDIRECT_BUFFER target or if the command would source data beyond the end of the buffer object's data store.

Associated Gets


See Also



Copyright © 2012 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. http://opencontent.org/openpub/.