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