xref: /aosp_15_r20/external/OpenCL-CTS/test_common/harness/clImageHelper.h (revision 6467f958c7de8070b317fc65bcb0f6472e388d82)
1*6467f958SSadaf Ebrahimi //
2*6467f958SSadaf Ebrahimi // Copyright (c) 2017 The Khronos Group Inc.
3*6467f958SSadaf Ebrahimi //
4*6467f958SSadaf Ebrahimi // Licensed under the Apache License, Version 2.0 (the "License");
5*6467f958SSadaf Ebrahimi // you may not use this file except in compliance with the License.
6*6467f958SSadaf Ebrahimi // You may obtain a copy of the License at
7*6467f958SSadaf Ebrahimi //
8*6467f958SSadaf Ebrahimi //    http://www.apache.org/licenses/LICENSE-2.0
9*6467f958SSadaf Ebrahimi //
10*6467f958SSadaf Ebrahimi // Unless required by applicable law or agreed to in writing, software
11*6467f958SSadaf Ebrahimi // distributed under the License is distributed on an "AS IS" BASIS,
12*6467f958SSadaf Ebrahimi // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6467f958SSadaf Ebrahimi // See the License for the specific language governing permissions and
14*6467f958SSadaf Ebrahimi // limitations under the License.
15*6467f958SSadaf Ebrahimi //
16*6467f958SSadaf Ebrahimi #ifndef test_conformance_clImageHelper_h
17*6467f958SSadaf Ebrahimi #define test_conformance_clImageHelper_h
18*6467f958SSadaf Ebrahimi 
19*6467f958SSadaf Ebrahimi #ifdef __APPLE__
20*6467f958SSadaf Ebrahimi #include <OpenCL/opencl.h>
21*6467f958SSadaf Ebrahimi #else
22*6467f958SSadaf Ebrahimi #include <CL/cl.h>
23*6467f958SSadaf Ebrahimi #endif
24*6467f958SSadaf Ebrahimi 
25*6467f958SSadaf Ebrahimi #include <stdio.h>
26*6467f958SSadaf Ebrahimi #include "errorHelpers.h"
27*6467f958SSadaf Ebrahimi 
28*6467f958SSadaf Ebrahimi 
29*6467f958SSadaf Ebrahimi // helper function to replace clCreateImage2D , to make the existing code use
30*6467f958SSadaf Ebrahimi // the functions of version 1.2 and veriosn 1.1  respectively
31*6467f958SSadaf Ebrahimi 
create_image_2d(cl_context context,cl_mem_flags flags,const cl_image_format * image_format,size_t image_width,size_t image_height,size_t image_row_pitch,void * host_ptr,cl_int * errcode_ret)32*6467f958SSadaf Ebrahimi static inline cl_mem create_image_2d(cl_context context, cl_mem_flags flags,
33*6467f958SSadaf Ebrahimi                                      const cl_image_format *image_format,
34*6467f958SSadaf Ebrahimi                                      size_t image_width, size_t image_height,
35*6467f958SSadaf Ebrahimi                                      size_t image_row_pitch, void *host_ptr,
36*6467f958SSadaf Ebrahimi                                      cl_int *errcode_ret)
37*6467f958SSadaf Ebrahimi {
38*6467f958SSadaf Ebrahimi     cl_mem mImage = NULL;
39*6467f958SSadaf Ebrahimi 
40*6467f958SSadaf Ebrahimi     if (!(flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR)))
41*6467f958SSadaf Ebrahimi     {
42*6467f958SSadaf Ebrahimi         host_ptr = NULL;
43*6467f958SSadaf Ebrahimi     }
44*6467f958SSadaf Ebrahimi 
45*6467f958SSadaf Ebrahimi #ifdef CL_VERSION_1_2
46*6467f958SSadaf Ebrahimi     cl_image_desc image_desc_dest;
47*6467f958SSadaf Ebrahimi     image_desc_dest.image_type = CL_MEM_OBJECT_IMAGE2D;
48*6467f958SSadaf Ebrahimi     image_desc_dest.image_width = image_width;
49*6467f958SSadaf Ebrahimi     image_desc_dest.image_height = image_height;
50*6467f958SSadaf Ebrahimi     image_desc_dest.image_depth = 0; // not usedfor 2d
51*6467f958SSadaf Ebrahimi     image_desc_dest.image_array_size = 0; // not used for 2d
52*6467f958SSadaf Ebrahimi     image_desc_dest.image_row_pitch = image_row_pitch;
53*6467f958SSadaf Ebrahimi     image_desc_dest.image_slice_pitch = 0;
54*6467f958SSadaf Ebrahimi     image_desc_dest.num_mip_levels = 0;
55*6467f958SSadaf Ebrahimi     image_desc_dest.num_samples = 0;
56*6467f958SSadaf Ebrahimi     image_desc_dest.mem_object =
57*6467f958SSadaf Ebrahimi         NULL; // no image type of CL_MEM_OBJECT_IMAGE1D_BUFFER in
58*6467f958SSadaf Ebrahimi               // CL_VERSION_1_1, so always is NULL
59*6467f958SSadaf Ebrahimi     mImage = clCreateImage(context, flags, image_format, &image_desc_dest,
60*6467f958SSadaf Ebrahimi                            host_ptr, errcode_ret);
61*6467f958SSadaf Ebrahimi     if (errcode_ret && (*errcode_ret))
62*6467f958SSadaf Ebrahimi     {
63*6467f958SSadaf Ebrahimi         // Log an info message and rely on the calling function to produce an
64*6467f958SSadaf Ebrahimi         // error if necessary.
65*6467f958SSadaf Ebrahimi         log_info("clCreateImage failed (%d)\n", *errcode_ret);
66*6467f958SSadaf Ebrahimi     }
67*6467f958SSadaf Ebrahimi 
68*6467f958SSadaf Ebrahimi #else
69*6467f958SSadaf Ebrahimi     mImage =
70*6467f958SSadaf Ebrahimi         clCreateImage2D(context, flags, image_format, image_width, image_height,
71*6467f958SSadaf Ebrahimi                         image_row_pitch, host_ptr, errcode_ret);
72*6467f958SSadaf Ebrahimi     if (errcode_ret && (*errcode_ret))
73*6467f958SSadaf Ebrahimi     {
74*6467f958SSadaf Ebrahimi         // Log an info message and rely on the calling function to produce an
75*6467f958SSadaf Ebrahimi         // error if necessary.
76*6467f958SSadaf Ebrahimi         log_info("clCreateImage2D failed (%d)\n", *errcode_ret);
77*6467f958SSadaf Ebrahimi     }
78*6467f958SSadaf Ebrahimi #endif
79*6467f958SSadaf Ebrahimi 
80*6467f958SSadaf Ebrahimi     return mImage;
81*6467f958SSadaf Ebrahimi }
82*6467f958SSadaf Ebrahimi 
83*6467f958SSadaf Ebrahimi // helper function to replace clCreateImage2D , to make the existing code use
84*6467f958SSadaf Ebrahimi // the functions of version 1.2 and veriosn 1.1  respectively
85*6467f958SSadaf Ebrahimi 
86*6467f958SSadaf Ebrahimi static inline cl_mem
create_image_2d_buffer(cl_context context,cl_mem_flags flags,const cl_image_format * image_format,size_t image_width,size_t image_height,size_t image_row_pitch,cl_mem buffer,cl_int * errcode_ret)87*6467f958SSadaf Ebrahimi create_image_2d_buffer(cl_context context, cl_mem_flags flags,
88*6467f958SSadaf Ebrahimi                        const cl_image_format *image_format, size_t image_width,
89*6467f958SSadaf Ebrahimi                        size_t image_height, size_t image_row_pitch,
90*6467f958SSadaf Ebrahimi                        cl_mem buffer, cl_int *errcode_ret)
91*6467f958SSadaf Ebrahimi {
92*6467f958SSadaf Ebrahimi     cl_mem mImage = NULL;
93*6467f958SSadaf Ebrahimi 
94*6467f958SSadaf Ebrahimi     cl_image_desc image_desc_dest;
95*6467f958SSadaf Ebrahimi     image_desc_dest.image_type = CL_MEM_OBJECT_IMAGE2D;
96*6467f958SSadaf Ebrahimi     image_desc_dest.image_width = image_width;
97*6467f958SSadaf Ebrahimi     image_desc_dest.image_height = image_height;
98*6467f958SSadaf Ebrahimi     image_desc_dest.image_depth = 0; // not usedfor 2d
99*6467f958SSadaf Ebrahimi     image_desc_dest.image_array_size = 0; // not used for 2d
100*6467f958SSadaf Ebrahimi     image_desc_dest.image_row_pitch = image_row_pitch;
101*6467f958SSadaf Ebrahimi     image_desc_dest.image_slice_pitch = 0;
102*6467f958SSadaf Ebrahimi     image_desc_dest.num_mip_levels = 0;
103*6467f958SSadaf Ebrahimi     image_desc_dest.num_samples = 0;
104*6467f958SSadaf Ebrahimi     image_desc_dest.mem_object = buffer;
105*6467f958SSadaf Ebrahimi     mImage = clCreateImage(context, flags, image_format, &image_desc_dest, NULL,
106*6467f958SSadaf Ebrahimi                            errcode_ret);
107*6467f958SSadaf Ebrahimi     if (errcode_ret && (*errcode_ret))
108*6467f958SSadaf Ebrahimi     {
109*6467f958SSadaf Ebrahimi         // Log an info message and rely on the calling function to produce an
110*6467f958SSadaf Ebrahimi         // error if necessary.
111*6467f958SSadaf Ebrahimi         log_info("clCreateImage failed (%d)\n", *errcode_ret);
112*6467f958SSadaf Ebrahimi     }
113*6467f958SSadaf Ebrahimi 
114*6467f958SSadaf Ebrahimi     return mImage;
115*6467f958SSadaf Ebrahimi }
116*6467f958SSadaf Ebrahimi 
117*6467f958SSadaf Ebrahimi 
create_image_3d(cl_context context,cl_mem_flags flags,const cl_image_format * image_format,size_t image_width,size_t image_height,size_t image_depth,size_t image_row_pitch,size_t image_slice_pitch,void * host_ptr,cl_int * errcode_ret)118*6467f958SSadaf Ebrahimi static inline cl_mem create_image_3d(cl_context context, cl_mem_flags flags,
119*6467f958SSadaf Ebrahimi                                      const cl_image_format *image_format,
120*6467f958SSadaf Ebrahimi                                      size_t image_width, size_t image_height,
121*6467f958SSadaf Ebrahimi                                      size_t image_depth, size_t image_row_pitch,
122*6467f958SSadaf Ebrahimi                                      size_t image_slice_pitch, void *host_ptr,
123*6467f958SSadaf Ebrahimi                                      cl_int *errcode_ret)
124*6467f958SSadaf Ebrahimi {
125*6467f958SSadaf Ebrahimi     cl_mem mImage;
126*6467f958SSadaf Ebrahimi 
127*6467f958SSadaf Ebrahimi     if (!(flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR)))
128*6467f958SSadaf Ebrahimi     {
129*6467f958SSadaf Ebrahimi         host_ptr = NULL;
130*6467f958SSadaf Ebrahimi     }
131*6467f958SSadaf Ebrahimi 
132*6467f958SSadaf Ebrahimi #ifdef CL_VERSION_1_2
133*6467f958SSadaf Ebrahimi     cl_image_desc image_desc;
134*6467f958SSadaf Ebrahimi     image_desc.image_type = CL_MEM_OBJECT_IMAGE3D;
135*6467f958SSadaf Ebrahimi     image_desc.image_width = image_width;
136*6467f958SSadaf Ebrahimi     image_desc.image_height = image_height;
137*6467f958SSadaf Ebrahimi     image_desc.image_depth = image_depth;
138*6467f958SSadaf Ebrahimi     image_desc.image_array_size = 0; // not used for one image
139*6467f958SSadaf Ebrahimi     image_desc.image_row_pitch = image_row_pitch;
140*6467f958SSadaf Ebrahimi     image_desc.image_slice_pitch = image_slice_pitch;
141*6467f958SSadaf Ebrahimi     image_desc.num_mip_levels = 0;
142*6467f958SSadaf Ebrahimi     image_desc.num_samples = 0;
143*6467f958SSadaf Ebrahimi     image_desc.mem_object =
144*6467f958SSadaf Ebrahimi         NULL; // no image type of CL_MEM_OBJECT_IMAGE1D_BUFFER in
145*6467f958SSadaf Ebrahimi               // CL_VERSION_1_1, so always is NULL
146*6467f958SSadaf Ebrahimi     mImage = clCreateImage(context, flags, image_format, &image_desc, host_ptr,
147*6467f958SSadaf Ebrahimi                            errcode_ret);
148*6467f958SSadaf Ebrahimi     if (errcode_ret && (*errcode_ret))
149*6467f958SSadaf Ebrahimi     {
150*6467f958SSadaf Ebrahimi         // Log an info message and rely on the calling function to produce an
151*6467f958SSadaf Ebrahimi         // error if necessary.
152*6467f958SSadaf Ebrahimi         log_info("clCreateImage failed (%d)\n", *errcode_ret);
153*6467f958SSadaf Ebrahimi     }
154*6467f958SSadaf Ebrahimi 
155*6467f958SSadaf Ebrahimi #else
156*6467f958SSadaf Ebrahimi     mImage = clCreateImage3D(context, flags, image_format, image_width,
157*6467f958SSadaf Ebrahimi                              image_height, image_depth, image_row_pitch,
158*6467f958SSadaf Ebrahimi                              image_slice_pitch, host_ptr, errcode_ret);
159*6467f958SSadaf Ebrahimi     if (errcode_ret && (*errcode_ret))
160*6467f958SSadaf Ebrahimi     {
161*6467f958SSadaf Ebrahimi         // Log an info message and rely on the calling function to produce an
162*6467f958SSadaf Ebrahimi         // error if necessary.
163*6467f958SSadaf Ebrahimi         log_info("clCreateImage3D failed (%d)\n", *errcode_ret);
164*6467f958SSadaf Ebrahimi     }
165*6467f958SSadaf Ebrahimi #endif
166*6467f958SSadaf Ebrahimi 
167*6467f958SSadaf Ebrahimi     return mImage;
168*6467f958SSadaf Ebrahimi }
169*6467f958SSadaf Ebrahimi 
170*6467f958SSadaf Ebrahimi static inline cl_mem
create_image_2d_array(cl_context context,cl_mem_flags flags,const cl_image_format * image_format,size_t image_width,size_t image_height,size_t image_array_size,size_t image_row_pitch,size_t image_slice_pitch,void * host_ptr,cl_int * errcode_ret)171*6467f958SSadaf Ebrahimi create_image_2d_array(cl_context context, cl_mem_flags flags,
172*6467f958SSadaf Ebrahimi                       const cl_image_format *image_format, size_t image_width,
173*6467f958SSadaf Ebrahimi                       size_t image_height, size_t image_array_size,
174*6467f958SSadaf Ebrahimi                       size_t image_row_pitch, size_t image_slice_pitch,
175*6467f958SSadaf Ebrahimi                       void *host_ptr, cl_int *errcode_ret)
176*6467f958SSadaf Ebrahimi {
177*6467f958SSadaf Ebrahimi     cl_mem mImage;
178*6467f958SSadaf Ebrahimi 
179*6467f958SSadaf Ebrahimi     if (!(flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR)))
180*6467f958SSadaf Ebrahimi     {
181*6467f958SSadaf Ebrahimi         host_ptr = NULL;
182*6467f958SSadaf Ebrahimi     }
183*6467f958SSadaf Ebrahimi 
184*6467f958SSadaf Ebrahimi     cl_image_desc image_desc;
185*6467f958SSadaf Ebrahimi     image_desc.image_type = CL_MEM_OBJECT_IMAGE2D_ARRAY;
186*6467f958SSadaf Ebrahimi     image_desc.image_width = image_width;
187*6467f958SSadaf Ebrahimi     image_desc.image_height = image_height;
188*6467f958SSadaf Ebrahimi     image_desc.image_depth = 1;
189*6467f958SSadaf Ebrahimi     image_desc.image_array_size = image_array_size;
190*6467f958SSadaf Ebrahimi     image_desc.image_row_pitch = image_row_pitch;
191*6467f958SSadaf Ebrahimi     image_desc.image_slice_pitch = image_slice_pitch;
192*6467f958SSadaf Ebrahimi     image_desc.num_mip_levels = 0;
193*6467f958SSadaf Ebrahimi     image_desc.num_samples = 0;
194*6467f958SSadaf Ebrahimi     image_desc.mem_object = NULL;
195*6467f958SSadaf Ebrahimi     mImage = clCreateImage(context, flags, image_format, &image_desc, host_ptr,
196*6467f958SSadaf Ebrahimi                            errcode_ret);
197*6467f958SSadaf Ebrahimi     if (errcode_ret && (*errcode_ret))
198*6467f958SSadaf Ebrahimi     {
199*6467f958SSadaf Ebrahimi         // Log an info message and rely on the calling function to produce an
200*6467f958SSadaf Ebrahimi         // error if necessary.
201*6467f958SSadaf Ebrahimi         log_info("clCreateImage failed (%d)\n", *errcode_ret);
202*6467f958SSadaf Ebrahimi     }
203*6467f958SSadaf Ebrahimi 
204*6467f958SSadaf Ebrahimi     return mImage;
205*6467f958SSadaf Ebrahimi }
206*6467f958SSadaf Ebrahimi 
create_image_1d_array(cl_context context,cl_mem_flags flags,const cl_image_format * image_format,size_t image_width,size_t image_array_size,size_t image_row_pitch,size_t image_slice_pitch,void * host_ptr,cl_int * errcode_ret)207*6467f958SSadaf Ebrahimi static inline cl_mem create_image_1d_array(
208*6467f958SSadaf Ebrahimi     cl_context context, cl_mem_flags flags, const cl_image_format *image_format,
209*6467f958SSadaf Ebrahimi     size_t image_width, size_t image_array_size, size_t image_row_pitch,
210*6467f958SSadaf Ebrahimi     size_t image_slice_pitch, void *host_ptr, cl_int *errcode_ret)
211*6467f958SSadaf Ebrahimi {
212*6467f958SSadaf Ebrahimi     cl_mem mImage;
213*6467f958SSadaf Ebrahimi 
214*6467f958SSadaf Ebrahimi     if (!(flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR)))
215*6467f958SSadaf Ebrahimi     {
216*6467f958SSadaf Ebrahimi         host_ptr = NULL;
217*6467f958SSadaf Ebrahimi     }
218*6467f958SSadaf Ebrahimi 
219*6467f958SSadaf Ebrahimi     cl_image_desc image_desc;
220*6467f958SSadaf Ebrahimi     image_desc.image_type = CL_MEM_OBJECT_IMAGE1D_ARRAY;
221*6467f958SSadaf Ebrahimi     image_desc.image_width = image_width;
222*6467f958SSadaf Ebrahimi     image_desc.image_height = 1;
223*6467f958SSadaf Ebrahimi     image_desc.image_depth = 1;
224*6467f958SSadaf Ebrahimi     image_desc.image_array_size = image_array_size;
225*6467f958SSadaf Ebrahimi     image_desc.image_row_pitch = image_row_pitch;
226*6467f958SSadaf Ebrahimi     image_desc.image_slice_pitch = image_slice_pitch;
227*6467f958SSadaf Ebrahimi     image_desc.num_mip_levels = 0;
228*6467f958SSadaf Ebrahimi     image_desc.num_samples = 0;
229*6467f958SSadaf Ebrahimi     image_desc.mem_object = NULL;
230*6467f958SSadaf Ebrahimi     mImage = clCreateImage(context, flags, image_format, &image_desc, host_ptr,
231*6467f958SSadaf Ebrahimi                            errcode_ret);
232*6467f958SSadaf Ebrahimi     if (errcode_ret && (*errcode_ret))
233*6467f958SSadaf Ebrahimi     {
234*6467f958SSadaf Ebrahimi         // Log an info message and rely on the calling function to produce an
235*6467f958SSadaf Ebrahimi         // error if necessary.
236*6467f958SSadaf Ebrahimi         log_info("clCreateImage failed (%d)\n", *errcode_ret);
237*6467f958SSadaf Ebrahimi     }
238*6467f958SSadaf Ebrahimi 
239*6467f958SSadaf Ebrahimi     return mImage;
240*6467f958SSadaf Ebrahimi }
241*6467f958SSadaf Ebrahimi 
create_image_1d(cl_context context,cl_mem_flags flags,const cl_image_format * image_format,size_t image_width,size_t image_row_pitch,void * host_ptr,cl_mem buffer,cl_int * errcode_ret)242*6467f958SSadaf Ebrahimi static inline cl_mem create_image_1d(cl_context context, cl_mem_flags flags,
243*6467f958SSadaf Ebrahimi                                      const cl_image_format *image_format,
244*6467f958SSadaf Ebrahimi                                      size_t image_width, size_t image_row_pitch,
245*6467f958SSadaf Ebrahimi                                      void *host_ptr, cl_mem buffer,
246*6467f958SSadaf Ebrahimi                                      cl_int *errcode_ret)
247*6467f958SSadaf Ebrahimi {
248*6467f958SSadaf Ebrahimi     cl_mem mImage;
249*6467f958SSadaf Ebrahimi 
250*6467f958SSadaf Ebrahimi     if (!(flags & (CL_MEM_USE_HOST_PTR | CL_MEM_COPY_HOST_PTR)))
251*6467f958SSadaf Ebrahimi     {
252*6467f958SSadaf Ebrahimi         host_ptr = NULL;
253*6467f958SSadaf Ebrahimi     }
254*6467f958SSadaf Ebrahimi 
255*6467f958SSadaf Ebrahimi     cl_image_desc image_desc;
256*6467f958SSadaf Ebrahimi     image_desc.image_type =
257*6467f958SSadaf Ebrahimi         buffer ? CL_MEM_OBJECT_IMAGE1D_BUFFER : CL_MEM_OBJECT_IMAGE1D;
258*6467f958SSadaf Ebrahimi     image_desc.image_width = image_width;
259*6467f958SSadaf Ebrahimi     image_desc.image_height = 1;
260*6467f958SSadaf Ebrahimi     image_desc.image_depth = 1;
261*6467f958SSadaf Ebrahimi     image_desc.image_row_pitch = image_row_pitch;
262*6467f958SSadaf Ebrahimi     image_desc.image_slice_pitch = 0;
263*6467f958SSadaf Ebrahimi     image_desc.num_mip_levels = 0;
264*6467f958SSadaf Ebrahimi     image_desc.num_samples = 0;
265*6467f958SSadaf Ebrahimi     image_desc.mem_object = buffer;
266*6467f958SSadaf Ebrahimi     mImage = clCreateImage(context, flags, image_format, &image_desc, host_ptr,
267*6467f958SSadaf Ebrahimi                            errcode_ret);
268*6467f958SSadaf Ebrahimi     if (errcode_ret && (*errcode_ret))
269*6467f958SSadaf Ebrahimi     {
270*6467f958SSadaf Ebrahimi         // Log an info message and rely on the calling function to produce an
271*6467f958SSadaf Ebrahimi         // error if necessary.
272*6467f958SSadaf Ebrahimi         log_info("clCreateImage failed (%d)\n", *errcode_ret);
273*6467f958SSadaf Ebrahimi     }
274*6467f958SSadaf Ebrahimi 
275*6467f958SSadaf Ebrahimi     return mImage;
276*6467f958SSadaf Ebrahimi }
277*6467f958SSadaf Ebrahimi 
278*6467f958SSadaf Ebrahimi 
279*6467f958SSadaf Ebrahimi #endif
280