diff --git a/runtime/hsa-runtime/core/inc/amd_hsa_loader.hpp b/runtime/hsa-runtime/core/inc/amd_hsa_loader.hpp
index 8e2dc4ed14..8cd2acc1d5 100644
--- a/runtime/hsa-runtime/core/inc/amd_hsa_loader.hpp
+++ b/runtime/hsa-runtime/core/inc/amd_hsa_loader.hpp
@@ -126,7 +126,7 @@ public:
hsa_agent_t agent,
hsa_access_permission_t image_permission,
const hsa_ext_image_descriptor_t *image_descriptor,
- void *image_data,
+ const void *image_data,
hsa_ext_image_t *image_handle) = 0;
virtual hsa_status_t ImageDestroy(
diff --git a/runtime/hsa-runtime/core/inc/amd_loader_context.hpp b/runtime/hsa-runtime/core/inc/amd_loader_context.hpp
index dc41926c5f..27830ff369 100644
--- a/runtime/hsa-runtime/core/inc/amd_loader_context.hpp
+++ b/runtime/hsa-runtime/core/inc/amd_loader_context.hpp
@@ -73,7 +73,7 @@ public:
hsa_status_t ImageCreate(hsa_agent_t agent, hsa_access_permission_t image_permission,
const hsa_ext_image_descriptor_t* image_descriptor,
- void* image_data, hsa_ext_image_t* image_handle) override;
+ const void* image_data, hsa_ext_image_t* image_handle) override;
hsa_status_t ImageDestroy(hsa_agent_t agent, hsa_ext_image_t image_handle) override;
diff --git a/runtime/hsa-runtime/core/runtime/amd_loader_context.cpp b/runtime/hsa-runtime/core/runtime/amd_loader_context.cpp
index 12639530b7..b61f187f6c 100644
--- a/runtime/hsa-runtime/core/runtime/amd_loader_context.cpp
+++ b/runtime/hsa-runtime/core/runtime/amd_loader_context.cpp
@@ -561,7 +561,7 @@ bool LoaderContext::ImageExtensionSupported() {
hsa_status_t LoaderContext::ImageCreate(
hsa_agent_t agent, hsa_access_permission_t image_permission,
- const hsa_ext_image_descriptor_t *image_descriptor, void *image_data,
+ const hsa_ext_image_descriptor_t *image_descriptor, const void *image_data,
hsa_ext_image_t *image_handle) {
assert(agent.handle);
assert(image_descriptor);
diff --git a/runtime/hsa-runtime/core/runtime/hsa_ext_interface.cpp b/runtime/hsa-runtime/core/runtime/hsa_ext_interface.cpp
index 978fcc8b70..75ecb0b8f4 100644
--- a/runtime/hsa-runtime/core/runtime/hsa_ext_interface.cpp
+++ b/runtime/hsa-runtime/core/runtime/hsa_ext_interface.cpp
@@ -528,7 +528,7 @@ hsa_status_t hsa_ext_image_data_get_info(
hsa_status_t hsa_ext_image_create(
hsa_agent_t agent, const hsa_ext_image_descriptor_t* image_descriptor,
- void* image_data, hsa_access_permission_t access_permission,
+ const void* image_data, hsa_access_permission_t access_permission,
hsa_ext_image_t* image) {
return core::Runtime::runtime_singleton_->extensions_.image_api
.hsa_ext_image_create_fn(agent, image_descriptor, image_data,
diff --git a/runtime/hsa-runtime/inc/hsa_ext_image.h b/runtime/hsa-runtime/inc/hsa_ext_image.h
index 78fcc29057..999a32367b 100644
--- a/runtime/hsa-runtime/inc/hsa_ext_image.h
+++ b/runtime/hsa-runtime/inc/hsa_ext_image.h
@@ -61,135 +61,24 @@ extern "C" {
*/
/**
- * @brief Enumeration constants added to ::hsa_status_t by this extension.
- *
- * @remark Additions to hsa_status_t
- */
-enum {
- /**
- * Image format is not supported.
- */
- HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED = 0x3000,
- /**
- * Image size is not supported.
- */
- HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED = 0x3001,
- /**
- * Image pitch is not supported or invalid.
- */
- HSA_EXT_STATUS_ERROR_IMAGE_PITCH_UNSUPPORTED = 0x3002,
- /**
- * Sampler descriptor is not supported or invalid.
- */
- HSA_EXT_STATUS_ERROR_SAMPLER_DESCRIPTOR_UNSUPPORTED = 0x3003
-};
-
-/**
- * @brief Enumeration constants added to ::hsa_agent_info_t by this
- * extension.
- *
- * @remark Additions to hsa_agent_info_t
- */
-enum {
- /**
- * Maximum number of elements in 1D images. Must be at least 16384. The type
- * of this attribute is size_t.
- */
- HSA_EXT_AGENT_INFO_IMAGE_1D_MAX_ELEMENTS = 0x3000,
- /**
- * Maximum number of elements in 1DA images. Must be at least 16384. The type
- * of this attribute is size_t.
- */
- HSA_EXT_AGENT_INFO_IMAGE_1DA_MAX_ELEMENTS = 0x3001,
- /**
- * Maximum number of elements in 1DB images. Must be at least 65536. The type
- * of this attribute is size_t.
- */
- HSA_EXT_AGENT_INFO_IMAGE_1DB_MAX_ELEMENTS = 0x3002,
- /**
- * Maximum dimensions (width, height) of 2D images, in image elements. The X
- * and Y maximums must be at least 16384. The type of this attribute is
- * size_t[2].
- */
- HSA_EXT_AGENT_INFO_IMAGE_2D_MAX_ELEMENTS = 0x3003,
- /**
- * Maximum dimensions (width, height) of 2DA images, in image elements. The X
- * and Y maximums must be at least 16384. The type of this attribute is
- * size_t[2].
- */
- HSA_EXT_AGENT_INFO_IMAGE_2DA_MAX_ELEMENTS = 0x3004,
- /**
- * Maximum dimensions (width, height) of 2DDEPTH images, in image
- * elements. The X and Y maximums must be at least 16384. The type of this
- * attribute is size_t[2].
- */
- HSA_EXT_AGENT_INFO_IMAGE_2DDEPTH_MAX_ELEMENTS = 0x3005,
- /**
- * Maximum dimensions (width, height) of 2DADEPTH images, in image
- * elements. The X and Y maximums must be at least 16384. The type of this
- * attribute is size_t[2].
- */
- HSA_EXT_AGENT_INFO_IMAGE_2DADEPTH_MAX_ELEMENTS = 0x3006,
- /**
- * Maximum dimensions (width, height, depth) of 3D images, in image
- * elements. The maximum along any dimension must be at least 2048. The type
- * of this attribute is size_t[3].
- */
- HSA_EXT_AGENT_INFO_IMAGE_3D_MAX_ELEMENTS = 0x3007,
- /**
- * Maximum number of image layers in a image array. Must be at least 2048. The
- * type of this attribute is size_t.
- */
- HSA_EXT_AGENT_INFO_IMAGE_ARRAY_MAX_LAYERS = 0x3008,
- /**
- * Maximum number of read-only image handles that can be created for an agent at any one
- * time. Must be at least 128. The type of this attribute is size_t.
- */
- HSA_EXT_AGENT_INFO_MAX_IMAGE_RD_HANDLES = 0x3009,
- /**
- * Maximum number of write-only and read-write image handles (combined) that
- * can be created for an agent at any one time. Must be at least 64. The type of this
- * attribute is size_t.
- */
- HSA_EXT_AGENT_INFO_MAX_IMAGE_RORW_HANDLES = 0x300A,
- /**
- * Maximum number of sampler handlers that can be created for an agent at any one
- * time. Must be at least 16. The type of this attribute is size_t.
- */
- HSA_EXT_AGENT_INFO_MAX_SAMPLER_HANDLERS = 0x300B,
- /**
- * Image pitch alignment. The agent only supports linear image data
- * layouts with a row pitch that is a multiple of this value. Must be
- * a power of 2. The type of this attribute is size_t.
- */
- HSA_EXT_AGENT_INFO_IMAGE_LINEAR_ROW_PITCH_ALIGNMENT = 0x300C
-};
-
-/**
- * @brief Image handle, populated by ::hsa_ext_image_create or
- * ::hsa_ext_image_create_with_layout. Image
+ * @brief Image handle, populated by ::hsa_ext_image_create. Images
* handles are only unique within an agent, not across agents.
*
*/
typedef struct hsa_ext_image_s {
/**
- * Opaque handle. For a given agent, two handles reference the same object of
- * the enclosing type if and only if they are equal.
+ * Opaque handle.
*/
- uint64_t handle;
+ uint64_t handle;
} hsa_ext_image_t;
/**
- * @brief Geometry associated with the image. This specifies the
- * number of image dimensions and whether the image is an image
- * array. See the Image Geometry section in the HSA
- * Programming Reference Manual for definitions on each
- * geometry. The enumeration values match the BRIG type @p
- * hsa_ext_brig_image_geometry_t.
+ * @brief Geometry associated with the HSA image (image dimensions allowed in
+ * HSA). The enumeration values match the BRIG type BrigImageGeometry.
*/
typedef enum {
-/**
+ /**
* One-dimensional image addressed by width coordinate.
*/
HSA_EXT_IMAGE_GEOMETRY_1D = 0,
@@ -206,22 +95,18 @@ typedef enum {
/**
* Array of one-dimensional images with the same size and format. 1D arrays
- * are addressed by width and index coordinate.
+ * are addressed by index and width coordinate.
*/
HSA_EXT_IMAGE_GEOMETRY_1DA = 3,
/**
* Array of two-dimensional images with the same size and format. 2D arrays
- * are addressed by width, height, and index coordinates.
+ * are addressed by index and width and height coordinates.
*/
HSA_EXT_IMAGE_GEOMETRY_2DA = 4,
/**
- * One-dimensional image addressed by width coordinate. It has
- * specific restrictions compared to ::HSA_EXT_IMAGE_GEOMETRY_1D. An
- * image with an opaque image data layout will always use a linear
- * image data layout, and one with an explicit image data layout
- * must specify ::HSA_EXT_IMAGE_DATA_LAYOUT_LINEAR.
+ * One-dimensional image interpreted as a buffer with specific restrictions.
*/
HSA_EXT_IMAGE_GEOMETRY_1DB = 5,
@@ -231,215 +116,157 @@ typedef enum {
HSA_EXT_IMAGE_GEOMETRY_2DDEPTH = 6,
/**
- * Array of two-dimensional depth images with the same size and format. 2D
- * arrays are addressed by width, height, and index coordinates.
+ * Array of two-dimensional depth images with the same size and format. 2D
+ * arrays are addressed by index and width and height coordinates.
*/
HSA_EXT_IMAGE_GEOMETRY_2DADEPTH = 7
} hsa_ext_image_geometry_t;
/**
- * @brief Channel type associated with the elements of an image. See
- * the Channel Type section in the HSA Programming Reference
- * Manual for definitions on each channel type. The
- * enumeration values and definition match the BRIG type @p
- * hsa_ext_brig_image_channel_type_t.
+ * @brief Channel type associated with the elements of an image. See the Image
+ * section in the HSA Programming Reference Manual for definitions on each
+ * component type. The enumeration values match the BRIG type
+ * BrigImageChannelType.
*/
typedef enum {
- HSA_EXT_IMAGE_CHANNEL_TYPE_SNORM_INT8 = 0,
- HSA_EXT_IMAGE_CHANNEL_TYPE_SNORM_INT16 = 1,
- HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_INT8 = 2,
- HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_INT16 = 3,
- HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_INT24 = 4,
- HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_SHORT_555 = 5,
- HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_SHORT_565 = 6,
- HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_SHORT_101010 = 7,
- HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT8 = 8,
- HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT16 = 9,
- HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT32 = 10,
- HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT8 = 11,
- HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT16 = 12,
- HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT32 = 13,
- HSA_EXT_IMAGE_CHANNEL_TYPE_HALF_FLOAT = 14,
- HSA_EXT_IMAGE_CHANNEL_TYPE_FLOAT = 15
+ HSA_EXT_IMAGE_CHANNEL_TYPE_SNORM_INT8 = 0,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_SNORM_INT16 = 1,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_INT8 = 2,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_INT16 = 3,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_INT24 = 4,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_SHORT_555 = 5,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_SHORT_565 = 6,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_SHORT_101010 = 7,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT8 = 8,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT16 = 9,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT32 = 10,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT8 = 11,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT16 = 12,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT32 = 13,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_HALF_FLOAT = 14,
+ HSA_EXT_IMAGE_CHANNEL_TYPE_FLOAT = 15
} hsa_ext_image_channel_type_t;
-/**
- * @brief A fixed-size type used to represent ::hsa_ext_image_channel_type_t constants.
- */
-typedef uint32_t hsa_ext_image_channel_type32_t;
-
/**
*
- * @brief Channel order associated with the elements of an image. See
- * the Channel Order section in the HSA Programming Reference
- * Manual for definitions on each channel order. The
- * enumeration values match the BRIG type @p
- * hsa_ext_brig_image_channel_order_t.
+ * @brief Channel order associated with the elements of an image. See the
+ * Image section in the HSA Programming Reference Manual for definitions on each
+ * component order. The enumeration values match the BRIG type
+ * BrigImageChannelOrder.
*/
typedef enum {
- HSA_EXT_IMAGE_CHANNEL_ORDER_A = 0,
- HSA_EXT_IMAGE_CHANNEL_ORDER_R = 1,
- HSA_EXT_IMAGE_CHANNEL_ORDER_RX = 2,
- HSA_EXT_IMAGE_CHANNEL_ORDER_RG = 3,
- HSA_EXT_IMAGE_CHANNEL_ORDER_RGX = 4,
- HSA_EXT_IMAGE_CHANNEL_ORDER_RA = 5,
- HSA_EXT_IMAGE_CHANNEL_ORDER_RGB = 6,
- HSA_EXT_IMAGE_CHANNEL_ORDER_RGBX = 7,
- HSA_EXT_IMAGE_CHANNEL_ORDER_RGBA = 8,
- HSA_EXT_IMAGE_CHANNEL_ORDER_BGRA = 9,
- HSA_EXT_IMAGE_CHANNEL_ORDER_ARGB = 10,
- HSA_EXT_IMAGE_CHANNEL_ORDER_ABGR = 11,
- HSA_EXT_IMAGE_CHANNEL_ORDER_SRGB = 12,
- HSA_EXT_IMAGE_CHANNEL_ORDER_SRGBX = 13,
- HSA_EXT_IMAGE_CHANNEL_ORDER_SRGBA = 14,
- HSA_EXT_IMAGE_CHANNEL_ORDER_SBGRA = 15,
- HSA_EXT_IMAGE_CHANNEL_ORDER_INTENSITY = 16,
- HSA_EXT_IMAGE_CHANNEL_ORDER_LUMINANCE = 17,
- HSA_EXT_IMAGE_CHANNEL_ORDER_DEPTH = 18,
- HSA_EXT_IMAGE_CHANNEL_ORDER_DEPTH_STENCIL = 19
+ HSA_EXT_IMAGE_CHANNEL_ORDER_A = 0,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_R = 1,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_RX = 2,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_RG = 3,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_RGX = 4,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_RA = 5,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_RGB = 6,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_RGBX = 7,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_RGBA = 8,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_BGRA = 9,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_ARGB = 10,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_ABGR = 11,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_SRGB = 12,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_SRGBX = 13,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_SRGBA = 14,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_SBGRA = 15,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_INTENSITY = 16,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_LUMINANCE = 17,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_DEPTH = 18,
+ HSA_EXT_IMAGE_CHANNEL_ORDER_DEPTH_STENCIL = 19
} hsa_ext_image_channel_order_t;
-/**
- * @brief A fixed-size type used to represent ::hsa_ext_image_channel_order_t constants.
- */
-typedef uint32_t hsa_ext_image_channel_order32_t;
-
-
/**
* @brief Image format.
*/
typedef struct hsa_ext_image_format_s {
/**
- * Channel type.
- */
- hsa_ext_image_channel_type32_t channel_type;
+ * Channel type.
+ */
+ hsa_ext_image_channel_type_t channel_type;
- /**
- * Channel order.
- */
- hsa_ext_image_channel_order32_t channel_order;
+ /**
+ * Channel order.
+ */
+ hsa_ext_image_channel_order_t channel_order;
} hsa_ext_image_format_t;
/**
- * @brief Implementation independent image descriptor.
+ * @brief Implementation-independent image descriptor.
*/
typedef struct hsa_ext_image_descriptor_s {
- /**
- * Image geometry.
- */
- hsa_ext_image_geometry_t geometry;
- /**
- * Width of the image, in components.
- */
- size_t width;
- /**
- * Height of the image, in components. Only used if the geometry is
- * ::HSA_EXT_IMAGE_GEOMETRY_2D, ::HSA_EXT_IMAGE_GEOMETRY_3D,
- * HSA_EXT_IMAGE_GEOMETRY_2DA, HSA_EXT_IMAGE_GEOMETRY_2DDEPTH, or
- * HSA_EXT_IMAGE_GEOMETRY_2DADEPTH, otherwise must be 0.
- */
- size_t height;
- /**
- * Depth of the image, in components. Only used if the geometry is
- * ::HSA_EXT_IMAGE_GEOMETRY_3D, otherwise must be 0.
- */
- size_t depth;
- /**
- * Number of image layers in the image array. Only used if the geometry is
- * ::HSA_EXT_IMAGE_GEOMETRY_1DA, ::HSA_EXT_IMAGE_GEOMETRY_2DA, or
- * HSA_EXT_IMAGE_GEOMETRY_2DADEPTH, otherwise must be 0.
- */
- size_t array_size;
- /**
- * Image format.
- */
- hsa_ext_image_format_t format;
+ /**
+ * Image geometry.
+ */
+ hsa_ext_image_geometry_t geometry;
+ /**
+ * Width of the image, in components.
+ */
+ size_t width;
+ /**
+ * Height of the image, in components. Only defined if the geometry is 2D or
+ * higher.
+ */
+ size_t height;
+ /**
+ * Depth of the image, in components. Only defined if @a geometry is
+ * ::HSA_EXT_IMAGE_GEOMETRY_3D. A depth of 0 is same as a depth of 1.
+ */
+ size_t depth;
+ /**
+ * Number of images in the image array. Only defined if @a geometry is
+ * ::HSA_EXT_IMAGE_GEOMETRY_1DA, ::HSA_EXT_IMAGE_GEOMETRY_2DA, or
+ * HSA_EXT_IMAGE_GEOMETRY_2DADEPTH.
+ */
+ size_t array_size;
+ /**
+ * Image format.
+ */
+ hsa_ext_image_format_t format;
} hsa_ext_image_descriptor_t;
/**
* @brief Image capability.
*/
-typedef enum {
- /**
- * Images of this geometry, format, and layout are not supported by
- * the agent.
- */
- HSA_EXT_IMAGE_CAPABILITY_NOT_SUPPORTED = 0x0,
- /**
- * Read-only images of this geometry, format, and layout are
- * supported by the agent.
- */
- HSA_EXT_IMAGE_CAPABILITY_READ_ONLY = 0x1,
- /**
- * Write-only images of this geometry, format, and layout are
- * supported by the agent.
- */
- HSA_EXT_IMAGE_CAPABILITY_WRITE_ONLY = 0x2,
- /**
- * Read-write images of this geometry, format, and layout are
- * supported by the agent.
- */
- HSA_EXT_IMAGE_CAPABILITY_READ_WRITE = 0x4,
- /**
- * @deprecated Images of this geometry, format, and layout can be accessed from
- * read-modify-write atomic operations in the agent.
- */
- HSA_EXT_IMAGE_CAPABILITY_READ_MODIFY_WRITE = 0x8,
- /**
- * Images of this geometry, format, and layout are guaranteed to
- * have a consistent data layout regardless of how they are
- * accessed by the associated agent.
- */
- HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT = 0x10
+typedef enum {
+ /**
+ * Images of this geometry and format are not supported in the agent.
+ */
+ HSA_EXT_IMAGE_CAPABILITY_NOT_SUPPORTED = 0x0,
+ /**
+ * Read-only images of this geometry and format are supported by the
+ * agent.
+ */
+ HSA_EXT_IMAGE_CAPABILITY_READ_ONLY = 0x1,
+ /**
+ * Write-only images of this geometry and format are supported by the
+ * agent.
+ */
+ HSA_EXT_IMAGE_CAPABILITY_WRITE_ONLY = 0x2,
+ /**
+ * Read-write images of this geometry and format are supported by the
+ * agent.
+ */
+ HSA_EXT_IMAGE_CAPABILITY_READ_WRITE = 0x4,
+ /**
+ * Images of this geometry and format can be accessed from read-modify-write
+ * operations in the agent.
+ */
+ HSA_EXT_IMAGE_CAPABILITY_READ_MODIFY_WRITE = 0x8,
+ /**
+ * Images of this geometry and format are guaranteed to have a consistent
+ * data layout regardless of how they are accessed by the associated
+ * agent.
+ */
+ HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT = 0x10
} hsa_ext_image_capability_t;
-/**
- * @brief Image data layout.
- *
- * @details An image data layout denotes such aspects of image data
- * layout as tiling and organization of channels in memory. Some image
- * data layouts may only apply to specific image geometries, formats,
- * and access permissions. Different agents may support different
- * image layout identifiers, including vendor specific layouts. Note
- * that an agent may not support the same image data layout for
- * different access permissions to images with the same image
- * geometry, size, and format. If multiple agents support the same
- * image data layout then it is possible to use separate image handles
- * for each agent that references the same image data.
- */
-
-typedef enum {
- /**
- * An implementation specific opaque image data layout which can
- * vary depending on the agent, geometry, image format, image size,
- * and access permissions.
- */
- HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE = 0x0,
- /**
- * The image data layout is specified by the following rules in
- * ascending byte address order. For a 3D image, 2DA image array,
- * or 1DA image array, the image data is stored as a linear sequence
- * of adjacent 2D image slices, 2D images, or 1D images
- * respectively, spaced according to the slice pitch. Each 2D image
- * is stored as a linear sequence of adjacent image rows, spaced
- * according to the row pitch. Each 1D or 1DB image is stored as a
- * single image row. Each image row is stored as a linear sequence
- * of image elements. Each image element is stored as a linear
- * sequence of image components specified by the left to right
- * channel order definition. Each image component is stored using
- * the memory type specified by the channel type.
- *
- * The 1DB image geometry always uses the linear image data layout.
- */
- HSA_EXT_IMAGE_DATA_LAYOUT_LINEAR = 0x1
-} hsa_ext_image_data_layout_t;
-
/**
* @brief Retrieve the supported image capabilities for a given combination of
- * agent, geometry, and image format for an image created with an opaque image
- * data layout.
+ * agent, image format and geometry.
*
- * @param[in] agent Agent to be associated with the image handle.
+ * @param[in] agent Agent to be associated with the image.
*
* @param[in] geometry Geometry.
*
@@ -456,55 +283,18 @@ typedef enum {
*
* @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
*
- * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_format is
- * NULL, or @p capability_mask is NULL.
+ * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p geometry is not a valid image
+ * geometry value, @p image_format is NULL, or @p capability_mask is NULL.
*/
-hsa_status_t HSA_API hsa_ext_image_get_capability(
- hsa_agent_t agent,
- hsa_ext_image_geometry_t geometry,
- const hsa_ext_image_format_t *image_format,
- uint32_t *capability_mask);
+hsa_status_t HSA_API
+ hsa_ext_image_get_capability(hsa_agent_t agent,
+ hsa_ext_image_geometry_t geometry,
+ const hsa_ext_image_format_t *image_format,
+ uint32_t *capability_mask);
/**
- * @brief Retrieve the supported image capabilities for a given combination of
- * agent, geometry, image format, and image layout for an image created with
- * an explicit image data layout.
- *
- * @param[in] agent Agent to be associated with the image handle.
- *
- * @param[in] geometry Geometry.
- *
- * @param[in] image_format Pointer to an image format. Must not be NULL.
- *
- * @param[in] image_data_layout The image data layout.
- * It is invalid to use ::HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE; use
- * ::hsa_ext_image_get_capability instead.
- *
- * @param[out] capability_mask Pointer to a memory location where the HSA
- * runtime stores a bit-mask of supported image capability
- * (::hsa_ext_image_capability_t) values. Must not be NULL.
- *
- * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
- *
- * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
- * initialized.
- *
- * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
- *
- * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_format is
- * NULL, @p image_data_layout is ::HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE,
- * or @p capability_mask is NULL.
- */
-hsa_status_t HSA_API hsa_ext_image_get_capability_with_layout(
- hsa_agent_t agent,
- hsa_ext_image_geometry_t geometry,
- const hsa_ext_image_format_t *image_format,
- hsa_ext_image_data_layout_t image_data_layout,
- uint32_t *capability_mask);
-
-/**
- * @brief Agent specific image size and alignment requirements, populated by
- * ::hsa_ext_image_data_get_info and ::hsa_ext_image_data_get_info_with_layout.
+ * @brief Agent-specific image size and alignment requirements, populated by
+ * ::hsa_ext_image_data_get_info.
*/
typedef struct hsa_ext_image_data_info_s {
/**
@@ -513,41 +303,32 @@ typedef struct hsa_ext_image_data_info_s {
size_t size;
/**
- * Image data alignment, in bytes. Must always be a power of 2.
+ * Image data alignment, in bytes.
*/
size_t alignment;
} hsa_ext_image_data_info_t;
/**
- * @brief Retrieve the image data requirements for a given combination of agent, image
- * descriptor, and access permission for an image created with an opaque image
- * data layout.
+ * @brief Retrieve the image data requirements for a given combination of image
+ * descriptor, access permission, and agent.
*
- * @details The optimal image data size and alignment requirements may
- * vary depending on the image attributes specified in @p
- * image_descriptor, the @p access_permission, and the @p agent. Also,
- * different implementations of the HSA runtime may return different
- * requirements for the same input values.
+ * @details The optimal image data size and alignment requirements may vary
+ * depending on the image attributes specified in @p image_descriptor. Also,
+ * different implementation of the HSA runtime may return different requirements
+ * for the same input values.
*
- * The implementation must return the same image data requirements for
- * different access permissions with matching image descriptors as long
- * as ::hsa_ext_image_get_capability reports
- * ::HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT. Image
- * descriptors match if they have the same values, with the exception
- * that s-form channel orders match the corresponding non-s-form
- * channel order and vice versa.
+ * The implementation must return the same image data requirements for different
+ * access permissions with exactly the same image descriptor as long as
+ * ::hsa_ext_image_get_capability reports
+ * ::HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT for the geometry
+ * and image format contained in the image descriptor.
*
- * @param[in] agent Agent to be associated with the image handle.
+ * @param[in] agent Agent to be associated with the image.
*
* @param[in] image_descriptor Pointer to an image descriptor. Must not be NULL.
*
- * @param[in] access_permission Access permission of the image when
- * accessed by @p agent. The access permission defines how the agent
- * is allowed to access the image and must match the corresponding
- * HSAIL image handle type. The @p agent must support the image format
- * specified in @p image_descriptor for the given @p
- * access_permission.
+ * @param[in] access_permission Image access mode for @a agent.
*
* @param[out] image_data_info Memory location where the runtime stores the
* size and alignment requirements. Must not be NULL.
@@ -559,242 +340,55 @@ typedef struct hsa_ext_image_data_info_s {
*
* @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
*
- * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED The @p
- * agent does not support the image format specified by @p
- * image_descriptor with the specified @p access_permission.
+ * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED The agent does
+ * not support the image format specified by the descriptor.
*
- * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED The agent
- * does not support the image dimensions specified by @p
- * image_descriptor with the specified @p access_permission.
+ * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED The agent does
+ * not support the image dimensions specified by the format descriptor.
*
* @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_descriptor is NULL, @p
* access_permission is not a valid access permission value, or @p
* image_data_info is NULL.
*/
hsa_status_t HSA_API hsa_ext_image_data_get_info(
- hsa_agent_t agent,
- const hsa_ext_image_descriptor_t *image_descriptor,
+ hsa_agent_t agent, const hsa_ext_image_descriptor_t *image_descriptor,
hsa_access_permission_t access_permission,
hsa_ext_image_data_info_t *image_data_info);
/**
- * @brief Retrieve the image data requirements for a given combination of
- * image descriptor, access permission, image data layout, image data row pitch,
- * and image data slice pitch for an image created with an explicit image
- * data layout.
+ * @brief Creates a agent-defined image handle from an
+ * implementation-independent image descriptor and a agent-specific image
+ * data.
*
- * @details The image data size and alignment requirements may vary
- * depending on the image attributes specified in @p image_descriptor,
- * the @p access_permission, and the image layout. However, different
- * implementations of the HSA runtime will return the same
- * requirements for the same input values.
- *
- * The implementation must return the same image data requirements for
- * different access permissions with matching image descriptors and
- * matching image layouts as long as ::hsa_ext_image_get_capability
- * reports
- * ::HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT. Image
- * descriptors match if they have the same values, with the exception
- * that s-form channel orders match the corresponding non-s-form
- * channel order and vice versa. Image layouts match if they are the
- * same image data layout and use the same image row and slice pitch
- * values.
- *
- * @param[in] image_descriptor Pointer to an image descriptor. Must not be NULL.
- *
- * @param[in] access_permission Access permission of the image when
- * accessed by an agent. The access permission defines how the agent
- * is allowed to access the image and must match the corresponding
- * HSAIL image handle type.
- *
- * @param[in] image_data_layout The image data layout to use.
- * It is invalid to use ::HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE; use
- * ::hsa_ext_image_data_get_info instead.
- *
- * @param[in] image_data_row_pitch The size in bytes for a single row
- * of the image in the image data. If 0 is specified then the default
- * row pitch value is used: image width * image element byte size.
- * The value used must be greater than or equal to the default row
- * pitch, and be a multiple of the image element byte size. For the
- * linear image layout it must also be a multiple of the image linear
- * row pitch alignment for the agents that will access the image data
- * using image instructions.
- *
- * @param[in] image_data_slice_pitch The size in bytes of a single
- * slice of a 3D image, or the size in bytes of each image layer in an
- * image array in the image data. If 0 is specified then the default
- * slice pitch value is used: row pitch * height if geometry is
- * ::HSA_EXT_IMAGE_GEOMETRY_3D, ::HSA_EXT_IMAGE_GEOMETRY_2DA, or
- * ::HSA_EXT_IMAGE_GEOMETRY_2DADEPTH; row pitch if geometry is
- * ::HSA_EXT_IMAGE_GEOMETRY_1DA; and 0 otherwise. The value used must
- * be 0 if the default slice pitch is 0, be greater than or equal to
- * the default slice pitch, and be a multiple of the row pitch.
- *
- * @param[out] image_data_info Memory location where the runtime stores the
- * size and alignment requirements. Must not be NULL.
- *
- * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
- *
- * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
- * initialized.
- *
- * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED The image
- * format specified by @p image_descriptor is not supported for the
- * @p access_permission and @p image_data_layout specified.
- *
- * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED The image
- * dimensions specified by @p image_descriptor are not supported for
- * the @p access_permission and @p image_data_layout specified.
- *
- * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_PITCH_UNSUPPORTED The row and
- * slice pitch specified by @p image_data_row_pitch and @p
- * image_data_slice_pitch are invalid or not supported.
- *
- * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_descriptor is
- * NULL, @p image_data_layout is ::HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE,
- * or @p image_data_info is NULL.
- */
-hsa_status_t HSA_API hsa_ext_image_data_get_info_with_layout(
- const hsa_ext_image_descriptor_t *image_descriptor,
- hsa_access_permission_t access_permission,
- hsa_ext_image_data_layout_t image_data_layout,
- size_t image_data_row_pitch,
- size_t image_data_slice_pitch,
- hsa_ext_image_data_info_t *image_data_info);
-
-/**
- * @brief Creates an agent specific image handle to an image with an
- * opaque image data layout.
- *
- * @details Images with an opaque image data layout created with
- * different access permissions but matching image descriptors and
- * same agent can share the same image data if
- * ::HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT is reported
- * by ::hsa_ext_image_get_capability for the image format specified in
- * the image descriptor. Image descriptors match if they have the same
- * values, with the exception that s-form channel orders match the
- * corresponding non-s-form channel order and vice versa.
- *
- * If necessary, an application can use image operations (import,
- * export, copy, clear) to prepare the image for the intended use
- * regardless of the access permissions.
- *
- * @param[in] agent agent to be associated with the image handle created.
- *
- * @param[in] image_descriptor Pointer to an image descriptor. Must not be NULL.
- *
- * @param[in] image_data Image data buffer that must have been allocated
- * according to the size and alignment requirements dictated by
- * ::hsa_ext_image_data_get_info. Must not be NULL.
- *
- * Any previous memory contents are preserved upon creation. The application is
- * responsible for ensuring that the lifetime of the image data exceeds that of
- * all the associated images.
- *
- * @param[in] access_permission Access permission of the image when
- * accessed by agent. The access permission defines how the agent
- * is allowed to access the image using the image handle created and
- * must match the corresponding HSAIL image handle type. The agent
- * must support the image format specified in @p image_descriptor for
- * the given @p access_permission.
- *
- * @param[out] image Pointer to a memory location where the HSA runtime stores
- * the newly created image handle. Must not be NULL.
- *
- * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
- *
- * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
- * initialized.
- *
- * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
- *
- * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED The agent
- * does not have the capability to support the image format contained
- * in @p image_descriptor using the specified @p access_permission.
- *
- * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED The agent
- * does not support the image dimensions specified by @p
- * image_descriptor using the specified @p access_permission.
- *
- * @retval ::HSA_STATUS_ERROR_OUT_OF_RESOURCES The HSA runtime failed to allocate
- * the required resources.
- *
- * support the creation of more image handles with the given @p access_permission).
- *
- * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_descriptor is NULL, @p
- * image_data is NULL, @p image_data does not have a valid alignment,
- * @p access_permission is not a valid access permission
- * value, or @p image is NULL.
- */
-hsa_status_t HSA_API hsa_ext_image_create(
- hsa_agent_t agent,
- const hsa_ext_image_descriptor_t *image_descriptor,
- void *image_data,
- hsa_access_permission_t access_permission,
- hsa_ext_image_t *image);
-
-/**
- * @brief Creates an agent specific image handle to an image with an explicit
- * image data layout.
- *
- * @details Images with an explicit image data layout created with
- * different access permissions but matching image descriptors and
- * matching image layout can share the same image data if
- * ::HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT is reported
- * by ::hsa_ext_image_get_capability_with_layout for the image format
- * specified in the image descriptor and specified image data
- * layout. Image descriptors match if they have the same values, with
- * the exception that s-form channel orders match the corresponding
- * non-s-form channel order and vice versa. Image layouts match if
- * they are the same image data layout and use the same image row and
- * slice values.
+ * @details Image created with different access permissions but the same image
+ * descriptor can share the same image data if
+ * ::HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT is reported by
+ * ::hsa_ext_image_get_capability for the image format specified in the image
+ * descriptor. Images with a s-form channel order can share the same image data
+ * with other images that have the corresponding non-s-form channel order,
+ * provided the rest of their image descriptors are identical.
*
* If necessary, an application can use image operations (import, export, copy,
* clear) to prepare the image for the intended use regardless of the access
* permissions.
*
- * @param[in] agent agent to be associated with the image handle created.
+ * @param[in] agent agent to be associated with the image.
*
* @param[in] image_descriptor Pointer to an image descriptor. Must not be NULL.
*
* @param[in] image_data Image data buffer that must have been allocated
* according to the size and alignment requirements dictated by
- * ::hsa_ext_image_data_get_info_with_layout. Must not be NULL.
+ * ::hsa_ext_image_data_get_info. Must not be NULL.
*
* Any previous memory contents are preserved upon creation. The application is
* responsible for ensuring that the lifetime of the image data exceeds that of
* all the associated images.
*
- * @param[in] access_permission Access permission of the image when
- * accessed by the agent. The access permission defines how the agent
- * is allowed to access the image and must match the corresponding
- * HSAIL image handle type. The agent must support the image format
- * specified in @p image_descriptor for the given @p access_permission
- * and @p image_data_layout.
- *
- * @param[in] image_data_layout The image data layout to use for the
- * @p image_data. It is invalid to use
- * ::HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE; use ::hsa_ext_image_create
- * instead.
- *
- * @param[in] image_data_row_pitch The size in bytes for a single row
- * of the image in the image data. If 0 is specified then the default
- * row pitch value is used: image width * image element byte size.
- * The value used must be greater than or equal to the default row
- * pitch, and be a multiple of the image element byte size. For the
- * linear image layout it must also be a multiple of the image linear
- * row pitch alignment for the agents that will access the image data
- * using image instructions.
- *
- * @param[in] image_data_slice_pitch The size in bytes of a single
- * slice of a 3D image, or the size in bytes of each image layer in an
- * image array in the image data. If 0 is specified then the default
- * slice pitch value is used: row pitch * height if geometry is
- * ::HSA_EXT_IMAGE_GEOMETRY_3D, ::HSA_EXT_IMAGE_GEOMETRY_2DA, or
- * ::HSA_EXT_IMAGE_GEOMETRY_2DADEPTH; row pitch if geometry is
- * ::HSA_EXT_IMAGE_GEOMETRY_1DA; and 0 otherwise. The value used must
- * be 0 if the default slice pitch is 0, be greater than or equal to
- * the default slice pitch, and be a multiple of the row pitch.
+ * @param[in] access_permission Access permission of the image by the
+ * agent. The access permission defines how the agent expects to use the
+ * image and must match the corresponding HSAIL image handle type. The agent
+ * must support the image format specified in @p image_descriptor for the given
+ * permission.
*
* @param[out] image Pointer to a memory location where the HSA runtime stores
* the newly created image handle. Must not be NULL.
@@ -808,49 +402,34 @@ hsa_status_t HSA_API hsa_ext_image_create(
*
* @retval ::HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED The agent does
* not have the capability to support the image format contained in the image
- * descriptor using the specified @p access_permission and @p image_data_layout.
+ * descriptor using the specified access permission.
*
- * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED The agent
- * does not support the image dimensions specified by @p
- * image_descriptor using the specified @p access_permission and @p
- * image_data_layout.
- *
- * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_PITCH_UNSUPPORTED The agent does
- * not support the row and slice pitch specified by @p image_data_row_pitch
- * and @p image_data_slice_pitch, or the values are invalid.
- *
- * @retval ::HSA_STATUS_ERROR_OUT_OF_RESOURCES The HSA runtime failed to allocate
- * the required resources.
- *
- * support the creation of more image handles with the given @p access_permission).
+ * @retval ::HSA_STATUS_ERROR_OUT_OF_RESOURCES The HSA runtime cannot create the
+ * image because it is out of resources (for example, the agent does not
+ * support the creation of more image handles with the given access permission).
*
* @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_descriptor is NULL, @p
- * image_data is NULL, @p image_data does not have a valid alignment,
- * @p image_data_layout is ::HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE,
- * or @p image is NULL.
+ * image_data is NULL, @p access_permission is not a valid access permission
+ * value, or @p image is NULL.
*/
-hsa_status_t HSA_API hsa_ext_image_create_with_layout(
- hsa_agent_t agent,
- const hsa_ext_image_descriptor_t *image_descriptor,
- void *image_data,
- hsa_access_permission_t access_permission,
- hsa_ext_image_data_layout_t image_data_layout,
- size_t image_data_row_pitch,
- size_t image_data_slice_pitch,
- hsa_ext_image_t *image);
+hsa_status_t HSA_API
+ hsa_ext_image_create(hsa_agent_t agent,
+ const hsa_ext_image_descriptor_t *image_descriptor,
+ const void *image_data,
+ hsa_access_permission_t access_permission,
+ hsa_ext_image_t *image);
/**
- * @brief Destroy an image handle previously created using ::hsa_ext_image_create or
- * ::hsa_ext_image_create_with_layout.
+ * @brief Destroy an image previously created using ::hsa_ext_image_create.
*
* @details Destroying the image handle does not free the associated image data,
- * or modify its contents. The application should not destroy an image handle while
+ * or modify its contents. The application should not destroy an image while
* there are references to it queued for execution or currently being used in a
- * kernel dispatch.
+ * kernel.
*
- * @param[in] agent Agent associated with the image handle.
+ * @param[in] agent Agent associated with the image.
*
- * @param[in] image Image handle to destroy.
+ * @param[in] image Image.
*
* @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
*
@@ -859,24 +438,22 @@ hsa_status_t HSA_API hsa_ext_image_create_with_layout(
*
* @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
*/
-hsa_status_t HSA_API hsa_ext_image_destroy(
- hsa_agent_t agent,
- hsa_ext_image_t image);
+hsa_status_t HSA_API
+ hsa_ext_image_destroy(hsa_agent_t agent, hsa_ext_image_t image);
/**
* @brief Copies a portion of one image (the source) to another image (the
* destination).
*
- * @details The source and destination image formats should be the
- * same, with the exception that s-form channel orders match the
- * corresponding non-s-form channel order and vice versa. For example,
- * it is allowed to copy a source image with a channel order of
- * HSA_EXT_IMAGE_CHANNEL_ORDER_SRGB to a destination image with a
- * channel order of HSA_EXT_IMAGE_CHANNEL_ORDER_RGB.
+ * @details The source and destination image formats should match, except if the
+ * channel type of one of the images is the standard form of the channel type of
+ * the other image. For example, it is allowed to copy a source image with a
+ * channel type of HSA_EXT_IMAGE_CHANNEL_ORDER_SRGB to a destination image with
+ * a channel type of HSA_EXT_IMAGE_CHANNEL_ORDER_RGB.
*
* The source and destination images do not have to be of the same geometry and
* appropriate scaling is performed by the HSA runtime. It is possible to copy
- * subregions between any combinations of source and destination geometries, provided
+ * subregions between any combinations of source and destination types, provided
* that the dimensions of the subregions are the same. For example, it is
* allowed to copy a rectangular region from a 2D image to a slice of a 3D
* image.
@@ -885,15 +462,15 @@ hsa_status_t HSA_API hsa_ext_image_destroy(
* offset and range references an out-out-bounds element in any of the images,
* the behavior is undefined.
*
- * @param[in] agent Agent associated with both the source and destination image handles.
+ * @param[in] agent Agent associated with both images.
*
- * @param[in] src_image Image handle of source image. The agent associated with the source
- * image handle must be identical to that of the destination image.
+ * @param[in] src_image Source image. The agent associated with the source
+ * image must be identical to that of the destination image.
*
* @param[in] src_offset Pointer to the offset within the source image where to
* copy the data from. Must not be NULL.
*
- * @param[in] dst_image Image handle of destination image.
+ * @param[in] dst_image Destination image.
*
* @param[in] dst_offset Pointer to the offset within the destination
* image where to copy the data. Must not be NULL.
@@ -912,28 +489,25 @@ hsa_status_t HSA_API hsa_ext_image_destroy(
* @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p src_offset is
* NULL, @p dst_offset is NULL, or @p range is NULL.
*/
-hsa_status_t HSA_API hsa_ext_image_copy(
- hsa_agent_t agent,
- hsa_ext_image_t src_image,
- const hsa_dim3_t* src_offset,
- hsa_ext_image_t dst_image,
- const hsa_dim3_t* dst_offset,
- const hsa_dim3_t* range);
+hsa_status_t HSA_API
+ hsa_ext_image_copy(hsa_agent_t agent, hsa_ext_image_t src_image,
+ const hsa_dim3_t *src_offset, hsa_ext_image_t dst_image,
+ const hsa_dim3_t *dst_offset, const hsa_dim3_t *range);
/**
* @brief Image region.
*/
typedef struct hsa_ext_image_region_s {
- /**
- * Offset within an image (in coordinates).
- */
- hsa_dim3_t offset;
+ /**
+ * Offset within an image (in coordinates).
+ */
+ hsa_dim3_t offset;
- /**
- * Dimension size of the image range (in coordinates). The x, y, and z dimensions
- * correspond to width, height, and depth or index respectively.
- */
- hsa_dim3_t range;
+ /**
+ * Dimensions of the image range (in coordinates). The x, y, and z dimensions
+ * correspond to width, height, and depth respectively.
+ */
+ hsa_dim3_t range;
} hsa_ext_image_region_t;
/**
@@ -944,32 +518,28 @@ typedef struct hsa_ext_image_region_s {
* from the source memory. The size of the data imported from memory is
* implicitly derived from the image region.
*
+ * If @p src_row_pitch is smaller than the destination region width (in bytes),
+ * then @p src_row_pitch = region width.
+ *
+ * If @p src_slice_pitch is smaller than the destination region width * region
+ * height (in bytes), then @p src_slice_pitch = region width * region height.
+ *
* It is the application's responsibility to avoid out of bounds memory access.
*
- * None of the source memory or destination image data memory can
- * overlap. Overlapping of any of the source and destination image
- * data memory within the import operation produces undefined results.
+ * None of the source memory or image data memory in the previously created
+ * ::hsa_ext_image_create image handle can overlap. Overlapping of any
+ * of the source and destination memory within the import operation produces
+ * undefined results.
*
- * @param[in] agent Agent associated with the image handle.
+ * @param[in] agent Agent associated with the image.
*
* @param[in] src_memory Source memory. Must not be NULL.
*
- * @param[in] src_row_pitch The size in bytes of a single row of the image in the
- * source memory. If the value is smaller than the destination image region
- * width * image element byte size, then region width * image element byte
- * size is used.
+ * @param[in] src_row_pitch Number of bytes in one row of the source memory.
*
- * @param[in] src_slice_pitch The size in bytes of a single 2D slice of a 3D image,
- * or the size in bytes of each image layer in an image array in the source memory.
- * If the geometry is ::HSA_EXT_IMAGE_GEOMETRY_1DA and the value is smaller than the
- * value used for @p src_row_pitch, then the value used for @p src_row_pitch is used.
- * If the geometry is ::HSA_EXT_IMAGE_GEOMETRY_3D, ::HSA_EXT_IMAGE_GEOMETRY_2DA, or
- * HSA_EXT_IMAGE_GEOMETRY_2DADEPTH and the value is smaller than the value used for
- * @p src_row_pitch * destination image region height, then the value used for
- * @p src_row_pitch * destination image region height is used.
- * Otherwise, the value is not used.
+ * @param[in] src_slice_pitch Number of bytes in one slice of the source memory.
*
- * @param[in] dst_image Image handle of destination image.
+ * @param[in] dst_image Destination image.
*
* @param[in] image_region Pointer to the image region to be updated. Must not
* be NULL.
@@ -985,13 +555,11 @@ typedef struct hsa_ext_image_region_s {
* image_region is NULL.
*
*/
-hsa_status_t HSA_API hsa_ext_image_import(
- hsa_agent_t agent,
- const void *src_memory,
- size_t src_row_pitch,
- size_t src_slice_pitch,
- hsa_ext_image_t dst_image,
- const hsa_ext_image_region_t *image_region);
+hsa_status_t HSA_API
+ hsa_ext_image_import(hsa_agent_t agent, const void *src_memory,
+ size_t src_row_pitch, size_t src_slice_pitch,
+ hsa_ext_image_t dst_image,
+ const hsa_ext_image_region_t *image_region);
/**
* @brief Export the image data to linearly organized memory.
@@ -1000,32 +568,30 @@ hsa_status_t HSA_API hsa_ext_image_import(
* @p src_image. The size of the data exported to memory is implicitly derived
* from the image region.
*
+ * If @p dst_row_pitch is smaller than the source region width (in bytes), then
+ * @p dst_row_pitch = region width.
+ *
+ * If @p dst_slice_pitch is smaller than the source region width * region height
+ * (in bytes), then @p dst_slice_pitch = region width * region height.
+ *
* It is the application's responsibility to avoid out of bounds memory access.
*
- * None of the destination memory or source image data memory can
- * overlap. Overlapping of any of the source and destination image
- * data memory within the export operation produces undefined results.
+ * None of the destination memory or image data memory in the previously created
+ * ::hsa_ext_image_create image handle can overlap. Overlapping of any of
+ * the source and destination memory within the export operation produces
+ * undefined results.
*
- * @param[in] agent Agent associated with the image handle.
+ * @param[in] agent Agent associated with the image.
*
- * @param[in] src_image Image handle of source image.
+ * @param[in] src_image Source image.
*
* @param[in] dst_memory Destination memory. Must not be NULL.
*
- * @param[in] dst_row_pitch The size in bytes of a single row of the image in the
- * destination memory. If the value is smaller than the source image region
- * width * image element byte size, then region width * image element byte
- * size is used.
+ * @param[in] dst_row_pitch Number of bytes in one row of the destination
+ * memory.
*
- * @param[in] dst_slice_pitch The size in bytes of a single 2D slice of a 3D image,
- * or the size in bytes of each image in an image array in the destination memory.
- * If the geometry is ::HSA_EXT_IMAGE_GEOMETRY_1DA and the value is smaller than the
- * value used for @p dst_row_pitch, then the value used for @p dst_row_pitch is used.
- * If the geometry is ::HSA_EXT_IMAGE_GEOMETRY_3D, ::HSA_EXT_IMAGE_GEOMETRY_2DA, or
- * HSA_EXT_IMAGE_GEOMETRY_2DADEPTH and the value is smaller than the value used for
- * @p dst_row_pitch * source image region height, then the value used for
- * @p dst_row_pitch * source image region height is used.
- * Otherwise, the value is not used.
+ * @param[in] dst_slice_pitch Number of bytes in one slice of the destination
+ * memory.
*
* @param[in] image_region Pointer to the image region to be exported. Must not
* be NULL.
@@ -1040,32 +606,45 @@ hsa_status_t HSA_API hsa_ext_image_import(
* @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p dst_memory is NULL, or @p
* image_region is NULL.
*/
-hsa_status_t HSA_API hsa_ext_image_export(
- hsa_agent_t agent,
- hsa_ext_image_t src_image,
- void *dst_memory,
- size_t dst_row_pitch,
- size_t dst_slice_pitch,
- const hsa_ext_image_region_t *image_region);
+hsa_status_t HSA_API
+ hsa_ext_image_export(hsa_agent_t agent, hsa_ext_image_t src_image,
+ void *dst_memory, size_t dst_row_pitch,
+ size_t dst_slice_pitch,
+ const hsa_ext_image_region_t *image_region);
/**
- * @brief Clear a region of an image so that every image element has
- * the specified value.
+ * @brief Clear an image to the specified value.
*
- * @param[in] agent Agent associated with the image handle.
+ * @details Clearing an image does not perform any format conversion and the
+ * provided clear data is directly stored regardless of the image format. The
+ * lowest bits of the data (number of bits depending on the image component
+ * type) stored in the cleared image are based on the image component order.
*
- * @param[in] image Image handle for image to be cleared.
+ * The number of elements in @p data should match the number of access
+ * components for the channel order of @p image, as determined by the HSA
+ * Programmer's Reference Manual. A single element is required for
+ * HSA_EXT_IMAGE_CHANNEL_ORDER_DEPTH and
+ * HSA_EXT_IMAGE_CHANNEL_ORDER_DEPTH_STENCIL, while any other channel order
+ * requires 4 elements.
*
- * @param[in] data The value to which to set each image element being
- * cleared. It is specified as an array of image component values. The
- * number of array elements must match the number of access components
- * for the image channel order. The type of each array element must
- * match the image access type of the image channel type. When the
- * value is used to set the value of an image element, the conversion
- * method corresponding to the image channel type is used. See the
- * Channel Order section and Channel Type section in
- * the HSA Programming Reference Manual for more
- * information. Must not be NULL.
+ * Each element in @p data is a 32-bit value. The type of each element
+ * should match the access type associated with the channel type of @p image,
+ * as determined by the HSA Programmer's Reference Manual:
+ * - HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT8,
+ * HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT16, and
+ * HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT32 map to int32_t.
+ * - HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT8,
+ * HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT16, and
+ * HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT32 map to uint32_t.
+ * - Any other channel type maps to a 32-bit float.
+ *
+ * @param[in] agent Agent associated with the image.
+ *
+ * @param[in] image Image to be cleared.
+ *
+ * @param[in] data Clear value array. Specifying a clear value outside of the
+ * range that can be represented by an image format results in undefined
+ * behavior. Must not be NULL.
*
* @param[in] image_region Pointer to the image region to clear. Must not be
* NULL. If the region references an out-out-bounds element, the behavior is
@@ -1081,11 +660,10 @@ hsa_status_t HSA_API hsa_ext_image_export(
* @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p data is NULL, or @p
* image_region is NULL.
*/
-hsa_status_t HSA_API hsa_ext_image_clear(
- hsa_agent_t agent,
- hsa_ext_image_t image,
- const void* data,
- const hsa_ext_image_region_t *image_region);
+hsa_status_t HSA_API
+ hsa_ext_image_clear(hsa_agent_t agent, hsa_ext_image_t image,
+ const void *data,
+ const hsa_ext_image_region_t *image_region);
/**
* @brief Sampler handle. Samplers are populated by
@@ -1094,18 +672,15 @@ hsa_status_t HSA_API hsa_ext_image_clear(
*/
typedef struct hsa_ext_sampler_s {
/**
- * Opaque handle. For a given agent, two handles reference the same object of
- * the enclosing type if and only if they are equal.
+ * Opaque handle.
*/
- uint64_t handle;
+ uint64_t handle;
} hsa_ext_sampler_t;
/**
- * @brief Sampler address modes. The sampler address mode describes
- * the processing of out-of-range image coordinates. See the
- * Addressing Mode section in the HSA Programming Reference
- * Manual for definitions on each address mode. The values
- * match the BRIG type @p hsa_ext_brig_sampler_addressing_t.
+ * @brief Sampler address modes. The sampler address mode describes the
+ * processing of out-of-range image coordinates. The values match the BRIG
+ * type BrigSamplerAddressing.
*/
typedef enum {
/**
@@ -1119,63 +694,52 @@ typedef enum {
HSA_EXT_SAMPLER_ADDRESSING_MODE_CLAMP_TO_EDGE = 1,
/**
- * Clamp out-of-range coordinates to the image border color.
+ * Clamp out-of-range coordinates to the image border.
*/
HSA_EXT_SAMPLER_ADDRESSING_MODE_CLAMP_TO_BORDER = 2,
/**
- * Wrap out-of-range coordinates back into the valid coordinate
- * range so the image appears as repeated tiles.
+ * Wrap out-of-range coordinates back into the valid coordinate range.
*/
HSA_EXT_SAMPLER_ADDRESSING_MODE_REPEAT = 3,
/**
- * Mirror out-of-range coordinates back into the valid coordinate
- * range so the image appears as repeated tiles with every other
- * tile a reflection.
+ * Mirror out-of-range coordinates back into the valid coordinate range.
*/
HSA_EXT_SAMPLER_ADDRESSING_MODE_MIRRORED_REPEAT = 4
} hsa_ext_sampler_addressing_mode_t;
/**
- * @brief A fixed-size type used to represent ::hsa_ext_sampler_addressing_mode_t constants.
+ *@brief Fixed size container for address mode.
*/
typedef uint32_t hsa_ext_sampler_addressing_mode32_t;
/**
- * @brief Sampler coordinate normalization modes. See the
- * Coordinate Normalization Mode section in the HSA
- * Programming Reference Manual for definitions on each
- * coordinate normalization mode. The values match the BRIG type @p
- * hsa_ext_brig_sampler_coord_normalization_t.
+ * @brief Sampler coordinate modes. The enumeration values match the BRIG
+ * BRIG_SAMPLER_COORD bit in BrigSamplerModifier.
*/
typedef enum {
-
/**
- * Coordinates are used to directly address an image element.
+ * Coordinates are all in the range of 0 to (dimension-1).
*/
HSA_EXT_SAMPLER_COORDINATE_MODE_UNNORMALIZED = 0,
/**
- * Coordinates are scaled by the image dimension size before being
- * used to address an image element.
+ * Coordinates are all in the range of 0.0 to 1.0.
*/
HSA_EXT_SAMPLER_COORDINATE_MODE_NORMALIZED = 1
} hsa_ext_sampler_coordinate_mode_t;
/**
- * @brief A fixed-size type used to represent ::hsa_ext_sampler_coordinate_mode_t constants.
+ *@brief Fixed size container for coordinate mode.
*/
typedef uint32_t hsa_ext_sampler_coordinate_mode32_t;
-
/**
- * @brief Sampler filter modes. See the Filter Mode section
- * in the HSA Programming Reference Manual for definitions
- * on each address mode. The enumeration values match the BRIG type @p
- * hsa_ext_brig_sampler_filter_t.
+ * @brief Sampler filter modes. The enumeration values match the BRIG type
+ * BrigSamplerFilter.
*/
typedef enum {
/**
@@ -1194,12 +758,12 @@ typedef enum {
} hsa_ext_sampler_filter_mode_t;
/**
- * @brief A fixed-size type used to represent ::hsa_ext_sampler_filter_mode_t constants.
+ *@brief Fixed size container for filter mode.
*/
typedef uint32_t hsa_ext_sampler_filter_mode32_t;
/**
- * @brief Implementation independent sampler descriptor.
+ * @brief Implementation-independent sampler descriptor.
*/
typedef struct hsa_ext_sampler_descriptor_s {
/**
@@ -1221,10 +785,10 @@ typedef struct hsa_ext_sampler_descriptor_s {
} hsa_ext_sampler_descriptor_t;
/**
- * @brief Create an agent specific sampler handle for a given agent
- * independent sampler descriptor and agent.
+ * @brief Create a kernel agent defined sampler handle for a given combination
+ * of a (agent-independent) sampler descriptor and agent.
*
- * @param[in] agent Agent to be associated with the sampler handle created.
+ * @param[in] agent Agent to be associated with the sampler.
*
* @param[in] sampler_descriptor Pointer to a sampler descriptor. Must not be
* NULL.
@@ -1239,31 +803,24 @@ typedef struct hsa_ext_sampler_descriptor_s {
*
* @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
*
- * @retval ::HSA_EXT_STATUS_ERROR_SAMPLER_DESCRIPTOR_UNSUPPORTED The
- * @p agent does not have the capability to support the properties
- * specified by @p sampler_descriptor or it is invalid.
- *
- * @retval ::HSA_STATUS_ERROR_OUT_OF_RESOURCES The HSA runtime failed to allocate
- * the required resources.
+ * @retval ::HSA_STATUS_ERROR_OUT_OF_RESOURCES The agent cannot create the
+ * specified handle because it is out of resources.
*
* @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p sampler_descriptor is NULL, or
* @p sampler is NULL.
*/
hsa_status_t HSA_API hsa_ext_sampler_create(
- hsa_agent_t agent,
- const hsa_ext_sampler_descriptor_t *sampler_descriptor,
+ hsa_agent_t agent, const hsa_ext_sampler_descriptor_t *sampler_descriptor,
hsa_ext_sampler_t *sampler);
/**
- * @brief Destroy a sampler handle previously created using ::hsa_ext_sampler_create.
+ * @brief Destroy a sampler previously created using ::hsa_ext_sampler_create.
*
- * @details The sampler handle should not be destroyed while there are
- * references to it queued for execution or currently being used in a
- * kernel dispatch.
+ * @param[in] agent Agent associated with the sampler.
*
- * @param[in] agent Agent associated with the sampler handle.
- *
- * @param[in] sampler Sampler handle to destroy.
+ * @param[in] sampler Sampler. The sampler handle should not be destroyed while
+ * there are references to it queued for execution or currently being used in a
+ * dispatch.
*
* @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
*
@@ -1272,179 +829,157 @@ hsa_status_t HSA_API hsa_ext_sampler_create(
*
* @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
*/
-hsa_status_t HSA_API hsa_ext_sampler_destroy(
- hsa_agent_t agent,
- hsa_ext_sampler_t sampler);
+hsa_status_t HSA_API
+ hsa_ext_sampler_destroy(hsa_agent_t agent, hsa_ext_sampler_t sampler);
+/**
+ * @brief Enumeration constants added to ::hsa_status_t by this extension.
+ */
+enum {
+ /**
+ * Image format is not supported.
+ */
+ HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED = 0x3000,
+ /**
+ * Image size is not supported.
+ */
+ HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED = 0x3001,
+ /**
+ * Image pitch is not supported or invalid.
+ */
+ HSA_EXT_STATUS_ERROR_IMAGE_PITCH_UNSUPPORTED = 0x3002,
+ /**
+ * Sampler descriptor is not supported or invalid.
+ */
+ HSA_EXT_STATUS_ERROR_SAMPLER_DESCRIPTOR_UNSUPPORTED = 0x3003
+};
+
+/**
+ * @brief Enumeration constants added to ::hsa_agent_info_t by this
+ * extension. The value of any of these attributes is undefined if the
+ * agent is not a kernel agent, or the implementation does not support images.
+ */
+enum {
+ /**
+ * Maximum number of elements in 1D images. Must be at most 16384. The type
+ * of this attribute is uint32_t.
+ */
+ HSA_EXT_AGENT_INFO_IMAGE_1D_MAX_ELEMENTS = 0x3000,
+ /**
+ * Maximum number of elements in 1DA images. Must be at most 16384. The type
+ * of this attribute is uint32_t.
+ */
+ HSA_EXT_AGENT_INFO_IMAGE_1DA_MAX_ELEMENTS = 0x3001,
+ /**
+ * Maximum number of elements in 1DB images. Must be at most 65536. The type
+ * of this attribute is uint32_t.
+ */
+ HSA_EXT_AGENT_INFO_IMAGE_1DB_MAX_ELEMENTS = 0x3002,
+ /**
+ * Maximum dimensions (width, height) of 2D images, in image elements. The X
+ * and Y maximums must be at most 16384. The type of this attribute is
+ * uint32_t[2].
+ */
+ HSA_EXT_AGENT_INFO_IMAGE_2D_MAX_ELEMENTS = 0x3003,
+ /**
+ * Maximum dimensions (width, height) of 2DA images, in image elements. The X
+ * and Y maximums must be at most 16384. The type of this attribute is
+ * uint32_t[2].
+ */
+ HSA_EXT_AGENT_INFO_IMAGE_2DA_MAX_ELEMENTS = 0x3004,
+ /**
+ * Maximum dimensions (width, height) of 2DDEPTH images, in image
+ * elements. The X and Y maximums must be at most 16384. The type of this
+ * attribute is uint32_t[2].
+ */
+ HSA_EXT_AGENT_INFO_IMAGE_2DDEPTH_MAX_ELEMENTS = 0x3005,
+ /**
+ * Maximum dimensions (width, height) of 2DADEPTH images, in image
+ * elements. The X and Y maximums must be at most 16384. The type of this
+ * attribute is uint32_t[2].
+ */
+ HSA_EXT_AGENT_INFO_IMAGE_2DADEPTH_MAX_ELEMENTS = 0x3006,
+ /**
+ * Maximum dimensions (width, height, depth) of 3D images, in image
+ * elements. The maximum along any dimension cannot exceed 2048. The type of
+ * this attribute is uint32_t[3].
+ */
+ HSA_EXT_AGENT_INFO_IMAGE_3D_MAX_ELEMENTS = 0x3007,
+ /**
+ * Maximum number of image layers in a image array. Must not exceed 2048. The
+ * type of this attribute is uint32_t.
+ */
+ HSA_EXT_AGENT_INFO_IMAGE_ARRAY_MAX_LAYERS = 0x3008,
+ /**
+ * Maximum number of read-only image handles that can be created at any one
+ * time. Must be at least 128. The type of this attribute is uint32_t.
+ */
+ HSA_EXT_AGENT_INFO_MAX_IMAGE_RD_HANDLES = 0x3009,
+ /**
+ * Maximum number of write-only and read-write image handles (combined) that
+ * can be created at any one time. Must be at least 64. The type of this
+ * attribute is uint32_t.
+ */
+ HSA_EXT_AGENT_INFO_MAX_IMAGE_RORW_HANDLES = 0x300A,
+ /**
+ * Maximum number of sampler handlers that can be created at any one
+ * time. Must be at least 16. The type of this attribute is uint32_t.
+ */
+ HSA_EXT_AGENT_INFO_MAX_SAMPLER_HANDLERS = 0x300B
+};
+
+/** @} */
#define hsa_ext_images_1_00
-/**
- * @brief The function pointer table for the images v1.00 extension. Can be returned by ::hsa_system_get_extension_table or ::hsa_system_get_major_extension_table.
- */
typedef struct hsa_ext_images_1_00_pfn_s {
-
hsa_status_t (*hsa_ext_image_get_capability)(
- hsa_agent_t agent,
- hsa_ext_image_geometry_t geometry,
- const hsa_ext_image_format_t *image_format,
- uint32_t *capability_mask);
+ hsa_agent_t agent, hsa_ext_image_geometry_t geometry,
+ const hsa_ext_image_format_t *image_format, uint32_t *capability_mask);
hsa_status_t (*hsa_ext_image_data_get_info)(
- hsa_agent_t agent,
- const hsa_ext_image_descriptor_t *image_descriptor,
- hsa_access_permission_t access_permission,
- hsa_ext_image_data_info_t *image_data_info);
+ hsa_agent_t agent, const hsa_ext_image_descriptor_t *image_descriptor,
+ hsa_access_permission_t access_permission,
+ hsa_ext_image_data_info_t *image_data_info);
hsa_status_t (*hsa_ext_image_create)(
- hsa_agent_t agent,
- const hsa_ext_image_descriptor_t *image_descriptor,
- void *image_data,
- hsa_access_permission_t access_permission,
- hsa_ext_image_t *image);
+ hsa_agent_t agent, const hsa_ext_image_descriptor_t *image_descriptor,
+ const void *image_data, hsa_access_permission_t access_permission,
+ hsa_ext_image_t *image);
- hsa_status_t (*hsa_ext_image_destroy)(
- hsa_agent_t agent,
- hsa_ext_image_t image);
+ hsa_status_t (*hsa_ext_image_destroy)(hsa_agent_t agent,
+ hsa_ext_image_t image);
- hsa_status_t (*hsa_ext_image_copy)(
- hsa_agent_t agent,
- hsa_ext_image_t src_image,
- const hsa_dim3_t* src_offset,
- hsa_ext_image_t dst_image,
- const hsa_dim3_t* dst_offset,
- const hsa_dim3_t* range);
+ hsa_status_t (*hsa_ext_image_copy)(hsa_agent_t agent,
+ hsa_ext_image_t src_image,
+ const hsa_dim3_t *src_offset,
+ hsa_ext_image_t dst_image,
+ const hsa_dim3_t *dst_offset,
+ const hsa_dim3_t *range);
hsa_status_t (*hsa_ext_image_import)(
- hsa_agent_t agent,
- const void *src_memory,
- size_t src_row_pitch,
- size_t src_slice_pitch,
- hsa_ext_image_t dst_image,
- const hsa_ext_image_region_t *image_region);
+ hsa_agent_t agent, const void *src_memory, size_t src_row_pitch,
+ size_t src_slice_pitch, hsa_ext_image_t dst_image,
+ const hsa_ext_image_region_t *image_region);
hsa_status_t (*hsa_ext_image_export)(
- hsa_agent_t agent,
- hsa_ext_image_t src_image,
- void *dst_memory,
- size_t dst_row_pitch,
- size_t dst_slice_pitch,
- const hsa_ext_image_region_t *image_region);
+ hsa_agent_t agent, hsa_ext_image_t src_image, void *dst_memory,
+ size_t dst_row_pitch, size_t dst_slice_pitch,
+ const hsa_ext_image_region_t *image_region);
hsa_status_t (*hsa_ext_image_clear)(
- hsa_agent_t agent,
- hsa_ext_image_t image,
- const void* data,
- const hsa_ext_image_region_t *image_region);
+ hsa_agent_t agent, hsa_ext_image_t image, const void *data,
+ const hsa_ext_image_region_t *image_region);
hsa_status_t (*hsa_ext_sampler_create)(
- hsa_agent_t agent,
- const hsa_ext_sampler_descriptor_t *sampler_descriptor,
- hsa_ext_sampler_t *sampler);
+ hsa_agent_t agent, const hsa_ext_sampler_descriptor_t *sampler_descriptor,
+ hsa_ext_sampler_t *sampler);
- hsa_status_t (*hsa_ext_sampler_destroy)(
- hsa_agent_t agent,
- hsa_ext_sampler_t sampler);
+ hsa_status_t (*hsa_ext_sampler_destroy)(hsa_agent_t agent,
+ hsa_ext_sampler_t sampler);
} hsa_ext_images_1_00_pfn_t;
-#define hsa_ext_images_1
-
-/**
- * @brief The function pointer table for the images v1 extension. Can be returned by ::hsa_system_get_extension_table or ::hsa_system_get_major_extension_table.
- */
-typedef struct hsa_ext_images_1_pfn_s {
-
- hsa_status_t (*hsa_ext_image_get_capability)(
- hsa_agent_t agent,
- hsa_ext_image_geometry_t geometry,
- const hsa_ext_image_format_t *image_format,
- uint32_t *capability_mask);
-
- hsa_status_t (*hsa_ext_image_data_get_info)(
- hsa_agent_t agent,
- const hsa_ext_image_descriptor_t *image_descriptor,
- hsa_access_permission_t access_permission,
- hsa_ext_image_data_info_t *image_data_info);
-
- hsa_status_t (*hsa_ext_image_create)(
- hsa_agent_t agent,
- const hsa_ext_image_descriptor_t *image_descriptor,
- void *image_data,
- hsa_access_permission_t access_permission,
- hsa_ext_image_t *image);
-
- hsa_status_t (*hsa_ext_image_destroy)(
- hsa_agent_t agent,
- hsa_ext_image_t image);
-
- hsa_status_t (*hsa_ext_image_copy)(
- hsa_agent_t agent,
- hsa_ext_image_t src_image,
- const hsa_dim3_t* src_offset,
- hsa_ext_image_t dst_image,
- const hsa_dim3_t* dst_offset,
- const hsa_dim3_t* range);
-
- hsa_status_t (*hsa_ext_image_import)(
- hsa_agent_t agent,
- const void *src_memory,
- size_t src_row_pitch,
- size_t src_slice_pitch,
- hsa_ext_image_t dst_image,
- const hsa_ext_image_region_t *image_region);
-
- hsa_status_t (*hsa_ext_image_export)(
- hsa_agent_t agent,
- hsa_ext_image_t src_image,
- void *dst_memory,
- size_t dst_row_pitch,
- size_t dst_slice_pitch,
- const hsa_ext_image_region_t *image_region);
-
- hsa_status_t (*hsa_ext_image_clear)(
- hsa_agent_t agent,
- hsa_ext_image_t image,
- const void* data,
- const hsa_ext_image_region_t *image_region);
-
- hsa_status_t (*hsa_ext_sampler_create)(
- hsa_agent_t agent,
- const hsa_ext_sampler_descriptor_t *sampler_descriptor,
- hsa_ext_sampler_t *sampler);
-
- hsa_status_t (*hsa_ext_sampler_destroy)(
- hsa_agent_t agent,
- hsa_ext_sampler_t sampler);
-
- hsa_status_t (*hsa_ext_image_get_capability_with_layout)(
- hsa_agent_t agent,
- hsa_ext_image_geometry_t geometry,
- const hsa_ext_image_format_t *image_format,
- hsa_ext_image_data_layout_t image_data_layout,
- uint32_t *capability_mask);
-
- hsa_status_t (*hsa_ext_image_data_get_info_with_layout)(
- const hsa_ext_image_descriptor_t *image_descriptor,
- hsa_access_permission_t access_permission,
- hsa_ext_image_data_layout_t image_data_layout,
- size_t image_data_row_pitch,
- size_t image_data_slice_pitch,
- hsa_ext_image_data_info_t *image_data_info);
-
- hsa_status_t (*hsa_ext_image_create_with_layout)(
- hsa_agent_t agent,
- const hsa_ext_image_descriptor_t *image_descriptor,
- void *image_data,
- hsa_access_permission_t access_permission,
- hsa_ext_image_data_layout_t image_data_layout,
- size_t image_data_row_pitch,
- size_t image_data_slice_pitch,
- hsa_ext_image_t *image);
-
-} hsa_ext_images_1_pfn_t;
-/** @} */
-
#ifdef __cplusplus
} // end extern "C" block
#endif /*__cplusplus*/
diff --git a/runtime/hsa-runtime/loader/loaders.cpp b/runtime/hsa-runtime/loader/loaders.cpp
index 2b314e1a18..f01d48d276 100644
--- a/runtime/hsa-runtime/loader/loaders.cpp
+++ b/runtime/hsa-runtime/loader/loaders.cpp
@@ -185,7 +185,7 @@ namespace loader {
hsa_agent_t agent,
hsa_access_permission_t image_permission,
const hsa_ext_image_descriptor_t *image_descriptor,
- void *image_data,
+ const void *image_data,
hsa_ext_image_t *image_handle)
{
void* ptr = alignedMalloc(256, 8);
diff --git a/runtime/hsa-runtime/loader/loaders.hpp b/runtime/hsa-runtime/loader/loaders.hpp
index b0708a66c8..81e13fbc64 100644
--- a/runtime/hsa-runtime/loader/loaders.hpp
+++ b/runtime/hsa-runtime/loader/loaders.hpp
@@ -89,7 +89,7 @@ namespace loader {
hsa_agent_t agent,
hsa_access_permission_t image_permission,
const hsa_ext_image_descriptor_t *image_descriptor,
- void *image_data,
+ const void *image_data,
hsa_ext_image_t *image_handle) override;
hsa_status_t ImageDestroy(