1 /*
2  * Copyright (C) 2020-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #pragma once
9 
10 #include "shared/source/compiler_interface/oclc_extensions.h"
11 #include "shared/source/helpers/constants.h"
12 
13 #include "opencl/extensions/public/cl_ext_private.h"
14 
15 #include <vector>
16 
17 namespace NEO {
18 
19 struct ClDeviceInfoParam {
20     union {
21         cl_bool boolean;
22         cl_uint uint;
23         cl_bitfield bitfield;
24     };
25 };
26 
27 // clang-format off
28 struct ClDeviceInfo {
29     cl_name_version                                                               ilsWithVersion[1];
30     StackVec<cl_name_version, 3>                                                  builtInKernelsWithVersion;
31     StackVec<cl_name_version, 5>                                                  openclCAllVersions;
32     OpenClCFeaturesContainer                                                      openclCFeatures;
33     std::vector<cl_name_version>                                                  extensionsWithVersion;
34     cl_device_type                                                                deviceType;
35     size_t                                                                        maxSliceCount;
36     size_t                                                                        image3DMaxWidth;
37     size_t                                                                        image3DMaxHeight;
38     size_t                                                                        maxBufferSize;
39     size_t                                                                        maxArraySize;
40     cl_device_fp_config                                                           singleFpConfig;
41     cl_device_fp_config                                                           halfFpConfig;
42     cl_device_fp_config                                                           doubleFpConfig;
43     cl_ulong                                                                      globalMemCacheSize;
44     cl_ulong                                                                      maxConstantBufferSize;
45     size_t                                                                        maxGlobalVariableSize;
46     size_t                                                                        globalVariablePreferredTotalSize;
47     size_t                                                                        preferredWorkGroupSizeMultiple;
48     cl_device_exec_capabilities                                                   executionCapabilities;
49     cl_command_queue_properties                                                   queueOnHostProperties;
50     cl_command_queue_properties                                                   queueOnDeviceProperties;
51     const char                                                                    *builtInKernels;
52     cl_platform_id                                                                platform;
53     const char                                                                    *name;
54     const char                                                                    *vendor;
55     const char                                                                    *driverVersion;
56     const char                                                                    *profile;
57     const char                                                                    *clVersion;
58     const char                                                                    *clCVersion;
59     const char                                                                    *spirVersions;
60     const char                                                                    *deviceExtensions;
61     const char                                                                    *latestConformanceVersionPassed;
62     cl_device_id                                                                  parentDevice;
63     cl_device_affinity_domain                                                     partitionAffinityDomain;
64     cl_uint                                                                       partitionMaxSubDevices;
65     cl_device_partition_property                                                  partitionProperties[2];
66     cl_device_partition_property                                                  partitionType[3];
67     cl_device_svm_capabilities                                                    svmCapabilities;
68     StackVec<cl_queue_family_properties_intel, CommonConstants::engineGroupCount> queueFamilyProperties;
69     double                                                                        platformHostTimerResolution;
70     size_t                                                                        planarYuvMaxWidth;
71     size_t                                                                        planarYuvMaxHeight;
72     cl_version                                                                    numericClVersion;
73     cl_uint                                                                       maxComputUnits;
74     cl_uint                                                                       maxWorkItemDimensions;
75     cl_uint                                                                       maxNumOfSubGroups;
76     cl_bool                                                                       independentForwardProgress;
77     cl_device_atomic_capabilities                                                 atomicMemoryCapabilities;
78     cl_device_atomic_capabilities                                                 atomicFenceCapabilities;
79     cl_bool                                                                       nonUniformWorkGroupSupport;
80     cl_bool                                                                       workGroupCollectiveFunctionsSupport;
81     cl_bool                                                                       genericAddressSpaceSupport;
82     cl_device_device_enqueue_capabilities                                         deviceEnqueueSupport;
83     cl_bool                                                                       pipeSupport;
84     cl_uint                                                                       preferredVectorWidthChar;
85     cl_uint                                                                       preferredVectorWidthShort;
86     cl_uint                                                                       preferredVectorWidthInt;
87     cl_uint                                                                       preferredVectorWidthLong;
88     cl_uint                                                                       preferredVectorWidthFloat;
89     cl_uint                                                                       preferredVectorWidthDouble;
90     cl_uint                                                                       preferredVectorWidthHalf;
91     cl_uint                                                                       nativeVectorWidthChar;
92     cl_uint                                                                       nativeVectorWidthShort;
93     cl_uint                                                                       nativeVectorWidthInt;
94     cl_uint                                                                       nativeVectorWidthLong;
95     cl_uint                                                                       nativeVectorWidthFloat;
96     cl_uint                                                                       nativeVectorWidthDouble;
97     cl_uint                                                                       nativeVectorWidthHalf;
98     cl_uint                                                                       maxReadWriteImageArgs;
99     cl_uint                                                                       imagePitchAlignment;
100     cl_uint                                                                       imageBaseAddressAlignment;
101     cl_uint                                                                       maxPipeArgs;
102     cl_uint                                                                       pipeMaxActiveReservations;
103     cl_uint                                                                       pipeMaxPacketSize;
104     cl_uint                                                                       memBaseAddressAlign;
105     cl_uint                                                                       minDataTypeAlignSize;
106     cl_device_mem_cache_type                                                      globalMemCacheType;
107     cl_uint                                                                       maxConstantArgs;
108     cl_device_local_mem_type                                                      localMemType;
109     cl_bool                                                                       endianLittle;
110     cl_bool                                                                       deviceAvailable;
111     cl_bool                                                                       compilerAvailable;
112     cl_bool                                                                       linkerAvailable;
113     cl_uint                                                                       queueOnDevicePreferredSize;
114     cl_uint                                                                       queueOnDeviceMaxSize;
115     cl_uint                                                                       maxOnDeviceQueues;
116     cl_uint                                                                       maxOnDeviceEvents;
117     cl_bool                                                                       preferredInteropUserSync;
118     cl_uint                                                                       referenceCount;
119     cl_uint                                                                       preferredPlatformAtomicAlignment;
120     cl_uint                                                                       preferredGlobalAtomicAlignment;
121     cl_uint                                                                       preferredLocalAtomicAlignment;
122     cl_bool                                                                       hostUnifiedMemory;
123     cl_bool                                                                       vmeAvcSupportsTextureSampler;
124     cl_uint                                                                       vmeAvcVersion;
125     cl_uint                                                                       vmeVersion;
126     cl_uint                                                                       internalDriverVersion;
127     cl_uint                                                                       grfSize;
128     bool                                                                          preemptionSupported;
129     cl_device_pci_bus_info_khr                                                    pciBusInfo;
130     /* Extensions supported */
131     bool                                                                          nv12Extension;
132     bool                                                                          vmeExtension;
133     bool                                                                          platformLP;
134     bool                                                                          packedYuvExtension;
135     /*Unified Shared Memory Capabilites*/
136     cl_unified_shared_memory_capabilities_intel                                   hostMemCapabilities;
137     cl_unified_shared_memory_capabilities_intel                                   deviceMemCapabilities;
138     cl_unified_shared_memory_capabilities_intel                                   singleDeviceSharedMemCapabilities;
139     cl_unified_shared_memory_capabilities_intel                                   crossDeviceSharedMemCapabilities;
140     cl_unified_shared_memory_capabilities_intel                                   sharedSystemMemCapabilities;
141     StackVec<uint32_t, 4>                                                         supportedThreadArbitrationPolicies;
142 };
143 // clang-format on
144 
145 } // namespace NEO
146