1 //
2 // Copyright (c) 2017 The Khronos Group Inc.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 #include "harness/compat.h"
17
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include <string.h>
21 #include <sys/types.h>
22 #include <sys/stat.h>
23
24
25 #include "procs.h"
26
27 const char *sample_single_kernel = {
28 "__kernel void sample_test(__global float *src, __global int *dst)\n"
29 "{\n"
30 " int tid = get_global_id(0);\n"
31 "\n"
32 " dst[tid] = (int)src[tid];\n"
33 "\n"
34 "}\n"};
35
36 const char *sample_double_kernel = {
37 "__kernel void sample_test(__global float *src, __global int *dst)\n"
38 "{\n"
39 " int tid = get_global_id(0);\n"
40 "\n"
41 " dst[tid] = (int)src[tid];\n"
42 "\n"
43 "}\n"
44 "__kernel void sample_test2(__global float *src, __global int *dst)\n"
45 "{\n"
46 " int tid = get_global_id(0);\n"
47 "\n"
48 " dst[tid] = (int)src[tid];\n"
49 "\n"
50 "}\n"};
51
52
53 int
test_createkernelsinprogram(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements)54 test_createkernelsinprogram(cl_device_id device, cl_context context, cl_command_queue queue, int num_elements)
55 {
56 cl_program program;
57 cl_kernel kernel[2];
58 unsigned int num_kernels;
59 int err;
60
61 err = create_single_kernel_helper(context, &program, NULL, 1, &sample_single_kernel, NULL);
62 if (err != CL_SUCCESS)
63 {
64 log_error("create_single_kernel_helper failed\n");
65 return -1;
66 }
67
68 err = clCreateKernelsInProgram(program, 1, kernel, &num_kernels);
69 if ( (err != CL_SUCCESS) || (num_kernels != 1) )
70 {
71 log_error("clCreateKernelsInProgram test failed for a single kernel\n");
72 return -1;
73 }
74
75 clReleaseKernel(kernel[0]);
76 clReleaseProgram(program);
77
78 err = create_single_kernel_helper(context, &program, NULL, 1, &sample_double_kernel, NULL);
79 if (err != CL_SUCCESS)
80 {
81 log_error("create_single_kernel_helper failed\n");
82 return -1;
83 }
84
85 err = clCreateKernelsInProgram(program, 2, kernel, &num_kernels);
86 if ( (err != CL_SUCCESS) || (num_kernels != 2) )
87 {
88 log_error("clCreateKernelsInProgram test failed for two kernels\n");
89 return -1;
90 }
91
92 log_info("clCreateKernelsInProgram test passed\n");
93
94 clReleaseKernel(kernel[0]);
95 clReleaseKernel(kernel[1]);
96 clReleaseProgram(program);
97
98
99 return err;
100 }
101
102
103
104
105
106