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