1 /*
2  * Copyright (C) 2018-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #pragma once
9 
10 #include "opencl/source/api/cl_types.h"
11 #include "opencl/source/helpers/base_object.h"
12 
13 //------------------------------------------------------------------------------
14 // cl_intel_accelerator Class Stuff
15 //------------------------------------------------------------------------------
16 
17 namespace NEO {
18 
19 class Context;
20 
21 typedef struct TagAcceleratorObjParams {
22     cl_uint AcceleratorType;
23     cl_uint AcceleratorFlags;
24 } OCLRT_ACCELERATOR_OBJECT_PARAMS, *POCLRT_ACCELERATOR_OBJECT_PARAMS;
25 
26 template <>
27 struct OpenCLObjectMapper<_cl_accelerator_intel> {
28     typedef class IntelAccelerator DerivedType;
29 };
30 
31 class IntelAccelerator : public BaseObject<_cl_accelerator_intel> {
32   public:
33     IntelAccelerator(Context *context,
34                      cl_accelerator_type_intel typeId,
35                      size_t descriptorSize,
36                      const void *descriptor) : pContext(context),
37                                                typeId(typeId),
38                                                descriptorSize(descriptorSize),
39                                                pDescriptor(descriptor) {}
40 
41     IntelAccelerator() {}
42 
43     static const cl_ulong objectMagic = 0xC6D72FA2E81EA569ULL;
44 
45     cl_accelerator_type_intel getTypeId() const { return typeId; }
46 
47     size_t getDescriptorSize() const { return descriptorSize; }
48 
49     const void *getDescriptor() const { return pDescriptor; }
50 
51     cl_int getInfo(cl_accelerator_info_intel paramName,
52                    size_t paramValueSize,
53                    void *paramValue,
54                    size_t *paramValueSizeRet) const;
55 
56   protected:
57     Context *pContext = nullptr;
58     const cl_accelerator_type_intel typeId = -1;
59     const size_t descriptorSize = 0;
60     const void *pDescriptor = nullptr;
61 
62   private:
63 };
64 } // namespace NEO
65