| <?xml version="1.0" encoding="UTF-8"?> |
| <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook MathML Module V1.1b1//EN" |
| "http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd"> |
| |
| <refentry> |
| <refentryinfo> |
| <keywordset><keyword>restrictions</keyword></keywordset> |
| </refentryinfo> |
| <refmeta> |
| <refentrytitle>restrictions</refentrytitle> |
| <refmiscinfo> |
| <copyright> |
| <year>2007-2013</year> |
| <holder>The Khronos Group Inc. |
| Permission is hereby granted, free of charge, to any person obtaining a |
| copy of this software and/or associated documentation files (the |
| "Materials"), to deal in the Materials without restriction, including |
| without limitation the rights to use, copy, modify, merge, publish, |
| distribute, sublicense, and/or sell copies of the Materials, and to |
| permit persons to whom the Materials are furnished to do so, subject to |
| the condition that this copyright notice and permission notice shall be included |
| in all copies or substantial portions of the Materials.</holder> |
| </copyright> |
| </refmiscinfo> |
| <manvolnum>3</manvolnum> |
| </refmeta> |
| |
| <!-- ================================ SYNOPSIS --> |
| |
| <refnamediv id="restrictionsref"> |
| <refname>Restrictions</refname> |
| <refpurpose> </refpurpose> |
| </refnamediv> |
| |
| <refsect1 id="restrictions"><title></title> |
| <itemizedlist mark="disc"> |
| <listitem> |
| |
| <!-- RESTRICTION a --> |
| |
| <para>The use of pointers is somewhat restricted. The following rules apply:</para> |
| |
| <itemizedlist mark="opencircle"> |
| <listitem> |
| <para> |
| Arguments to kernel |
| functions declared in a program that are pointers must be declared with the |
| <citerefentry href="global"><refentrytitle>__global</refentrytitle></citerefentry>, |
| <citerefentry href="constant"><refentrytitle>__constant</refentrytitle></citerefentry>, or |
| <citerefentry href="local"><refentrytitle>__local</refentrytitle></citerefentry> |
| qualifier. |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para> |
| A pointer declared with the |
| <citerefentry href="constant"><refentrytitle>__constant</refentrytitle></citerefentry> |
| qualifier can only be assigned to a pointer declared with the __constant qualifier. |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para>Pointers to functions are not allowed.</para> |
| </listitem> |
| |
| </itemizedlist> |
| </listitem> |
| |
| <!-- RESTRICTION b --> |
| |
| <listitem> |
| <para> |
| An image type ( |
| <citerefentry href="otherDataTypes"><refentrytitle>image2d_t</refentrytitle></citerefentry>, |
| <citerefentry href="otherDataTypes"><refentrytitle>image3d_t</refentrytitle></citerefentry>, |
| <citerefentry href="otherDataTypes"><refentrytitle>image2d_array_t</refentrytitle></citerefentry>, |
| <citerefentry href="otherDataTypes"><refentrytitle>image1d_t</refentrytitle></citerefentry>, |
| <citerefentry href="otherDataTypes"><refentrytitle>image1d_buffer_t</refentrytitle></citerefentry>, or |
| <citerefentry href="otherDataTypes"><refentrytitle>image1d_array_t</refentrytitle></citerefentry>) |
| can only be used as the type of a function argument. An image function |
| argument cannot be modified. Elements of an image can only be accessed |
| using the <citerefentry href="imageFunctions"><refentrytitle>Built-in Image |
| Functions</refentrytitle></citerefentry>. |
| </para> |
| |
| <para> |
| An image type cannot be used to declare a variable, a structure or |
| union field, an array of images, a pointer to an image, or the return |
| type of a function. An image type cannot be used with the |
| <citerefentry href="global"><refentrytitle>__global</refentrytitle></citerefentry>, |
| <citerefentry href="private"><refentrytitle>__private</refentrytitle></citerefentry>, |
| <citerefentry href="local"><refentrytitle>__local</refentrytitle></citerefentry> and |
| <citerefentry href="constant"><refentrytitle>__constant</refentrytitle></citerefentry> |
| address space qualifiers. |
| </para> |
| |
| <para> |
| The sampler type |
| (<citerefentry><refentrytitle>sampler_t</refentrytitle></citerefentry>) can only be |
| used as the type of a function argument or a variable declared in the program scope |
| or the outermost scope of a kernel function. The behavior of a sampler variable |
| declared in a non-outermost scope of a kernel function is implementation-defined. A |
| sampler argument or variable cannot be modified. |
| </para> |
| |
| <para> |
| The sampler type cannot be used to declare a structure or union field, an array of |
| samplers, a pointer to a sampler, or the return type of a function. The sampler type |
| cannot be used with the |
| <citerefentry href="local"><refentrytitle>__local</refentrytitle></citerefentry> and |
| <citerefentry href="global"><refentrytitle>__global</refentrytitle></citerefentry> |
| address space qualifiers. |
| </para> |
| </listitem> |
| |
| <!-- RESTRICTION c --> |
| |
| <listitem> |
| <para>Bit-fields struct members are currently not supported.</para> |
| </listitem> |
| |
| <!-- RESTRICTION d - removed --> |
| <!-- RESTRICTION d - added again in ver 2.1 --> |
| |
| <listitem> |
| <para>Variable length arrays and structures with |
| flexible (or unsized) arrays are not supported.</para> |
| </listitem> |
| |
| <!-- RESTRICTION e --> |
| |
| <listitem> |
| <para>Variadic macros and functions with the exception of |
| <citerefentry href="printfFunction"><refentrytitle>printf</refentrytitle></citerefentry> and |
| <citerefentry><refentrytitle>enqueue_kernel</refentrytitle></citerefentry> |
| are not supported.</para> |
| </listitem> |
| |
| <!-- RESTRICTION f --> |
| |
| <listitem> |
| <para> |
| The library functions defined in the C99 standard headers <code>assert.h</code>, |
| <code>ctype.h</code>, <code>complex.h</code>, <code>errno.h</code>, |
| <code>fenv.h</code>, <code>float.h</code>, <code>inttypes.h</code>, |
| <code>limits.h</code>, <code>locale.h</code>, <code>setjmp.h</code>, |
| <code>signal.h</code>, <code>stdarg.h</code>, <code>stdio.h</code>, |
| <code>stdlib.h</code>, <code>string.h</code>, <code>tgmath.h</code>, |
| <code>time.h</code>, <code>wchar.h</code>, and <code>wctype.h</code> are not |
| available and cannot be included by a program. |
| </para> |
| </listitem> |
| |
| <!-- RESTRICTION g --> |
| |
| <listitem> |
| <para> |
| The <code>auto</code> and <code>register</code> |
| storage-class specifiers are not supported. |
| </para> |
| </listitem> |
| |
| <!-- RESTRICTION h deleted with rev 13 of the 1.2 specification --> |
| |
| <!-- RESTRICTION i --> |
| |
| <listitem> |
| <para>Recursion is not supported.</para> |
| </listitem> |
| |
| <!-- RESTRICTION j --> |
| |
| <listitem> |
| <para> |
| The return type of a kernel function must be <type>void</type>. |
| </para> |
| </listitem> |
| |
| <!-- RESTRICTION k --> |
| |
| <listitem> |
| <para> |
| Arguments to kernel functions in a program cannot be declared with the built-in |
| scalar types <type>bool</type>, <type>half</type>, <type>size_t</type>, |
| <type>ptrdiff_t</type>, <type>intptr_t</type>, and <type>uintptr_t</type>, or |
| a struct and/or union that contain fields declared to be one of these built-in |
| scalar types. The size in bytes of these types except <type>half</type> are |
| implementation-defined and in addition can also be different for the OpenCL device |
| and the host processor making it difficult to allocate buffer objects to be passed |
| as arguments to a kernel declared as pointer to these types. <type>half</type> is |
| not supported as <type>half</type> can be used as a storage format only (unless the |
| <citerefentry><refentrytitle>cl_khr_fp16</refentrytitle></citerefentry> extension is |
| supported) and is not a data type on which floating-point arithmetic can be performed. |
| </para> |
| </listitem> |
| |
| <!-- RESTRICTION l --> |
| |
| <listitem> |
| <para>Whether or not irreducible control flow is illegal is implementation defined.</para> |
| </listitem> |
| |
| <!-- RESTRICTION m --> |
| <!-- Restriction m is removed --> |
| |
| <!-- RESTRICTION n --> |
| |
| <listitem> |
| <para> |
| The type qualifiers <code>const</code>, <code>restrict</code> |
| and <code>volatile</code> as defined by the C99 |
| specification are supported. These qualifiers cannot be used with |
| <citerefentry href="otherDataTypes"><refentrytitle>image2d_t</refentrytitle></citerefentry>, |
| <citerefentry href="otherDataTypes"><refentrytitle>image3d_t</refentrytitle></citerefentry>, |
| <citerefentry href="otherDataTypes"><refentrytitle>image2d_array_t</refentrytitle></citerefentry>, |
| <citerefentry href="otherDataTypes"><refentrytitle>image2d_depth_t</refentrytitle></citerefentry>, |
| <citerefentry href="otherDataTypes"><refentrytitle>image2d_array_depth_t</refentrytitle></citerefentry>, |
| <citerefentry href="otherDataTypes"><refentrytitle>image1d_t</refentrytitle></citerefentry>, |
| <citerefentry href="otherDataTypes"><refentrytitle>image1d_buffer_t</refentrytitle></citerefentry> and |
| <citerefentry href="otherDataTypes"><refentrytitle>image1d_array_t</refentrytitle></citerefentry> |
| types. Types other than pointer types shall not use the |
| <code>restrict</code> qualifier. |
| </para> |
| </listitem> |
| |
| <!-- RESTRICTION o --> |
| |
| <listitem> |
| <para> |
| The event type |
| (<citerefentry href="otherDataTypes"><refentrytitle>event_t</refentrytitle></citerefentry>) |
| cannot be used as the type of a kernel function argument. |
| The event type cannot be used to declare a program scope variable. The event type |
| cannot be used to declare a structure or union field. The event type cannot be used with the |
| <citerefentry href="local"><refentrytitle>__local</refentrytitle></citerefentry>, |
| <citerefentry href="constant"><refentrytitle>__constant</refentrytitle></citerefentry> and |
| <citerefentry href="global"><refentrytitle>__global</refentrytitle></citerefentry> |
| address space qualifiers. |
| </para> |
| </listitem> |
| |
| <!-- RESTRICTION p --> |
| |
| <listitem> |
| <para> |
| The <type>clk_event_t</type>, <type>ndrange_t</type> and |
| <type>reserve_id_t</type> types cannot be used as arguments to |
| kernel functions that get enqueued from the host. The |
| <type>clk_event_t</type> and <type>reserve_id_t</type> types |
| cannot be declared in program scope. |
| </para> |
| </listitem> |
| |
| <!-- RESTRICTION q--> |
| |
| <listitem> |
| <para> |
| The behavior of applying the <code>sizeof</code> operator |
| to the <type>queue_t</type>, <type>clk_event_t</type>, |
| <type>ndrange_t</type> and <type>reserve_id_t</type> |
| types is implementation-defined. |
| </para> |
| </listitem> |
| |
| <!-- RESTRICTION r --> |
| |
| <listitem> |
| <para> |
| Kernels enqueued by the host must continue to have |
| their arguments that are a pointer to |
| a type declared to point to a named address space. |
| </para> |
| </listitem> |
| |
| <!-- RESTRICTION s --> |
| |
| <listitem> |
| <para> |
| A function in an OpenCL program cannot be called <code>main</code>. |
| </para> |
| </listitem> |
| |
| </itemizedlist> |
| </refsect1> |
| |
| <!-- ================================ SPECIFICATION --> |
| <!-- Set the "uri" attribute in the <olink /> element to the "named destination" for the PDF page |
| --> |
| <refsect1 id="specification"><title>Specification</title> |
| <para><imageobject><imagedata fileref="pdficon_small1.gif" format="gif" /></imageobject> |
| <olink uri="restrictions">OpenCL Specification</olink> |
| </para> |
| </refsect1> |
| |
| <!-- ================================ ALSO SEE --> |
| <refsect1 id="seealso"><title>Also see</title> |
| <para> |
| <citerefentry href="imageFunctions"><refentrytitle>Image Functions</refentrytitle></citerefentry>, |
| <citerefentry href="functionQualifiers"><refentrytitle>Function Qualifiers</refentrytitle></citerefentry>, |
| <citerefentry href="qualifiers"><refentrytitle>Qualifiers</refentrytitle></citerefentry> |
| </para> |
| </refsect1> |
| |
| <!-- ============================== COPYRIGHT --> |
| <!-- Content included from copyright.inc.xsl --> |
| |
| <refsect3 id="Copyright"><title></title> |
| <imageobject> |
| <imagedata fileref="KhronosLogo.jpg" format="jpg" /> |
| </imageobject> |
| <para /> |
| </refsect3> |
| |
| <!-- 28-Oct-2015, C lang ver 2.0 rev 30 --> |
| </refentry> |
| |