@@ -28,7 +28,11 @@ ur_result_t validateProcInputs(ur_api_version_t Version, void *pDdiTable) {
2828}
2929} // namespace
3030
31+ #ifdef UR_STATIC_ADAPTER_OPENCL
32+ namespace ur ::opencl {
33+ #else
3134extern " C" {
35+ #endif
3236
3337UR_DLLEXPORT ur_result_t UR_APICALL urGetAdapterProcAddrTable (
3438 ur_api_version_t version, ur_adapter_dditable_t *pDdiTable) {
@@ -509,6 +513,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urGetGraphExpProcAddrTable(
509513 return UR_RESULT_SUCCESS;
510514}
511515
516+ #ifndef UR_STATIC_ADAPTER_OPENCL
512517UR_DLLEXPORT ur_result_t UR_APICALL urAllAddrTable (ur_api_version_t version,
513518 ur_dditable_t *pDdiTable) {
514519 urGetAdapterProcAddrTable (version, &pDdiTable->Adapter );
@@ -539,14 +544,147 @@ UR_DLLEXPORT ur_result_t UR_APICALL urAllAddrTable(ur_api_version_t version,
539544
540545 return UR_RESULT_SUCCESS;
541546}
547+ #endif // UR_STATIC_ADAPTER_OPENCL
542548
549+ #ifdef UR_STATIC_ADAPTER_OPENCL
550+ } // namespace ur::opencl
551+ #else
543552} // extern "C"
553+ #endif
544554
545- const ur_dditable_t *ur::opencl::ddi_getter::value () {
555+ namespace {
556+ ur_result_t populateDdiTable (ur_dditable_t *ddi) {
557+ if (ddi == nullptr ) {
558+ return UR_RESULT_ERROR_INVALID_NULL_POINTER;
559+ }
560+
561+ ur_result_t result;
562+
563+ #ifdef UR_STATIC_ADAPTER_OPENCL
564+ #define ADAPTER_CALL ::ur::opencl
565+ #else
566+ #define ADAPTER_CALL
567+ #endif
568+
569+ result = ADAPTER_CALL::urGetAdapterProcAddrTable (UR_API_VERSION_CURRENT,
570+ &ddi->Adapter );
571+ if (result != UR_RESULT_SUCCESS)
572+ return result;
573+ result = ADAPTER_CALL::urGetBindlessImagesExpProcAddrTable (
574+ UR_API_VERSION_CURRENT, &ddi->BindlessImagesExp );
575+ if (result != UR_RESULT_SUCCESS)
576+ return result;
577+ result = ADAPTER_CALL::urGetCommandBufferExpProcAddrTable (
578+ UR_API_VERSION_CURRENT, &ddi->CommandBufferExp );
579+ if (result != UR_RESULT_SUCCESS)
580+ return result;
581+ result = ADAPTER_CALL::urGetContextProcAddrTable (UR_API_VERSION_CURRENT,
582+ &ddi->Context );
583+ if (result != UR_RESULT_SUCCESS)
584+ return result;
585+ result = ADAPTER_CALL::urGetEnqueueProcAddrTable (UR_API_VERSION_CURRENT,
586+ &ddi->Enqueue );
587+ if (result != UR_RESULT_SUCCESS)
588+ return result;
589+ result = ADAPTER_CALL::urGetEnqueueExpProcAddrTable (UR_API_VERSION_CURRENT,
590+ &ddi->EnqueueExp );
591+ if (result != UR_RESULT_SUCCESS)
592+ return result;
593+ result = ADAPTER_CALL::urGetEventProcAddrTable (UR_API_VERSION_CURRENT,
594+ &ddi->Event );
595+ if (result != UR_RESULT_SUCCESS)
596+ return result;
597+ result = ADAPTER_CALL::urGetGraphExpProcAddrTable (UR_API_VERSION_CURRENT,
598+ &ddi->GraphExp );
599+ if (result != UR_RESULT_SUCCESS)
600+ return result;
601+ result = ADAPTER_CALL::urGetIPCExpProcAddrTable (UR_API_VERSION_CURRENT,
602+ &ddi->IPCExp );
603+ if (result != UR_RESULT_SUCCESS)
604+ return result;
605+ result = ADAPTER_CALL::urGetKernelProcAddrTable (UR_API_VERSION_CURRENT,
606+ &ddi->Kernel );
607+ if (result != UR_RESULT_SUCCESS)
608+ return result;
609+ result =
610+ ADAPTER_CALL::urGetMemProcAddrTable (UR_API_VERSION_CURRENT, &ddi->Mem );
611+ if (result != UR_RESULT_SUCCESS)
612+ return result;
613+ result = ADAPTER_CALL::urGetMemoryExportExpProcAddrTable (
614+ UR_API_VERSION_CURRENT, &ddi->MemoryExportExp );
615+ if (result != UR_RESULT_SUCCESS)
616+ return result;
617+ result = ADAPTER_CALL::urGetPhysicalMemProcAddrTable (UR_API_VERSION_CURRENT,
618+ &ddi->PhysicalMem );
619+ if (result != UR_RESULT_SUCCESS)
620+ return result;
621+ result = ADAPTER_CALL::urGetPlatformProcAddrTable (UR_API_VERSION_CURRENT,
622+ &ddi->Platform );
623+ if (result != UR_RESULT_SUCCESS)
624+ return result;
625+ result = ADAPTER_CALL::urGetProgramProcAddrTable (UR_API_VERSION_CURRENT,
626+ &ddi->Program );
627+ if (result != UR_RESULT_SUCCESS)
628+ return result;
629+ result = ADAPTER_CALL::urGetProgramExpProcAddrTable (UR_API_VERSION_CURRENT,
630+ &ddi->ProgramExp );
631+ if (result != UR_RESULT_SUCCESS)
632+ return result;
633+ result = ADAPTER_CALL::urGetQueueProcAddrTable (UR_API_VERSION_CURRENT,
634+ &ddi->Queue );
635+ if (result != UR_RESULT_SUCCESS)
636+ return result;
637+ result = ADAPTER_CALL::urGetQueueExpProcAddrTable (UR_API_VERSION_CURRENT,
638+ &ddi->QueueExp );
639+ if (result != UR_RESULT_SUCCESS)
640+ return result;
641+ result = ADAPTER_CALL::urGetSamplerProcAddrTable (UR_API_VERSION_CURRENT,
642+ &ddi->Sampler );
643+ if (result != UR_RESULT_SUCCESS)
644+ return result;
645+ result =
646+ ADAPTER_CALL::urGetUSMProcAddrTable (UR_API_VERSION_CURRENT, &ddi->USM );
647+ if (result != UR_RESULT_SUCCESS)
648+ return result;
649+ result = ADAPTER_CALL::urGetUSMExpProcAddrTable (UR_API_VERSION_CURRENT,
650+ &ddi->USMExp );
651+ if (result != UR_RESULT_SUCCESS)
652+ return result;
653+ result = ADAPTER_CALL::urGetUsmP2PExpProcAddrTable (UR_API_VERSION_CURRENT,
654+ &ddi->UsmP2PExp );
655+ if (result != UR_RESULT_SUCCESS)
656+ return result;
657+ result = ADAPTER_CALL::urGetVirtualMemProcAddrTable (UR_API_VERSION_CURRENT,
658+ &ddi->VirtualMem );
659+ if (result != UR_RESULT_SUCCESS)
660+ return result;
661+ result = ADAPTER_CALL::urGetDeviceProcAddrTable (UR_API_VERSION_CURRENT,
662+ &ddi->Device );
663+ if (result != UR_RESULT_SUCCESS)
664+ return result;
665+ result = ADAPTER_CALL::urGetDeviceExpProcAddrTable (UR_API_VERSION_CURRENT,
666+ &ddi->DeviceExp );
667+ if (result != UR_RESULT_SUCCESS)
668+ return result;
669+
670+ #undef ADAPTER_CALL
671+
672+ return result;
673+ }
674+ } // namespace
675+
676+ namespace ur ::opencl {
677+ const ur_dditable_t *ddi_getter::value () {
546678 static std::once_flag flag;
547679 static ur_dditable_t table;
548680
549- std::call_once (flag,
550- []() { urAllAddrTable (UR_API_VERSION_CURRENT, &table); });
681+ std::call_once (flag, []() { populateDdiTable (&table); });
551682 return &table;
552683}
684+
685+ #ifdef UR_STATIC_ADAPTER_OPENCL
686+ ur_result_t urAdapterGetDdiTables (ur_dditable_t *ddi) {
687+ return populateDdiTable (ddi);
688+ }
689+ #endif
690+ } // namespace ur::opencl
0 commit comments