Struct ocl::ImageBuilder [] [src]

pub struct ImageBuilder {
    // some fields omitted
}

A builder for Image.

Methods

impl ImageBuilder
[src]

fn new() -> ImageBuilder

Returns a new ImageBuilder with very basic defaults.

Defaults

Flags: notest ocl::MEM_READ_WRITE

Image Format: notest ocl::ImageFormat { channel_order: ocl::ImageChannelOrder::Rgba, channel_data_type: ocl::ImageChannelDataType::SnormInt8, }

Descriptor (stores everything else - width, height, pitch, etc.): notest ImageDescriptor::new(MemObjectType::Image1d, 0, 0, 0, 0, 0, 0, None)

Reference

See the [official SDK documentation] for more information.

Some descriptions here are adapted from various SDK docs.

fn build(&self, queue: &Queue) -> OclResult<Image>

Builds with no host side image data memory specified and returns a new Image.

fn build_with_data<T>(&self, queue: &Queue, image_data: &[T]) -> OclResult<Image>

Builds with the host side image data specified by image_data and returns a new Image.

Useful with the ocl::MEM_COPY_HOST_PTR flag for initializing device memory by copying the contents of image_data.

Also used with the ocl::MEM_USE_HOST_PTR and ocl::ALLOC_HOST_PTR flags. See the official SDK docs for more info.

fn channel_order<'a>(&'a mut self, order: ImageChannelOrder) -> &'a mut ImageBuilder

fn channel_data_type<'a>(&'a mut self, data_type: ImageChannelDataType) -> &'a mut ImageBuilder

fn image_type<'a>(&'a mut self, image_type: MemObjectType) -> &'a mut ImageBuilder

Sets the type of image (technically the type of memory buffer).

Describes the image type and must be either Image1d, Image1dBuffer, Image1dArray, Image2d, Image2dArray, or Image3d.

fn dims<'a>(&'a mut self, dims: &SimpleDims) -> &'a mut ImageBuilder

The width, height, and depth of an image or image array:

Some notes adapted from SDK docs:

Width

The width of the image in pixels. For a 2D image and image array, the image width must be ≤ DeviceInfo::Image2dMaxWidth. For a 3D image, the image width must be ≤ DeviceInfo::Image3dMaxWidth. For a 1D image buffer, the image width must be ≤ DeviceInfo::ImageMaxBufferSize. For a 1D image and 1D image array, the image width must be ≤ DeviceInfo::Image2dMaxWidth.

Height

The height of the image in pixels. This is only used if the image is a 2D, 3D or 2D image array. For a 2D image or image array, the image height must be ≤ DeviceInfo::Image2dMaxHeight. For a 3D image, the image height must be ≤ DeviceInfo::Image3dMaxHeight.

Depth

image_depth The depth of the image in pixels. This is only used if the image is a 3D image and must be a value ≥ 1 and ≤ DeviceInfo::Image3dMaxDepth.

Examples

  • To set the dimensions of a 2d image use: SimpleDims::Two(width, height).
  • To set the dimensions of a 2d image array use: SimpleDims::Three(width, height, array_length).
  • To set the dimensions of a 3d image use: SimpleDims::Three(width, height, depth).

fn array_size<'a>(&'a mut self, array_size: usize) -> &'a mut ImageBuilder

Image array size.

The number of images in the image array. This is only used if the image is a 1D or 2D image array. The values for image_array_size, if specified, must be a value ≥ 1 and ≤ DeviceInfo::ImageMaxArraySize.

Note that reading and writing 2D image arrays from a kernel with image_array_size = 1 may be lower performance than 2D images.

fn row_pitch<'a>(&'a mut self, row_pitch: usize) -> &'a mut ImageBuilder

Image row pitch.

The scan-line pitch in bytes. This must be 0 if host data is None and can be either 0 or ≥ image_width * size of element in bytes if host data is not None. If host data is not None and image_row_pitch = 0, image_row_pitch is calculated as image_width * size of element in bytes. If image_row_pitch is not 0, it must be a multiple of the image element size in bytes.

fn slc_pitch<'a>(&'a mut self, slc_pitch: usize) -> &'a mut ImageBuilder

Image slice pitch.

The size in bytes of each 2D slice in the 3D image or the size in bytes of each image in a 1D or 2D image array. This must be 0 if host data is None. If host data is not None, image_slice_pitch can be either 0 or ≥ image_row_pitch * image_height for a 2D image array or 3D image and can be either 0 or ≥ image_row_pitch for a 1D image array. If host data is not None and image_slice_pitch = 0, image_slice_pitch is calculated as image_row_pitch * image_height for a 2D image array or 3D image and image_row_pitch for a 1D image array. If image_slice_pitch is not 0, it must be a multiple of the image_row_pitch.

fn buffer_sync<'a>(&'a mut self, buffer: MemCore) -> &'a mut ImageBuilder

Buffer synchronization.

Refers to a valid buffer memory object if image_type is MemObjectType::Image1dBuffer. Otherwise it must be None (default). For a 1D image buffer object, the image pixels are taken from the buffer object's data store. When the contents of a buffer object's data store are modified, those changes are reflected in the contents of the 1D image buffer object and vice-versa at corresponding sychronization points. The image_width * size of element in bytes must be ≤ size of buffer object data store.

fn flags<'a>(&'a mut self, flags: MemFlags) -> &'a mut ImageBuilder

Sets the flags for the memory to be created.

Setting this overwrites any previously set flags. To combine them, use the bitwise or operator (|), for example:

ocl::Image::builder().flags(ocl::MEM_WRITE_ONLY | ocl::MEM_COPY_HOST_PTR)...

Defaults to core::MEM_READ_WRITE if not set.

fn image_format<'a>(&'a mut self, image_format: ImageFormat) -> &'a mut ImageBuilder

Specifies the image pixel format.

If unspecified, defaults to:

ImageFormat {
   channel_order: ImageChannelOrder::Rgba,
   channel_data_type: ImageChannelDataType::SnormInt8,
}

unsafe fn image_desc<'a>(&'a mut self, image_desc: ImageDescriptor) -> &'a mut ImageBuilder

Specifies the image descriptor containing a number of important settings.

If unspecified (not recommended), defaults to:

ImageDescriptor {
    image_type: MemObjectType::Image1d,
    image_width: 0,
    image_height: 0,
    image_depth: 0,
    image_array_size: 0,
    image_row_pitch: 0,
    image_slice_pitch: 0,
    num_mip_levels: 0,
    num_samples: 0,
    buffer: None,
}

If you are unsure, just set the first four by using ImageDescriptor::new. Ex.:

ocl::Image::builder()
   .image_desc(ocl::ImageDescriptor::new(
      ocl::MemObjectType::Image2d, 1280, 800, 1))
   ...
   ...
   .build()

Setting this overwrites any previously set type, dimensions, array size, pitch, etc.