1/* HSA Extensions API 1.0.1 representation description. 2 Copyright (C) 2016-2020 Free Software Foundation, Inc. 3 4This file is part of GCC. 5 6GCC is free software; you can redistribute it and/or modify 7it under the terms of the GNU General Public License as published by 8the Free Software Foundation; either version 3, or (at your option) 9any later version. 10 11GCC is distributed in the hope that it will be useful, 12but WITHOUT ANY WARRANTY; without even the implied warranty of 13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14GNU General Public License for more details. 15 16Under Section 7 of GPL version 3, you are granted additional 17permissions described in the GCC Runtime Library Exception, version 183.1, as published by the Free Software Foundation. 19 20You should have received a copy of the GNU General Public License and 21a copy of the GCC Runtime Library Exception along with this program; 22see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23<http://www.gnu.org/licenses/>. 24 25The contents of the file was created by extracting data structures, enum, 26typedef and other definitions from HSA Runtime Programmer���s Reference Manual 27Version 1.0 (http://www.hsafoundation.com/standards/). 28 29HTML version is provided on the following link: 30http://www.hsafoundation.com/html/Content/Runtime/Topics/Runtime_title_page.htm 31*/ 32 33 34#ifndef _HSA_EXT_FINALIZE_H 35#define _HSA_EXT_FINALIZE_H 1 36 37struct BrigModuleHeader; 38typedef struct BrigModuleHeader *BrigModule_t; 39 40typedef enum { 41 HSA_EXT_IMAGE_GEOMETRY_1D = 0, 42 HSA_EXT_IMAGE_GEOMETRY_2D = 1, 43 HSA_EXT_IMAGE_GEOMETRY_3D = 2, 44 HSA_EXT_IMAGE_GEOMETRY_1DA = 3, 45 HSA_EXT_IMAGE_GEOMETRY_2DA = 4, 46 HSA_EXT_IMAGE_GEOMETRY_1DB = 5, 47 HSA_EXT_IMAGE_GEOMETRY_2DDEPTH = 6, 48 HSA_EXT_IMAGE_GEOMETRY_2DADEPTH = 7 49} hsa_ext_image_geometry_t; 50 51typedef enum { 52 HSA_EXT_IMAGE_CHANNEL_TYPE_SNORM_INT8 = 0, 53 HSA_EXT_IMAGE_CHANNEL_TYPE_SNORM_INT16 = 1, 54 HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_INT8 = 2, 55 HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_INT16 = 3, 56 HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_INT24 = 4, 57 HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_SHORT_555 = 5, 58 HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_SHORT_565 = 6, 59 HSA_EXT_IMAGE_CHANNEL_TYPE_UNORM_SHORT_101010 = 7, 60 HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT8 = 8, 61 HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT16 = 9, 62 HSA_EXT_IMAGE_CHANNEL_TYPE_SIGNED_INT32 = 10, 63 HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT8 = 11, 64 HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT16 = 12, 65 HSA_EXT_IMAGE_CHANNEL_TYPE_UNSIGNED_INT32 = 13, 66 HSA_EXT_IMAGE_CHANNEL_TYPE_HALF_FLOAT = 14, 67 HSA_EXT_IMAGE_CHANNEL_TYPE_FLOAT = 15 68} hsa_ext_image_channel_type_t; 69 70typedef enum { 71 HSA_EXT_IMAGE_CHANNEL_ORDER_A = 0, 72 HSA_EXT_IMAGE_CHANNEL_ORDER_R = 1, 73 HSA_EXT_IMAGE_CHANNEL_ORDER_RX = 2, 74 HSA_EXT_IMAGE_CHANNEL_ORDER_RG = 3, 75 HSA_EXT_IMAGE_CHANNEL_ORDER_RGX = 4, 76 HSA_EXT_IMAGE_CHANNEL_ORDER_RA = 5, 77 HSA_EXT_IMAGE_CHANNEL_ORDER_RGB = 6, 78 HSA_EXT_IMAGE_CHANNEL_ORDER_RGBX = 7, 79 HSA_EXT_IMAGE_CHANNEL_ORDER_RGBA = 8, 80 HSA_EXT_IMAGE_CHANNEL_ORDER_BGRA = 9, 81 HSA_EXT_IMAGE_CHANNEL_ORDER_ARGB = 10, 82 HSA_EXT_IMAGE_CHANNEL_ORDER_ABGR = 11, 83 HSA_EXT_IMAGE_CHANNEL_ORDER_SRGB = 12, 84 HSA_EXT_IMAGE_CHANNEL_ORDER_SRGBX = 13, 85 HSA_EXT_IMAGE_CHANNEL_ORDER_SRGBA = 14, 86 HSA_EXT_IMAGE_CHANNEL_ORDER_SBGRA = 15, 87 HSA_EXT_IMAGE_CHANNEL_ORDER_INTENSITY = 16, 88 HSA_EXT_IMAGE_CHANNEL_ORDER_LUMINANCE = 17, 89 HSA_EXT_IMAGE_CHANNEL_ORDER_DEPTH = 18, 90 HSA_EXT_IMAGE_CHANNEL_ORDER_DEPTH_STENCIL = 19 91} hsa_ext_image_channel_order_t; 92 93typedef struct hsa_ext_image_format_s 94{ 95 hsa_ext_image_channel_type_t channel_type; 96 hsa_ext_image_channel_order_t channel_order; 97} hsa_ext_image_format_t; 98 99typedef struct hsa_ext_sampler_s 100{ 101 uint64_t handle; 102} hsa_ext_sampler_t; 103typedef struct hsa_ext_image_data_info_s 104{ 105 size_t size; 106 size_t alignment; 107} hsa_ext_image_data_info_t; 108typedef enum { 109 HSA_EXT_SAMPLER_ADDRESSING_MODE_UNDEFINED = 0, 110 HSA_EXT_SAMPLER_ADDRESSING_MODE_CLAMP_TO_EDGE = 1, 111 HSA_EXT_SAMPLER_ADDRESSING_MODE_CLAMP_TO_BORDER = 2, 112 HSA_EXT_SAMPLER_ADDRESSING_MODE_REPEAT = 3, 113 HSA_EXT_SAMPLER_ADDRESSING_MODE_MIRRORED_REPEAT = 4 114} hsa_ext_sampler_addressing_mode_t; 115typedef struct hsa_ext_image_s 116{ 117 uint64_t handle; 118} hsa_ext_image_t; 119typedef enum { 120 HSA_EXT_IMAGE_CAPABILITY_NOT_SUPPORTED = 0x0, 121 HSA_EXT_IMAGE_CAPABILITY_READ_ONLY = 0x1, 122 HSA_EXT_IMAGE_CAPABILITY_WRITE_ONLY = 0x2, 123 HSA_EXT_IMAGE_CAPABILITY_READ_WRITE = 0x4, 124 HSA_EXT_IMAGE_CAPABILITY_READ_MODIFY_WRITE = 0x8, 125 HSA_EXT_IMAGE_CAPABILITY_ACCESS_INVARIANT_DATA_LAYOUT = 0x10 126} hsa_ext_image_capability_t; 127typedef struct hsa_ext_control_directives_s 128{ 129 uint64_t control_directives_mask; 130 uint16_t break_exceptions_mask; 131 uint16_t detect_exceptions_mask; 132 uint32_t max_dynamic_group_size; 133 uint64_t max_flat_grid_size; 134 uint32_t max_flat_workgroup_size; 135 uint32_t reserved1; 136 uint64_t required_grid_size[3]; 137 hsa_dim3_t required_workgroup_size; 138 uint8_t required_dim; 139 uint8_t reserved2[75]; 140} hsa_ext_control_directives_t; 141typedef enum { 142 HSA_EXT_SAMPLER_FILTER_MODE_NEAREST = 0, 143 HSA_EXT_SAMPLER_FILTER_MODE_LINEAR = 1 144} hsa_ext_sampler_filter_mode_t; 145 146typedef enum { 147 HSA_EXT_SAMPLER_COORDINATE_MODE_UNNORMALIZED = 0, 148 HSA_EXT_SAMPLER_COORDINATE_MODE_NORMALIZED = 1 149} hsa_ext_sampler_coordinate_mode_t; 150typedef enum { 151 HSA_EXT_FINALIZER_CALL_CONVENTION_AUTO = -1 152} hsa_ext_finalizer_call_convention_t; 153typedef struct hsa_ext_program_s 154{ 155 uint64_t handle; 156} hsa_ext_program_t; 157typedef struct hsa_ext_image_descriptor_s 158{ 159 hsa_ext_image_geometry_t geometry; 160 size_t width; 161 size_t height; 162 size_t depth; 163 size_t array_size; 164 hsa_ext_image_format_t format; 165} hsa_ext_image_descriptor_t; 166typedef enum { 167 HSA_EXT_PROGRAM_INFO_MACHINE_MODEL = 0, 168 HSA_EXT_PROGRAM_INFO_PROFILE = 1, 169 HSA_EXT_PROGRAM_INFO_DEFAULT_FLOAT_ROUNDING_MODE = 2 170} hsa_ext_program_info_t; 171typedef BrigModule_t hsa_ext_module_t; 172typedef struct hsa_ext_sampler_descriptor_s 173{ 174 hsa_ext_sampler_coordinate_mode_t coordinate_mode; 175 hsa_ext_sampler_filter_mode_t filter_mode; 176 hsa_ext_sampler_addressing_mode_t address_mode; 177} hsa_ext_sampler_descriptor_t; 178 179typedef struct hsa_ext_image_region_s 180{ 181 hsa_dim3_t offset; 182 hsa_dim3_t range; 183} hsa_ext_image_region_t; 184hsa_status_t hsa_ext_image_export (hsa_agent_t agent, hsa_ext_image_t src_image, 185 void *dst_memory, size_t dst_row_pitch, 186 size_t dst_slice_pitch, 187 const hsa_ext_image_region_t *image_region); 188hsa_status_t hsa_ext_program_add_module (hsa_ext_program_t program, 189 hsa_ext_module_t module); 190hsa_status_t hsa_ext_program_iterate_modules ( 191 hsa_ext_program_t program, 192 hsa_status_t (*callback) (hsa_ext_program_t program, hsa_ext_module_t module, 193 void *data), 194 void *data); 195hsa_status_t hsa_ext_program_create ( 196 hsa_machine_model_t machine_model, hsa_profile_t profile, 197 hsa_default_float_rounding_mode_t default_float_rounding_mode, 198 const char *options, hsa_ext_program_t *program); 199hsa_status_t 200hsa_ext_image_data_get_info (hsa_agent_t agent, 201 const hsa_ext_image_descriptor_t *image_descriptor, 202 hsa_access_permission_t access_permission, 203 hsa_ext_image_data_info_t *image_data_info); 204 205hsa_status_t hsa_ext_image_import (hsa_agent_t agent, const void *src_memory, 206 size_t src_row_pitch, size_t src_slice_pitch, 207 hsa_ext_image_t dst_image, 208 const hsa_ext_image_region_t *image_region); 209hsa_status_t hsa_ext_program_get_info (hsa_ext_program_t program, 210 hsa_ext_program_info_t attribute, 211 void *value); 212enum 213{ 214 HSA_EXT_STATUS_ERROR_IMAGE_FORMAT_UNSUPPORTED = 0x3000, 215 HSA_EXT_STATUS_ERROR_IMAGE_SIZE_UNSUPPORTED = 0x3001 216}; 217hsa_status_t hsa_ext_image_destroy (hsa_agent_t agent, hsa_ext_image_t image); 218hsa_status_t hsa_ext_image_get_capability ( 219 hsa_agent_t agent, hsa_ext_image_geometry_t geometry, 220 const hsa_ext_image_format_t *image_format, uint32_t *capability_mask); 221enum 222{ 223 HSA_EXT_STATUS_ERROR_INVALID_PROGRAM = 0x2000, 224 HSA_EXT_STATUS_ERROR_INVALID_MODULE = 0x2001, 225 HSA_EXT_STATUS_ERROR_INCOMPATIBLE_MODULE = 0x2002, 226 HSA_EXT_STATUS_ERROR_MODULE_ALREADY_INCLUDED = 0x2003, 227 HSA_EXT_STATUS_ERROR_SYMBOL_MISMATCH = 0x2004, 228 HSA_EXT_STATUS_ERROR_FINALIZATION_FAILED = 0x2005, 229 HSA_EXT_STATUS_ERROR_DIRECTIVE_MISMATCH = 0x2006 230}; 231hsa_status_t hsa_ext_sampler_destroy (hsa_agent_t agent, 232 hsa_ext_sampler_t sampler); 233hsa_status_t hsa_ext_program_finalize ( 234 hsa_ext_program_t program, hsa_isa_t isa, int32_t call_convention, 235 hsa_ext_control_directives_t control_directives, const char *options, 236 hsa_code_object_type_t code_object_type, hsa_code_object_t *code_object); 237hsa_status_t hsa_ext_image_create ( 238 hsa_agent_t agent, const hsa_ext_image_descriptor_t *image_descriptor, 239 const void *image_data, hsa_access_permission_t access_permission, 240 hsa_ext_image_t *image); 241hsa_status_t hsa_ext_program_destroy (hsa_ext_program_t program); 242hsa_status_t hsa_ext_image_copy (hsa_agent_t agent, hsa_ext_image_t src_image, 243 const hsa_dim3_t *src_offset, 244 hsa_ext_image_t dst_image, 245 const hsa_dim3_t *dst_offset, 246 const hsa_dim3_t *range); 247hsa_status_t hsa_ext_image_clear (hsa_agent_t agent, hsa_ext_image_t image, 248 const void *data, 249 const hsa_ext_image_region_t *image_region); 250enum 251{ 252 HSA_EXT_AGENT_INFO_IMAGE_1D_MAX_ELEMENTS = 0x3000, 253 HSA_EXT_AGENT_INFO_IMAGE_1DA_MAX_ELEMENTS = 0x3001, 254 HSA_EXT_AGENT_INFO_IMAGE_1DB_MAX_ELEMENTS = 0x3002, 255 HSA_EXT_AGENT_INFO_IMAGE_2D_MAX_ELEMENTS = 0x3003, 256 HSA_EXT_AGENT_INFO_IMAGE_2DA_MAX_ELEMENTS = 0x3004, 257 HSA_EXT_AGENT_INFO_IMAGE_2DDEPTH_MAX_ELEMENTS = 0x3005, 258 HSA_EXT_AGENT_INFO_IMAGE_2DADEPTH_MAX_ELEMENTS = 0x3006, 259 HSA_EXT_AGENT_INFO_IMAGE_3D_MAX_ELEMENTS = 0x3007, 260 HSA_EXT_AGENT_INFO_IMAGE_ARRAY_MAX_LAYERS = 0x3008, 261 HSA_EXT_AGENT_INFO_MAX_IMAGE_RD_HANDLES = 0x3009, 262 HSA_EXT_AGENT_INFO_MAX_IMAGE_RORW_HANDLES = 0x300A, 263 HSA_EXT_AGENT_INFO_MAX_SAMPLER_HANDLERS = 0x300B 264}; 265hsa_status_t 266hsa_ext_sampler_create (hsa_agent_t agent, 267 const hsa_ext_sampler_descriptor_t *sampler_descriptor, 268 hsa_ext_sampler_t *sampler); 269 270#endif /* _HSA_EXT_FINALIZE_H */ 271