1 /* See LICENSE file in the root OpenCV directory */
2 
3 #ifndef OPENCV_CORE_OCL_RUNTIME_OPENCL_SVM_HSA_EXTENSION_HPP
4 #define OPENCV_CORE_OCL_RUNTIME_OPENCL_SVM_HSA_EXTENSION_HPP
5 
6 #if defined(HAVE_OPENCL_SVM)
7 #include "opencl_core.hpp"
8 
9 #ifndef CL_DEVICE_SVM_CAPABILITIES_AMD
10 //
11 //  Part of the file is an extract from the cl_ext.h file from AMD APP SDK package.
12 //  Below is the original copyright.
13 //
14 /*******************************************************************************
15  * Copyright (c) 2008-2013 The Khronos Group Inc.
16  *
17  * Permission is hereby granted, free of charge, to any person obtaining a
18  * copy of this software and/or associated documentation files (the
19  * "Materials"), to deal in the Materials without restriction, including
20  * without limitation the rights to use, copy, modify, merge, publish,
21  * distribute, sublicense, and/or sell copies of the Materials, and to
22  * permit persons to whom the Materials are furnished to do so, subject to
23  * the following conditions:
24  *
25  * The above copyright notice and this permission notice shall be included
26  * in all copies or substantial portions of the Materials.
27  *
28  * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
31  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
32  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
33  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
34  * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
35  ******************************************************************************/
36 
37 /*******************************************
38  * Shared Virtual Memory (SVM) extension
39  *******************************************/
40 typedef cl_bitfield                      cl_device_svm_capabilities_amd;
41 typedef cl_bitfield                      cl_svm_mem_flags_amd;
42 typedef cl_uint                          cl_kernel_exec_info_amd;
43 
44 /* cl_device_info */
45 #define CL_DEVICE_SVM_CAPABILITIES_AMD                     0x1053
46 #define CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT_AMD  0x1054
47 
48 /* cl_device_svm_capabilities_amd */
49 #define CL_DEVICE_SVM_COARSE_GRAIN_BUFFER_AMD             (1 << 0)
50 #define CL_DEVICE_SVM_FINE_GRAIN_BUFFER_AMD               (1 << 1)
51 #define CL_DEVICE_SVM_FINE_GRAIN_SYSTEM_AMD               (1 << 2)
52 #define CL_DEVICE_SVM_ATOMICS_AMD                         (1 << 3)
53 
54 /* cl_svm_mem_flags_amd */
55 #define CL_MEM_SVM_FINE_GRAIN_BUFFER_AMD                  (1 << 10)
56 #define CL_MEM_SVM_ATOMICS_AMD                            (1 << 11)
57 
58 /* cl_mem_info */
59 #define CL_MEM_USES_SVM_POINTER_AMD                       0x1109
60 
61 /* cl_kernel_exec_info_amd */
62 #define CL_KERNEL_EXEC_INFO_SVM_PTRS_AMD                  0x11B6
63 #define CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM_AMD     0x11B7
64 
65 /* cl_command_type */
66 #define CL_COMMAND_SVM_FREE_AMD                           0x1209
67 #define CL_COMMAND_SVM_MEMCPY_AMD                         0x120A
68 #define CL_COMMAND_SVM_MEMFILL_AMD                        0x120B
69 #define CL_COMMAND_SVM_MAP_AMD                            0x120C
70 #define CL_COMMAND_SVM_UNMAP_AMD                          0x120D
71 
72 typedef CL_API_ENTRY void*
73 (CL_API_CALL * clSVMAllocAMD_fn)(
74     cl_context            /* context */,
75     cl_svm_mem_flags_amd  /* flags */,
76     size_t                /* size */,
77     unsigned int          /* alignment */
78 ) CL_EXT_SUFFIX__VERSION_1_2;
79 
80 typedef CL_API_ENTRY void
81 (CL_API_CALL * clSVMFreeAMD_fn)(
82     cl_context  /* context */,
83     void*       /* svm_pointer */
84 ) CL_EXT_SUFFIX__VERSION_1_2;
85 
86 typedef CL_API_ENTRY cl_int
87 (CL_API_CALL * clEnqueueSVMFreeAMD_fn)(
88     cl_command_queue /* command_queue */,
89     cl_uint          /* num_svm_pointers */,
90     void**           /* svm_pointers */,
91     void (CL_CALLBACK *)( /*pfn_free_func*/
92         cl_command_queue /* queue */,
93         cl_uint          /* num_svm_pointers */,
94         void**           /* svm_pointers */,
95         void*            /* user_data */),
96     void*             /* user_data */,
97     cl_uint           /* num_events_in_wait_list */,
98     const cl_event*   /* event_wait_list */,
99     cl_event*         /* event */
100 ) CL_EXT_SUFFIX__VERSION_1_2;
101 
102 typedef CL_API_ENTRY cl_int
103 (CL_API_CALL * clEnqueueSVMMemcpyAMD_fn)(
104     cl_command_queue /* command_queue */,
105     cl_bool          /* blocking_copy */,
106     void*            /* dst_ptr */,
107     const void*      /* src_ptr */,
108     size_t           /* size */,
109     cl_uint          /* num_events_in_wait_list */,
110     const cl_event*  /* event_wait_list */,
111     cl_event*        /* event */
112 ) CL_EXT_SUFFIX__VERSION_1_2;
113 
114 typedef CL_API_ENTRY cl_int
115 (CL_API_CALL * clEnqueueSVMMemFillAMD_fn)(
116     cl_command_queue /* command_queue */,
117     void*            /* svm_ptr */,
118     const void*      /* pattern */,
119     size_t           /* pattern_size */,
120     size_t           /* size */,
121     cl_uint          /* num_events_in_wait_list */,
122     const cl_event*  /* event_wait_list */,
123     cl_event*        /* event */
124 ) CL_EXT_SUFFIX__VERSION_1_2;
125 
126 typedef CL_API_ENTRY cl_int
127 (CL_API_CALL * clEnqueueSVMMapAMD_fn)(
128     cl_command_queue /* command_queue */,
129     cl_bool          /* blocking_map */,
130     cl_map_flags     /* map_flags */,
131     void*            /* svm_ptr */,
132     size_t           /* size */,
133     cl_uint          /* num_events_in_wait_list */,
134     const cl_event*  /* event_wait_list */,
135     cl_event*        /* event */
136 ) CL_EXT_SUFFIX__VERSION_1_2;
137 
138 typedef CL_API_ENTRY cl_int
139 (CL_API_CALL * clEnqueueSVMUnmapAMD_fn)(
140     cl_command_queue /* command_queue */,
141     void*            /* svm_ptr */,
142     cl_uint          /* num_events_in_wait_list */,
143     const cl_event*  /* event_wait_list */,
144     cl_event*        /* event */
145 ) CL_EXT_SUFFIX__VERSION_1_2;
146 
147 typedef CL_API_ENTRY cl_int
148 (CL_API_CALL * clSetKernelArgSVMPointerAMD_fn)(
149     cl_kernel     /* kernel */,
150     cl_uint       /* arg_index */,
151     const void *  /* arg_value */
152 ) CL_EXT_SUFFIX__VERSION_1_2;
153 
154 typedef CL_API_ENTRY cl_int
155 (CL_API_CALL * clSetKernelExecInfoAMD_fn)(
156      cl_kernel                /* kernel */,
157      cl_kernel_exec_info_amd  /* param_name */,
158      size_t                   /* param_value_size */,
159      const void *             /* param_value */
160 ) CL_EXT_SUFFIX__VERSION_1_2;
161 
162 #endif
163 
164 #endif // HAVE_OPENCL_SVM
165 
166 #endif // OPENCV_CORE_OCL_RUNTIME_OPENCL_SVM_HSA_EXTENSION_HPP
167