tree-optimization/111950 - vectorizer loop copying
[official-gcc.git] / include / hsa_ext_image.h
blob52b695bc9fab9e042639d225213c6b92a1d056be
1 ////////////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (C) 2014-2020 Advanced Micro Devices Inc. All rights reserved.
4 //
5 // Permission is hereby granted, free of charge, to any person or organization
6 // obtaining a copy of the software and accompanying documentation covered by
7 // this license (the "Software") to use, reproduce, display, distribute,
8 // execute, and transmit the Software, and to prepare derivative works of the
9 // Software, and to permit third-parties to whom the Software is furnished to
10 // do so, all subject to the following:
12 // The copyright notices in the Software and this entire statement, including
13 // the above license grant, this restriction and the following disclaimer,
14 // must be included in all copies of the Software, in whole or in part, and
15 // all derivative works of the Software, unless such copies or derivative
16 // works are solely in the form of machine-executable object code generated by
17 // a source language processor.
19 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 // DEALINGS IN THE SOFTWARE.
27 ////////////////////////////////////////////////////////////////////////////////
29 #ifndef HSA_EXT_IMAGE_H
30 #define HSA_EXT_IMAGE_H
32 #include "hsa.h"
34 #undef HSA_API
35 #ifdef HSA_EXPORT_IMAGES
36 #define HSA_API HSA_API_EXPORT
37 #else
38 #define HSA_API HSA_API_IMPORT
39 #endif
41 #ifdef __cplusplus
42 extern "C" {
43 #endif /*__cplusplus*/
45 /** \defgroup ext-images Images and Samplers
46 * @{
49 /**
50 * @brief Enumeration constants added to ::hsa_status_t by this extension.
52 * @remark Additions to hsa_status_t
54 enum {
55 /**
56 * Image format is not supported.
58 HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED = 0x3000,
59 /**
60 * Image size is not supported.
62 HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED = 0x3001,
63 /**
64 * Image pitch is not supported or invalid.
66 HSA_EXT_STATUS_ERROR_IMAGE_PITCH_UNSUPPORTED = 0x3002,
67 /**
68 * Sampler descriptor is not supported or invalid.
70 HSA_EXT_STATUS_ERROR_SAMPLER_DESCRIPTOR_UNSUPPORTED = 0x3003
73 /**
74 * @brief Enumeration constants added to ::hsa_agent_info_t by this
75 * extension.
77 * @remark Additions to hsa_agent_info_t
79 enum {
80 /**
81 * Maximum number of elements in 1D images. Must be at least 16384. The type
82 * of this attribute is size_t.
84 HSA_EXT_AGENT_INFO_IMAGE_1D_MAX_ELEMENTS = 0x3000,
85 /**
86 * Maximum number of elements in 1DA images. Must be at least 16384. The type
87 * of this attribute is size_t.
89 HSA_EXT_AGENT_INFO_IMAGE_1DA_MAX_ELEMENTS = 0x3001,
90 /**
91 * Maximum number of elements in 1DB images. Must be at least 65536. The type
92 * of this attribute is size_t.
94 HSA_EXT_AGENT_INFO_IMAGE_1DB_MAX_ELEMENTS = 0x3002,
95 /**
96 * Maximum dimensions (width, height) of 2D images, in image elements. The X
97 * and Y maximums must be at least 16384. The type of this attribute is
98 * size_t[2].
100 HSA_EXT_AGENT_INFO_IMAGE_2D_MAX_ELEMENTS = 0x3003,
102 * Maximum dimensions (width, height) of 2DA images, in image elements. The X
103 * and Y maximums must be at least 16384. The type of this attribute is
104 * size_t[2].
106 HSA_EXT_AGENT_INFO_IMAGE_2DA_MAX_ELEMENTS = 0x3004,
108 * Maximum dimensions (width, height) of 2DDEPTH images, in image
109 * elements. The X and Y maximums must be at least 16384. The type of this
110 * attribute is size_t[2].
112 HSA_EXT_AGENT_INFO_IMAGE_2DDEPTH_MAX_ELEMENTS = 0x3005,
114 * Maximum dimensions (width, height) of 2DADEPTH images, in image
115 * elements. The X and Y maximums must be at least 16384. The type of this
116 * attribute is size_t[2].
118 HSA_EXT_AGENT_INFO_IMAGE_2DADEPTH_MAX_ELEMENTS = 0x3006,
120 * Maximum dimensions (width, height, depth) of 3D images, in image
121 * elements. The maximum along any dimension must be at least 2048. The type
122 * of this attribute is size_t[3].
124 HSA_EXT_AGENT_INFO_IMAGE_3D_MAX_ELEMENTS = 0x3007,
126 * Maximum number of image layers in a image array. Must be at least 2048. The
127 * type of this attribute is size_t.
129 HSA_EXT_AGENT_INFO_IMAGE_ARRAY_MAX_LAYERS = 0x3008,
131 * Maximum number of read-only image handles that can be created for an agent at any one
132 * time. Must be at least 128. The type of this attribute is size_t.
134 HSA_EXT_AGENT_INFO_MAX_IMAGE_RD_HANDLES = 0x3009,
136 * Maximum number of write-only and read-write image handles (combined) that
137 * can be created for an agent at any one time. Must be at least 64. The type of this
138 * attribute is size_t.
140 HSA_EXT_AGENT_INFO_MAX_IMAGE_RORW_HANDLES = 0x300A,
142 * Maximum number of sampler handlers that can be created for an agent at any one
143 * time. Must be at least 16. The type of this attribute is size_t.
145 HSA_EXT_AGENT_INFO_MAX_SAMPLER_HANDLERS = 0x300B,
147 * Image pitch alignment. The agent only supports linear image data
148 * layouts with a row pitch that is a multiple of this value. Must be
149 * a power of 2. The type of this attribute is size_t.
151 HSA_EXT_AGENT_INFO_IMAGE_LINEAR_ROW_PITCH_ALIGNMENT = 0x300C
155 * @brief Image handle, populated by ::hsa_ext_image_create or
156 * ::hsa_ext_image_create_with_layout. Image
157 * handles are only unique within an agent, not across agents.
160 typedef struct hsa_ext_image_s {
162 * Opaque handle. For a given agent, two handles reference the same object of
163 * the enclosing type if and only if they are equal.
165 uint64_t handle;
167 } hsa_ext_image_t;
170 * @brief Geometry associated with the image. This specifies the
171 * number of image dimensions and whether the image is an image
172 * array. See the <em>Image Geometry</em> section in the <em>HSA
173 * Programming Reference Manual</em> for definitions on each
174 * geometry. The enumeration values match the BRIG type @p
175 * hsa_ext_brig_image_geometry_t.
177 typedef enum {
179 * One-dimensional image addressed by width coordinate.
181 HSA_EXT_IMAGE_GEOMETRY_1D = 0,
184 * Two-dimensional image addressed by width and height coordinates.
186 HSA_EXT_IMAGE_GEOMETRY_2D = 1,
189 * Three-dimensional image addressed by width, height, and depth coordinates.
191 HSA_EXT_IMAGE_GEOMETRY_3D = 2,
194 * Array of one-dimensional images with the same size and format. 1D arrays
195 * are addressed by width and index coordinate.
197 HSA_EXT_IMAGE_GEOMETRY_1DA = 3,
200 * Array of two-dimensional images with the same size and format. 2D arrays
201 * are addressed by width, height, and index coordinates.
203 HSA_EXT_IMAGE_GEOMETRY_2DA = 4,
206 * One-dimensional image addressed by width coordinate. It has
207 * specific restrictions compared to ::HSA_EXT_IMAGE_GEOMETRY_1D. An
208 * image with an opaque image data layout will always use a linear
209 * image data layout, and one with an explicit image data layout
210 * must specify ::HSA_EXT_IMAGE_DATA_LAYOUT_LINEAR.
212 HSA_EXT_IMAGE_GEOMETRY_1DB = 5,
215 * Two-dimensional depth image addressed by width and height coordinates.
217 HSA_EXT_IMAGE_GEOMETRY_2DDEPTH = 6,
220 * Array of two-dimensional depth images with the same size and format. 2D
221 * arrays are addressed by width, height, and index coordinates.
223 HSA_EXT_IMAGE_GEOMETRY_2DADEPTH = 7
224 } hsa_ext_image_geometry_t;
227 * @brief Channel type associated with the elements of an image. See
228 * the <em>Channel Type</em> section in the <em>HSA Programming Reference
229 * Manual</em> for definitions on each channel type. The
230 * enumeration values and definition match the BRIG type @p
231 * hsa_ext_brig_image_channel_type_t.
233 typedef enum {
234 HSA_EXT_IMAGE_CHANNEL_TYPE_SNORM_INT8 = 0,
235 HSA_EXT_IMAGE_CHANNEL_TYPE_SNORM_INT16 = 1,
236 HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_INT8 = 2,
237 HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_INT16 = 3,
238 HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_INT24 = 4,
239 HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_SHORT_555 = 5,
240 HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_SHORT_565 = 6,
241 HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_SHORT_101010 = 7,
242 HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT8 = 8,
243 HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT16 = 9,
244 HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT32 = 10,
245 HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT8 = 11,
246 HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT16 = 12,
247 HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT32 = 13,
248 HSA_EXT_IMAGE_CHANNEL_TYPE_HALF_FLOAT = 14,
249 HSA_EXT_IMAGE_CHANNEL_TYPE_FLOAT = 15
250 } hsa_ext_image_channel_type_t;
253 * @brief A fixed-size type used to represent ::hsa_ext_image_channel_type_t constants.
255 typedef uint32_t hsa_ext_image_channel_type32_t;
259 * @brief Channel order associated with the elements of an image. See
260 * the <em>Channel Order</em> section in the <em>HSA Programming Reference
261 * Manual</em> for definitions on each channel order. The
262 * enumeration values match the BRIG type @p
263 * hsa_ext_brig_image_channel_order_t.
265 typedef enum {
266 HSA_EXT_IMAGE_CHANNEL_ORDER_A = 0,
267 HSA_EXT_IMAGE_CHANNEL_ORDER_R = 1,
268 HSA_EXT_IMAGE_CHANNEL_ORDER_RX = 2,
269 HSA_EXT_IMAGE_CHANNEL_ORDER_RG = 3,
270 HSA_EXT_IMAGE_CHANNEL_ORDER_RGX = 4,
271 HSA_EXT_IMAGE_CHANNEL_ORDER_RA = 5,
272 HSA_EXT_IMAGE_CHANNEL_ORDER_RGB = 6,
273 HSA_EXT_IMAGE_CHANNEL_ORDER_RGBX = 7,
274 HSA_EXT_IMAGE_CHANNEL_ORDER_RGBA = 8,
275 HSA_EXT_IMAGE_CHANNEL_ORDER_BGRA = 9,
276 HSA_EXT_IMAGE_CHANNEL_ORDER_ARGB = 10,
277 HSA_EXT_IMAGE_CHANNEL_ORDER_ABGR = 11,
278 HSA_EXT_IMAGE_CHANNEL_ORDER_SRGB = 12,
279 HSA_EXT_IMAGE_CHANNEL_ORDER_SRGBX = 13,
280 HSA_EXT_IMAGE_CHANNEL_ORDER_SRGBA = 14,
281 HSA_EXT_IMAGE_CHANNEL_ORDER_SBGRA = 15,
282 HSA_EXT_IMAGE_CHANNEL_ORDER_INTENSITY = 16,
283 HSA_EXT_IMAGE_CHANNEL_ORDER_LUMINANCE = 17,
284 HSA_EXT_IMAGE_CHANNEL_ORDER_DEPTH = 18,
285 HSA_EXT_IMAGE_CHANNEL_ORDER_DEPTH_STENCIL = 19
286 } hsa_ext_image_channel_order_t;
289 * @brief A fixed-size type used to represent ::hsa_ext_image_channel_order_t constants.
291 typedef uint32_t hsa_ext_image_channel_order32_t;
295 * @brief Image format.
297 typedef struct hsa_ext_image_format_s {
299 * Channel type.
301 hsa_ext_image_channel_type32_t channel_type;
304 * Channel order.
306 hsa_ext_image_channel_order32_t channel_order;
307 } hsa_ext_image_format_t;
310 * @brief Implementation independent image descriptor.
312 typedef struct hsa_ext_image_descriptor_s {
314 * Image geometry.
316 hsa_ext_image_geometry_t geometry;
318 * Width of the image, in components.
320 size_t width;
322 * Height of the image, in components. Only used if the geometry is
323 * ::HSA_EXT_IMAGE_GEOMETRY_2D, ::HSA_EXT_IMAGE_GEOMETRY_3D,
324 * HSA_EXT_IMAGE_GEOMETRY_2DA, HSA_EXT_IMAGE_GEOMETRY_2DDEPTH, or
325 * HSA_EXT_IMAGE_GEOMETRY_2DADEPTH, otherwise must be 0.
327 size_t height;
329 * Depth of the image, in components. Only used if the geometry is
330 * ::HSA_EXT_IMAGE_GEOMETRY_3D, otherwise must be 0.
332 size_t depth;
334 * Number of image layers in the image array. Only used if the geometry is
335 * ::HSA_EXT_IMAGE_GEOMETRY_1DA, ::HSA_EXT_IMAGE_GEOMETRY_2DA, or
336 * HSA_EXT_IMAGE_GEOMETRY_2DADEPTH, otherwise must be 0.
338 size_t array_size;
340 * Image format.
342 hsa_ext_image_format_t format;
343 } hsa_ext_image_descriptor_t;
346 * @brief Image capability.
348 typedef enum {
350 * Images of this geometry, format, and layout are not supported by
351 * the agent.
353 HSA_EXT_IMAGE_CAPABILITY_NOT_SUPPORTED = 0x0,
355 * Read-only images of this geometry, format, and layout are
356 * supported by the agent.
358 HSA_EXT_IMAGE_CAPABILITY_READ_ONLY = 0x1,
360 * Write-only images of this geometry, format, and layout are
361 * supported by the agent.
363 HSA_EXT_IMAGE_CAPABILITY_WRITE_ONLY = 0x2,
365 * Read-write images of this geometry, format, and layout are
366 * supported by the agent.
368 HSA_EXT_IMAGE_CAPABILITY_READ_WRITE = 0x4,
370 * @deprecated Images of this geometry, format, and layout can be accessed from
371 * read-modify-write atomic operations in the agent.
373 HSA_EXT_IMAGE_CAPABILITY_READ_MODIFY_WRITE = 0x8,
375 * Images of this geometry, format, and layout are guaranteed to
376 * have a consistent data layout regardless of how they are
377 * accessed by the associated agent.
379 HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT = 0x10
380 } hsa_ext_image_capability_t;
383 * @brief Image data layout.
385 * @details An image data layout denotes such aspects of image data
386 * layout as tiling and organization of channels in memory. Some image
387 * data layouts may only apply to specific image geometries, formats,
388 * and access permissions. Different agents may support different
389 * image layout identifiers, including vendor specific layouts. Note
390 * that an agent may not support the same image data layout for
391 * different access permissions to images with the same image
392 * geometry, size, and format. If multiple agents support the same
393 * image data layout then it is possible to use separate image handles
394 * for each agent that references the same image data.
397 typedef enum {
399 * An implementation specific opaque image data layout which can
400 * vary depending on the agent, geometry, image format, image size,
401 * and access permissions.
403 HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE = 0x0,
405 * The image data layout is specified by the following rules in
406 * ascending byte address order. For a 3D image, 2DA image array,
407 * or 1DA image array, the image data is stored as a linear sequence
408 * of adjacent 2D image slices, 2D images, or 1D images
409 * respectively, spaced according to the slice pitch. Each 2D image
410 * is stored as a linear sequence of adjacent image rows, spaced
411 * according to the row pitch. Each 1D or 1DB image is stored as a
412 * single image row. Each image row is stored as a linear sequence
413 * of image elements. Each image element is stored as a linear
414 * sequence of image components specified by the left to right
415 * channel order definition. Each image component is stored using
416 * the memory type specified by the channel type.
418 * The 1DB image geometry always uses the linear image data layout.
420 HSA_EXT_IMAGE_DATA_LAYOUT_LINEAR = 0x1
421 } hsa_ext_image_data_layout_t;
424 * @brief Retrieve the supported image capabilities for a given combination of
425 * agent, geometry, and image format for an image created with an opaque image
426 * data layout.
428 * @param[in] agent Agent to be associated with the image handle.
430 * @param[in] geometry Geometry.
432 * @param[in] image_format Pointer to an image format. Must not be NULL.
434 * @param[out] capability_mask Pointer to a memory location where the HSA
435 * runtime stores a bit-mask of supported image capability
436 * (::hsa_ext_image_capability_t) values. Must not be NULL.
438 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
440 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
441 * initialized.
443 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
445 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_format is
446 * NULL, or @p capability_mask is NULL.
448 hsa_status_t HSA_API hsa_ext_image_get_capability(
449 hsa_agent_t agent,
450 hsa_ext_image_geometry_t geometry,
451 const hsa_ext_image_format_t *image_format,
452 uint32_t *capability_mask);
455 * @brief Retrieve the supported image capabilities for a given combination of
456 * agent, geometry, image format, and image layout for an image created with
457 * an explicit image data layout.
459 * @param[in] agent Agent to be associated with the image handle.
461 * @param[in] geometry Geometry.
463 * @param[in] image_format Pointer to an image format. Must not be NULL.
465 * @param[in] image_data_layout The image data layout.
466 * It is invalid to use ::HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE; use
467 * ::hsa_ext_image_get_capability instead.
469 * @param[out] capability_mask Pointer to a memory location where the HSA
470 * runtime stores a bit-mask of supported image capability
471 * (::hsa_ext_image_capability_t) values. Must not be NULL.
473 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
475 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
476 * initialized.
478 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
480 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_format is
481 * NULL, @p image_data_layout is ::HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE,
482 * or @p capability_mask is NULL.
484 hsa_status_t HSA_API hsa_ext_image_get_capability_with_layout(
485 hsa_agent_t agent,
486 hsa_ext_image_geometry_t geometry,
487 const hsa_ext_image_format_t *image_format,
488 hsa_ext_image_data_layout_t image_data_layout,
489 uint32_t *capability_mask);
492 * @brief Agent specific image size and alignment requirements, populated by
493 * ::hsa_ext_image_data_get_info and ::hsa_ext_image_data_get_info_with_layout.
495 typedef struct hsa_ext_image_data_info_s {
497 * Image data size, in bytes.
499 size_t size;
502 * Image data alignment, in bytes. Must always be a power of 2.
504 size_t alignment;
506 } hsa_ext_image_data_info_t;
509 * @brief Retrieve the image data requirements for a given combination of agent, image
510 * descriptor, and access permission for an image created with an opaque image
511 * data layout.
513 * @details The optimal image data size and alignment requirements may
514 * vary depending on the image attributes specified in @p
515 * image_descriptor, the @p access_permission, and the @p agent. Also,
516 * different implementations of the HSA runtime may return different
517 * requirements for the same input values.
519 * The implementation must return the same image data requirements for
520 * different access permissions with matching image descriptors as long
521 * as ::hsa_ext_image_get_capability reports
522 * ::HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT. Image
523 * descriptors match if they have the same values, with the exception
524 * that s-form channel orders match the corresponding non-s-form
525 * channel order and vice versa.
527 * @param[in] agent Agent to be associated with the image handle.
529 * @param[in] image_descriptor Pointer to an image descriptor. Must not be NULL.
531 * @param[in] access_permission Access permission of the image when
532 * accessed by @p agent. The access permission defines how the agent
533 * is allowed to access the image and must match the corresponding
534 * HSAIL image handle type. The @p agent must support the image format
535 * specified in @p image_descriptor for the given @p
536 * access_permission.
538 * @param[out] image_data_info Memory location where the runtime stores the
539 * size and alignment requirements. Must not be NULL.
541 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
543 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
544 * initialized.
546 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
548 * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED The @p
549 * agent does not support the image format specified by @p
550 * image_descriptor with the specified @p access_permission.
552 * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED The agent
553 * does not support the image dimensions specified by @p
554 * image_descriptor with the specified @p access_permission.
556 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_descriptor is NULL, @p
557 * access_permission is not a valid access permission value, or @p
558 * image_data_info is NULL.
560 hsa_status_t HSA_API hsa_ext_image_data_get_info(
561 hsa_agent_t agent,
562 const hsa_ext_image_descriptor_t *image_descriptor,
563 hsa_access_permission_t access_permission,
564 hsa_ext_image_data_info_t *image_data_info);
567 * @brief Retrieve the image data requirements for a given combination of
568 * image descriptor, access permission, image data layout, image data row pitch,
569 * and image data slice pitch for an image created with an explicit image
570 * data layout.
572 * @details The image data size and alignment requirements may vary
573 * depending on the image attributes specified in @p image_descriptor,
574 * the @p access_permission, and the image layout. However, different
575 * implementations of the HSA runtime will return the same
576 * requirements for the same input values.
578 * The implementation must return the same image data requirements for
579 * different access permissions with matching image descriptors and
580 * matching image layouts as long as ::hsa_ext_image_get_capability
581 * reports
582 * ::HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT. Image
583 * descriptors match if they have the same values, with the exception
584 * that s-form channel orders match the corresponding non-s-form
585 * channel order and vice versa. Image layouts match if they are the
586 * same image data layout and use the same image row and slice pitch
587 * values.
589 * @param[in] image_descriptor Pointer to an image descriptor. Must not be NULL.
591 * @param[in] access_permission Access permission of the image when
592 * accessed by an agent. The access permission defines how the agent
593 * is allowed to access the image and must match the corresponding
594 * HSAIL image handle type.
596 * @param[in] image_data_layout The image data layout to use.
597 * It is invalid to use ::HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE; use
598 * ::hsa_ext_image_data_get_info instead.
600 * @param[in] image_data_row_pitch The size in bytes for a single row
601 * of the image in the image data. If 0 is specified then the default
602 * row pitch value is used: image width * image element byte size.
603 * The value used must be greater than or equal to the default row
604 * pitch, and be a multiple of the image element byte size. For the
605 * linear image layout it must also be a multiple of the image linear
606 * row pitch alignment for the agents that will access the image data
607 * using image instructions.
609 * @param[in] image_data_slice_pitch The size in bytes of a single
610 * slice of a 3D image, or the size in bytes of each image layer in an
611 * image array in the image data. If 0 is specified then the default
612 * slice pitch value is used: row pitch * height if geometry is
613 * ::HSA_EXT_IMAGE_GEOMETRY_3D, ::HSA_EXT_IMAGE_GEOMETRY_2DA, or
614 * ::HSA_EXT_IMAGE_GEOMETRY_2DADEPTH; row pitch if geometry is
615 * ::HSA_EXT_IMAGE_GEOMETRY_1DA; and 0 otherwise. The value used must
616 * be 0 if the default slice pitch is 0, be greater than or equal to
617 * the default slice pitch, and be a multiple of the row pitch.
619 * @param[out] image_data_info Memory location where the runtime stores the
620 * size and alignment requirements. Must not be NULL.
622 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
624 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
625 * initialized.
627 * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED The image
628 * format specified by @p image_descriptor is not supported for the
629 * @p access_permission and @p image_data_layout specified.
631 * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED The image
632 * dimensions specified by @p image_descriptor are not supported for
633 * the @p access_permission and @p image_data_layout specified.
635 * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_PITCH_UNSUPPORTED The row and
636 * slice pitch specified by @p image_data_row_pitch and @p
637 * image_data_slice_pitch are invalid or not supported.
639 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_descriptor is
640 * NULL, @p image_data_layout is ::HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE,
641 * or @p image_data_info is NULL.
643 hsa_status_t HSA_API hsa_ext_image_data_get_info_with_layout(
644 hsa_agent_t agent,
645 const hsa_ext_image_descriptor_t *image_descriptor,
646 hsa_access_permission_t access_permission,
647 hsa_ext_image_data_layout_t image_data_layout,
648 size_t image_data_row_pitch,
649 size_t image_data_slice_pitch,
650 hsa_ext_image_data_info_t *image_data_info);
653 * @brief Creates an agent specific image handle to an image with an
654 * opaque image data layout.
656 * @details Images with an opaque image data layout created with
657 * different access permissions but matching image descriptors and
658 * same agent can share the same image data if
659 * ::HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT is reported
660 * by ::hsa_ext_image_get_capability for the image format specified in
661 * the image descriptor. Image descriptors match if they have the same
662 * values, with the exception that s-form channel orders match the
663 * corresponding non-s-form channel order and vice versa.
665 * If necessary, an application can use image operations (import,
666 * export, copy, clear) to prepare the image for the intended use
667 * regardless of the access permissions.
669 * @param[in] agent agent to be associated with the image handle created.
671 * @param[in] image_descriptor Pointer to an image descriptor. Must not be NULL.
673 * @param[in] image_data Image data buffer that must have been allocated
674 * according to the size and alignment requirements dictated by
675 * ::hsa_ext_image_data_get_info. Must not be NULL.
677 * Any previous memory contents are preserved upon creation. The application is
678 * responsible for ensuring that the lifetime of the image data exceeds that of
679 * all the associated images.
681 * @param[in] access_permission Access permission of the image when
682 * accessed by agent. The access permission defines how the agent
683 * is allowed to access the image using the image handle created and
684 * must match the corresponding HSAIL image handle type. The agent
685 * must support the image format specified in @p image_descriptor for
686 * the given @p access_permission.
688 * @param[out] image Pointer to a memory location where the HSA runtime stores
689 * the newly created image handle. Must not be NULL.
691 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
693 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
694 * initialized.
696 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
698 * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED The agent
699 * does not have the capability to support the image format contained
700 * in @p image_descriptor using the specified @p access_permission.
702 * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED The agent
703 * does not support the image dimensions specified by @p
704 * image_descriptor using the specified @p access_permission.
706 * @retval ::HSA_STATUS_ERROR_OUT_OF_RESOURCES The HSA runtime failed to allocate
707 * the required resources.
709 * support the creation of more image handles with the given @p access_permission).
711 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_descriptor is NULL, @p
712 * image_data is NULL, @p image_data does not have a valid alignment,
713 * @p access_permission is not a valid access permission
714 * value, or @p image is NULL.
716 hsa_status_t HSA_API hsa_ext_image_create(
717 hsa_agent_t agent,
718 const hsa_ext_image_descriptor_t *image_descriptor,
719 const void *image_data,
720 hsa_access_permission_t access_permission,
721 hsa_ext_image_t *image);
724 * @brief Creates an agent specific image handle to an image with an explicit
725 * image data layout.
727 * @details Images with an explicit image data layout created with
728 * different access permissions but matching image descriptors and
729 * matching image layout can share the same image data if
730 * ::HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT is reported
731 * by ::hsa_ext_image_get_capability_with_layout for the image format
732 * specified in the image descriptor and specified image data
733 * layout. Image descriptors match if they have the same values, with
734 * the exception that s-form channel orders match the corresponding
735 * non-s-form channel order and vice versa. Image layouts match if
736 * they are the same image data layout and use the same image row and
737 * slice values.
739 * If necessary, an application can use image operations (import, export, copy,
740 * clear) to prepare the image for the intended use regardless of the access
741 * permissions.
743 * @param[in] agent agent to be associated with the image handle created.
745 * @param[in] image_descriptor Pointer to an image descriptor. Must not be NULL.
747 * @param[in] image_data Image data buffer that must have been allocated
748 * according to the size and alignment requirements dictated by
749 * ::hsa_ext_image_data_get_info_with_layout. Must not be NULL.
751 * Any previous memory contents are preserved upon creation. The application is
752 * responsible for ensuring that the lifetime of the image data exceeds that of
753 * all the associated images.
755 * @param[in] access_permission Access permission of the image when
756 * accessed by the agent. The access permission defines how the agent
757 * is allowed to access the image and must match the corresponding
758 * HSAIL image handle type. The agent must support the image format
759 * specified in @p image_descriptor for the given @p access_permission
760 * and @p image_data_layout.
762 * @param[in] image_data_layout The image data layout to use for the
763 * @p image_data. It is invalid to use
764 * ::HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE; use ::hsa_ext_image_create
765 * instead.
767 * @param[in] image_data_row_pitch The size in bytes for a single row
768 * of the image in the image data. If 0 is specified then the default
769 * row pitch value is used: image width * image element byte size.
770 * The value used must be greater than or equal to the default row
771 * pitch, and be a multiple of the image element byte size. For the
772 * linear image layout it must also be a multiple of the image linear
773 * row pitch alignment for the agents that will access the image data
774 * using image instructions.
776 * @param[in] image_data_slice_pitch The size in bytes of a single
777 * slice of a 3D image, or the size in bytes of each image layer in an
778 * image array in the image data. If 0 is specified then the default
779 * slice pitch value is used: row pitch * height if geometry is
780 * ::HSA_EXT_IMAGE_GEOMETRY_3D, ::HSA_EXT_IMAGE_GEOMETRY_2DA, or
781 * ::HSA_EXT_IMAGE_GEOMETRY_2DADEPTH; row pitch if geometry is
782 * ::HSA_EXT_IMAGE_GEOMETRY_1DA; and 0 otherwise. The value used must
783 * be 0 if the default slice pitch is 0, be greater than or equal to
784 * the default slice pitch, and be a multiple of the row pitch.
786 * @param[out] image Pointer to a memory location where the HSA runtime stores
787 * the newly created image handle. Must not be NULL.
789 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
791 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
792 * initialized.
794 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
796 * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED The agent does
797 * not have the capability to support the image format contained in the image
798 * descriptor using the specified @p access_permission and @p image_data_layout.
800 * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED The agent
801 * does not support the image dimensions specified by @p
802 * image_descriptor using the specified @p access_permission and @p
803 * image_data_layout.
805 * @retval ::HSA_EXT_STATUS_ERROR_IMAGE_PITCH_UNSUPPORTED The agent does
806 * not support the row and slice pitch specified by @p image_data_row_pitch
807 * and @p image_data_slice_pitch, or the values are invalid.
809 * @retval ::HSA_STATUS_ERROR_OUT_OF_RESOURCES The HSA runtime failed to allocate
810 * the required resources.
812 * support the creation of more image handles with the given @p access_permission).
814 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_descriptor is NULL, @p
815 * image_data is NULL, @p image_data does not have a valid alignment,
816 * @p image_data_layout is ::HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE,
817 * or @p image is NULL.
819 hsa_status_t HSA_API hsa_ext_image_create_with_layout(
820 hsa_agent_t agent,
821 const hsa_ext_image_descriptor_t *image_descriptor,
822 const void *image_data,
823 hsa_access_permission_t access_permission,
824 hsa_ext_image_data_layout_t image_data_layout,
825 size_t image_data_row_pitch,
826 size_t image_data_slice_pitch,
827 hsa_ext_image_t *image);
830 * @brief Destroy an image handle previously created using ::hsa_ext_image_create or
831 * ::hsa_ext_image_create_with_layout.
833 * @details Destroying the image handle does not free the associated image data,
834 * or modify its contents. The application should not destroy an image handle while
835 * there are references to it queued for execution or currently being used in a
836 * kernel dispatch.
838 * @param[in] agent Agent associated with the image handle.
840 * @param[in] image Image handle to destroy.
842 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
844 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
845 * initialized.
847 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
849 hsa_status_t HSA_API hsa_ext_image_destroy(
850 hsa_agent_t agent,
851 hsa_ext_image_t image);
854 * @brief Copies a portion of one image (the source) to another image (the
855 * destination).
857 * @details The source and destination image formats should be the
858 * same, with the exception that s-form channel orders match the
859 * corresponding non-s-form channel order and vice versa. For example,
860 * it is allowed to copy a source image with a channel order of
861 * HSA_EXT_IMAGE_CHANNEL_ORDER_SRGB to a destination image with a
862 * channel order of HSA_EXT_IMAGE_CHANNEL_ORDER_RGB.
864 * The source and destination images do not have to be of the same geometry and
865 * appropriate scaling is performed by the HSA runtime. It is possible to copy
866 * subregions between any combinations of source and destination geometries, provided
867 * that the dimensions of the subregions are the same. For example, it is
868 * allowed to copy a rectangular region from a 2D image to a slice of a 3D
869 * image.
871 * If the source and destination image data overlap, or the combination of
872 * offset and range references an out-out-bounds element in any of the images,
873 * the behavior is undefined.
875 * @param[in] agent Agent associated with both the source and destination image handles.
877 * @param[in] src_image Image handle of source image. The agent associated with the source
878 * image handle must be identical to that of the destination image.
880 * @param[in] src_offset Pointer to the offset within the source image where to
881 * copy the data from. Must not be NULL.
883 * @param[in] dst_image Image handle of destination image.
885 * @param[in] dst_offset Pointer to the offset within the destination
886 * image where to copy the data. Must not be NULL.
888 * @param[in] range Dimensions of the image portion to be copied. The HSA
889 * runtime computes the size of the image data to be copied using this
890 * argument. Must not be NULL.
892 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
894 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
895 * initialized.
897 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
899 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p src_offset is
900 * NULL, @p dst_offset is NULL, or @p range is NULL.
902 hsa_status_t HSA_API hsa_ext_image_copy(
903 hsa_agent_t agent,
904 hsa_ext_image_t src_image,
905 const hsa_dim3_t* src_offset,
906 hsa_ext_image_t dst_image,
907 const hsa_dim3_t* dst_offset,
908 const hsa_dim3_t* range);
911 * @brief Image region.
913 typedef struct hsa_ext_image_region_s {
915 * Offset within an image (in coordinates).
917 hsa_dim3_t offset;
920 * Dimension size of the image range (in coordinates). The x, y, and z dimensions
921 * correspond to width, height, and depth or index respectively.
923 hsa_dim3_t range;
924 } hsa_ext_image_region_t;
927 * @brief Import a linearly organized image data from memory directly to an
928 * image handle.
930 * @details This operation updates the image data referenced by the image handle
931 * from the source memory. The size of the data imported from memory is
932 * implicitly derived from the image region.
934 * It is the application's responsibility to avoid out of bounds memory access.
936 * None of the source memory or destination image data memory can
937 * overlap. Overlapping of any of the source and destination image
938 * data memory within the import operation produces undefined results.
940 * @param[in] agent Agent associated with the image handle.
942 * @param[in] src_memory Source memory. Must not be NULL.
944 * @param[in] src_row_pitch The size in bytes of a single row of the image in the
945 * source memory. If the value is smaller than the destination image region
946 * width * image element byte size, then region width * image element byte
947 * size is used.
949 * @param[in] src_slice_pitch The size in bytes of a single 2D slice of a 3D image,
950 * or the size in bytes of each image layer in an image array in the source memory.
951 * If the geometry is ::HSA_EXT_IMAGE_GEOMETRY_1DA and the value is smaller than the
952 * value used for @p src_row_pitch, then the value used for @p src_row_pitch is used.
953 * If the geometry is ::HSA_EXT_IMAGE_GEOMETRY_3D, ::HSA_EXT_IMAGE_GEOMETRY_2DA, or
954 * HSA_EXT_IMAGE_GEOMETRY_2DADEPTH and the value is smaller than the value used for
955 * @p src_row_pitch * destination image region height, then the value used for
956 * @p src_row_pitch * destination image region height is used.
957 * Otherwise, the value is not used.
959 * @param[in] dst_image Image handle of destination image.
961 * @param[in] image_region Pointer to the image region to be updated. Must not
962 * be NULL.
964 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
966 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
967 * initialized.
969 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
971 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p src_memory is NULL, or @p
972 * image_region is NULL.
975 hsa_status_t HSA_API hsa_ext_image_import(
976 hsa_agent_t agent,
977 const void *src_memory,
978 size_t src_row_pitch,
979 size_t src_slice_pitch,
980 hsa_ext_image_t dst_image,
981 const hsa_ext_image_region_t *image_region);
984 * @brief Export the image data to linearly organized memory.
986 * @details The operation updates the destination memory with the image data of
987 * @p src_image. The size of the data exported to memory is implicitly derived
988 * from the image region.
990 * It is the application's responsibility to avoid out of bounds memory access.
992 * None of the destination memory or source image data memory can
993 * overlap. Overlapping of any of the source and destination image
994 * data memory within the export operation produces undefined results.
996 * @param[in] agent Agent associated with the image handle.
998 * @param[in] src_image Image handle of source image.
1000 * @param[in] dst_memory Destination memory. Must not be NULL.
1002 * @param[in] dst_row_pitch The size in bytes of a single row of the image in the
1003 * destination memory. If the value is smaller than the source image region
1004 * width * image element byte size, then region width * image element byte
1005 * size is used.
1007 * @param[in] dst_slice_pitch The size in bytes of a single 2D slice of a 3D image,
1008 * or the size in bytes of each image in an image array in the destination memory.
1009 * If the geometry is ::HSA_EXT_IMAGE_GEOMETRY_1DA and the value is smaller than the
1010 * value used for @p dst_row_pitch, then the value used for @p dst_row_pitch is used.
1011 * If the geometry is ::HSA_EXT_IMAGE_GEOMETRY_3D, ::HSA_EXT_IMAGE_GEOMETRY_2DA, or
1012 * HSA_EXT_IMAGE_GEOMETRY_2DADEPTH and the value is smaller than the value used for
1013 * @p dst_row_pitch * source image region height, then the value used for
1014 * @p dst_row_pitch * source image region height is used.
1015 * Otherwise, the value is not used.
1017 * @param[in] image_region Pointer to the image region to be exported. Must not
1018 * be NULL.
1020 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
1022 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
1023 * initialized.
1025 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
1027 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p dst_memory is NULL, or @p
1028 * image_region is NULL.
1030 hsa_status_t HSA_API hsa_ext_image_export(
1031 hsa_agent_t agent,
1032 hsa_ext_image_t src_image,
1033 void *dst_memory,
1034 size_t dst_row_pitch,
1035 size_t dst_slice_pitch,
1036 const hsa_ext_image_region_t *image_region);
1039 * @brief Clear a region of an image so that every image element has
1040 * the specified value.
1042 * @param[in] agent Agent associated with the image handle.
1044 * @param[in] image Image handle for image to be cleared.
1046 * @param[in] data The value to which to set each image element being
1047 * cleared. It is specified as an array of image component values. The
1048 * number of array elements must match the number of access components
1049 * for the image channel order. The type of each array element must
1050 * match the image access type of the image channel type. When the
1051 * value is used to set the value of an image element, the conversion
1052 * method corresponding to the image channel type is used. See the
1053 * <em>Channel Order</em> section and <em>Channel Type</em> section in
1054 * the <em>HSA Programming Reference Manual</em> for more
1055 * information. Must not be NULL.
1057 * @param[in] image_region Pointer to the image region to clear. Must not be
1058 * NULL. If the region references an out-out-bounds element, the behavior is
1059 * undefined.
1061 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
1063 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
1064 * initialized.
1066 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
1068 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p data is NULL, or @p
1069 * image_region is NULL.
1071 hsa_status_t HSA_API hsa_ext_image_clear(
1072 hsa_agent_t agent,
1073 hsa_ext_image_t image,
1074 const void* data,
1075 const hsa_ext_image_region_t *image_region);
1078 * @brief Sampler handle. Samplers are populated by
1079 * ::hsa_ext_sampler_create. Sampler handles are only unique within an
1080 * agent, not across agents.
1082 typedef struct hsa_ext_sampler_s {
1084 * Opaque handle. For a given agent, two handles reference the same object of
1085 * the enclosing type if and only if they are equal.
1087 uint64_t handle;
1088 } hsa_ext_sampler_t;
1091 * @brief Sampler address modes. The sampler address mode describes
1092 * the processing of out-of-range image coordinates. See the
1093 * <em>Addressing Mode</em> section in the <em>HSA Programming Reference
1094 * Manual</em> for definitions on each address mode. The values
1095 * match the BRIG type @p hsa_ext_brig_sampler_addressing_t.
1097 typedef enum {
1099 * Out-of-range coordinates are not handled.
1101 HSA_EXT_SAMPLER_ADDRESSING_MODE_UNDEFINED = 0,
1104 * Clamp out-of-range coordinates to the image edge.
1106 HSA_EXT_SAMPLER_ADDRESSING_MODE_CLAMP_TO_EDGE = 1,
1109 * Clamp out-of-range coordinates to the image border color.
1111 HSA_EXT_SAMPLER_ADDRESSING_MODE_CLAMP_TO_BORDER = 2,
1114 * Wrap out-of-range coordinates back into the valid coordinate
1115 * range so the image appears as repeated tiles.
1117 HSA_EXT_SAMPLER_ADDRESSING_MODE_REPEAT = 3,
1120 * Mirror out-of-range coordinates back into the valid coordinate
1121 * range so the image appears as repeated tiles with every other
1122 * tile a reflection.
1124 HSA_EXT_SAMPLER_ADDRESSING_MODE_MIRRORED_REPEAT = 4
1126 } hsa_ext_sampler_addressing_mode_t;
1129 * @brief A fixed-size type used to represent ::hsa_ext_sampler_addressing_mode_t constants.
1131 typedef uint32_t hsa_ext_sampler_addressing_mode32_t;
1134 * @brief Sampler coordinate normalization modes. See the
1135 * <em>Coordinate Normalization Mode</em> section in the <em>HSA
1136 * Programming Reference Manual</em> for definitions on each
1137 * coordinate normalization mode. The values match the BRIG type @p
1138 * hsa_ext_brig_sampler_coord_normalization_t.
1140 typedef enum {
1143 * Coordinates are used to directly address an image element.
1145 HSA_EXT_SAMPLER_COORDINATE_MODE_UNNORMALIZED = 0,
1148 * Coordinates are scaled by the image dimension size before being
1149 * used to address an image element.
1151 HSA_EXT_SAMPLER_COORDINATE_MODE_NORMALIZED = 1
1153 } hsa_ext_sampler_coordinate_mode_t;
1156 * @brief A fixed-size type used to represent ::hsa_ext_sampler_coordinate_mode_t constants.
1158 typedef uint32_t hsa_ext_sampler_coordinate_mode32_t;
1162 * @brief Sampler filter modes. See the <em>Filter Mode</em> section
1163 * in the <em>HSA Programming Reference Manual</em> for definitions
1164 * on each address mode. The enumeration values match the BRIG type @p
1165 * hsa_ext_brig_sampler_filter_t.
1167 typedef enum {
1169 * Filter to the image element nearest (in Manhattan distance) to the
1170 * specified coordinate.
1172 HSA_EXT_SAMPLER_FILTER_MODE_NEAREST = 0,
1175 * Filter to the image element calculated by combining the elements in a 2x2
1176 * square block or 2x2x2 cube block around the specified coordinate. The
1177 * elements are combined using linear interpolation.
1179 HSA_EXT_SAMPLER_FILTER_MODE_LINEAR = 1
1181 } hsa_ext_sampler_filter_mode_t;
1184 * @brief A fixed-size type used to represent ::hsa_ext_sampler_filter_mode_t constants.
1186 typedef uint32_t hsa_ext_sampler_filter_mode32_t;
1189 * @brief Implementation independent sampler descriptor.
1191 typedef struct hsa_ext_sampler_descriptor_s {
1193 * Sampler coordinate mode describes the normalization of image coordinates.
1195 hsa_ext_sampler_coordinate_mode32_t coordinate_mode;
1198 * Sampler filter type describes the type of sampling performed.
1200 hsa_ext_sampler_filter_mode32_t filter_mode;
1203 * Sampler address mode describes the processing of out-of-range image
1204 * coordinates.
1206 hsa_ext_sampler_addressing_mode32_t address_mode;
1208 } hsa_ext_sampler_descriptor_t;
1211 * @brief Create an agent specific sampler handle for a given agent
1212 * independent sampler descriptor and agent.
1214 * @param[in] agent Agent to be associated with the sampler handle created.
1216 * @param[in] sampler_descriptor Pointer to a sampler descriptor. Must not be
1217 * NULL.
1219 * @param[out] sampler Memory location where the HSA runtime stores the newly
1220 * created sampler handle. Must not be NULL.
1222 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
1224 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
1225 * initialized.
1227 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
1229 * @retval ::HSA_EXT_STATUS_ERROR_SAMPLER_DESCRIPTOR_UNSUPPORTED The
1230 * @p agent does not have the capability to support the properties
1231 * specified by @p sampler_descriptor or it is invalid.
1233 * @retval ::HSA_STATUS_ERROR_OUT_OF_RESOURCES The HSA runtime failed to allocate
1234 * the required resources.
1236 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p sampler_descriptor is NULL, or
1237 * @p sampler is NULL.
1239 hsa_status_t HSA_API hsa_ext_sampler_create(
1240 hsa_agent_t agent,
1241 const hsa_ext_sampler_descriptor_t *sampler_descriptor,
1242 hsa_ext_sampler_t *sampler);
1245 * @brief Destroy a sampler handle previously created using ::hsa_ext_sampler_create.
1247 * @details The sampler handle should not be destroyed while there are
1248 * references to it queued for execution or currently being used in a
1249 * kernel dispatch.
1251 * @param[in] agent Agent associated with the sampler handle.
1253 * @param[in] sampler Sampler handle to destroy.
1255 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
1257 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
1258 * initialized.
1260 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
1262 hsa_status_t HSA_API hsa_ext_sampler_destroy(
1263 hsa_agent_t agent,
1264 hsa_ext_sampler_t sampler);
1267 #define hsa_ext_images_1_00
1270 * @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.
1272 typedef struct hsa_ext_images_1_00_pfn_s {
1274 hsa_status_t (*hsa_ext_image_get_capability)(
1275 hsa_agent_t agent,
1276 hsa_ext_image_geometry_t geometry,
1277 const hsa_ext_image_format_t *image_format,
1278 uint32_t *capability_mask);
1280 hsa_status_t (*hsa_ext_image_data_get_info)(
1281 hsa_agent_t agent,
1282 const hsa_ext_image_descriptor_t *image_descriptor,
1283 hsa_access_permission_t access_permission,
1284 hsa_ext_image_data_info_t *image_data_info);
1286 hsa_status_t (*hsa_ext_image_create)(
1287 hsa_agent_t agent,
1288 const hsa_ext_image_descriptor_t *image_descriptor,
1289 const void *image_data,
1290 hsa_access_permission_t access_permission,
1291 hsa_ext_image_t *image);
1293 hsa_status_t (*hsa_ext_image_destroy)(
1294 hsa_agent_t agent,
1295 hsa_ext_image_t image);
1297 hsa_status_t (*hsa_ext_image_copy)(
1298 hsa_agent_t agent,
1299 hsa_ext_image_t src_image,
1300 const hsa_dim3_t* src_offset,
1301 hsa_ext_image_t dst_image,
1302 const hsa_dim3_t* dst_offset,
1303 const hsa_dim3_t* range);
1305 hsa_status_t (*hsa_ext_image_import)(
1306 hsa_agent_t agent,
1307 const void *src_memory,
1308 size_t src_row_pitch,
1309 size_t src_slice_pitch,
1310 hsa_ext_image_t dst_image,
1311 const hsa_ext_image_region_t *image_region);
1313 hsa_status_t (*hsa_ext_image_export)(
1314 hsa_agent_t agent,
1315 hsa_ext_image_t src_image,
1316 void *dst_memory,
1317 size_t dst_row_pitch,
1318 size_t dst_slice_pitch,
1319 const hsa_ext_image_region_t *image_region);
1321 hsa_status_t (*hsa_ext_image_clear)(
1322 hsa_agent_t agent,
1323 hsa_ext_image_t image,
1324 const void* data,
1325 const hsa_ext_image_region_t *image_region);
1327 hsa_status_t (*hsa_ext_sampler_create)(
1328 hsa_agent_t agent,
1329 const hsa_ext_sampler_descriptor_t *sampler_descriptor,
1330 hsa_ext_sampler_t *sampler);
1332 hsa_status_t (*hsa_ext_sampler_destroy)(
1333 hsa_agent_t agent,
1334 hsa_ext_sampler_t sampler);
1336 } hsa_ext_images_1_00_pfn_t;
1338 #define hsa_ext_images_1
1341 * @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.
1343 typedef struct hsa_ext_images_1_pfn_s {
1345 hsa_status_t (*hsa_ext_image_get_capability)(
1346 hsa_agent_t agent,
1347 hsa_ext_image_geometry_t geometry,
1348 const hsa_ext_image_format_t *image_format,
1349 uint32_t *capability_mask);
1351 hsa_status_t (*hsa_ext_image_data_get_info)(
1352 hsa_agent_t agent,
1353 const hsa_ext_image_descriptor_t *image_descriptor,
1354 hsa_access_permission_t access_permission,
1355 hsa_ext_image_data_info_t *image_data_info);
1357 hsa_status_t (*hsa_ext_image_create)(
1358 hsa_agent_t agent,
1359 const hsa_ext_image_descriptor_t *image_descriptor,
1360 const void *image_data,
1361 hsa_access_permission_t access_permission,
1362 hsa_ext_image_t *image);
1364 hsa_status_t (*hsa_ext_image_destroy)(
1365 hsa_agent_t agent,
1366 hsa_ext_image_t image);
1368 hsa_status_t (*hsa_ext_image_copy)(
1369 hsa_agent_t agent,
1370 hsa_ext_image_t src_image,
1371 const hsa_dim3_t* src_offset,
1372 hsa_ext_image_t dst_image,
1373 const hsa_dim3_t* dst_offset,
1374 const hsa_dim3_t* range);
1376 hsa_status_t (*hsa_ext_image_import)(
1377 hsa_agent_t agent,
1378 const void *src_memory,
1379 size_t src_row_pitch,
1380 size_t src_slice_pitch,
1381 hsa_ext_image_t dst_image,
1382 const hsa_ext_image_region_t *image_region);
1384 hsa_status_t (*hsa_ext_image_export)(
1385 hsa_agent_t agent,
1386 hsa_ext_image_t src_image,
1387 void *dst_memory,
1388 size_t dst_row_pitch,
1389 size_t dst_slice_pitch,
1390 const hsa_ext_image_region_t *image_region);
1392 hsa_status_t (*hsa_ext_image_clear)(
1393 hsa_agent_t agent,
1394 hsa_ext_image_t image,
1395 const void* data,
1396 const hsa_ext_image_region_t *image_region);
1398 hsa_status_t (*hsa_ext_sampler_create)(
1399 hsa_agent_t agent,
1400 const hsa_ext_sampler_descriptor_t *sampler_descriptor,
1401 hsa_ext_sampler_t *sampler);
1403 hsa_status_t (*hsa_ext_sampler_destroy)(
1404 hsa_agent_t agent,
1405 hsa_ext_sampler_t sampler);
1407 hsa_status_t (*hsa_ext_image_get_capability_with_layout)(
1408 hsa_agent_t agent,
1409 hsa_ext_image_geometry_t geometry,
1410 const hsa_ext_image_format_t *image_format,
1411 hsa_ext_image_data_layout_t image_data_layout,
1412 uint32_t *capability_mask);
1414 hsa_status_t (*hsa_ext_image_data_get_info_with_layout)(
1415 hsa_agent_t agent,
1416 const hsa_ext_image_descriptor_t *image_descriptor,
1417 hsa_access_permission_t access_permission,
1418 hsa_ext_image_data_layout_t image_data_layout,
1419 size_t image_data_row_pitch,
1420 size_t image_data_slice_pitch,
1421 hsa_ext_image_data_info_t *image_data_info);
1423 hsa_status_t (*hsa_ext_image_create_with_layout)(
1424 hsa_agent_t agent,
1425 const hsa_ext_image_descriptor_t *image_descriptor,
1426 const void *image_data,
1427 hsa_access_permission_t access_permission,
1428 hsa_ext_image_data_layout_t image_data_layout,
1429 size_t image_data_row_pitch,
1430 size_t image_data_slice_pitch,
1431 hsa_ext_image_t *image);
1433 } hsa_ext_images_1_pfn_t;
1434 /** @} */
1436 #ifdef __cplusplus
1437 } // end extern "C" block
1438 #endif /*__cplusplus*/
1440 #endif