Skip to content

Commit 1ff5b1a

Browse files
committed
WIP Loader deinitialization.
1 parent 42e41ea commit 1ff5b1a

6 files changed

Lines changed: 230 additions & 53 deletions

File tree

cllayerinfo.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ void unmute(void) {
5151
void print_layer_info(const struct layer_icd *layer)
5252
{
5353
cl_layer_api_version api_version = 0;
54-
clGetLayerInfo_fn layer_info_fn_ptr = (clGetLayerInfo_fn)layer->layer_info_fn_ptr;
54+
clGetLayerInfo_fn layer_info_fn_ptr = layer->layer_info_fn_ptr;
5555
cl_int error = CL_SUCCESS;
5656
size_t sz;
5757

@@ -87,5 +87,8 @@ int main (int argc, char *argv[])
8787
print_layer_info(layer);
8888
layer = layer->next_layer;
8989
}
90+
mute();
91+
_deinitClIcd_no_inline();
92+
unmute();
9093
return 0;
9194
}

icd_generator.rb

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}
426450
EOF
427451

428452
$api_entries.each { |func_name, entry|
@@ -543,6 +567,7 @@ def self.generate_ocl_icd_loader_header
543567
};
544568
545569
extern struct _cl_icd_dispatch master_dispatch;
570+
extern struct _cl_icd_dispatch deinit_dispatch;
546571
EOF
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

libdummy_icd.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,11 @@ CL_API_ENTRY cl_int CL_API_CALL INTclGetPlatformInfo(
166166
#ifdef ICD_WITHOUT_EXTENSION
167167
"private_ext"
168168
#else
169-
"cl_khr_icd"
169+
"cl_khr_icd cl_khr_icd_unloadable"
170170
#endif
171171
;
172172
char cl_platform_icd_suffix_khr[] = "LIG";
173+
cl_bool cl_platform_unloadable = CL_TRUE;
173174
size_t size_string;
174175
char * string_p;
175176
if( platform != NULL ) {
@@ -212,6 +213,10 @@ CL_API_ENTRY cl_int CL_API_CALL INTclGetPlatformInfo(
212213
string_p = cl_platform_icd_suffix_khr;
213214
size_string = sizeof(cl_platform_icd_suffix_khr);
214215
break;
216+
case CL_PLATFORM_UNLOADABLE_KHR:
217+
string_p = (char *)&cl_platform_unloadable;
218+
size_string = sizeof(cl_platform_unloadable);
219+
break;
215220
default:
216221
return CL_INVALID_VALUE;
217222
break;

libdummy_icd.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2525
*/
2626
#include <CL/opencl.h>
2727

28+
#if !defined(CL_PLATFORM_UNLOADABLE_KHR)
29+
#define CL_PLATFORM_UNLOADABLE_KHR 0x0921
30+
#endif
2831

0 commit comments

Comments
 (0)