
<!-- table 5.1 - List of supported cl_queue_property values and description -->

<informaltable frame="all"><tgroup cols="2" align="left" colsep="1" rowsep="1">
    <colspec colname="col1" colnum="1" />
    <colspec colname="col2" colnum="2" />
    <thead>
        <row>
        <entry>Queue Properties</entry>
        <entry>Property Value</entry>
        <entry>Description</entry>
        </row>
    </thead>
    <tbody>
        <row>
            <entry><constant>CL_QUEUE_PROPERTIES</constant></entry>
            <entry><type>cl_command_queue_-
properties</type></entry>
            <entry><para>This is a bitfield and can be set to a 
                    combination of the following values:</para>

                    <para><constant>CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE</constant> - 
                    Determines whether the 
                    commands queued in the command-queue 
                    are executed in-order or out-of-order. If 
                    set, the commands in the command-queue 
                    are executed out-of-order. Otherwise, 
                    commands are executed in-order.</para>

                    <para><constant>CL_QUEUE_PROFILING_ENABLE</constant> -
                    Enable or disable profiling of commands in 
                    the command-queue. If set, the profiling of 
                    commands is enabled. Otherwise profiling 
                    of commands is disabled.</para>

                    <para><constant>CL_QUEUE_ON_DEVICE</constant> - Indicates that this 
                    is a device queue. If <constant>CL_QUEUE_ON_DEVICE</constant>
                    is set, <constant>CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE</constant>
                    must also be set. Only out-of-order device queues are supported.</para>

                    <para><constant>CL_QUEUE_ON_DEVICE_DEFAULT</constant> -
                    indicates that this is the default device 
                    queue. This can only be used with 
                    <constant>CL_QUEUE_ON_DEVICE</constant>.
                    The application must create the default device queue 
                    if any kernels containing calls to get_default_queue are
                    enqueued. There can only be one default device 
                    queue for each device within a context.
                    clCreateCommandQueueWithProperties with 
                    <constant>CL_QUEUE_PROPERTIES</constant> set to 
                    <constant>CL_QUEUE_ON_DEVICE</constant> |
                    <constant>CL_QUEUE_ON_DEVICE_DEFAULT</constant> 
                    will return the default device queue that has 
                    already been created and
                    increment its retain count by 1.
                    </para>

                    <para>If <constant>CL_QUEUE_PROPERTIES</constant> is not 
                    specified an in-order host command queue
                    is created for the specified device.</para>

            </entry>
        </row>

        <row>
            <entry><constant>CL_QUEUE_SIZE</constant></entry>
            <entry><type>cl_uint</type></entry>
            <entry><para>Specifies the size of the device queue in 
                    bytes.</para>

                    <para>This can only be specified if 
                    <constant>CL_QUEUE_ON_DEVICE</constant> is set in 
                    <constant>CL_QUEUE_PROPERTIES</constant>. This must be a 
                    value &le; <constant>CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE</constant>.</para>

                    <para>For best performance, this should be &le; 
                    <constant>CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE</constant>.</para>

                    <para>If <constant>CL_QUEUE_SIZE</constant> is not specified, the 
                    device queue is created with 
                    <constant>CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE</constant>
                    as the size of the queue.</para></entry>
        </row>

        <row>
            <entry><constant>CL_QUEUE_PRIORITY_KHR</constant></entry>
            <entry><type>cl_queue_priority_khr</type></entry>
            <entry>
                <para>
                    Applies only if the
                    <citerefentry><refentrytitle>cl_khr_priority_hints</refentrytitle></citerefentry>
                    extension is enabled.
                </para>

                <para>
                    Can be one of
                    <constant>CL_QUEUE_PRIORITY_HIGH_KHR</constant>,
                    <constant>CL_QUEUE_PRIORITY_MED_KHR</constant>, or
                    <constant>CL_QUEUE_PRIORITY_LOW_KHR</constant>.
                </para>

                <para>
                    If <constant>CL_QUEUE_PRIORITY_KHR</constant>
                    is not specified then the default priority is
                    <constant>CL_QUEUE_PRIORITY_MED_KHR</constant>.
                </para>
            </entry>
        </row>

        <row>
            <entry><constant>CL_QUEUE_THROTTLE_KHR</constant></entry>
            <entry><type></type></entry>
            <entry>
                <para>
                    Applies only if the
                    <citerefentry><refentrytitle>cl_khr_throttle_hints</refentrytitle></citerefentry>
                    extension is enabled.
                </para>

                <para>
                    Can be one of
                    <constant>CL_QUEUE_THROTTLE_HIGH_KHR</constant>,
                    <constant>CL_QUEUE_THROTTLE_MED_KHR</constant>,
                    <constant>CL_QUEUE_THROTTLE_LOW_KHR</constant>
                </para>

                <para>
                    If <constant>CL_QUEUE_THROTTLE_KHR</constant>
                    is not specified then the default priority is
                    <constant>CL_QUEUE_THROTTLE_MED_KHR</constant>.
                </para>
            </entry>
        </row>
    </tbody>

    </tgroup>
</informaltable>

<!-- 4-Nov-2015, API ver 2.1 rev 19; Ext ver 2.1 rev 10; C lang ver 2.0 rev 30 -->

