Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 126 additions & 34 deletions source/loader/ze_loader_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,84 +101,176 @@ zelLoaderTranslateHandleInternal(

*handleOut = handleIn;
switch(handleType){
case ZEL_HANDLE_DRIVER:
if (loader::context->ze_driver_factory.hasInstance(reinterpret_cast<loader::ze_driver_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_driver_object_t*>( handleIn )->handle;
case ZEL_HANDLE_DRIVER:
{
// Determine if legacy loader intercept is enabled
// i.e., loader object exists for that handle by checking two conditions:
// 1. DDI Ext is disabled in loader by default OR
// 2. The input handle's function pointer matches the loader's dispatch table pointer,
// indicating that the handle was created through the legacy loader intercept layer

bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->Driver->pfnGet ==
loader::loaderDispatch->pCore->Driver->pfnGet);
Comment thread
nrspruit marked this conversation as resolved.
if (legacy_ldr_intercept_enabled && loader::context->ze_driver_factory.hasInstance(reinterpret_cast<loader::ze_driver_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_driver_object_t *>(handleIn)->handle;
}
break;
case ZEL_HANDLE_DEVICE:
if (loader::context->ze_device_factory.hasInstance(reinterpret_cast<loader::ze_device_object_t*>(handleIn)->handle)){
*handleOut = reinterpret_cast<loader::ze_device_object_t*>( handleIn )->handle;
}
case ZEL_HANDLE_DEVICE:
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->Device->pfnGet ==
loader::loaderDispatch->pCore->Device->pfnGet);
if (legacy_ldr_intercept_enabled && loader::context->ze_device_factory.hasInstance(reinterpret_cast<loader::ze_device_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_device_object_t *>(handleIn)->handle;
}
break;
case ZEL_HANDLE_CONTEXT:
if (loader::context->ze_context_factory.hasInstance(reinterpret_cast<loader::ze_context_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_context_object_t*>( handleIn )->handle;
}
case ZEL_HANDLE_CONTEXT:
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->Context->pfnCreate ==
loader::loaderDispatch->pCore->Context->pfnCreate);
if (legacy_ldr_intercept_enabled &&
loader::context->ze_context_factory.hasInstance(reinterpret_cast<loader::ze_context_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_context_object_t *>(handleIn)->handle;
}
break;
}
case ZEL_HANDLE_COMMAND_QUEUE:
if (loader::context->ze_command_queue_factory.hasInstance(reinterpret_cast<loader::ze_command_queue_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_command_queue_object_t*>( handleIn )->handle;
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->CommandQueue->pfnCreate ==
loader::loaderDispatch->pCore->CommandQueue->pfnCreate);
if (legacy_ldr_intercept_enabled && loader::context->ze_command_queue_factory.hasInstance(reinterpret_cast<loader::ze_command_queue_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_command_queue_object_t *>(handleIn)->handle;
}
break;
}
case ZEL_HANDLE_COMMAND_LIST:
if (loader::context->ze_command_list_factory.hasInstance(reinterpret_cast<loader::ze_command_list_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_command_list_object_t*>( handleIn )->handle;
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->CommandList->pfnCreate ==
loader::loaderDispatch->pCore->CommandList->pfnCreate);
if (legacy_ldr_intercept_enabled && loader::context->ze_command_list_factory.hasInstance(reinterpret_cast<loader::ze_command_list_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_command_list_object_t *>(handleIn)->handle;
}
break;
}
case ZEL_HANDLE_FENCE:
if (loader::context->ze_fence_factory.hasInstance(reinterpret_cast<loader::ze_fence_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_fence_object_t*>( handleIn )->handle;
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->Fence->pfnCreate ==
loader::loaderDispatch->pCore->Fence->pfnCreate);
if (legacy_ldr_intercept_enabled && loader::context->ze_fence_factory.hasInstance(reinterpret_cast<loader::ze_fence_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_fence_object_t *>(handleIn)->handle;
}
break;
}
case ZEL_HANDLE_EVENT_POOL:
if (loader::context->ze_event_pool_factory.hasInstance(reinterpret_cast<loader::ze_event_pool_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_event_pool_object_t*>( handleIn )->handle;
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->EventPool->pfnCreate ==
loader::loaderDispatch->pCore->EventPool->pfnCreate);
if (legacy_ldr_intercept_enabled && loader::context->ze_event_pool_factory.hasInstance(reinterpret_cast<loader::ze_event_pool_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_event_pool_object_t *>(handleIn)->handle;
}
break;
}
case ZEL_HANDLE_EVENT:
if (loader::context->ze_event_factory.hasInstance(reinterpret_cast<loader::ze_event_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_event_object_t*>( handleIn )->handle;
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->Event->pfnCreate ==
loader::loaderDispatch->pCore->Event->pfnCreate);
if (legacy_ldr_intercept_enabled && loader::context->ze_event_factory.hasInstance(reinterpret_cast<loader::ze_event_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_event_object_t *>(handleIn)->handle;
}
break;
}
case ZEL_HANDLE_IMAGE:
if (loader::context->ze_image_factory.hasInstance(reinterpret_cast<loader::ze_image_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_image_object_t*>( handleIn )->handle;
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->Image->pfnCreate ==
loader::loaderDispatch->pCore->Image->pfnCreate);
if (legacy_ldr_intercept_enabled && loader::context->ze_image_factory.hasInstance(reinterpret_cast<loader::ze_image_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_image_object_t *>(handleIn)->handle;
}
break;
}
case ZEL_HANDLE_MODULE:
if (loader::context->ze_module_factory.hasInstance(reinterpret_cast<loader::ze_module_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_module_object_t*>( handleIn )->handle;
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->Module->pfnCreate ==
loader::loaderDispatch->pCore->Module->pfnCreate);
if (legacy_ldr_intercept_enabled && loader::context->ze_module_factory.hasInstance(reinterpret_cast<loader::ze_module_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_module_object_t *>(handleIn)->handle;
}
break;
}
case ZEL_HANDLE_MODULE_BUILD_LOG:
if (loader::context->ze_module_build_log_factory.hasInstance(reinterpret_cast<loader::ze_module_build_log_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_module_build_log_object_t*>( handleIn )->handle;
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->ModuleBuildLog->pfnGetString ==
loader::loaderDispatch->pCore->ModuleBuildLog->pfnGetString);
if (legacy_ldr_intercept_enabled && loader::context->ze_module_build_log_factory.hasInstance(reinterpret_cast<loader::ze_module_build_log_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_module_build_log_object_t *>(handleIn)->handle;
}
break;
}
case ZEL_HANDLE_KERNEL:
if (loader::context->ze_kernel_factory.hasInstance(reinterpret_cast<loader::ze_kernel_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_kernel_object_t*>( handleIn )->handle;
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->Kernel->pfnCreate ==
loader::loaderDispatch->pCore->Kernel->pfnCreate);
if (legacy_ldr_intercept_enabled && loader::context->ze_kernel_factory.hasInstance(reinterpret_cast<loader::ze_kernel_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_kernel_object_t *>(handleIn)->handle;
}
break;
}
case ZEL_HANDLE_SAMPLER:
if (loader::context->ze_sampler_factory.hasInstance(reinterpret_cast<loader::ze_sampler_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_sampler_object_t*>( handleIn )->handle;
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->Sampler->pfnCreate ==
loader::loaderDispatch->pCore->Sampler->pfnCreate);
if (legacy_ldr_intercept_enabled && loader::context->ze_sampler_factory.hasInstance(reinterpret_cast<loader::ze_sampler_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_sampler_object_t *>(handleIn)->handle;
}
break;
}
case ZEL_HANDLE_PHYSICAL_MEM:
if (loader::context->ze_physical_mem_factory.hasInstance(reinterpret_cast<loader::ze_physical_mem_object_t*>(handleIn)->handle)) {
*handleOut = reinterpret_cast<loader::ze_physical_mem_object_t*>( handleIn )->handle;
{
bool legacy_ldr_intercept_enabled = (!loader::context->driverDDIPathDefault) ||
(reinterpret_cast<ze_handle_t *>(handleIn)->pCore->PhysicalMem->pfnCreate ==
loader::loaderDispatch->pCore->PhysicalMem->pfnCreate);
if (legacy_ldr_intercept_enabled && loader::context->ze_physical_mem_factory.hasInstance(reinterpret_cast<loader::ze_physical_mem_object_t *>(handleIn)->handle))
{
*handleOut = reinterpret_cast<loader::ze_physical_mem_object_t *>(handleIn)->handle;
}
break;
}
default:
return ZE_RESULT_ERROR_INVALID_ENUMERATION;
}

}


return ZE_RESULT_SUCCESS;
}


#if defined(__cplusplus)
}
#endif
#endif
Loading