… | |
… | |
18 | sampler Sampler |
18 | sampler Sampler |
19 | program Program |
19 | program Program |
20 | program_build Program |
20 | program_build Program |
21 | kernel Kernel |
21 | kernel Kernel |
22 | kernel_work_group Kernel |
22 | kernel_work_group Kernel |
|
|
23 | kernel_arg_info Kernel |
23 | command_queue Queue |
24 | command_queue Queue |
24 | ); |
25 | ); |
25 | |
26 | |
26 | my %typemap = ( |
27 | my %typemap = ( |
|
|
28 | # getinfo.txt c type, constructor, pod |
27 | cl_bool => ['cl_bool', 'value [i] ? &PL_sv_yes : &PL_sv_no', 'boolean'], |
29 | cl_bool => ['cl_bool', 'value [i] ? &PL_sv_yes : &PL_sv_no', 'boolean'], |
28 | #char => ['char', 'newSVpvn (value, size)', 'string'], |
30 | #char => ['char', 'newSVpvn (value, size)', 'string'], |
29 | char => ['char', 'newSVpv (value, 0)', 'string'], # all these are 0-terminated strings, and the driver often appends a \0 |
31 | char => ['char', 'newSVpv (value, 0)', 'string'], # all these are 0-terminated strings, and the driver often appends a \0 |
30 | size_t => ['size_t', 'newSVuv (value [i])', 'int'], |
32 | size_t => ['size_t', 'newSVuv (value [i])', 'int'], |
31 | "void*" => ['void *', 'newSVuv ((IV)(intptr_t)value [i])', 'ptr_value'], |
33 | "void*" => ['void *', 'newSVuv ((IV)(intptr_t)value [i])', 'ptr_value'], |
… | |
… | |
35 | cl_device_id => ['cl_device_id', 'OpenCL::Device', 'device'], |
37 | cl_device_id => ['cl_device_id', 'OpenCL::Device', 'device'], |
36 | Memory => ['cl_mem', 'OpenCL::Memory', 'mem'], |
38 | Memory => ['cl_mem', 'OpenCL::Memory', 'mem'], |
37 | Program => ['cl_program', 'OpenCL::Program', 'program'], |
39 | Program => ['cl_program', 'OpenCL::Program', 'program'], |
38 | CommandQueue => ['cl_command_queue', 'OpenCL::Queue', 'queue'], |
40 | CommandQueue => ['cl_command_queue', 'OpenCL::Queue', 'queue'], |
39 | cl_context_properties => ['cl_context_properties', 'newSVuv ((UV)value [i])', 'property_int'], |
41 | cl_context_properties => ['cl_context_properties', 'newSVuv ((UV)value [i])', 'property_int'], |
|
|
42 | cl_program_binary_type => ['cl_program_binary_type', 'newSVuv (UV)value [i])', 'binary_type'], |
40 | ); |
43 | ); |
41 | |
44 | |
42 | { |
45 | { |
43 | my %tmap = ( |
46 | my %tmap = ( |
44 | T_IV => "newSViv (value [i])", |
47 | T_IV => "newSViv (value [i])", |
… | |
… | |
77 | } |
80 | } |
78 | |
81 | |
79 | rename "$file~", $file; |
82 | rename "$file~", $file; |
80 | } |
83 | } |
81 | |
84 | |
82 | for my $CLASS (qw(platform device context command_queue mem image sampler program program_build kernel kernel_work_group event profiling gl_texture)) { |
85 | for my $CLASS (qw(platform device context command_queue mem image sampler program program_build kernel kernel_work_group kernel_arg event profiling gl_texture)) { |
83 | open my $fh, "<getinfo.txt" |
86 | open my $fh, "<getinfo.txt" |
84 | or die "getinfo.txt: $!"; |
87 | or die "getinfo.txt: $!"; |
85 | |
88 | |
86 | my $POD; |
89 | my $POD; |
87 | my @funcs; |
90 | my @funcs; |
… | |
… | |
106 | $cbase = "EventProfiling" if $cbase eq "Profiling"; |
109 | $cbase = "EventProfiling" if $cbase eq "Profiling"; |
107 | |
110 | |
108 | my $real_class = $CLASS; |
111 | my $real_class = $CLASS; |
109 | $real_class = "program" if $real_class eq "program_build"; |
112 | $real_class = "program" if $real_class eq "program_build"; |
110 | $real_class = "kernel" if $real_class eq "kernel_work_group"; |
113 | $real_class = "kernel" if $real_class eq "kernel_work_group"; |
|
|
114 | $real_class = "kernel" if $real_class eq "kernel_arg"; |
111 | $real_class = "event" if $real_class eq "profiling"; |
115 | $real_class = "event" if $real_class eq "profiling"; |
112 | |
116 | |
113 | my $perl_name = lc $name; |
117 | my $perl_name = lc $name; |
114 | $perl_name =~ s/^cl_//; |
118 | $perl_name =~ s/^cl_//; |
115 | $perl_name =~ s/^$real_class\_//; |
119 | $perl_name =~ s/^$real_class\_//; |
… | |
… | |
121 | |
125 | |
122 | if ($CLASS eq "program_build" || $CLASS eq "kernel_work_group") { |
126 | if ($CLASS eq "program_build" || $CLASS eq "kernel_work_group") { |
123 | $extra_args = ', device'; |
127 | $extra_args = ', device'; |
124 | $extra_perl_args = ' ($device)'; |
128 | $extra_perl_args = ' ($device)'; |
125 | $extra_xs_args = ', OpenCL::Device device'; |
129 | $extra_xs_args = ', OpenCL::Device device'; |
|
|
130 | } |
|
|
131 | |
|
|
132 | if ($CLASS eq "kernel_arg") { |
|
|
133 | $extra_args = ', idx'; |
|
|
134 | $extra_perl_args = ' ($idx)'; |
|
|
135 | $extra_xs_args = ', cl_uint idx'; |
126 | } |
136 | } |
127 | |
137 | |
128 | my $dynamic; |
138 | my $dynamic; |
129 | my $nelem = "size / sizeof (*value)"; |
139 | my $nelem = "size / sizeof (*value)"; |
130 | |
140 | |