1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
|
/*
*
* Copyright (C) 2019-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
* @file ze_loader_internal.h generated from ze_loader_internal.h.mako
*
*/
#pragma once
#include <vector>
#include <map>
#include <atomic>
#include "ze_ddi_common.h"
#include "ze_util.h"
#include "ze_object.h"
#include "ze_ldrddi.h"
#include "zet_ldrddi.h"
#include "zes_ldrddi.h"
#include "zer_ldrddi.h"
#include "loader/ze_loader.h"
#include "../utils/logging.h"
#include "spdlog/spdlog.h"
#include "source/lib/error_state.h"
namespace loader
{
///////////////////////////////////////////////////////////////////////////////
/// @brief Driver Type Enumerations
/// @details The ordering of the drivers reported to the user is based on the order of the enumerations provided.
/// When additional driver types are added, they should be added to the end of the list to avoid reporting new device types
/// before known device types.
typedef enum _zel_driver_type_t
{
ZEL_DRIVER_TYPE_DISCRETE_GPU= 0, ///< The driver has Discrete GPUs only
ZEL_DRIVER_TYPE_GPU = 1, ///< The driver has Heterogenous GPU types
ZEL_DRIVER_TYPE_INTEGRATED_GPU = 2, ///< The driver has Integrated GPUs only
ZEL_DRIVER_TYPE_MIXED = 3, ///< The driver has Heterogenous driver types not limited to GPU or NPU.
ZEL_DRIVER_TYPE_OTHER = 4, ///< The driver has No GPU Devices and has other device types only
ZEL_DRIVER_TYPE_NPU = 5, ///< The driver has NPU devices only
ZEL_DRIVER_TYPE_FORCE_UINT32 = 0x7fffffff
} zel_driver_type_t;
//////////////////////////////////////////////////////////////////////////
struct driver_t
{
HMODULE handle = NULL;
ze_result_t initStatus = ZE_RESULT_SUCCESS;
ze_result_t initSysManStatus = ZE_RESULT_SUCCESS;
ze_result_t initDriversStatus = ZE_RESULT_SUCCESS;
dditable_t dditable = {};
std::string name;
bool driverInuse = false;
zel_driver_type_t driverType = ZEL_DRIVER_TYPE_FORCE_UINT32;
ze_driver_ddi_handles_ext_properties_t properties;
bool pciOrderingRequested = false;
bool legacyInitAttempted = false;
bool driverDDIHandleSupportQueried = false;
ze_driver_handle_t zerDriverHandle = nullptr;
bool zerDriverDDISupported = true;
ze_api_version_t versionRequested = ZE_API_VERSION_CURRENT;
bool ddiInitialized = false;
bool customDriver = false;
ze_result_t zeddiInitResult = ZE_RESULT_ERROR_UNINITIALIZED;
ze_result_t zetddiInitResult = ZE_RESULT_ERROR_UNINITIALIZED;
ze_result_t zesddiInitResult = ZE_RESULT_ERROR_UNINITIALIZED;
ze_result_t zerddiInitResult = ZE_RESULT_ERROR_UNINITIALIZED;
};
using driver_vector_t = std::vector< driver_t >;
///////////////////////////////////////////////////////////////////////////////
class context_t
{
public:
/// factories
///////////////////////////////////////////////////////////////////////////////
ze_command_list_factory_t ze_command_list_factory;
ze_command_queue_factory_t ze_command_queue_factory;
ze_context_factory_t ze_context_factory;
ze_device_factory_t ze_device_factory;
ze_driver_factory_t ze_driver_factory;
ze_event_factory_t ze_event_factory;
ze_event_pool_factory_t ze_event_pool_factory;
ze_external_semaphore_ext_factory_t ze_external_semaphore_ext_factory;
ze_fabric_edge_factory_t ze_fabric_edge_factory;
ze_fabric_vertex_factory_t ze_fabric_vertex_factory;
ze_fence_factory_t ze_fence_factory;
ze_image_factory_t ze_image_factory;
ze_kernel_factory_t ze_kernel_factory;
ze_module_build_log_factory_t ze_module_build_log_factory;
ze_module_factory_t ze_module_factory;
ze_physical_mem_factory_t ze_physical_mem_factory;
ze_rtas_builder_exp_factory_t ze_rtas_builder_exp_factory;
ze_rtas_builder_ext_factory_t ze_rtas_builder_ext_factory;
ze_rtas_parallel_operation_exp_factory_t ze_rtas_parallel_operation_exp_factory;
ze_rtas_parallel_operation_ext_factory_t ze_rtas_parallel_operation_ext_factory;
ze_sampler_factory_t ze_sampler_factory;
zes_device_factory_t zes_device_factory;
zes_diag_factory_t zes_diag_factory;
zes_driver_factory_t zes_driver_factory;
zes_engine_factory_t zes_engine_factory;
zes_fabric_port_factory_t zes_fabric_port_factory;
zes_fan_factory_t zes_fan_factory;
zes_firmware_factory_t zes_firmware_factory;
zes_freq_factory_t zes_freq_factory;
zes_led_factory_t zes_led_factory;
zes_mem_factory_t zes_mem_factory;
zes_overclock_factory_t zes_overclock_factory;
zes_perf_factory_t zes_perf_factory;
zes_psu_factory_t zes_psu_factory;
zes_pwr_factory_t zes_pwr_factory;
zes_ras_factory_t zes_ras_factory;
zes_sched_factory_t zes_sched_factory;
zes_standby_factory_t zes_standby_factory;
zes_temp_factory_t zes_temp_factory;
zes_vf_factory_t zes_vf_factory;
zet_command_list_factory_t zet_command_list_factory;
zet_context_factory_t zet_context_factory;
zet_debug_session_factory_t zet_debug_session_factory;
zet_device_factory_t zet_device_factory;
zet_driver_factory_t zet_driver_factory;
zet_kernel_factory_t zet_kernel_factory;
zet_metric_decoder_exp_factory_t zet_metric_decoder_exp_factory;
zet_metric_factory_t zet_metric_factory;
zet_metric_group_factory_t zet_metric_group_factory;
zet_metric_programmable_exp_factory_t zet_metric_programmable_exp_factory;
zet_metric_query_factory_t zet_metric_query_factory;
zet_metric_query_pool_factory_t zet_metric_query_pool_factory;
zet_metric_streamer_factory_t zet_metric_streamer_factory;
zet_metric_tracer_exp_factory_t zet_metric_tracer_exp_factory;
zet_module_factory_t zet_module_factory;
zet_tracer_exp_factory_t zet_tracer_exp_factory;
/// end factories
std::mutex image_handle_map_lock;
std::mutex sampler_handle_map_lock;
std::unordered_map<ze_image_object_t *, ze_image_handle_t> image_handle_map;
std::unordered_map<ze_sampler_object_t *, ze_sampler_handle_t> sampler_handle_map;
ze_api_version_t version = ZE_API_VERSION_CURRENT;
ze_api_version_t configured_version = ZE_API_VERSION_CURRENT;
ze_api_version_t ddi_init_version = ZE_API_VERSION_CURRENT;
driver_vector_t allDrivers;
driver_vector_t zeDrivers;
driver_vector_t zesDrivers;
driver_vector_t *sysmanInstanceDrivers;
HMODULE validationLayer = nullptr;
HMODULE tracingLayer = nullptr;
bool driverEnvironmentQueried = false;
bool forceIntercept = false;
bool initDriversSupport = false;
std::vector<zel_component_version_t> compVersions;
const char *LOADER_COMP_NAME = "loader";
void debug_trace_message(std::string errorMessage, std::string errorValue);
ze_result_t init();
ze_result_t init_driver(driver_t &driver, ze_init_flags_t flags, ze_init_driver_type_desc_t* desc);
void add_loader_version();
bool driverSorting(driver_vector_t *drivers, ze_init_driver_type_desc_t* desc, bool sysmanOnly);
void driverOrdering(driver_vector_t *drivers);
~context_t();
bool intercept_enabled = false;
bool debugTraceEnabled = false;
bool driverDDIPathDefault = false;
bool tracingLayerEnabled = false;
std::once_flag coreDriverSortOnce;
std::once_flag sysmanDriverSortOnce;
std::atomic<bool> sortingInProgress = {false};
std::mutex sortMutex;
bool instrumentationEnabled = false;
bool pciOrderingRequested = false;
dditable_t tracing_dditable = {};
std::shared_ptr<Logger> zel_logger;
ze_driver_handle_t defaultZerDriverHandle = nullptr;
};
extern ze_handle_t* loaderDispatch;
extern ze_dditable_t* loaderZeDdiTable;
extern zet_dditable_t* loaderZetDdiTable;
extern zes_dditable_t* loaderZesDdiTable;
extern zer_dditable_t* defaultZerDdiTable;
extern context_t *context;
}
|