CL_IMAGE_FORMAT(3clc)
πΈ NAME πΈ
okay so this is CL_IMAGE_FORMAT(3clc) from the OpenCL Manual β and bestie, it's literally just the image format descriptor structure. that's it. that's the whole vibe. it's defined as:
typedef struct _cl_image_format {
cl_channel_order image_channel_order;
cl_channel_type
image_channel_data_type; }
cl_image_format;
she's small but she's iconic π
π MEMBERS π
β¨ image_channel_order β¨
this one says how many channels you've got and how they're laid out β like, the actual memory layout where the channels get stored in the image. the valid values are all listed below, no cap π
CL_R,CL_Rx, orCL_Aβ that's the format, bestie. the source doesn't tack on any extra note for these ones, so i'm not gonna make anything up. π«ΆCL_INTENSITYβ this format can only be used if channel data type =CL_UNORM_INT8,CL_UNORM_INT16,CL_SNORM_INT8,CL_SNORM_INT16,CL_HALF_FLOAT, orCL_FLOAT. anything else? nope, not allowed, periodt.CL_LUMINANCEβ same deal, this format can only be used if channel data type =CL_UNORM_INT8,CL_UNORM_INT16,CL_SNORM_INT8,CL_SNORM_INT16,CL_HALF_FLOAT, orCL_FLOAT. don't try it with anything else πCL_RG,CL_RGx, orCL_RAβ again, that's just the format name. no extra notes attached to these in the source. πCL_RGBorCL_RGBxβ this format can only be used if channel data type =CL_UNORM_SHORT_565,CL_UNORM_SHORT_555orCL_UNORM_INT101010. three options, that's the whole list, fr fr.CL_RGBAβ format name, that's it, no extra commentary. πCL_ARGB,CL_BGRAβ this format can only be used if channel data type =CL_UNORM_INT8,CL_SNORM_INT8,CL_SIGNED_INT8orCL_UNSIGNED_INT8. four types, no more, i don't make the rules (well, the spec does) β¨
π¦ image_channel_data_type π¦
and this member describes the size of the channel data type. important caveat incoming: the number of bits per element, which is determined by image_channel_data_type and image_channel_order together, must be a power of two. that's not a suggestion, that's the law of the land π
here's every supported value, no skips, no cuts:
CL_SNORM_INT8β each channel component is a normalized signed 8-bit integer value.CL_SNORM_INT16β each channel component is a normalized signed 16-bit integer value.CL_UNORM_INT8β each channel component is a normalized unsigned 8-bit integer value.CL_UNORM_INT16β each channel component is a normalized unsigned 16-bit integer value.CL_UNORM_SHORT_565β represents a normalized 5-6-5 3-channel RGB image. the channel order must beCL_RGBorCL_RGBx. non-negotiable bestie.CL_UNORM_SHORT_555β represents a normalized x-5-5-5 4-channel xRGB image. the channel order must beCL_RGBorCL_RGBx.CL_UNORM_INT_101010β represents a normalized x-10-10-10 4-channel xRGB image. the channel order must beCL_RGBorCL_RGBx.CL_SIGNED_INT8β each channel component is an unnormalized signed 8-bit integer value.CL_SIGNED_INT16β each channel component is an unnormalized signed 16-bit integer value.CL_SIGNED_INT32β each channel component is an unnormalized signed 32-bit integer value.CL_UNSIGNED_INT8β each channel component is an unnormalized unsigned 8-bit integer value.CL_UNSIGNED_INT16β each channel component is an unnormalized unsigned 16-bit integer value.CL_UNSIGNED_INT32β each channel component is an unnormalized unsigned 32-bit integer value.CL_HALF_FLOATβ each channel component is a 16-bit half-float value.CL_FLOATβ each channel component is a single precision floating-point value.
watch out for the sneaky naming, bestie β the channel-order list spells itCL_UNORM_INT101010while the data-type list spells itCL_UNORM_INT_101010. that's not me being sloppy, that's exactly how the source has it. copy-paste carefully. π
and that's every single member value, all 15 data types and all the channel orders, laid out with love π
β¨ DESCRIPTION β¨
okay so say you wanna specify a normalized unsigned 8-bit / channel RGBA image, bestie? you literally do this:
image_channel_order = CL_RGBA
image_channel_data_type = CL_UNORM_INT8
and boom, that's the vibe π
now, image_channel_data_type values of CL_UNORM_SHORT_565, CL_UNORM_SHORT_555 and CL_UNORM_INT_101010 are special cases of packed image formats where the channels of each element are packed into a single unsigned short or unsigned int. for these special packed image formats, the channels are normally packed with the first channel in the most significant bits of the bitfield, and successive channels occupying progressively less significant locations. it's giving bit-budgeting, fr fr π§
CL_UNORM_SHORT_565β R is in bits15:11, G is in bits10:5and B is in bits4:0πCL_UNORM_SHORT_555β bit15is undefined, R is in bits14:10, G in bits9:5and B in bits4:0πCL_UNORM_INT_101010β bits31:30are undefined, R is in bits29:20, G in bits19:10and B in bits9:0π
OpenCL implementations must maintain the minimum precision specified by the number of bits in image_channel_data_type. no shortcuts, no cap.
if the image format specified byimage_channel_order, andimage_channel_data_typecannot be supported by the OpenCL implementation, then the call toclCreateImage(3clc)will return aNULLmemory object. so likeβ¦ vibe check failed, bestie π
π SPECIFICATION π
OpenCL Specification[1] π«Ά
π SEE ALSO π
imageDescriptor(3clc)πΈEXTENSION(3clc)β¨clGetSupportedImageFormats(3clc)πclCreateImage(3clc)π¦
βοΈ AUTHORS βοΈ
The Khronos Group π
Β©οΈ COPYRIGHT Β©οΈ
Copyright Β© 2007-2010 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.
π NOTES π
- OpenCL Specification page 92, section 5.3.1.1 - Image Format Descriptor π
and that's the tea, bestie! this whole page was brought to you by The Khronos Group, dated 01/14/2021, and it's literally CL_IMAGE_FORMAT(3clc) πβ¨ periodt.
π¦ where this page comes from
- ubuntu jammy: opencl-1.2-man-doc 1.0~svn33624-5 Β· other
- ubuntu noble: opencl-1.2-man-doc 1.0~svn33624-5 Β· other
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms