xref: /aosp_15_r20/external/OpenCL-CTS/test_conformance/basic/test_createkernelsinprogram.cpp (revision 6467f958c7de8070b317fc65bcb0f6472e388d82)
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