… | |
… | |
2193 | cl_sampler ca; |
2193 | cl_sampler ca; |
2194 | size_t cz; |
2194 | size_t cz; |
2195 | cl_event ce; |
2195 | cl_event ce; |
2196 | } arg; |
2196 | } arg; |
2197 | size_t size; |
2197 | size_t size; |
|
|
2198 | int nullarg = 0; |
2198 | |
2199 | |
2199 | switch (type) |
2200 | switch (type) |
2200 | { |
2201 | { |
2201 | case 'c': arg.cc = SvIV (sv); size = sizeof (arg.cc); break; |
2202 | case 'c': arg.cc = SvIV (sv); size = sizeof (arg.cc); break; |
2202 | case 'C': arg.cC = SvUV (sv); size = sizeof (arg.cC); break; |
2203 | case 'C': arg.cC = SvUV (sv); size = sizeof (arg.cC); break; |
… | |
… | |
2208 | case 'L': arg.cL = SvUV (sv); size = sizeof (arg.cL); break; |
2209 | case 'L': arg.cL = SvUV (sv); size = sizeof (arg.cL); break; |
2209 | |
2210 | |
2210 | case 'h': arg.ch = SvUV (sv); size = sizeof (arg.ch); break; |
2211 | case 'h': arg.ch = SvUV (sv); size = sizeof (arg.ch); break; |
2211 | case 'f': arg.cf = SvNV (sv); size = sizeof (arg.cf); break; |
2212 | case 'f': arg.cf = SvNV (sv); size = sizeof (arg.cf); break; |
2212 | case 'd': arg.cd = SvNV (sv); size = sizeof (arg.cd); break; |
2213 | case 'd': arg.cd = SvNV (sv); size = sizeof (arg.cd); break; |
2213 | case 'z': arg.cz = SvUV (sv); size = sizeof (arg.cz); break; |
|
|
2214 | |
2214 | |
|
|
2215 | case 'z': nullarg = 1; size = SvIV (sv); break; |
|
|
2216 | |
2215 | case 'm': arg.cm = SvCLOBJ ("OpenCL::Kernel::setf", "m", sv, "OpenCL::Memory" ); size = sizeof (arg.cm); break; |
2217 | case 'm': nullarg = !SvOK (sv); arg.cm = SvCLOBJ ("OpenCL::Kernel::setf", "m", sv, "OpenCL::Memory" ); size = sizeof (arg.cm); break; |
2216 | case 'a': arg.ca = SvCLOBJ ("OpenCL::Kernel::setf", "a", sv, "OpenCL::Sampler"); size = sizeof (arg.ca); break; |
2218 | case 'a': nullarg = !SvOK (sv); arg.ca = SvCLOBJ ("OpenCL::Kernel::setf", "a", sv, "OpenCL::Sampler"); size = sizeof (arg.ca); break; |
2217 | case 'e': arg.ca = SvCLOBJ ("OpenCL::Kernel::setf", "e", sv, "OpenCL::Event" ); size = sizeof (arg.ce); break; |
2219 | case 'e': nullarg = !SvOK (sv); arg.ca = SvCLOBJ ("OpenCL::Kernel::setf", "e", sv, "OpenCL::Event" ); size = sizeof (arg.ce); break; |
2218 | |
2220 | |
2219 | default: |
2221 | default: |
2220 | croak ("OpenCL::Kernel::setf format character '%c' not supported", type); |
2222 | croak ("OpenCL::Kernel::setf format character '%c' not supported", type); |
2221 | } |
2223 | } |
2222 | |
2224 | |
2223 | clSetKernelArg (self, i - 2, size, &arg); |
2225 | res = clSetKernelArg (self, i - 2, size, nullarg ? 0 : &arg); |
|
|
2226 | if (res) |
|
|
2227 | croak ("OpenCL::Kernel::setf kernel parameter '%c' (#%d): %s", type, i - 2, err2str (res)); |
2224 | } |
2228 | } |
2225 | |
2229 | |
2226 | if (i != items) |
2230 | if (i != items) |
2227 | croak ("OpenCL::Kernel::setf format string too short (too many arguments)"); |
2231 | croak ("OpenCL::Kernel::setf format string too short (too many arguments)"); |
2228 | |
2232 | |
… | |
… | |
2282 | clSetKernelArg (self, idx, sizeof (value), &value); |
2286 | clSetKernelArg (self, idx, sizeof (value), &value); |
2283 | |
2287 | |
2284 | void |
2288 | void |
2285 | set_memory (OpenCL::Kernel self, cl_uint idx, OpenCL::Memory_ornull value) |
2289 | set_memory (OpenCL::Kernel self, cl_uint idx, OpenCL::Memory_ornull value) |
2286 | CODE: |
2290 | CODE: |
2287 | clSetKernelArg (self, idx, sizeof (value), &value); |
2291 | clSetKernelArg (self, idx, sizeof (value), value ? &value : 0); |
2288 | |
2292 | |
2289 | void |
2293 | void |
2290 | set_buffer (OpenCL::Kernel self, cl_uint idx, OpenCL::Buffer_ornull value) |
2294 | set_buffer (OpenCL::Kernel self, cl_uint idx, OpenCL::Buffer_ornull value) |
2291 | CODE: |
2295 | CODE: |
2292 | clSetKernelArg (self, idx, sizeof (value), &value); |
2296 | clSetKernelArg (self, idx, sizeof (value), value ? &value : 0); |
2293 | |
2297 | |
2294 | void |
2298 | void |
2295 | set_image (OpenCL::Kernel self, cl_uint idx, OpenCL::Image_ornull value) |
2299 | set_image (OpenCL::Kernel self, cl_uint idx, OpenCL::Image_ornull value) |
2296 | ALIAS: |
2300 | ALIAS: |
2297 | set_image2d = 0 |
2301 | set_image2d = 0 |
2298 | set_image3d = 0 |
2302 | set_image3d = 0 |
2299 | CODE: |
2303 | CODE: |
2300 | clSetKernelArg (self, idx, sizeof (value), &value); |
2304 | clSetKernelArg (self, idx, sizeof (value), value ? &value : 0); |
2301 | |
2305 | |
2302 | void |
2306 | void |
2303 | set_sampler (OpenCL::Kernel self, cl_uint idx, OpenCL::Sampler value) |
2307 | set_sampler (OpenCL::Kernel self, cl_uint idx, OpenCL::Sampler value) |
2304 | CODE: |
2308 | CODE: |
2305 | clSetKernelArg (self, idx, sizeof (value), &value); |
2309 | clSetKernelArg (self, idx, sizeof (value), &value); |