xref: /aosp_15_r20/external/OpenCL-ICD-Loader/test/layer/icd_print_layer.c (revision 1cddb830dba8aa7c1cc1039338e56b3b9fa24952)
1*1cddb830SAndroid Build Coastguard Worker /*
2*1cddb830SAndroid Build Coastguard Worker  * Copyright (c) 2020 The Khronos Group Inc.
3*1cddb830SAndroid Build Coastguard Worker  *
4*1cddb830SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*1cddb830SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*1cddb830SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*1cddb830SAndroid Build Coastguard Worker  *
8*1cddb830SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
9*1cddb830SAndroid Build Coastguard Worker  *
10*1cddb830SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*1cddb830SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*1cddb830SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*1cddb830SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*1cddb830SAndroid Build Coastguard Worker  * limitations under the License.
15*1cddb830SAndroid Build Coastguard Worker  *
16*1cddb830SAndroid Build Coastguard Worker  * OpenCL is a trademark of Apple Inc. used under license by Khronos.
17*1cddb830SAndroid Build Coastguard Worker  */
18*1cddb830SAndroid Build Coastguard Worker 
19*1cddb830SAndroid Build Coastguard Worker #include "icd_print_layer.h"
20*1cddb830SAndroid Build Coastguard Worker #include <stdbool.h>
21*1cddb830SAndroid Build Coastguard Worker #include <stdlib.h>
22*1cddb830SAndroid Build Coastguard Worker #include <string.h>
23*1cddb830SAndroid Build Coastguard Worker 
24*1cddb830SAndroid Build Coastguard Worker struct _cl_icd_dispatch dispatch;
25*1cddb830SAndroid Build Coastguard Worker 
26*1cddb830SAndroid Build Coastguard Worker const struct _cl_icd_dispatch *tdispatch;
27*1cddb830SAndroid Build Coastguard Worker 
28*1cddb830SAndroid Build Coastguard Worker static cl_layer_api_version api_version = CL_LAYER_API_VERSION_100;
29*1cddb830SAndroid Build Coastguard Worker static const char name[] = "print_layer";
30*1cddb830SAndroid Build Coastguard Worker 
31*1cddb830SAndroid Build Coastguard Worker static inline cl_int
set_param_value(size_t param_value_size,void * param_value,size_t * param_value_size_ret,size_t src_size,const void * src)32*1cddb830SAndroid Build Coastguard Worker set_param_value(
33*1cddb830SAndroid Build Coastguard Worker     size_t      param_value_size,
34*1cddb830SAndroid Build Coastguard Worker     void       *param_value,
35*1cddb830SAndroid Build Coastguard Worker     size_t     *param_value_size_ret,
36*1cddb830SAndroid Build Coastguard Worker     size_t      src_size,
37*1cddb830SAndroid Build Coastguard Worker     const void *src) {
38*1cddb830SAndroid Build Coastguard Worker   if (param_value && param_value_size < src_size)
39*1cddb830SAndroid Build Coastguard Worker     return CL_INVALID_VALUE;
40*1cddb830SAndroid Build Coastguard Worker   if (param_value)
41*1cddb830SAndroid Build Coastguard Worker     memcpy(param_value, src, src_size);
42*1cddb830SAndroid Build Coastguard Worker   if (param_value_size_ret)
43*1cddb830SAndroid Build Coastguard Worker     *param_value_size_ret = src_size;
44*1cddb830SAndroid Build Coastguard Worker   return CL_SUCCESS;
45*1cddb830SAndroid Build Coastguard Worker }
46*1cddb830SAndroid Build Coastguard Worker 
47*1cddb830SAndroid Build Coastguard Worker CL_API_ENTRY cl_int CL_API_CALL
clGetLayerInfo(cl_layer_info param_name,size_t param_value_size,void * param_value,size_t * param_value_size_ret)48*1cddb830SAndroid Build Coastguard Worker clGetLayerInfo(
49*1cddb830SAndroid Build Coastguard Worker     cl_layer_info  param_name,
50*1cddb830SAndroid Build Coastguard Worker     size_t         param_value_size,
51*1cddb830SAndroid Build Coastguard Worker     void          *param_value,
52*1cddb830SAndroid Build Coastguard Worker     size_t        *param_value_size_ret) {
53*1cddb830SAndroid Build Coastguard Worker   size_t sz = 0;
54*1cddb830SAndroid Build Coastguard Worker   const void *src = NULL;
55*1cddb830SAndroid Build Coastguard Worker   if (param_value_size && !param_value)
56*1cddb830SAndroid Build Coastguard Worker     return CL_INVALID_VALUE;
57*1cddb830SAndroid Build Coastguard Worker   if (!param_value && !param_value_size_ret)
58*1cddb830SAndroid Build Coastguard Worker     return CL_INVALID_VALUE;
59*1cddb830SAndroid Build Coastguard Worker   switch (param_name) {
60*1cddb830SAndroid Build Coastguard Worker   case CL_LAYER_API_VERSION:
61*1cddb830SAndroid Build Coastguard Worker     sz = sizeof(api_version);
62*1cddb830SAndroid Build Coastguard Worker     src = &api_version;
63*1cddb830SAndroid Build Coastguard Worker     break;
64*1cddb830SAndroid Build Coastguard Worker   case CL_LAYER_NAME:
65*1cddb830SAndroid Build Coastguard Worker     sz = sizeof(name);
66*1cddb830SAndroid Build Coastguard Worker     src = name;
67*1cddb830SAndroid Build Coastguard Worker     break;
68*1cddb830SAndroid Build Coastguard Worker   default:
69*1cddb830SAndroid Build Coastguard Worker     return CL_INVALID_VALUE;
70*1cddb830SAndroid Build Coastguard Worker   }
71*1cddb830SAndroid Build Coastguard Worker   return set_param_value(param_value_size, param_value, param_value_size_ret, sz, src);
72*1cddb830SAndroid Build Coastguard Worker }
73*1cddb830SAndroid Build Coastguard Worker 
74*1cddb830SAndroid Build Coastguard Worker CL_API_ENTRY cl_int CL_API_CALL
clInitLayer(cl_uint num_entries,const struct _cl_icd_dispatch * target_dispatch,cl_uint * num_entries_out,const struct _cl_icd_dispatch ** layer_dispatch_ret)75*1cddb830SAndroid Build Coastguard Worker clInitLayer(
76*1cddb830SAndroid Build Coastguard Worker     cl_uint                         num_entries,
77*1cddb830SAndroid Build Coastguard Worker     const struct _cl_icd_dispatch  *target_dispatch,
78*1cddb830SAndroid Build Coastguard Worker     cl_uint                        *num_entries_out,
79*1cddb830SAndroid Build Coastguard Worker     const struct _cl_icd_dispatch **layer_dispatch_ret) {
80*1cddb830SAndroid Build Coastguard Worker   if (!target_dispatch || !layer_dispatch_ret || !num_entries_out || num_entries < sizeof(dispatch)/sizeof(dispatch.clGetPlatformIDs))
81*1cddb830SAndroid Build Coastguard Worker     return CL_INVALID_VALUE;
82*1cddb830SAndroid Build Coastguard Worker 
83*1cddb830SAndroid Build Coastguard Worker   _init_dispatch();
84*1cddb830SAndroid Build Coastguard Worker 
85*1cddb830SAndroid Build Coastguard Worker   tdispatch = target_dispatch;
86*1cddb830SAndroid Build Coastguard Worker   *layer_dispatch_ret = &dispatch;
87*1cddb830SAndroid Build Coastguard Worker   *num_entries_out = sizeof(dispatch)/sizeof(dispatch.clGetPlatformIDs);
88*1cddb830SAndroid Build Coastguard Worker 
89*1cddb830SAndroid Build Coastguard Worker   return CL_SUCCESS;
90*1cddb830SAndroid Build Coastguard Worker }
91*1cddb830SAndroid Build Coastguard Worker 
92*1cddb830SAndroid Build Coastguard Worker 
93