cl_image_format
-1.1() : OpenCL 1.1で削除
+1.1() : OpenCL 1.1で追加
イメージの形式を記述する構造体は次の通り定義されています。
typedef struct _cl_image_format { cl_channel_order image_channel_order; cl_channel_type image_channel_data_type } cl_image_format;
image_channel_order
は、チャンネル数とチャンネルの配置、つまりイメージ内に保存されるチャンネルのメモリ配置を指定します。有効な値は以下の通りです。
image_channel_order に指定できる列挙型値
| |
---|---|
CL_R, +1.1(CL_Rx,) CL_A | |
CL_INTENSITY | この形式は、チャンネルデータ型が CL_UNORM_INT8、CL_UNORM_INT16、CL_SNORM_INT8、CL_SNORM_INT16、CL_HALF_FLOAT、CL_FLOAT である時のみ使用できます。 |
CL_LUMINANCE | この形式は、チャンネルデータ型が CL_UNORM_INT8、CL_UNORM_INT16、CL_SNORM_INT8、CL_SNORM_INT16、CL_HALF_FLOAT、CL_FLOAT である時のみ使用できます。 |
CL_RG, +1.1(CL_RGx,) CL_RA | |
CL_RGB, +1.1(CL_RGBx) | この形式は、チャンネルデータ型が CL_UNORM_SHORT_565、CL_UNORM_SHORT_555、CL_UNORM_INT_101010 である時のみ使用できます。 |
CL_RGBA | |
CL_ARGB, CL_BGRA | この形式は、チャンネルデータ型が CL_UNORM_INT8、CL_SNORM_INT8、CL_SIGNED_INT8、CL_UNSIGNED_INT8 である時のみ使用できます。 |
image_channel_data_type
は、チャンネルのデータ型を指定します。サポートされている値は以下の通りです。image_channel_data_type
と image_channel_order
で定められる要素ごとのビット数は、2のべきでなければなりません。
画像チャンネルデータ型 | 解説 |
---|---|
CL_SNORM_INT8 | 各チャンネル要素は、正規化符号付8ビット整数値です。 |
CL_SNORM_INT16 | 各チャンネル要素は、正規化符号付16ビット整数値です。 |
CL_UNORM_INT8 | 各チャンネル要素は、正規化符号無8ビット整数値です。 |
CL_UNORM_INT16 | 各チャンネル要素は、正規化符号無16ビット整数値です。 |
CL_UNORM_SHORT_565 | 正規化5-6-5 3チャンネルRGBイメージです。チャンネル配置は、CL_RGB +1.1(もしくは CL_RGBx) でなければなりません。 |
CL_UNORM_SHORT_555 | 正規化x-5-5-5 4チャンネルxRGBイメージです。チャンネル配置は、CL_RGB +1.1(もしくは CL_RGBx) でなければなりません。 |
CL_UNORM_INT_101010 | 正規化x-10-10-10 4チャンネルxRGBイメージです。チャンネル配置は、CL_RGB +1.1(もしくは CL_RGBx) でなければなりません。 |
CL_SIGNED_INT8 | 各チャンネル要素は、非正規化符号付8ビット整数値です。 |
CL_SIGNED_INT16 | 各チャンネル要素は、非正規化符号付16ビット整数値です。 |
CL_SIGNED_INT32 | 各チャンネル要素は、非正規化符号付32ビット整数値です。 |
CL_UNSIGNED_INT8 | 各チャンネル要素は、非正規化符号無8ビット整数値です。 |
CL_UNSIGNED_INT16 | 各チャンネル要素は、非正規化符号無16ビット整数値です。 |
CL_UNSIGNED_INT32 | 各チャンネル要素は、非正規化符号無32ビット整数値です。 |
CL_HALF_FLOAT | 各チャンネル要素は、16ビット半精度浮動小数点値です。 |
CL_FLOAT | 各チャンネル要素は、単精度浮動小数点値です。 |
例えば、各チャンネルが正規化符号無8ビットのRGBAイメージを指定する時、image_channel_order = CL_RGBA
、image_channel_data_type = CL_UNORM_INT8
とします。このイメージ形式のメモリ配置は下図の通りです。
同様に、image_channel_order = CL_RGBA
、image_channel_data_type = CL_SIGNED_INT16
とすると、イメージ形式のメモリ配置は下図の通りになります。
image_channel_data_type
の値のうち、CL_UNORM_SHORT_565、CL_UNORM_SHORT_555、CL_UNORM_INT_101010 は特別なイメージ形式であり、各チャンネル要素が unsigned short もしくは unsigned int 型に詰められているものです。このような特別なイメージ形式では、最初のチャンネルがビットフィールド内の最上位ビットになるように詰められ、次のチャンネルは占有するビット領域が連続になるようにすぐ下のビット領域に詰められます。CL_UNORM_SHORT_565 では、R が15から11ビット、G が10から5ビット、B が4から0ビットに詰められます。CL_UNORM_SHORT_555 では、15ビット目は未定義となり、R が14から10ビット、G が9から5ビット、B が4から0ビットに詰められます。CL_UNORM_INT_101010 では、31から30ビットは未定義となり、R が29から20ビット、G が19から10ビット、B が9から0ビットに詰められます。
OpenCL実装は、image_channel_data_type
で指定されたビット数を最低限の精度として維持しなければなりません。image_channel_order
および image_channel_data_type
で指定されたイメージ形式をOpenCL実装がサポートしていないとき、clCreateImage2D、clCreateImage3D は NULL メモリオブジェクトを返します。
変更記録
脚注