]> git.ipfire.org Git - thirdparty/gcc.git/blob - include/hsa_ext_image.h
Fix fallout from re-enabling profile consistency checks.
[thirdparty/gcc.git] / include / hsa_ext_image.h
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:
11 //
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.
18 //
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.
26 //
27 ////////////////////////////////////////////////////////////////////////////////
28
29 #ifndef HSA_EXT_IMAGE_H
30 #define HSA_EXT_IMAGE_H
31
32 #include "hsa.h"
33
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
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif /*__cplusplus*/
44
45 /** \defgroup ext-images Images and Samplers
46 * @{
47 */
48
49 /**
50 * @brief Enumeration constants added to ::hsa_status_t by this extension.
51 *
52 * @remark Additions to hsa_status_t
53 */
54 enum {
55 /**
56 * Image format is not supported.
57 */
58 HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED = 0x3000,
59 /**
60 * Image size is not supported.
61 */
62 HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED = 0x3001,
63 /**
64 * Image pitch is not supported or invalid.
65 */
66 HSA_EXT_STATUS_ERROR_IMAGE_PITCH_UNSUPPORTED = 0x3002,
67 /**
68 * Sampler descriptor is not supported or invalid.
69 */
70 HSA_EXT_STATUS_ERROR_SAMPLER_DESCRIPTOR_UNSUPPORTED = 0x3003
71 };
72
73 /**
74 * @brief Enumeration constants added to ::hsa_agent_info_t by this
75 * extension.
76 *
77 * @remark Additions to hsa_agent_info_t
78 */
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.
83 */
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.
88 */
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.
93 */
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].
99 */
100 HSA_EXT_AGENT_INFO_IMAGE_2D_MAX_ELEMENTS = 0x3003,
101 /**
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].
105 */
106 HSA_EXT_AGENT_INFO_IMAGE_2DA_MAX_ELEMENTS = 0x3004,
107 /**
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].
111 */
112 HSA_EXT_AGENT_INFO_IMAGE_2DDEPTH_MAX_ELEMENTS = 0x3005,
113 /**
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].
117 */
118 HSA_EXT_AGENT_INFO_IMAGE_2DADEPTH_MAX_ELEMENTS = 0x3006,
119 /**
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].
123 */
124 HSA_EXT_AGENT_INFO_IMAGE_3D_MAX_ELEMENTS = 0x3007,
125 /**
126 * Maximum number of image layers in a image array. Must be at least 2048. The
127 * type of this attribute is size_t.
128 */
129 HSA_EXT_AGENT_INFO_IMAGE_ARRAY_MAX_LAYERS = 0x3008,
130 /**
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.
133 */
134 HSA_EXT_AGENT_INFO_MAX_IMAGE_RD_HANDLES = 0x3009,
135 /**
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.
139 */
140 HSA_EXT_AGENT_INFO_MAX_IMAGE_RORW_HANDLES = 0x300A,
141 /**
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.
144 */
145 HSA_EXT_AGENT_INFO_MAX_SAMPLER_HANDLERS = 0x300B,
146 /**
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.
150 */
151 HSA_EXT_AGENT_INFO_IMAGE_LINEAR_ROW_PITCH_ALIGNMENT = 0x300C
152 };
153
154 /**
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.
158 *
159 */
160 typedef struct hsa_ext_image_s {
161 /**
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.
164 */
165 uint64_t handle;
166
167 } hsa_ext_image_t;
168
169 /**
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.
176 */
177 typedef enum {
178 /**
179 * One-dimensional image addressed by width coordinate.
180 */
181 HSA_EXT_IMAGE_GEOMETRY_1D = 0,
182
183 /**
184 * Two-dimensional image addressed by width and height coordinates.
185 */
186 HSA_EXT_IMAGE_GEOMETRY_2D = 1,
187
188 /**
189 * Three-dimensional image addressed by width, height, and depth coordinates.
190 */
191 HSA_EXT_IMAGE_GEOMETRY_3D = 2,
192
193 /**
194 * Array of one-dimensional images with the same size and format. 1D arrays
195 * are addressed by width and index coordinate.
196 */
197 HSA_EXT_IMAGE_GEOMETRY_1DA = 3,
198
199 /**
200 * Array of two-dimensional images with the same size and format. 2D arrays
201 * are addressed by width, height, and index coordinates.
202 */
203 HSA_EXT_IMAGE_GEOMETRY_2DA = 4,
204
205 /**
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.
211 */
212 HSA_EXT_IMAGE_GEOMETRY_1DB = 5,
213
214 /**
215 * Two-dimensional depth image addressed by width and height coordinates.
216 */
217 HSA_EXT_IMAGE_GEOMETRY_2DDEPTH = 6,
218
219 /**
220 * Array of two-dimensional depth images with the same size and format. 2D
221 * arrays are addressed by width, height, and index coordinates.
222 */
223 HSA_EXT_IMAGE_GEOMETRY_2DADEPTH = 7
224 } hsa_ext_image_geometry_t;
225
226 /**
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.
232 */
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;
251
252 /**
253 * @brief A fixed-size type used to represent ::hsa_ext_image_channel_type_t constants.
254 */
255 typedef uint32_t hsa_ext_image_channel_type32_t;
256
257 /**
258 *
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.
264 */
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;
287
288 /**
289 * @brief A fixed-size type used to represent ::hsa_ext_image_channel_order_t constants.
290 */
291 typedef uint32_t hsa_ext_image_channel_order32_t;
292
293
294 /**
295 * @brief Image format.
296 */
297 typedef struct hsa_ext_image_format_s {
298 /**
299 * Channel type.
300 */
301 hsa_ext_image_channel_type32_t channel_type;
302
303 /**
304 * Channel order.
305 */
306 hsa_ext_image_channel_order32_t channel_order;
307 } hsa_ext_image_format_t;
308
309 /**
310 * @brief Implementation independent image descriptor.
311 */
312 typedef struct hsa_ext_image_descriptor_s {
313 /**
314 * Image geometry.
315 */
316 hsa_ext_image_geometry_t geometry;
317 /**
318 * Width of the image, in components.
319 */
320 size_t width;
321 /**
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.
326 */
327 size_t height;
328 /**
329 * Depth of the image, in components. Only used if the geometry is
330 * ::HSA_EXT_IMAGE_GEOMETRY_3D, otherwise must be 0.
331 */
332 size_t depth;
333 /**
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.
337 */
338 size_t array_size;
339 /**
340 * Image format.
341 */
342 hsa_ext_image_format_t format;
343 } hsa_ext_image_descriptor_t;
344
345 /**
346 * @brief Image capability.
347 */
348 typedef enum {
349 /**
350 * Images of this geometry, format, and layout are not supported by
351 * the agent.
352 */
353 HSA_EXT_IMAGE_CAPABILITY_NOT_SUPPORTED = 0x0,
354 /**
355 * Read-only images of this geometry, format, and layout are
356 * supported by the agent.
357 */
358 HSA_EXT_IMAGE_CAPABILITY_READ_ONLY = 0x1,
359 /**
360 * Write-only images of this geometry, format, and layout are
361 * supported by the agent.
362 */
363 HSA_EXT_IMAGE_CAPABILITY_WRITE_ONLY = 0x2,
364 /**
365 * Read-write images of this geometry, format, and layout are
366 * supported by the agent.
367 */
368 HSA_EXT_IMAGE_CAPABILITY_READ_WRITE = 0x4,
369 /**
370 * @deprecated Images of this geometry, format, and layout can be accessed from
371 * read-modify-write atomic operations in the agent.
372 */
373 HSA_EXT_IMAGE_CAPABILITY_READ_MODIFY_WRITE = 0x8,
374 /**
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.
378 */
379 HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT = 0x10
380 } hsa_ext_image_capability_t;
381
382 /**
383 * @brief Image data layout.
384 *
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.
395 */
396
397 typedef enum {
398 /**
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.
402 */
403 HSA_EXT_IMAGE_DATA_LAYOUT_OPAQUE = 0x0,
404 /**
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.
417 *
418 * The 1DB image geometry always uses the linear image data layout.
419 */
420 HSA_EXT_IMAGE_DATA_LAYOUT_LINEAR = 0x1
421 } hsa_ext_image_data_layout_t;
422
423 /**
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.
427 *
428 * @param[in] agent Agent to be associated with the image handle.
429 *
430 * @param[in] geometry Geometry.
431 *
432 * @param[in] image_format Pointer to an image format. Must not be NULL.
433 *
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.
437 *
438 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
439 *
440 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
441 * initialized.
442 *
443 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
444 *
445 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p image_format is
446 * NULL, or @p capability_mask is NULL.
447 */
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);
453
454 /**
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.
458 *
459 * @param[in] agent Agent to be associated with the image handle.
460 *
461 * @param[in] geometry Geometry.
462 *
463 * @param[in] image_format Pointer to an image format. Must not be NULL.
464 *
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.
468 *
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.
472 *
473 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
474 *
475 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
476 * initialized.
477 *
478 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
479 *
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.
483 */
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);
490
491 /**
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.
494 */
495 typedef struct hsa_ext_image_data_info_s {
496 /**
497 * Image data size, in bytes.
498 */
499 size_t size;
500
501 /**
502 * Image data alignment, in bytes. Must always be a power of 2.
503 */
504 size_t alignment;
505
506 } hsa_ext_image_data_info_t;
507
508 /**
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.
512 *
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.
518 *
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.
526 *
527 * @param[in] agent Agent to be associated with the image handle.
528 *
529 * @param[in] image_descriptor Pointer to an image descriptor. Must not be NULL.
530 *
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.
537 *
538 * @param[out] image_data_info Memory location where the runtime stores the
539 * size and alignment requirements. Must not be NULL.
540 *
541 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
542 *
543 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
544 * initialized.
545 *
546 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
547 *
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.
551 *
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.
555 *
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.
559 */
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);
565
566 /**
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.
571 *
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.
577 *
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.
588 *
589 * @param[in] image_descriptor Pointer to an image descriptor. Must not be NULL.
590 *
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.
595 *
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.
599 *
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.
608 *
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.
618 *
619 * @param[out] image_data_info Memory location where the runtime stores the
620 * size and alignment requirements. Must not be NULL.
621 *
622 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
623 *
624 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
625 * initialized.
626 *
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.
630 *
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.
634 *
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.
638 *
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.
642 */
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);
651
652 /**
653 * @brief Creates an agent specific image handle to an image with an
654 * opaque image data layout.
655 *
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.
664 *
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.
668 *
669 * @param[in] agent agent to be associated with the image handle created.
670 *
671 * @param[in] image_descriptor Pointer to an image descriptor. Must not be NULL.
672 *
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.
676 *
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.
680 *
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.
687 *
688 * @param[out] image Pointer to a memory location where the HSA runtime stores
689 * the newly created image handle. Must not be NULL.
690 *
691 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
692 *
693 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
694 * initialized.
695 *
696 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
697 *
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.
701 *
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.
705 *
706 * @retval ::HSA_STATUS_ERROR_OUT_OF_RESOURCES The HSA runtime failed to allocate
707 * the required resources.
708 *
709 * support the creation of more image handles with the given @p access_permission).
710 *
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.
715 */
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);
722
723 /**
724 * @brief Creates an agent specific image handle to an image with an explicit
725 * image data layout.
726 *
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.
738 *
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.
742 *
743 * @param[in] agent agent to be associated with the image handle created.
744 *
745 * @param[in] image_descriptor Pointer to an image descriptor. Must not be NULL.
746 *
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.
750 *
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.
754 *
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.
761 *
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.
766 *
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.
775 *
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.
785 *
786 * @param[out] image Pointer to a memory location where the HSA runtime stores
787 * the newly created image handle. Must not be NULL.
788 *
789 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
790 *
791 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
792 * initialized.
793 *
794 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
795 *
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.
799 *
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.
804 *
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.
808 *
809 * @retval ::HSA_STATUS_ERROR_OUT_OF_RESOURCES The HSA runtime failed to allocate
810 * the required resources.
811 *
812 * support the creation of more image handles with the given @p access_permission).
813 *
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.
818 */
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);
828
829 /**
830 * @brief Destroy an image handle previously created using ::hsa_ext_image_create or
831 * ::hsa_ext_image_create_with_layout.
832 *
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.
837 *
838 * @param[in] agent Agent associated with the image handle.
839 *
840 * @param[in] image Image handle to destroy.
841 *
842 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
843 *
844 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
845 * initialized.
846 *
847 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
848 */
849 hsa_status_t HSA_API hsa_ext_image_destroy(
850 hsa_agent_t agent,
851 hsa_ext_image_t image);
852
853 /**
854 * @brief Copies a portion of one image (the source) to another image (the
855 * destination).
856 *
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.
863 *
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.
870 *
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.
874 *
875 * @param[in] agent Agent associated with both the source and destination image handles.
876 *
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.
879 *
880 * @param[in] src_offset Pointer to the offset within the source image where to
881 * copy the data from. Must not be NULL.
882 *
883 * @param[in] dst_image Image handle of destination image.
884 *
885 * @param[in] dst_offset Pointer to the offset within the destination
886 * image where to copy the data. Must not be NULL.
887 *
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.
891 *
892 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
893 *
894 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
895 * initialized.
896 *
897 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
898 *
899 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p src_offset is
900 * NULL, @p dst_offset is NULL, or @p range is NULL.
901 */
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);
909
910 /**
911 * @brief Image region.
912 */
913 typedef struct hsa_ext_image_region_s {
914 /**
915 * Offset within an image (in coordinates).
916 */
917 hsa_dim3_t offset;
918
919 /**
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.
922 */
923 hsa_dim3_t range;
924 } hsa_ext_image_region_t;
925
926 /**
927 * @brief Import a linearly organized image data from memory directly to an
928 * image handle.
929 *
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.
933 *
934 * It is the application's responsibility to avoid out of bounds memory access.
935 *
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.
939 *
940 * @param[in] agent Agent associated with the image handle.
941 *
942 * @param[in] src_memory Source memory. Must not be NULL.
943 *
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.
948 *
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.
958 *
959 * @param[in] dst_image Image handle of destination image.
960 *
961 * @param[in] image_region Pointer to the image region to be updated. Must not
962 * be NULL.
963 *
964 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
965 *
966 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
967 * initialized.
968 *
969 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
970 *
971 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p src_memory is NULL, or @p
972 * image_region is NULL.
973 *
974 */
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);
982
983 /**
984 * @brief Export the image data to linearly organized memory.
985 *
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.
989 *
990 * It is the application's responsibility to avoid out of bounds memory access.
991 *
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.
995 *
996 * @param[in] agent Agent associated with the image handle.
997 *
998 * @param[in] src_image Image handle of source image.
999 *
1000 * @param[in] dst_memory Destination memory. Must not be NULL.
1001 *
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.
1006 *
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.
1016 *
1017 * @param[in] image_region Pointer to the image region to be exported. Must not
1018 * be NULL.
1019 *
1020 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
1021 *
1022 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
1023 * initialized.
1024 *
1025 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
1026 *
1027 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p dst_memory is NULL, or @p
1028 * image_region is NULL.
1029 */
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);
1037
1038 /**
1039 * @brief Clear a region of an image so that every image element has
1040 * the specified value.
1041 *
1042 * @param[in] agent Agent associated with the image handle.
1043 *
1044 * @param[in] image Image handle for image to be cleared.
1045 *
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.
1056 *
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.
1060 *
1061 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
1062 *
1063 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
1064 * initialized.
1065 *
1066 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
1067 *
1068 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p data is NULL, or @p
1069 * image_region is NULL.
1070 */
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);
1076
1077 /**
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.
1081 */
1082 typedef struct hsa_ext_sampler_s {
1083 /**
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.
1086 */
1087 uint64_t handle;
1088 } hsa_ext_sampler_t;
1089
1090 /**
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.
1096 */
1097 typedef enum {
1098 /**
1099 * Out-of-range coordinates are not handled.
1100 */
1101 HSA_EXT_SAMPLER_ADDRESSING_MODE_UNDEFINED = 0,
1102
1103 /**
1104 * Clamp out-of-range coordinates to the image edge.
1105 */
1106 HSA_EXT_SAMPLER_ADDRESSING_MODE_CLAMP_TO_EDGE = 1,
1107
1108 /**
1109 * Clamp out-of-range coordinates to the image border color.
1110 */
1111 HSA_EXT_SAMPLER_ADDRESSING_MODE_CLAMP_TO_BORDER = 2,
1112
1113 /**
1114 * Wrap out-of-range coordinates back into the valid coordinate
1115 * range so the image appears as repeated tiles.
1116 */
1117 HSA_EXT_SAMPLER_ADDRESSING_MODE_REPEAT = 3,
1118
1119 /**
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.
1123 */
1124 HSA_EXT_SAMPLER_ADDRESSING_MODE_MIRRORED_REPEAT = 4
1125
1126 } hsa_ext_sampler_addressing_mode_t;
1127
1128 /**
1129 * @brief A fixed-size type used to represent ::hsa_ext_sampler_addressing_mode_t constants.
1130 */
1131 typedef uint32_t hsa_ext_sampler_addressing_mode32_t;
1132
1133 /**
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.
1139 */
1140 typedef enum {
1141
1142 /**
1143 * Coordinates are used to directly address an image element.
1144 */
1145 HSA_EXT_SAMPLER_COORDINATE_MODE_UNNORMALIZED = 0,
1146
1147 /**
1148 * Coordinates are scaled by the image dimension size before being
1149 * used to address an image element.
1150 */
1151 HSA_EXT_SAMPLER_COORDINATE_MODE_NORMALIZED = 1
1152
1153 } hsa_ext_sampler_coordinate_mode_t;
1154
1155 /**
1156 * @brief A fixed-size type used to represent ::hsa_ext_sampler_coordinate_mode_t constants.
1157 */
1158 typedef uint32_t hsa_ext_sampler_coordinate_mode32_t;
1159
1160
1161 /**
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.
1166 */
1167 typedef enum {
1168 /**
1169 * Filter to the image element nearest (in Manhattan distance) to the
1170 * specified coordinate.
1171 */
1172 HSA_EXT_SAMPLER_FILTER_MODE_NEAREST = 0,
1173
1174 /**
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.
1178 */
1179 HSA_EXT_SAMPLER_FILTER_MODE_LINEAR = 1
1180
1181 } hsa_ext_sampler_filter_mode_t;
1182
1183 /**
1184 * @brief A fixed-size type used to represent ::hsa_ext_sampler_filter_mode_t constants.
1185 */
1186 typedef uint32_t hsa_ext_sampler_filter_mode32_t;
1187
1188 /**
1189 * @brief Implementation independent sampler descriptor.
1190 */
1191 typedef struct hsa_ext_sampler_descriptor_s {
1192 /**
1193 * Sampler coordinate mode describes the normalization of image coordinates.
1194 */
1195 hsa_ext_sampler_coordinate_mode32_t coordinate_mode;
1196
1197 /**
1198 * Sampler filter type describes the type of sampling performed.
1199 */
1200 hsa_ext_sampler_filter_mode32_t filter_mode;
1201
1202 /**
1203 * Sampler address mode describes the processing of out-of-range image
1204 * coordinates.
1205 */
1206 hsa_ext_sampler_addressing_mode32_t address_mode;
1207
1208 } hsa_ext_sampler_descriptor_t;
1209
1210 /**
1211 * @brief Create an agent specific sampler handle for a given agent
1212 * independent sampler descriptor and agent.
1213 *
1214 * @param[in] agent Agent to be associated with the sampler handle created.
1215 *
1216 * @param[in] sampler_descriptor Pointer to a sampler descriptor. Must not be
1217 * NULL.
1218 *
1219 * @param[out] sampler Memory location where the HSA runtime stores the newly
1220 * created sampler handle. Must not be NULL.
1221 *
1222 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
1223 *
1224 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
1225 * initialized.
1226 *
1227 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
1228 *
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.
1232 *
1233 * @retval ::HSA_STATUS_ERROR_OUT_OF_RESOURCES The HSA runtime failed to allocate
1234 * the required resources.
1235 *
1236 * @retval ::HSA_STATUS_ERROR_INVALID_ARGUMENT @p sampler_descriptor is NULL, or
1237 * @p sampler is NULL.
1238 */
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);
1243
1244 /**
1245 * @brief Destroy a sampler handle previously created using ::hsa_ext_sampler_create.
1246 *
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.
1250 *
1251 * @param[in] agent Agent associated with the sampler handle.
1252 *
1253 * @param[in] sampler Sampler handle to destroy.
1254 *
1255 * @retval ::HSA_STATUS_SUCCESS The function has been executed successfully.
1256 *
1257 * @retval ::HSA_STATUS_ERROR_NOT_INITIALIZED The HSA runtime has not been
1258 * initialized.
1259 *
1260 * @retval ::HSA_STATUS_ERROR_INVALID_AGENT The agent is invalid.
1261 */
1262 hsa_status_t HSA_API hsa_ext_sampler_destroy(
1263 hsa_agent_t agent,
1264 hsa_ext_sampler_t sampler);
1265
1266
1267 #define hsa_ext_images_1_00
1268
1269 /**
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.
1271 */
1272 typedef struct hsa_ext_images_1_00_pfn_s {
1273
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);
1279
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);
1285
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);
1292
1293 hsa_status_t (*hsa_ext_image_destroy)(
1294 hsa_agent_t agent,
1295 hsa_ext_image_t image);
1296
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);
1304
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);
1312
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);
1320
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);
1326
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);
1331
1332 hsa_status_t (*hsa_ext_sampler_destroy)(
1333 hsa_agent_t agent,
1334 hsa_ext_sampler_t sampler);
1335
1336 } hsa_ext_images_1_00_pfn_t;
1337
1338 #define hsa_ext_images_1
1339
1340 /**
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.
1342 */
1343 typedef struct hsa_ext_images_1_pfn_s {
1344
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);
1350
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);
1356
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);
1363
1364 hsa_status_t (*hsa_ext_image_destroy)(
1365 hsa_agent_t agent,
1366 hsa_ext_image_t image);
1367
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);
1375
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);
1383
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);
1391
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);
1397
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);
1402
1403 hsa_status_t (*hsa_ext_sampler_destroy)(
1404 hsa_agent_t agent,
1405 hsa_ext_sampler_t sampler);
1406
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);
1413
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);
1422
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);
1432
1433 } hsa_ext_images_1_pfn_t;
1434 /** @} */
1435
1436 #ifdef __cplusplus
1437 } // end extern "C" block
1438 #endif /*__cplusplus*/
1439
1440 #endif