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 testWritef(__global uchar *src, write_only image2d_t dstimg)\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(dstimg) + tid_x;\n"
34*6467f958SSadaf Ebrahimi " float4 color;\n"
35*6467f958SSadaf Ebrahimi "\n"
36*6467f958SSadaf Ebrahimi " indx *= 4;\n"
37*6467f958SSadaf Ebrahimi " color = (float4)((float)src[indx+0], (float)src[indx+1], (float)src[indx+2], (float)src[indx+3]);\n"
38*6467f958SSadaf Ebrahimi " color /= (float4)(255.f, 255.f, 255.f, 255.f);\n"
39*6467f958SSadaf Ebrahimi " write_imagef(dstimg, (int2)(tid_x, tid_y), color);\n"
40*6467f958SSadaf Ebrahimi "\n"
41*6467f958SSadaf Ebrahimi "}\n",
42*6467f958SSadaf Ebrahimi
43*6467f958SSadaf Ebrahimi "__kernel void testWritei(__global char *src, write_only image2d_t dstimg)\n"
44*6467f958SSadaf Ebrahimi "{\n"
45*6467f958SSadaf Ebrahimi " int tid_x = get_global_id(0);\n"
46*6467f958SSadaf Ebrahimi " int tid_y = get_global_id(1);\n"
47*6467f958SSadaf Ebrahimi " int indx = tid_y * get_image_width(dstimg) + tid_x;\n"
48*6467f958SSadaf Ebrahimi " int4 color;\n"
49*6467f958SSadaf Ebrahimi "\n"
50*6467f958SSadaf Ebrahimi " indx *= 4;\n"
51*6467f958SSadaf Ebrahimi " color.x = (int)src[indx+0];\n"
52*6467f958SSadaf Ebrahimi " color.y = (int)src[indx+1];\n"
53*6467f958SSadaf Ebrahimi " color.z = (int)src[indx+2];\n"
54*6467f958SSadaf Ebrahimi " color.w = (int)src[indx+3];\n"
55*6467f958SSadaf Ebrahimi " write_imagei(dstimg, (int2)(tid_x, tid_y), color);\n"
56*6467f958SSadaf Ebrahimi "\n"
57*6467f958SSadaf Ebrahimi "}\n",
58*6467f958SSadaf Ebrahimi
59*6467f958SSadaf Ebrahimi "__kernel void testWriteui(__global uchar *src, write_only image2d_t dstimg)\n"
60*6467f958SSadaf Ebrahimi "{\n"
61*6467f958SSadaf Ebrahimi " int tid_x = get_global_id(0);\n"
62*6467f958SSadaf Ebrahimi " int tid_y = get_global_id(1);\n"
63*6467f958SSadaf Ebrahimi " int indx = tid_y * get_image_width(dstimg) + tid_x;\n"
64*6467f958SSadaf Ebrahimi " uint4 color;\n"
65*6467f958SSadaf Ebrahimi "\n"
66*6467f958SSadaf Ebrahimi " indx *= 4;\n"
67*6467f958SSadaf Ebrahimi " color.x = (uint)src[indx+0];\n"
68*6467f958SSadaf Ebrahimi " color.y = (uint)src[indx+1];\n"
69*6467f958SSadaf Ebrahimi " color.z = (uint)src[indx+2];\n"
70*6467f958SSadaf Ebrahimi " color.w = (uint)src[indx+3];\n"
71*6467f958SSadaf Ebrahimi " write_imageui(dstimg, (int2)(tid_x, tid_y), color);\n"
72*6467f958SSadaf Ebrahimi "\n"
73*6467f958SSadaf Ebrahimi "}\n" };
74*6467f958SSadaf Ebrahimi
75*6467f958SSadaf Ebrahimi static const char *readKernelName[] = { "testWritef", "testWritei", "testWriteui" };
76*6467f958SSadaf Ebrahimi
77*6467f958SSadaf Ebrahimi
78*6467f958SSadaf Ebrahimi //--- helper functions
generateImage(int n,MTdata d)79*6467f958SSadaf Ebrahimi static cl_uchar *generateImage( int n, MTdata d )
80*6467f958SSadaf Ebrahimi {
81*6467f958SSadaf Ebrahimi cl_uchar *ptr = (cl_uchar *)malloc( n * sizeof( cl_uchar ) );
82*6467f958SSadaf Ebrahimi int i;
83*6467f958SSadaf Ebrahimi
84*6467f958SSadaf Ebrahimi for( i = 0; i < n; i++ ){
85*6467f958SSadaf Ebrahimi ptr[i] = (cl_uchar)genrand_int32( d );
86*6467f958SSadaf Ebrahimi }
87*6467f958SSadaf Ebrahimi
88*6467f958SSadaf Ebrahimi return ptr;
89*6467f958SSadaf Ebrahimi
90*6467f958SSadaf Ebrahimi }
91*6467f958SSadaf Ebrahimi
92*6467f958SSadaf Ebrahimi
generateSignedImage(int n,MTdata d)93*6467f958SSadaf Ebrahimi static char *generateSignedImage( int n, MTdata d )
94*6467f958SSadaf Ebrahimi {
95*6467f958SSadaf Ebrahimi char *ptr = (char *)malloc( n * sizeof( char ) );
96*6467f958SSadaf Ebrahimi int i;
97*6467f958SSadaf Ebrahimi
98*6467f958SSadaf Ebrahimi for( i = 0; i < n; i++ ){
99*6467f958SSadaf Ebrahimi ptr[i] = (char)genrand_int32( d );
100*6467f958SSadaf Ebrahimi }
101*6467f958SSadaf Ebrahimi
102*6467f958SSadaf Ebrahimi return ptr;
103*6467f958SSadaf Ebrahimi
104*6467f958SSadaf Ebrahimi }
105*6467f958SSadaf Ebrahimi
106*6467f958SSadaf Ebrahimi
verifyImage(cl_uchar * image,cl_uchar * outptr,int w,int h)107*6467f958SSadaf Ebrahimi static int verifyImage( cl_uchar *image, cl_uchar *outptr, int w, int h )
108*6467f958SSadaf Ebrahimi {
109*6467f958SSadaf Ebrahimi int i;
110*6467f958SSadaf Ebrahimi
111*6467f958SSadaf Ebrahimi for( i = 0; i < w * h * 4; i++ ){
112*6467f958SSadaf Ebrahimi if( outptr[i] != image[i] ){
113*6467f958SSadaf Ebrahimi return -1;
114*6467f958SSadaf Ebrahimi }
115*6467f958SSadaf Ebrahimi }
116*6467f958SSadaf Ebrahimi
117*6467f958SSadaf Ebrahimi return 0;
118*6467f958SSadaf Ebrahimi }
119*6467f958SSadaf Ebrahimi
120*6467f958SSadaf Ebrahimi
121*6467f958SSadaf Ebrahimi //----- the test functions
read_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)122*6467f958SSadaf Ebrahimi int read_image( cl_device_id device, cl_context context, cl_command_queue queue, int numElements, const char *code, const char *name,
123*6467f958SSadaf Ebrahimi cl_image_format image_format_desc )
124*6467f958SSadaf Ebrahimi {
125*6467f958SSadaf Ebrahimi cl_mem memobjs[2];
126*6467f958SSadaf Ebrahimi cl_program program[1];
127*6467f958SSadaf Ebrahimi void *inptr;
128*6467f958SSadaf Ebrahimi void *dst = NULL;
129*6467f958SSadaf Ebrahimi cl_kernel kernel[1];
130*6467f958SSadaf Ebrahimi cl_event readEvent;
131*6467f958SSadaf Ebrahimi cl_ulong queueStart, submitStart, readStart, readEnd;
132*6467f958SSadaf Ebrahimi size_t threads[2];
133*6467f958SSadaf Ebrahimi int err;
134*6467f958SSadaf Ebrahimi int w = 64, h = 64;
135*6467f958SSadaf Ebrahimi cl_mem_flags flags;
136*6467f958SSadaf Ebrahimi size_t element_nbytes;
137*6467f958SSadaf Ebrahimi size_t num_bytes;
138*6467f958SSadaf Ebrahimi size_t channel_nbytes = sizeof( cl_uchar );
139*6467f958SSadaf Ebrahimi MTdata d;
140*6467f958SSadaf Ebrahimi
141*6467f958SSadaf Ebrahimi
142*6467f958SSadaf Ebrahimi PASSIVE_REQUIRE_IMAGE_SUPPORT( device )
143*6467f958SSadaf Ebrahimi
144*6467f958SSadaf Ebrahimi element_nbytes = channel_nbytes * get_format_channel_count( &image_format_desc );
145*6467f958SSadaf Ebrahimi num_bytes = w * h * element_nbytes;
146*6467f958SSadaf Ebrahimi
147*6467f958SSadaf Ebrahimi threads[0] = (size_t)w;
148*6467f958SSadaf Ebrahimi threads[1] = (size_t)h;
149*6467f958SSadaf Ebrahimi
150*6467f958SSadaf Ebrahimi d = init_genrand( gRandomSeed );
151*6467f958SSadaf Ebrahimi if( image_format_desc.image_channel_data_type == CL_SIGNED_INT8 )
152*6467f958SSadaf Ebrahimi inptr = (void *)generateSignedImage( w * h * 4, d );
153*6467f958SSadaf Ebrahimi else
154*6467f958SSadaf Ebrahimi inptr = (void *)generateImage( w * h * 4, d );
155*6467f958SSadaf Ebrahimi free_mtdata(d); d = NULL;
156*6467f958SSadaf Ebrahimi
157*6467f958SSadaf Ebrahimi if( ! inptr ){
158*6467f958SSadaf Ebrahimi log_error("unable to allocate inptr at %d x %d\n", (int)w, (int)h );
159*6467f958SSadaf Ebrahimi return -1;
160*6467f958SSadaf Ebrahimi }
161*6467f958SSadaf Ebrahimi
162*6467f958SSadaf Ebrahimi dst = malloc( num_bytes );
163*6467f958SSadaf Ebrahimi if( ! dst ){
164*6467f958SSadaf Ebrahimi free( (void *)inptr );
165*6467f958SSadaf Ebrahimi log_error("unable to allocate dst at %d x %d\n", (int)w, (int)h );
166*6467f958SSadaf Ebrahimi return -1;
167*6467f958SSadaf Ebrahimi }
168*6467f958SSadaf Ebrahimi
169*6467f958SSadaf Ebrahimi // allocate the input and output image memory objects
170*6467f958SSadaf Ebrahimi flags = CL_MEM_READ_WRITE;
171*6467f958SSadaf Ebrahimi memobjs[0] = create_image_2d( context, flags, &image_format_desc, w, h, 0, NULL, &err );
172*6467f958SSadaf Ebrahimi if( memobjs[0] == (cl_mem)0 ){
173*6467f958SSadaf Ebrahimi free( dst );
174*6467f958SSadaf Ebrahimi free( (void *)inptr );
175*6467f958SSadaf Ebrahimi log_error("unable to create Image2D\n");
176*6467f958SSadaf Ebrahimi return -1;
177*6467f958SSadaf Ebrahimi }
178*6467f958SSadaf Ebrahimi
179*6467f958SSadaf Ebrahimi memobjs[1] = clCreateBuffer(context, CL_MEM_READ_WRITE,
180*6467f958SSadaf Ebrahimi channel_nbytes * 4 * w * h, NULL, &err);
181*6467f958SSadaf Ebrahimi if( memobjs[1] == (cl_mem)0 ){
182*6467f958SSadaf Ebrahimi free( dst );
183*6467f958SSadaf Ebrahimi free( (void *)inptr );
184*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[0]);
185*6467f958SSadaf Ebrahimi log_error("unable to create array\n");
186*6467f958SSadaf Ebrahimi return -1;
187*6467f958SSadaf Ebrahimi }
188*6467f958SSadaf Ebrahimi
189*6467f958SSadaf Ebrahimi err = clEnqueueWriteBuffer( queue, memobjs[1], true, 0, num_bytes, inptr, 0, NULL, NULL );
190*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
191*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[0]);
192*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[1]);
193*6467f958SSadaf Ebrahimi free( dst );
194*6467f958SSadaf Ebrahimi free( inptr );
195*6467f958SSadaf Ebrahimi log_error("clWriteArray failed\n");
196*6467f958SSadaf Ebrahimi return -1;
197*6467f958SSadaf Ebrahimi }
198*6467f958SSadaf Ebrahimi
199*6467f958SSadaf Ebrahimi err = create_single_kernel_helper( context, &program[0], &kernel[0], 1, &code, name );
200*6467f958SSadaf Ebrahimi if( err ){
201*6467f958SSadaf Ebrahimi log_error( "Unable to create program and kernel\n" );
202*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[0]);
203*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[1]);
204*6467f958SSadaf Ebrahimi free( dst );
205*6467f958SSadaf Ebrahimi free( inptr );
206*6467f958SSadaf Ebrahimi return -1;
207*6467f958SSadaf Ebrahimi }
208*6467f958SSadaf Ebrahimi
209*6467f958SSadaf Ebrahimi err = clSetKernelArg( kernel[0], 0, sizeof( cl_mem ), (void *)&memobjs[1] );
210*6467f958SSadaf Ebrahimi err |= clSetKernelArg( kernel[0], 1, sizeof( cl_mem ), (void *)&memobjs[0] );
211*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
212*6467f958SSadaf Ebrahimi log_error( "clSetKernelArg failed\n" );
213*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[0] );
214*6467f958SSadaf Ebrahimi clReleaseProgram( program[0] );
215*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[0]);
216*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[1]);
217*6467f958SSadaf Ebrahimi free( dst );
218*6467f958SSadaf Ebrahimi free( inptr );
219*6467f958SSadaf Ebrahimi return -1;
220*6467f958SSadaf Ebrahimi }
221*6467f958SSadaf Ebrahimi
222*6467f958SSadaf Ebrahimi err = clEnqueueNDRangeKernel(queue, kernel[0], 2, NULL, threads, NULL, 0, NULL, NULL );
223*6467f958SSadaf Ebrahimi
224*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
225*6467f958SSadaf Ebrahimi print_error( err, "clEnqueueNDRangeKernel failed" );
226*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[0] );
227*6467f958SSadaf Ebrahimi clReleaseProgram( program[0] );
228*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[0]);
229*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[1]);
230*6467f958SSadaf Ebrahimi free( dst );
231*6467f958SSadaf Ebrahimi free( inptr );
232*6467f958SSadaf Ebrahimi return -1;
233*6467f958SSadaf Ebrahimi }
234*6467f958SSadaf Ebrahimi
235*6467f958SSadaf Ebrahimi size_t origin[3] = { 0, 0, 0 };
236*6467f958SSadaf Ebrahimi size_t region[3] = { w, h, 1 };
237*6467f958SSadaf Ebrahimi err = clEnqueueReadImage( queue, memobjs[0], false, origin, region, 0, 0, dst, 0, NULL, &readEvent );
238*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
239*6467f958SSadaf Ebrahimi print_error( err, "clReadImage2D failed" );
240*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[0] );
241*6467f958SSadaf Ebrahimi clReleaseProgram( program[0] );
242*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[0]);
243*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[1]);
244*6467f958SSadaf Ebrahimi free( dst );
245*6467f958SSadaf Ebrahimi free( inptr );
246*6467f958SSadaf Ebrahimi return -1;
247*6467f958SSadaf Ebrahimi }
248*6467f958SSadaf Ebrahimi
249*6467f958SSadaf Ebrahimi // This synchronization point is needed in order to assume the data is valid.
250*6467f958SSadaf Ebrahimi // Getting profiling information is not a synchronization point.
251*6467f958SSadaf Ebrahimi err = clWaitForEvents( 1, &readEvent );
252*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS )
253*6467f958SSadaf Ebrahimi {
254*6467f958SSadaf Ebrahimi clReleaseEvent(readEvent);
255*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[0] );
256*6467f958SSadaf Ebrahimi clReleaseProgram( program[0] );
257*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[0]);
258*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[1]);
259*6467f958SSadaf Ebrahimi free( dst );
260*6467f958SSadaf Ebrahimi free( inptr );
261*6467f958SSadaf Ebrahimi return -1;
262*6467f958SSadaf Ebrahimi }
263*6467f958SSadaf Ebrahimi
264*6467f958SSadaf Ebrahimi while( ( err = clGetEventProfilingInfo( readEvent, CL_PROFILING_COMMAND_QUEUED, sizeof( cl_ulong ), &queueStart, NULL ) ) ==
265*6467f958SSadaf Ebrahimi CL_PROFILING_INFO_NOT_AVAILABLE );
266*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
267*6467f958SSadaf Ebrahimi print_error( err, "clGetEventProfilingInfo failed" );
268*6467f958SSadaf Ebrahimi clReleaseEvent(readEvent);
269*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[0] );
270*6467f958SSadaf Ebrahimi clReleaseProgram( program[0] );
271*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[0]);
272*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[1]);
273*6467f958SSadaf Ebrahimi free( dst );
274*6467f958SSadaf Ebrahimi free( inptr );
275*6467f958SSadaf Ebrahimi return -1;
276*6467f958SSadaf Ebrahimi }
277*6467f958SSadaf Ebrahimi
278*6467f958SSadaf Ebrahimi while( ( err = clGetEventProfilingInfo( readEvent, CL_PROFILING_COMMAND_SUBMIT, sizeof( cl_ulong ), &submitStart, NULL ) ) ==
279*6467f958SSadaf Ebrahimi CL_PROFILING_INFO_NOT_AVAILABLE );
280*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
281*6467f958SSadaf Ebrahimi print_error( err, "clGetEventProfilingInfo failed" );
282*6467f958SSadaf Ebrahimi clReleaseEvent(readEvent);
283*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[0] );
284*6467f958SSadaf Ebrahimi clReleaseProgram( program[0] );
285*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[0]);
286*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[1]);
287*6467f958SSadaf Ebrahimi free( dst );
288*6467f958SSadaf Ebrahimi free( inptr );
289*6467f958SSadaf Ebrahimi return -1;
290*6467f958SSadaf Ebrahimi }
291*6467f958SSadaf Ebrahimi
292*6467f958SSadaf Ebrahimi err = clGetEventProfilingInfo( readEvent, CL_PROFILING_COMMAND_START, sizeof( cl_ulong ), &readStart, NULL );
293*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
294*6467f958SSadaf Ebrahimi print_error( err, "clGetEventProfilingInfo failed" );
295*6467f958SSadaf Ebrahimi clReleaseEvent(readEvent);
296*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[0] );
297*6467f958SSadaf Ebrahimi clReleaseProgram( program[0] );
298*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[0]);
299*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[1]);
300*6467f958SSadaf Ebrahimi free( dst );
301*6467f958SSadaf Ebrahimi free( inptr );
302*6467f958SSadaf Ebrahimi return -1;
303*6467f958SSadaf Ebrahimi }
304*6467f958SSadaf Ebrahimi
305*6467f958SSadaf Ebrahimi err = clGetEventProfilingInfo( readEvent, CL_PROFILING_COMMAND_END, sizeof( cl_ulong ), &readEnd, NULL );
306*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
307*6467f958SSadaf Ebrahimi print_error( err, "clGetEventProfilingInfo failed" );
308*6467f958SSadaf Ebrahimi clReleaseEvent(readEvent);
309*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[0] );
310*6467f958SSadaf Ebrahimi clReleaseProgram( program[0] );
311*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[0]);
312*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[1]);
313*6467f958SSadaf Ebrahimi free( dst );
314*6467f958SSadaf Ebrahimi free( inptr );
315*6467f958SSadaf Ebrahimi return -1;
316*6467f958SSadaf Ebrahimi }
317*6467f958SSadaf Ebrahimi
318*6467f958SSadaf Ebrahimi err = verifyImage( (cl_uchar *)inptr, (cl_uchar *)dst, w, h );
319*6467f958SSadaf Ebrahimi if( err ){
320*6467f958SSadaf Ebrahimi log_error( "Image failed to verify.\n" );
321*6467f958SSadaf Ebrahimi }
322*6467f958SSadaf Ebrahimi else{
323*6467f958SSadaf Ebrahimi log_info( "Image verified.\n" );
324*6467f958SSadaf Ebrahimi }
325*6467f958SSadaf Ebrahimi
326*6467f958SSadaf Ebrahimi clReleaseEvent(readEvent);
327*6467f958SSadaf Ebrahimi clReleaseKernel(kernel[0]);
328*6467f958SSadaf Ebrahimi clReleaseProgram(program[0]);
329*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[0]);
330*6467f958SSadaf Ebrahimi clReleaseMemObject(memobjs[1]);
331*6467f958SSadaf Ebrahimi free(dst);
332*6467f958SSadaf Ebrahimi free(inptr);
333*6467f958SSadaf Ebrahimi
334*6467f958SSadaf Ebrahimi if (check_times(queueStart, submitStart, readStart, readEnd, device))
335*6467f958SSadaf Ebrahimi err = -1;
336*6467f958SSadaf Ebrahimi
337*6467f958SSadaf Ebrahimi return err;
338*6467f958SSadaf Ebrahimi
339*6467f958SSadaf Ebrahimi } // end read_image()
340*6467f958SSadaf Ebrahimi
341*6467f958SSadaf Ebrahimi
test_read_image_float(cl_device_id device,cl_context context,cl_command_queue queue,int numElements)342*6467f958SSadaf Ebrahimi int test_read_image_float( cl_device_id device, cl_context context, cl_command_queue queue, int numElements )
343*6467f958SSadaf Ebrahimi {
344*6467f958SSadaf Ebrahimi cl_image_format image_format_desc = { CL_RGBA, CL_UNORM_INT8 };
345*6467f958SSadaf Ebrahimi PASSIVE_REQUIRE_IMAGE_SUPPORT( device )
346*6467f958SSadaf Ebrahimi // 0 to 255 for unsigned image data
347*6467f958SSadaf Ebrahimi return read_image( device, context, queue, numElements, readKernelCode[0], readKernelName[0], image_format_desc );
348*6467f958SSadaf Ebrahimi
349*6467f958SSadaf Ebrahimi }
350*6467f958SSadaf Ebrahimi
351*6467f958SSadaf Ebrahimi
test_read_image_char(cl_device_id device,cl_context context,cl_command_queue queue,int numElements)352*6467f958SSadaf Ebrahimi int test_read_image_char( cl_device_id device, cl_context context, cl_command_queue queue, int numElements )
353*6467f958SSadaf Ebrahimi {
354*6467f958SSadaf Ebrahimi cl_image_format image_format_desc = { CL_RGBA, CL_SIGNED_INT8 };
355*6467f958SSadaf Ebrahimi PASSIVE_REQUIRE_IMAGE_SUPPORT( device )
356*6467f958SSadaf Ebrahimi // -128 to 127 for signed iamge data
357*6467f958SSadaf Ebrahimi return read_image( device, context, queue, numElements, readKernelCode[1], readKernelName[1], image_format_desc );
358*6467f958SSadaf Ebrahimi
359*6467f958SSadaf Ebrahimi }
360*6467f958SSadaf Ebrahimi
361*6467f958SSadaf Ebrahimi
test_read_image_uchar(cl_device_id device,cl_context context,cl_command_queue queue,int numElements)362*6467f958SSadaf Ebrahimi int test_read_image_uchar( cl_device_id device, cl_context context, cl_command_queue queue, int numElements )
363*6467f958SSadaf Ebrahimi {
364*6467f958SSadaf Ebrahimi cl_image_format image_format_desc = { CL_RGBA, CL_UNSIGNED_INT8 };
365*6467f958SSadaf Ebrahimi PASSIVE_REQUIRE_IMAGE_SUPPORT( device )
366*6467f958SSadaf Ebrahimi // 0 to 255 for unsigned image data
367*6467f958SSadaf Ebrahimi return read_image( device, context, queue, numElements, readKernelCode[2], readKernelName[2], image_format_desc );
368*6467f958SSadaf Ebrahimi
369*6467f958SSadaf Ebrahimi }
370*6467f958SSadaf Ebrahimi
371*6467f958SSadaf Ebrahimi
372