xref: /aosp_15_r20/external/OpenCL-CTS/test_conformance/profiling/writeImage.cpp (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 #include "harness/compat.h"
17*6467f958SSadaf Ebrahimi 
18*6467f958SSadaf Ebrahimi #include <stdio.h>
19*6467f958SSadaf Ebrahimi #include <string.h>
20*6467f958SSadaf Ebrahimi #include <sys/types.h>
21*6467f958SSadaf Ebrahimi #include <sys/stat.h>
22*6467f958SSadaf Ebrahimi 
23*6467f958SSadaf Ebrahimi #include "procs.h"
24*6467f958SSadaf Ebrahimi #include "harness/testHarness.h"
25*6467f958SSadaf Ebrahimi #include "harness/errorHelpers.h"
26*6467f958SSadaf Ebrahimi 
27*6467f958SSadaf Ebrahimi //--- the code for the kernel executables
28*6467f958SSadaf Ebrahimi static const char *readKernelCode[] = {
29*6467f958SSadaf Ebrahimi "__kernel void testReadf(read_only image2d_t srcimg, __global float4 *dst)\n"
30*6467f958SSadaf Ebrahimi "{\n"
31*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
32*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
33*6467f958SSadaf Ebrahimi "    int    indx = tid_y * get_image_width(srcimg) + tid_x;\n"
34*6467f958SSadaf Ebrahimi "    float4 color;\n"
35*6467f958SSadaf Ebrahimi "\n"
36*6467f958SSadaf Ebrahimi "    const sampler_t sampler = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST | CLK_NORMALIZED_COORDS_FALSE;\n"
37*6467f958SSadaf Ebrahimi "    color = read_imagef(srcimg, sampler, (int2)(tid_x, tid_y));\n"
38*6467f958SSadaf Ebrahimi "     dst[indx].x = color.x;\n"
39*6467f958SSadaf Ebrahimi "     dst[indx].y = color.y;\n"
40*6467f958SSadaf Ebrahimi "     dst[indx].z = color.z;\n"
41*6467f958SSadaf Ebrahimi "     dst[indx].w = color.w;\n"
42*6467f958SSadaf Ebrahimi "\n"
43*6467f958SSadaf Ebrahimi "}\n",
44*6467f958SSadaf Ebrahimi 
45*6467f958SSadaf Ebrahimi "__kernel void testReadi(read_only image2d_t srcimg, __global uchar4 *dst)\n"
46*6467f958SSadaf Ebrahimi "{\n"
47*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
48*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
49*6467f958SSadaf Ebrahimi "    int    indx = tid_y * get_image_width(srcimg) + tid_x;\n"
50*6467f958SSadaf Ebrahimi "    int4    color;\n"
51*6467f958SSadaf Ebrahimi "\n"
52*6467f958SSadaf Ebrahimi "    const sampler_t sampler = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST | CLK_NORMALIZED_COORDS_FALSE;\n"
53*6467f958SSadaf Ebrahimi "    color = read_imagei(srcimg, sampler, (int2)(tid_x, tid_y));\n"
54*6467f958SSadaf Ebrahimi "  uchar4 dst_write;\n"
55*6467f958SSadaf Ebrahimi "     dst_write.x = (uchar)color.x;\n"
56*6467f958SSadaf Ebrahimi "     dst_write.y = (uchar)color.y;\n"
57*6467f958SSadaf Ebrahimi "     dst_write.z = (uchar)color.z;\n"
58*6467f958SSadaf Ebrahimi "     dst_write.w = (uchar)color.w;\n"
59*6467f958SSadaf Ebrahimi "  dst[indx] = dst_write;\n"
60*6467f958SSadaf Ebrahimi "\n"
61*6467f958SSadaf Ebrahimi "}\n",
62*6467f958SSadaf Ebrahimi 
63*6467f958SSadaf Ebrahimi "__kernel void testReadui(read_only image2d_t srcimg, __global uchar4 *dst)\n"
64*6467f958SSadaf Ebrahimi "{\n"
65*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
66*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
67*6467f958SSadaf Ebrahimi "    int    indx = tid_y * get_image_width(srcimg) + tid_x;\n"
68*6467f958SSadaf Ebrahimi "    uint4    color;\n"
69*6467f958SSadaf Ebrahimi "\n"
70*6467f958SSadaf Ebrahimi "    const sampler_t sampler = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST | CLK_NORMALIZED_COORDS_FALSE;\n"
71*6467f958SSadaf Ebrahimi "    color = read_imageui(srcimg, sampler, (int2)(tid_x, tid_y));\n"
72*6467f958SSadaf Ebrahimi "  uchar4 dst_write;\n"
73*6467f958SSadaf Ebrahimi "     dst_write.x = (uchar)color.x;\n"
74*6467f958SSadaf Ebrahimi "     dst_write.y = (uchar)color.y;\n"
75*6467f958SSadaf Ebrahimi "     dst_write.z = (uchar)color.z;\n"
76*6467f958SSadaf Ebrahimi "     dst_write.w = (uchar)color.w;\n"
77*6467f958SSadaf Ebrahimi "  dst[indx] = dst_write;\n"
78*6467f958SSadaf Ebrahimi "\n"
79*6467f958SSadaf Ebrahimi "}\n",
80*6467f958SSadaf Ebrahimi 
81*6467f958SSadaf Ebrahimi "__kernel void testWritef(__global uchar *src, write_only image2d_t dstimg)\n"
82*6467f958SSadaf Ebrahimi "{\n"
83*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
84*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
85*6467f958SSadaf Ebrahimi "    int    indx = tid_y * get_image_width(dstimg) + tid_x;\n"
86*6467f958SSadaf Ebrahimi "    float4 color;\n"
87*6467f958SSadaf Ebrahimi "\n"
88*6467f958SSadaf Ebrahimi "    indx *= 4;\n"
89*6467f958SSadaf Ebrahimi "    color = (float4)((float)src[indx+0], (float)src[indx+1], (float)src[indx+2], (float)src[indx+3]);\n"
90*6467f958SSadaf Ebrahimi "     color /= (float4)(255.f, 255.f, 255.f, 255.f);\n"
91*6467f958SSadaf Ebrahimi "    write_imagef(dstimg, (int2)(tid_x, tid_y), color);\n"
92*6467f958SSadaf Ebrahimi "\n"
93*6467f958SSadaf Ebrahimi "}\n",
94*6467f958SSadaf Ebrahimi 
95*6467f958SSadaf Ebrahimi "__kernel void testWritei(__global char *src, write_only image2d_t dstimg)\n"
96*6467f958SSadaf Ebrahimi "{\n"
97*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
98*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
99*6467f958SSadaf Ebrahimi "    int    indx = tid_y * get_image_width(dstimg) + tid_x;\n"
100*6467f958SSadaf Ebrahimi "    int4    color;\n"
101*6467f958SSadaf Ebrahimi "\n"
102*6467f958SSadaf Ebrahimi "    indx *= 4;\n"
103*6467f958SSadaf Ebrahimi "     color.x = (int)src[indx+0];\n"
104*6467f958SSadaf Ebrahimi "     color.y = (int)src[indx+1];\n"
105*6467f958SSadaf Ebrahimi "     color.z = (int)src[indx+2];\n"
106*6467f958SSadaf Ebrahimi "     color.w = (int)src[indx+3];\n"
107*6467f958SSadaf Ebrahimi "    write_imagei(dstimg, (int2)(tid_x, tid_y), color);\n"
108*6467f958SSadaf Ebrahimi "\n"
109*6467f958SSadaf Ebrahimi "}\n",
110*6467f958SSadaf Ebrahimi 
111*6467f958SSadaf Ebrahimi "__kernel void testWriteui(__global uchar *src, write_only image2d_t dstimg)\n"
112*6467f958SSadaf Ebrahimi "{\n"
113*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
114*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
115*6467f958SSadaf Ebrahimi "    int    indx = tid_y * get_image_width(dstimg) + tid_x;\n"
116*6467f958SSadaf Ebrahimi "    uint4    color;\n"
117*6467f958SSadaf Ebrahimi "\n"
118*6467f958SSadaf Ebrahimi "    indx *= 4;\n"
119*6467f958SSadaf Ebrahimi "     color.x = (uint)src[indx+0];\n"
120*6467f958SSadaf Ebrahimi "     color.y = (uint)src[indx+1];\n"
121*6467f958SSadaf Ebrahimi "     color.z = (uint)src[indx+2];\n"
122*6467f958SSadaf Ebrahimi "     color.w = (uint)src[indx+3];\n"
123*6467f958SSadaf Ebrahimi "    write_imageui(dstimg, (int2)(tid_x, tid_y), color);\n"
124*6467f958SSadaf Ebrahimi "\n"
125*6467f958SSadaf Ebrahimi "}\n",
126*6467f958SSadaf Ebrahimi 
127*6467f958SSadaf Ebrahimi "__kernel void testReadWriteff(read_only image2d_t srcimg, write_only image2d_t dstimg)\n"
128*6467f958SSadaf Ebrahimi "{\n"
129*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
130*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
131*6467f958SSadaf Ebrahimi "    float4 color;\n"
132*6467f958SSadaf Ebrahimi "\n"
133*6467f958SSadaf Ebrahimi "    color = read_imagef(srcimg, CLK_DEFAULT_SAMPLER, (int2)(tid_x, tid_y));\n"
134*6467f958SSadaf Ebrahimi "    write_imagef(dstimg, (int2)(tid_x, tid_y), color);\n"
135*6467f958SSadaf Ebrahimi "\n"
136*6467f958SSadaf Ebrahimi "}\n",
137*6467f958SSadaf Ebrahimi 
138*6467f958SSadaf Ebrahimi "__kernel void testReadWriteii(read_only image2d_t srcimg, write_only image2d_t dstimg)\n"
139*6467f958SSadaf Ebrahimi "{\n"
140*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
141*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
142*6467f958SSadaf Ebrahimi "    int4    color;\n"
143*6467f958SSadaf Ebrahimi "\n"
144*6467f958SSadaf Ebrahimi "    color = read_imagei(srcimg, CLK_DEFAULT_SAMPLER, (int2)(tid_x, tid_y));\n"
145*6467f958SSadaf Ebrahimi "    write_imagei(dstimg, (int2)(tid_x, tid_y), color);\n"
146*6467f958SSadaf Ebrahimi "\n"
147*6467f958SSadaf Ebrahimi "}\n",
148*6467f958SSadaf Ebrahimi 
149*6467f958SSadaf Ebrahimi "__kernel void testReadWriteuiui(read_only image2d_t srcimg, write_only image2d_t dstimg)\n"
150*6467f958SSadaf Ebrahimi "{\n"
151*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
152*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
153*6467f958SSadaf Ebrahimi "    uint4    color;\n"
154*6467f958SSadaf Ebrahimi "\n"
155*6467f958SSadaf Ebrahimi "    color = read_imageui(srcimg, CLK_DEFAULT_SAMPLER, (int2)(tid_x, tid_y));\n"
156*6467f958SSadaf Ebrahimi "    write_imageui(dstimg, (int2)(tid_x, tid_y), color);\n"
157*6467f958SSadaf Ebrahimi "\n"
158*6467f958SSadaf Ebrahimi "}\n",
159*6467f958SSadaf Ebrahimi 
160*6467f958SSadaf Ebrahimi "__kernel void testReadWritefi(read_only image2d_t srcimg, write_only image2d_t dstimg)\n"
161*6467f958SSadaf Ebrahimi "{\n"
162*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
163*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
164*6467f958SSadaf Ebrahimi "    float4 colorf;\n"
165*6467f958SSadaf Ebrahimi "     int4    colori;\n"
166*6467f958SSadaf Ebrahimi "\n"
167*6467f958SSadaf Ebrahimi "    const sampler_t sampler = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST | CLK_NORMALIZED_COORDS_FALSE;\n"
168*6467f958SSadaf Ebrahimi "    colorf = read_imagef(srcimg, sampler, (int2)(tid_x, tid_y));\n"
169*6467f958SSadaf Ebrahimi // since we are going from unsigned to signed, be sure to convert
170*6467f958SSadaf Ebrahimi // values greater 0.5 to negative values
171*6467f958SSadaf Ebrahimi "     if( colorf.x >= 0.5f )\n"
172*6467f958SSadaf Ebrahimi "         colori.x = (int)( ( colorf.x - 1.f ) * 255.f );\n"
173*6467f958SSadaf Ebrahimi "     else\n"
174*6467f958SSadaf Ebrahimi "         colori.x = (int)( colorf.x * 255.f );\n"
175*6467f958SSadaf Ebrahimi "     if( colorf.y >= 0.5f )\n"
176*6467f958SSadaf Ebrahimi "         colori.y = (int)( ( colorf.y - 1.f ) * 255.f );\n"
177*6467f958SSadaf Ebrahimi "     else\n"
178*6467f958SSadaf Ebrahimi "         colori.y = (int)( colorf.y * 255.f );\n"
179*6467f958SSadaf Ebrahimi "     if( colorf.z >= 0.5f )\n"
180*6467f958SSadaf Ebrahimi "         colori.z = (int)( ( colorf.z - 1.f ) * 255.f );\n"
181*6467f958SSadaf Ebrahimi "     else\n"
182*6467f958SSadaf Ebrahimi "         colori.z = (int)( colorf.z * 255.f );\n"
183*6467f958SSadaf Ebrahimi "     if( colorf.w >= 0.5f )\n"
184*6467f958SSadaf Ebrahimi "         colori.w = (int)( ( colorf.w - 1.f ) * 255.f );\n"
185*6467f958SSadaf Ebrahimi "     else\n"
186*6467f958SSadaf Ebrahimi "         colori.w = (int)( colorf.w * 255.f );\n"
187*6467f958SSadaf Ebrahimi "    write_imagei(dstimg, (int2)(tid_x, tid_y), colori);\n"
188*6467f958SSadaf Ebrahimi "\n"
189*6467f958SSadaf Ebrahimi "}\n",
190*6467f958SSadaf Ebrahimi 
191*6467f958SSadaf Ebrahimi "__kernel void testReadWritefui(read_only image2d_t srcimg, write_only image2d_t dstimg)\n"
192*6467f958SSadaf Ebrahimi "{\n"
193*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
194*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
195*6467f958SSadaf Ebrahimi "    float4    colorf;\n"
196*6467f958SSadaf Ebrahimi "     uint4    colorui;\n"
197*6467f958SSadaf Ebrahimi "\n"
198*6467f958SSadaf Ebrahimi "    const sampler_t sampler = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST | CLK_NORMALIZED_COORDS_FALSE;\n"
199*6467f958SSadaf Ebrahimi "    colorf = read_imagef(srcimg, sampler, (int2)(tid_x, tid_y));\n"
200*6467f958SSadaf Ebrahimi "     colorui.x = (uint)( colorf.x * 255.f );\n"
201*6467f958SSadaf Ebrahimi "     colorui.y = (uint)( colorf.y * 255.f );\n"
202*6467f958SSadaf Ebrahimi "     colorui.z = (uint)( colorf.z * 255.f );\n"
203*6467f958SSadaf Ebrahimi "     colorui.w = (uint)( colorf.w * 255.f );\n"
204*6467f958SSadaf Ebrahimi "    write_imageui(dstimg, (int2)(tid_x, tid_y), colorui);\n"
205*6467f958SSadaf Ebrahimi "\n"
206*6467f958SSadaf Ebrahimi "}\n",
207*6467f958SSadaf Ebrahimi 
208*6467f958SSadaf Ebrahimi "__kernel void testReadWriteif(read_only image2d_t srcimg, write_only image2d_t dstimg)\n"
209*6467f958SSadaf Ebrahimi "{\n"
210*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
211*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
212*6467f958SSadaf Ebrahimi "    int4    colori;\n"
213*6467f958SSadaf Ebrahimi "    float4    colorf;\n"
214*6467f958SSadaf Ebrahimi "\n"
215*6467f958SSadaf Ebrahimi // since we are going from signed to unsigned, we need to adjust the rgba values from
216*6467f958SSadaf Ebrahimi // from the signed image to add 256 to the signed image values less than 0.
217*6467f958SSadaf Ebrahimi "    const sampler_t sampler = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST | CLK_NORMALIZED_COORDS_FALSE;\n"
218*6467f958SSadaf Ebrahimi "    colori = read_imagei(srcimg, sampler, (int2)(tid_x, tid_y));\n"
219*6467f958SSadaf Ebrahimi "     if( colori.x < 0 )\n"
220*6467f958SSadaf Ebrahimi "        colorf.x = ( (float)colori.x + 256.f ) / 255.f;\n"
221*6467f958SSadaf Ebrahimi "     else\n"
222*6467f958SSadaf Ebrahimi "        colorf.x = (float)colori.x / 255.f;\n"
223*6467f958SSadaf Ebrahimi "     if( colori.y < 0 )\n"
224*6467f958SSadaf Ebrahimi "        colorf.y = ( (float)colori.y + 256.f ) / 255.f;\n"
225*6467f958SSadaf Ebrahimi "     else\n"
226*6467f958SSadaf Ebrahimi "        colorf.y = (float)colori.y / 255.f;\n"
227*6467f958SSadaf Ebrahimi "     if( colori.z < 0 )\n"
228*6467f958SSadaf Ebrahimi "        colorf.z = ( (float)colori.z + 256.f ) / 255.f;\n"
229*6467f958SSadaf Ebrahimi "     else\n"
230*6467f958SSadaf Ebrahimi "        colorf.z = (float)colori.z / 255.f;\n"
231*6467f958SSadaf Ebrahimi "     if( colori.w < 0 )\n"
232*6467f958SSadaf Ebrahimi "        colorf.w = ( (float)colori.w + 256.f ) / 255.f;\n"
233*6467f958SSadaf Ebrahimi "     else\n"
234*6467f958SSadaf Ebrahimi "        colorf.w = (float)colori.w / 255.f;\n"
235*6467f958SSadaf Ebrahimi "    write_imagef(dstimg, (int2)(tid_x, tid_y), colorf);\n"
236*6467f958SSadaf Ebrahimi "\n"
237*6467f958SSadaf Ebrahimi "}\n",
238*6467f958SSadaf Ebrahimi 
239*6467f958SSadaf Ebrahimi "__kernel void testReadWriteiui(read_only image2d_t srcimg, write_only image2d_t dstimg)\n"
240*6467f958SSadaf Ebrahimi "{\n"
241*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
242*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
243*6467f958SSadaf Ebrahimi "    int4    colori;\n"
244*6467f958SSadaf Ebrahimi "    uint4    colorui;\n"
245*6467f958SSadaf Ebrahimi "\n"
246*6467f958SSadaf Ebrahimi "    const sampler_t sampler = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST | CLK_NORMALIZED_COORDS_FALSE;\n"
247*6467f958SSadaf Ebrahimi "    colori = read_imagei(srcimg, sampler, (int2)(tid_x, tid_y));\n"
248*6467f958SSadaf Ebrahimi // since we are going from signed to unsigned, we need to adjust the rgba values from
249*6467f958SSadaf Ebrahimi // from the signed image to add 256 to the signed image values less than 0.
250*6467f958SSadaf Ebrahimi "     if( colori.x < 0 )\n"
251*6467f958SSadaf Ebrahimi "        colorui.x = (uint)( colori.x + 256 );\n"
252*6467f958SSadaf Ebrahimi "     else\n"
253*6467f958SSadaf Ebrahimi "        colorui.x = (uint)colori.x;\n"
254*6467f958SSadaf Ebrahimi "     if( colori.y < 0 )\n"
255*6467f958SSadaf Ebrahimi "        colorui.y = (uint)( colori.y + 256 );\n"
256*6467f958SSadaf Ebrahimi "     else\n"
257*6467f958SSadaf Ebrahimi "        colorui.y = (uint)colori.y;\n"
258*6467f958SSadaf Ebrahimi "     if( colori.z < 0 )\n"
259*6467f958SSadaf Ebrahimi "        colorui.z = (uint)( colori.z + 256 );\n"
260*6467f958SSadaf Ebrahimi "     else\n"
261*6467f958SSadaf Ebrahimi "        colorui.z = (uint)colori.z;\n"
262*6467f958SSadaf Ebrahimi "     if( colori.w < 0 )\n"
263*6467f958SSadaf Ebrahimi "        colorui.w = (uint)( colori.w + 256 );\n"
264*6467f958SSadaf Ebrahimi "     else\n"
265*6467f958SSadaf Ebrahimi "        colorui.w = (uint)colori.w;\n"
266*6467f958SSadaf Ebrahimi "    write_imageui(dstimg, (int2)(tid_x, tid_y), colorui);\n"
267*6467f958SSadaf Ebrahimi "\n"
268*6467f958SSadaf Ebrahimi "}\n",
269*6467f958SSadaf Ebrahimi 
270*6467f958SSadaf Ebrahimi "__kernel void testReadWriteuif(read_only image2d_t srcimg, write_only image2d_t dstimg)\n"
271*6467f958SSadaf Ebrahimi "{\n"
272*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
273*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
274*6467f958SSadaf Ebrahimi "    uint4    colorui;\n"
275*6467f958SSadaf Ebrahimi "    float4    colorf;\n"
276*6467f958SSadaf Ebrahimi "\n"
277*6467f958SSadaf Ebrahimi "    const sampler_t sampler = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST | CLK_NORMALIZED_COORDS_FALSE;\n"
278*6467f958SSadaf Ebrahimi "    colorui = read_imageui(srcimg, sampler, (int2)(tid_x, tid_y));\n"
279*6467f958SSadaf Ebrahimi "     colorf.x = (float)colorui.x / 255.f;\n"
280*6467f958SSadaf Ebrahimi "     colorf.y = (float)colorui.y / 255.f;\n"
281*6467f958SSadaf Ebrahimi "     colorf.z = (float)colorui.z / 255.f;\n"
282*6467f958SSadaf Ebrahimi "     colorf.w = (float)colorui.w / 255.f;\n"
283*6467f958SSadaf Ebrahimi "    write_imagef(dstimg, (int2)(tid_x, tid_y), colorf);\n"
284*6467f958SSadaf Ebrahimi "\n"
285*6467f958SSadaf Ebrahimi "}\n",
286*6467f958SSadaf Ebrahimi 
287*6467f958SSadaf Ebrahimi "__kernel void testReadWriteuii(read_only image2d_t srcimg, write_only image2d_t dstimg)\n"
288*6467f958SSadaf Ebrahimi "{\n"
289*6467f958SSadaf Ebrahimi "    int    tid_x = get_global_id(0);\n"
290*6467f958SSadaf Ebrahimi "    int    tid_y = get_global_id(1);\n"
291*6467f958SSadaf Ebrahimi "    uint4    colorui;\n"
292*6467f958SSadaf Ebrahimi "    int4    colori;\n"
293*6467f958SSadaf Ebrahimi "\n"
294*6467f958SSadaf Ebrahimi "    const sampler_t sampler = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST | CLK_NORMALIZED_COORDS_FALSE;\n"
295*6467f958SSadaf Ebrahimi "    colorui = read_imageui(srcimg, sampler, (int2)(tid_x, tid_y));\n"
296*6467f958SSadaf Ebrahimi // since we are going from unsigned to signed, be sure to convert
297*6467f958SSadaf Ebrahimi // values greater 0.5 to negative values
298*6467f958SSadaf Ebrahimi "     if( colorui.x >= 128U )\n"
299*6467f958SSadaf Ebrahimi "         colori.x = (int)colorui.x - 256;\n"
300*6467f958SSadaf Ebrahimi "     else\n"
301*6467f958SSadaf Ebrahimi "         colori.x = (int)colorui.x;\n"
302*6467f958SSadaf Ebrahimi "     if( colorui.y >= 128U )\n"
303*6467f958SSadaf Ebrahimi "         colori.y = (int)colorui.y - 256;\n"
304*6467f958SSadaf Ebrahimi "     else\n"
305*6467f958SSadaf Ebrahimi "         colori.y = (int)colorui.y;\n"
306*6467f958SSadaf Ebrahimi "     if( colorui.z >= 128U )\n"
307*6467f958SSadaf Ebrahimi "         colori.z = (int)colorui.z - 256;\n"
308*6467f958SSadaf Ebrahimi "     else\n"
309*6467f958SSadaf Ebrahimi "         colori.z = (int)colorui.z;\n"
310*6467f958SSadaf Ebrahimi "     if( colorui.w >= 128U )\n"
311*6467f958SSadaf Ebrahimi "         colori.w = (int)colorui.w - 256;\n"
312*6467f958SSadaf Ebrahimi "     else\n"
313*6467f958SSadaf Ebrahimi "         colori.w = (int)colorui.w;\n"
314*6467f958SSadaf Ebrahimi "    write_imagei(dstimg, (int2)(tid_x, tid_y), colori);\n"
315*6467f958SSadaf Ebrahimi "\n"
316*6467f958SSadaf Ebrahimi "}\n" };
317*6467f958SSadaf Ebrahimi 
318*6467f958SSadaf Ebrahimi static const char *readKernelName[] = { "testReadf", "testReadi", "testReadui", "testWritef", "testWritei", "testWriteui",
319*6467f958SSadaf Ebrahimi "testReadWriteff", "testReadWriteii", "testReadWriteuiui", "testReadWritefi",
320*6467f958SSadaf Ebrahimi "testReadWritefui", "testReadWriteif", "testReadWriteiui", "testReadWriteuif",
321*6467f958SSadaf Ebrahimi "testReadWriteuii" };
322*6467f958SSadaf Ebrahimi 
323*6467f958SSadaf Ebrahimi 
generateImage(int n,MTdata d)324*6467f958SSadaf Ebrahimi static cl_uchar *generateImage( int n, MTdata d )
325*6467f958SSadaf Ebrahimi {
326*6467f958SSadaf Ebrahimi     cl_uchar    *ptr = (cl_uchar *)malloc( n * sizeof( cl_uchar ) );
327*6467f958SSadaf Ebrahimi     int        i;
328*6467f958SSadaf Ebrahimi 
329*6467f958SSadaf Ebrahimi     for( i = 0; i < n; i++ ){
330*6467f958SSadaf Ebrahimi         ptr[i] = (cl_uchar)genrand_int32(d);
331*6467f958SSadaf Ebrahimi     }
332*6467f958SSadaf Ebrahimi 
333*6467f958SSadaf Ebrahimi     return ptr;
334*6467f958SSadaf Ebrahimi 
335*6467f958SSadaf Ebrahimi }
336*6467f958SSadaf Ebrahimi 
337*6467f958SSadaf Ebrahimi 
generateSignedImage(int n,MTdata d)338*6467f958SSadaf Ebrahimi static char *generateSignedImage( int n, MTdata d )
339*6467f958SSadaf Ebrahimi {
340*6467f958SSadaf Ebrahimi     char    *ptr = (char *)malloc( n * sizeof( char ) );
341*6467f958SSadaf Ebrahimi     int        i;
342*6467f958SSadaf Ebrahimi 
343*6467f958SSadaf Ebrahimi     for( i = 0; i < n; i++ ){
344*6467f958SSadaf Ebrahimi         ptr[i] = (char)genrand_int32(d);
345*6467f958SSadaf Ebrahimi     }
346*6467f958SSadaf Ebrahimi 
347*6467f958SSadaf Ebrahimi     return ptr;
348*6467f958SSadaf Ebrahimi 
349*6467f958SSadaf Ebrahimi }
350*6467f958SSadaf Ebrahimi 
351*6467f958SSadaf Ebrahimi 
verifyImage(cl_uchar * image,cl_uchar * outptr,int w,int h)352*6467f958SSadaf Ebrahimi static int verifyImage( cl_uchar *image, cl_uchar *outptr, int w, int h )
353*6467f958SSadaf Ebrahimi {
354*6467f958SSadaf Ebrahimi     int     i;
355*6467f958SSadaf Ebrahimi 
356*6467f958SSadaf Ebrahimi     for( i = 0; i < w * h * 4; i++ ){
357*6467f958SSadaf Ebrahimi         if( outptr[i] != image[i] ){
358*6467f958SSadaf Ebrahimi             log_error("Image verification failed at offset %d. Actual value=%d, expected value=%d\n", i, outptr[i], image[i]);
359*6467f958SSadaf Ebrahimi             return -1;
360*6467f958SSadaf Ebrahimi         }
361*6467f958SSadaf Ebrahimi     }
362*6467f958SSadaf Ebrahimi 
363*6467f958SSadaf Ebrahimi     return 0;
364*6467f958SSadaf Ebrahimi }
365*6467f958SSadaf Ebrahimi 
verifyImageFloat(cl_double * refptr,cl_float * outptr,int w,int h)366*6467f958SSadaf Ebrahimi static int verifyImageFloat ( cl_double *refptr, cl_float *outptr, int w, int h )
367*6467f958SSadaf Ebrahimi {
368*6467f958SSadaf Ebrahimi     int     i;
369*6467f958SSadaf Ebrahimi 
370*6467f958SSadaf Ebrahimi     for (i=0; i<w*h*4; i++)
371*6467f958SSadaf Ebrahimi     {
372*6467f958SSadaf Ebrahimi         if (outptr[i] != (float)refptr[i])
373*6467f958SSadaf Ebrahimi         {
374*6467f958SSadaf Ebrahimi             float ulps = Ulp_Error( outptr[i], refptr[i]);
375*6467f958SSadaf Ebrahimi 
376*6467f958SSadaf Ebrahimi             if(! (fabsf(ulps) < 1.5f) )
377*6467f958SSadaf Ebrahimi             {
378*6467f958SSadaf Ebrahimi                 log_error( "ERROR: Data sample %d does not validate! Expected (%a), got (%a), ulp %f\n",
379*6467f958SSadaf Ebrahimi                     (int)i, refptr[i], outptr[ i ],  ulps );
380*6467f958SSadaf Ebrahimi                 return -1;
381*6467f958SSadaf Ebrahimi             }
382*6467f958SSadaf Ebrahimi         }
383*6467f958SSadaf Ebrahimi     }
384*6467f958SSadaf Ebrahimi 
385*6467f958SSadaf Ebrahimi     return 0;
386*6467f958SSadaf Ebrahimi }
387*6467f958SSadaf Ebrahimi 
prepareReference(cl_uchar * inptr,int w,int h)388*6467f958SSadaf Ebrahimi static double *prepareReference( cl_uchar *inptr, int w, int h)
389*6467f958SSadaf Ebrahimi {
390*6467f958SSadaf Ebrahimi     int        i;
391*6467f958SSadaf Ebrahimi     double    *refptr = (double *)malloc( w * h * 4*sizeof( double ) );
392*6467f958SSadaf Ebrahimi     if ( !refptr )
393*6467f958SSadaf Ebrahimi     {
394*6467f958SSadaf Ebrahimi         log_error( "Unable to allocate refptr at %d x %d\n", (int)w, (int)h );
395*6467f958SSadaf Ebrahimi         return 0;
396*6467f958SSadaf Ebrahimi     }
397*6467f958SSadaf Ebrahimi     for( i = 0; i < w * h * 4; i++ ) {
398*6467f958SSadaf Ebrahimi         refptr[i] = ((double)inptr[i])/255;
399*6467f958SSadaf Ebrahimi     }
400*6467f958SSadaf Ebrahimi     return refptr;
401*6467f958SSadaf Ebrahimi }
402*6467f958SSadaf Ebrahimi 
403*6467f958SSadaf Ebrahimi //----- the test functions
write_image(cl_device_id device,cl_context context,cl_command_queue queue,int numElements,const char * code,const char * name,cl_image_format image_format_desc,int readFloat)404*6467f958SSadaf Ebrahimi int write_image( cl_device_id device, cl_context context, cl_command_queue queue, int numElements, const char *code,
405*6467f958SSadaf Ebrahimi                  const char *name, cl_image_format image_format_desc, int readFloat )
406*6467f958SSadaf Ebrahimi {
407*6467f958SSadaf Ebrahimi     cl_mem            memobjs[2];
408*6467f958SSadaf Ebrahimi     cl_program        program[1];
409*6467f958SSadaf Ebrahimi     void            *inptr;
410*6467f958SSadaf Ebrahimi     double            *refptr = NULL;
411*6467f958SSadaf Ebrahimi     void            *dst = NULL;
412*6467f958SSadaf Ebrahimi     cl_kernel        kernel[1];
413*6467f958SSadaf Ebrahimi     cl_event        writeEvent;
414*6467f958SSadaf Ebrahimi     cl_ulong    queueStart, submitStart, writeStart, writeEnd;
415*6467f958SSadaf Ebrahimi     size_t    threads[2];
416*6467f958SSadaf Ebrahimi     int                err;
417*6467f958SSadaf Ebrahimi     int                w = 64, h = 64;
418*6467f958SSadaf Ebrahimi     cl_mem_flags    flags;
419*6467f958SSadaf Ebrahimi     size_t            element_nbytes;
420*6467f958SSadaf Ebrahimi     size_t            num_bytes;
421*6467f958SSadaf Ebrahimi     size_t            channel_nbytes = sizeof( cl_uchar );
422*6467f958SSadaf Ebrahimi     MTdata          d;
423*6467f958SSadaf Ebrahimi 
424*6467f958SSadaf Ebrahimi 
425*6467f958SSadaf Ebrahimi     PASSIVE_REQUIRE_IMAGE_SUPPORT( device )
426*6467f958SSadaf Ebrahimi 
427*6467f958SSadaf Ebrahimi     if (readFloat)
428*6467f958SSadaf Ebrahimi         channel_nbytes = sizeof( cl_float );
429*6467f958SSadaf Ebrahimi 
430*6467f958SSadaf Ebrahimi     element_nbytes = channel_nbytes * get_format_channel_count( &image_format_desc );
431*6467f958SSadaf Ebrahimi     num_bytes = w * h * element_nbytes;
432*6467f958SSadaf Ebrahimi 
433*6467f958SSadaf Ebrahimi     threads[0] = (size_t)w;
434*6467f958SSadaf Ebrahimi     threads[1] = (size_t)h;
435*6467f958SSadaf Ebrahimi 
436*6467f958SSadaf Ebrahimi     d = init_genrand( gRandomSeed );
437*6467f958SSadaf Ebrahimi     if( image_format_desc.image_channel_data_type == CL_SIGNED_INT8 )
438*6467f958SSadaf Ebrahimi         inptr = (void *)generateSignedImage( w * h * 4, d );
439*6467f958SSadaf Ebrahimi     else
440*6467f958SSadaf Ebrahimi         inptr = (void *)generateImage( w * h * 4, d );
441*6467f958SSadaf Ebrahimi     free_mtdata(d); d = NULL;
442*6467f958SSadaf Ebrahimi     if( ! inptr ){
443*6467f958SSadaf Ebrahimi         log_error("unable to allocate inptr at %d x %d\n", (int)w, (int)h );
444*6467f958SSadaf Ebrahimi         return -1;
445*6467f958SSadaf Ebrahimi     }
446*6467f958SSadaf Ebrahimi 
447*6467f958SSadaf Ebrahimi     dst = malloc( num_bytes );
448*6467f958SSadaf Ebrahimi     if( ! dst ){
449*6467f958SSadaf Ebrahimi         free( (void *)inptr );
450*6467f958SSadaf Ebrahimi         log_error("unable to allocate dst at %d x %d\n", (int)w, (int)h );
451*6467f958SSadaf Ebrahimi         return -1;
452*6467f958SSadaf Ebrahimi     }
453*6467f958SSadaf Ebrahimi 
454*6467f958SSadaf Ebrahimi     // allocate the input and output image memory objects
455*6467f958SSadaf Ebrahimi     flags = CL_MEM_READ_WRITE;
456*6467f958SSadaf Ebrahimi     memobjs[0] = create_image_2d( context, flags, &image_format_desc, w, h, 0, NULL, &err );
457*6467f958SSadaf Ebrahimi     if( memobjs[0] == (cl_mem)0 ){
458*6467f958SSadaf Ebrahimi         free( dst );
459*6467f958SSadaf Ebrahimi         free( (void *)inptr );
460*6467f958SSadaf Ebrahimi         log_error("unable to create Image2D\n");
461*6467f958SSadaf Ebrahimi         return -1;
462*6467f958SSadaf Ebrahimi     }
463*6467f958SSadaf Ebrahimi 
464*6467f958SSadaf Ebrahimi     memobjs[1] = clCreateBuffer(context, CL_MEM_READ_WRITE,
465*6467f958SSadaf Ebrahimi                                 channel_nbytes * 4 * w * h, NULL, &err);
466*6467f958SSadaf Ebrahimi     if( memobjs[1] == (cl_mem)0 ){
467*6467f958SSadaf Ebrahimi         free( dst );
468*6467f958SSadaf Ebrahimi         free( (void *)inptr );
469*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[0]);
470*6467f958SSadaf Ebrahimi         log_error("unable to create array\n");
471*6467f958SSadaf Ebrahimi         return -1;
472*6467f958SSadaf Ebrahimi     }
473*6467f958SSadaf Ebrahimi 
474*6467f958SSadaf Ebrahimi     size_t origin[3] = { 0, 0, 0 };
475*6467f958SSadaf Ebrahimi     size_t region[3] = { w, h, 1 };
476*6467f958SSadaf Ebrahimi     err = clEnqueueWriteImage( queue, memobjs[0], false, origin, region, 0, 0, inptr, 0, NULL, &writeEvent );
477*6467f958SSadaf Ebrahimi     if( err != CL_SUCCESS ){
478*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[0]);
479*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[1]);
480*6467f958SSadaf Ebrahimi         free( dst );
481*6467f958SSadaf Ebrahimi         free( inptr );
482*6467f958SSadaf Ebrahimi         print_error(err, "clWriteImage failed");
483*6467f958SSadaf Ebrahimi         return -1;
484*6467f958SSadaf Ebrahimi     }
485*6467f958SSadaf Ebrahimi 
486*6467f958SSadaf Ebrahimi     // This synchronization point is needed in order to assume the data is valid.
487*6467f958SSadaf Ebrahimi     // Getting profiling information is not a synchronization point.
488*6467f958SSadaf Ebrahimi     err = clWaitForEvents( 1, &writeEvent );
489*6467f958SSadaf Ebrahimi     if( err != CL_SUCCESS )
490*6467f958SSadaf Ebrahimi     {
491*6467f958SSadaf Ebrahimi         print_error( err, "clWaitForEvents failed" );
492*6467f958SSadaf Ebrahimi         clReleaseEvent(writeEvent);
493*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[0]);
494*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[1]);
495*6467f958SSadaf Ebrahimi         free( dst );
496*6467f958SSadaf Ebrahimi         free( inptr );
497*6467f958SSadaf Ebrahimi         return -1;
498*6467f958SSadaf Ebrahimi     }
499*6467f958SSadaf Ebrahimi 
500*6467f958SSadaf Ebrahimi     // test profiling
501*6467f958SSadaf Ebrahimi     while( ( err = clGetEventProfilingInfo( writeEvent, CL_PROFILING_COMMAND_QUEUED, sizeof( cl_ulong ), &queueStart, NULL ) ) ==
502*6467f958SSadaf Ebrahimi           CL_PROFILING_INFO_NOT_AVAILABLE );
503*6467f958SSadaf Ebrahimi     if( err != CL_SUCCESS ){
504*6467f958SSadaf Ebrahimi         print_error( err, "clGetEventProfilingInfo failed" );
505*6467f958SSadaf Ebrahimi     clReleaseEvent(writeEvent);
506*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[0]);
507*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[1]);
508*6467f958SSadaf Ebrahimi         free( dst );
509*6467f958SSadaf Ebrahimi         free( inptr );
510*6467f958SSadaf Ebrahimi         return -1;
511*6467f958SSadaf Ebrahimi     }
512*6467f958SSadaf Ebrahimi 
513*6467f958SSadaf Ebrahimi     while( ( err = clGetEventProfilingInfo( writeEvent, CL_PROFILING_COMMAND_SUBMIT, sizeof( cl_ulong ), &submitStart, NULL ) ) ==
514*6467f958SSadaf Ebrahimi           CL_PROFILING_INFO_NOT_AVAILABLE );
515*6467f958SSadaf Ebrahimi     if( err != CL_SUCCESS ){
516*6467f958SSadaf Ebrahimi         print_error( err, "clGetEventProfilingInfo failed" );
517*6467f958SSadaf Ebrahimi     clReleaseEvent(writeEvent);
518*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[0]);
519*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[1]);
520*6467f958SSadaf Ebrahimi         free( dst );
521*6467f958SSadaf Ebrahimi         free( inptr );
522*6467f958SSadaf Ebrahimi         return -1;
523*6467f958SSadaf Ebrahimi     }
524*6467f958SSadaf Ebrahimi 
525*6467f958SSadaf Ebrahimi     err = clGetEventProfilingInfo( writeEvent, CL_PROFILING_COMMAND_START, sizeof( cl_ulong ), &writeStart, NULL );
526*6467f958SSadaf Ebrahimi     if( err != CL_SUCCESS ){
527*6467f958SSadaf Ebrahimi         print_error( err, "clGetEventProfilingInfo failed" );
528*6467f958SSadaf Ebrahimi     clReleaseEvent(writeEvent);
529*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[0]);
530*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[1]);
531*6467f958SSadaf Ebrahimi         free( dst );
532*6467f958SSadaf Ebrahimi         free( inptr );
533*6467f958SSadaf Ebrahimi         return -1;
534*6467f958SSadaf Ebrahimi     }
535*6467f958SSadaf Ebrahimi 
536*6467f958SSadaf Ebrahimi     err = clGetEventProfilingInfo( writeEvent, CL_PROFILING_COMMAND_END, sizeof( cl_ulong ), &writeEnd, NULL );
537*6467f958SSadaf Ebrahimi     if( err != CL_SUCCESS ){
538*6467f958SSadaf Ebrahimi         print_error( err, "clGetEventProfilingInfo failed" );
539*6467f958SSadaf Ebrahimi     clReleaseEvent(writeEvent);
540*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[0]);
541*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[1]);
542*6467f958SSadaf Ebrahimi         free( dst );
543*6467f958SSadaf Ebrahimi         free( inptr );
544*6467f958SSadaf Ebrahimi         return -1;
545*6467f958SSadaf Ebrahimi     }
546*6467f958SSadaf Ebrahimi 
547*6467f958SSadaf Ebrahimi     err = create_single_kernel_helper( context, &program[0], &kernel[0], 1, &code, name );
548*6467f958SSadaf Ebrahimi     if( err ){
549*6467f958SSadaf Ebrahimi         log_error( "Unable to create program and kernel\n" );
550*6467f958SSadaf Ebrahimi     clReleaseEvent(writeEvent);
551*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[0]);
552*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[1]);
553*6467f958SSadaf Ebrahimi         free( dst );
554*6467f958SSadaf Ebrahimi         free( inptr );
555*6467f958SSadaf Ebrahimi         return -1;
556*6467f958SSadaf Ebrahimi     }
557*6467f958SSadaf Ebrahimi 
558*6467f958SSadaf Ebrahimi     err = clSetKernelArg( kernel[0], 0, sizeof( cl_mem ), (void *)&memobjs[0] );
559*6467f958SSadaf Ebrahimi     err |= clSetKernelArg( kernel[0], 1, sizeof( cl_mem ), (void *)&memobjs[1] );
560*6467f958SSadaf Ebrahimi     if( err != CL_SUCCESS ){
561*6467f958SSadaf Ebrahimi         log_error( "clSetKernelArg failed\n" );
562*6467f958SSadaf Ebrahimi     clReleaseEvent(writeEvent);
563*6467f958SSadaf Ebrahimi         clReleaseKernel( kernel[0] );
564*6467f958SSadaf Ebrahimi         clReleaseProgram( program[0] );
565*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[0]);
566*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[1]);
567*6467f958SSadaf Ebrahimi         free( dst );
568*6467f958SSadaf Ebrahimi         free( inptr );
569*6467f958SSadaf Ebrahimi         return -1;
570*6467f958SSadaf Ebrahimi     }
571*6467f958SSadaf Ebrahimi 
572*6467f958SSadaf Ebrahimi     err = clEnqueueNDRangeKernel(queue, kernel[0], 2, NULL, threads, NULL, 0, NULL, NULL );
573*6467f958SSadaf Ebrahimi 
574*6467f958SSadaf Ebrahimi     if( err != CL_SUCCESS ){
575*6467f958SSadaf Ebrahimi         print_error( err, "clEnqueueNDRangeKernel failed" );
576*6467f958SSadaf Ebrahimi     clReleaseEvent(writeEvent);
577*6467f958SSadaf Ebrahimi         clReleaseKernel( kernel[0] );
578*6467f958SSadaf Ebrahimi         clReleaseProgram( program[0] );
579*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[0]);
580*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[1]);
581*6467f958SSadaf Ebrahimi         free( dst );
582*6467f958SSadaf Ebrahimi         free( inptr );
583*6467f958SSadaf Ebrahimi         return -1;
584*6467f958SSadaf Ebrahimi     }
585*6467f958SSadaf Ebrahimi 
586*6467f958SSadaf Ebrahimi     err = clEnqueueReadBuffer( queue, memobjs[1], true, 0, num_bytes, dst, 0, NULL, NULL );
587*6467f958SSadaf Ebrahimi     if( err != CL_SUCCESS ){
588*6467f958SSadaf Ebrahimi         print_error( err, "clEnqueueReadBuffer failed" );
589*6467f958SSadaf Ebrahimi     clReleaseEvent(writeEvent);
590*6467f958SSadaf Ebrahimi         clReleaseKernel( kernel[0] );
591*6467f958SSadaf Ebrahimi         clReleaseProgram( program[0] );
592*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[0]);
593*6467f958SSadaf Ebrahimi         clReleaseMemObject(memobjs[1]);
594*6467f958SSadaf Ebrahimi         free( dst );
595*6467f958SSadaf Ebrahimi         free( inptr );
596*6467f958SSadaf Ebrahimi         return -1;
597*6467f958SSadaf Ebrahimi     }
598*6467f958SSadaf Ebrahimi 
599*6467f958SSadaf Ebrahimi     if ( readFloat )
600*6467f958SSadaf Ebrahimi     {
601*6467f958SSadaf Ebrahimi         refptr = prepareReference( (cl_uchar *)inptr, w, h );
602*6467f958SSadaf Ebrahimi         if ( refptr )
603*6467f958SSadaf Ebrahimi         {
604*6467f958SSadaf Ebrahimi             err = verifyImageFloat( refptr, (cl_float *)dst, w, h );
605*6467f958SSadaf Ebrahimi             free ( refptr );
606*6467f958SSadaf Ebrahimi         }
607*6467f958SSadaf Ebrahimi         else
608*6467f958SSadaf Ebrahimi             err = -1;
609*6467f958SSadaf Ebrahimi     }
610*6467f958SSadaf Ebrahimi     else
611*6467f958SSadaf Ebrahimi         err = verifyImage( (cl_uchar *)inptr, (cl_uchar *)dst, w, h );
612*6467f958SSadaf Ebrahimi 
613*6467f958SSadaf Ebrahimi     if( err )
614*6467f958SSadaf Ebrahimi     {
615*6467f958SSadaf Ebrahimi         log_error( "Image failed to verify.\n" );
616*6467f958SSadaf Ebrahimi     }
617*6467f958SSadaf Ebrahimi     else
618*6467f958SSadaf Ebrahimi     {
619*6467f958SSadaf Ebrahimi         log_info( "Image verified.\n" );
620*6467f958SSadaf Ebrahimi     }
621*6467f958SSadaf Ebrahimi 
622*6467f958SSadaf Ebrahimi     // cleanup
623*6467f958SSadaf Ebrahimi   clReleaseEvent(writeEvent);
624*6467f958SSadaf Ebrahimi     clReleaseKernel( kernel[0] );
625*6467f958SSadaf Ebrahimi     clReleaseProgram( program[0] );
626*6467f958SSadaf Ebrahimi     clReleaseMemObject(memobjs[0]);
627*6467f958SSadaf Ebrahimi     clReleaseMemObject(memobjs[1]);
628*6467f958SSadaf Ebrahimi     free( dst );
629*6467f958SSadaf Ebrahimi     free( inptr );
630*6467f958SSadaf Ebrahimi 
631*6467f958SSadaf Ebrahimi     if (check_times(queueStart, submitStart, writeStart, writeEnd, device))
632*6467f958SSadaf Ebrahimi         err = -1;
633*6467f958SSadaf Ebrahimi 
634*6467f958SSadaf Ebrahimi     return err;
635*6467f958SSadaf Ebrahimi 
636*6467f958SSadaf Ebrahimi }    // end write_image()
637*6467f958SSadaf Ebrahimi 
638*6467f958SSadaf Ebrahimi 
test_write_image_float(cl_device_id device,cl_context context,cl_command_queue queue,int numElements)639*6467f958SSadaf Ebrahimi int test_write_image_float( cl_device_id device, cl_context context, cl_command_queue queue, int numElements )
640*6467f958SSadaf Ebrahimi {
641*6467f958SSadaf Ebrahimi     cl_image_format    image_format_desc = { CL_RGBA, CL_UNORM_INT8 };
642*6467f958SSadaf Ebrahimi     PASSIVE_REQUIRE_IMAGE_SUPPORT( device )
643*6467f958SSadaf Ebrahimi     // 0 to 255 for unsigned image data
644*6467f958SSadaf Ebrahimi     return write_image( device, context, queue, numElements, readKernelCode[0], readKernelName[0], image_format_desc, 1 );
645*6467f958SSadaf Ebrahimi 
646*6467f958SSadaf Ebrahimi }
647*6467f958SSadaf Ebrahimi 
648*6467f958SSadaf Ebrahimi 
test_write_image_char(cl_device_id device,cl_context context,cl_command_queue queue,int numElements)649*6467f958SSadaf Ebrahimi int test_write_image_char( cl_device_id device, cl_context context, cl_command_queue queue, int numElements )
650*6467f958SSadaf Ebrahimi {
651*6467f958SSadaf Ebrahimi     cl_image_format    image_format_desc = { CL_RGBA, CL_SIGNED_INT8 };
652*6467f958SSadaf Ebrahimi     PASSIVE_REQUIRE_IMAGE_SUPPORT( device )
653*6467f958SSadaf Ebrahimi     // -128 to 127 for signed iamge data
654*6467f958SSadaf Ebrahimi     return write_image( device, context, queue, numElements, readKernelCode[1], readKernelName[1], image_format_desc, 0 );
655*6467f958SSadaf Ebrahimi 
656*6467f958SSadaf Ebrahimi }
657*6467f958SSadaf Ebrahimi 
658*6467f958SSadaf Ebrahimi 
test_write_image_uchar(cl_device_id device,cl_context context,cl_command_queue queue,int numElements)659*6467f958SSadaf Ebrahimi int test_write_image_uchar( cl_device_id device, cl_context context, cl_command_queue queue, int numElements )
660*6467f958SSadaf Ebrahimi {
661*6467f958SSadaf Ebrahimi     cl_image_format    image_format_desc = { CL_RGBA, CL_UNSIGNED_INT8 };
662*6467f958SSadaf Ebrahimi     PASSIVE_REQUIRE_IMAGE_SUPPORT( device )
663*6467f958SSadaf Ebrahimi     // 0 to 255 for unsigned image data
664*6467f958SSadaf Ebrahimi     return write_image( device, context, queue, numElements, readKernelCode[2], readKernelName[2], image_format_desc, 0 );
665*6467f958SSadaf Ebrahimi 
666*6467f958SSadaf Ebrahimi }
667*6467f958SSadaf Ebrahimi 
668*6467f958SSadaf Ebrahimi 
669