@@ -423,6 +423,30 @@ def self.generate_icd_layer_source
423423 return CL_SUCCESS;
424424}
425425
426+ CL_API_ENTRY cl_int CL_API_CALL
427+ clInitLayerWithProperties(
428+ cl_uint num_entries,
429+ const struct _cl_icd_dispatch *target_dispatch,
430+ cl_uint *num_entries_out,
431+ const struct _cl_icd_dispatch **layer_dispatch,
432+ cl_properties *properties) {
433+ (void)properties;
434+ if (!target_dispatch || !layer_dispatch ||!num_entries_out || num_entries < sizeof(dispatch)/sizeof(dispatch.clGetPlatformIDs))
435+ return -1;
436+
437+ _init_dispatch();
438+
439+ tdispatch = target_dispatch;
440+ *layer_dispatch = &dispatch;
441+ *num_entries_out = sizeof(dispatch)/sizeof(dispatch.clGetPlatformIDs);
442+ return CL_SUCCESS;
443+ }
444+
445+ CL_API_ENTRY cl_int CL_API_CALL
446+ clDeinitLayer(void) {
447+ tdispatch = NULL;
448+ return CL_SUCCESS;
449+ }
426450EOF
427451
428452 $api_entries. each { |func_name , entry |
@@ -543,6 +567,7 @@ def self.generate_ocl_icd_loader_header
543567};
544568
545569extern struct _cl_icd_dispatch master_dispatch;
570+ extern struct _cl_icd_dispatch deinit_dispatch;
546571EOF
547572 $cl_objects. each { |o |
548573 ocl_icd_header += <<EOF
@@ -881,6 +906,21 @@ def self.generate_ocl_icd_loader_gen_source
881906 end
882907 ocl_icd_loader_gen_source << "};\n "
883908
909+ ocl_icd_loader_gen_source << "struct _cl_icd_dispatch deinit_dispatch = {\n "
910+ ( $api_entries. length +$buff-1 ) . times { |i |
911+ if ( $known_entries[ i ] ) then
912+ ocl_icd_loader_gen_source << " #{ $known_entries[ i ] } _unsupp,\n "
913+ else
914+ ocl_icd_loader_gen_source << " (void *) NULL,\n "
915+ end
916+ }
917+ if ( $known_entries[ $api_entries. length +$buff-1 ] ) then
918+ ocl_icd_loader_gen_source << " #{ $known_entries[ $api_entries. length +$buff-1 ] } \n "
919+ else
920+ ocl_icd_loader_gen_source << " (void *) NULL\n "
921+ end
922+ ocl_icd_loader_gen_source << "};\n "
923+
884924 ocl_icd_loader_gen_source << <<EOF
885925
886926#ifdef DEBUG_OCL_ICD
0 commit comments