2013
Khronos Group
glDispatchComputeIndirect
3G

# glDispatchComputeIndirect

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

## C Specification

                    void glDispatchComputeIndirect
                    GLintptr indirect

## Parameters

`indirect`

  The offset into the buffer object currently bound to the `GL_DISPATCH_INDIRECT_BUFFER` buffer target at which the dispatch parameters are stored.

## Description

`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.

## Errors

`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

glGet with argument `GL_MAX_COMPUTE_WORK_GROUP_COUNT`

## See Also

glDispatchCompute.

## Copyright

Copyright 2013 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/.