// // Copyright (c) 2017 The Khronos Group Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #include "harness/compat.h" #include #include #include #include #include #include "procs.h" static const char *rgba8888_kernel_code = "\n" "__kernel void test_rgba8888(read_only image2d_t srcimg, write_only image2d_t dstimg, sampler_t sampler)\n" "{\n" " int tid_x = get_global_id(0);\n" " int tid_y = get_global_id(1);\n" " float4 color;\n" "\n" " if ( (tid_x >= get_image_width(dstimg)) || (tid_y >= get_image_height(dstimg)) )\n" " return;\n" " color = read_imagef(srcimg, sampler, (int2)(tid_x, tid_y));\n" " write_imagef(dstimg, (int2)(tid_x, tid_y), color);\n" "\n" "}\n"; static unsigned char * generate_8888_image(int w, int h, MTdata d) { unsigned char *ptr = (unsigned char*)malloc(w * h * 4); int i; for (i=0; i max_local_workgroup_size[0]) local_workgroup_size = max_local_workgroup_size[0]; global_threads[0] = ((img_width + local_workgroup_size - 1) / local_workgroup_size) * local_workgroup_size; global_threads[1] = img_height; local_threads[0] = local_workgroup_size; local_threads[1] = 1; err = clEnqueueNDRangeKernel( queue, kernel, 2, NULL, global_threads, local_threads, 0, NULL, NULL ); if (err != CL_SUCCESS) { log_error("%s clEnqueueNDRangeKernel failed\n", __FUNCTION__); free_mtdata(d); return -1; } err = clEnqueueReadImage(queue, streams[1], CL_TRUE, origin, region, 0, 0, (void *)output_ptr, 0, NULL, NULL); if (err != CL_SUCCESS) { log_error("clEnqueueReadBuffer failed\n"); return -1; } err = verify_rgba8888_image(input_ptr, output_ptr, img_width, img_height); // cleanup clReleaseSampler(sampler); clReleaseMemObject(streams[0]); clReleaseMemObject(streams[1]); clReleaseKernel(kernel); clReleaseProgram(program); free(input_ptr); free(output_ptr); if (err) break; } free_mtdata(d); return err; }