(self, device:CLDevice, name:str, lib:bytes, arg_dtypes=[], **kwargs)
| 39 | |
| 40 | class CLProgram: |
| 41 | def __init__(self, device:CLDevice, name:str, lib:bytes, arg_dtypes=[], **kwargs): |
| 42 | self.dev, self.name, self.lib, self.arg_dtypes = device, name, device.cl_compiler.compile_cached(lib.decode()), arg_dtypes |
| 43 | self.program = checked(cl.clCreateProgramWithBinary(device.context, 1, device.device_id, (ctypes.c_size_t * 1)(len(self.lib)), |
| 44 | to_char_p_p([self.lib], ctypes.c_ubyte), binary_status := ctypes.c_int32(), |
| 45 | errcode_ret := ctypes.c_int32()), errcode_ret) |
| 46 | check(binary_status.value) |
| 47 | check(cl.clBuildProgram(self.program, 1, device.device_id, None, BP_CB(), None)) # NOTE: OSX requires this |
| 48 | self.kernel = checked(cl.clCreateKernel(self.program, name.encode(), status := ctypes.c_int32()), status) |
| 49 | |
| 50 | def __del__(self): |
| 51 | try: check(cl.clReleaseKernel(self.kernel)) |
nothing calls this directly
no test coverage detected