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