--- OpenCL/OpenCL.xs 2012/05/05 14:49:52 1.76 +++ OpenCL/OpenCL.xs 2012/05/05 15:43:02 1.79 @@ -620,6 +620,22 @@ } /*****************************************************************************/ +/* mem object destructor notify */ + +static void ecb_noinline +eq_destructor_push (void *data1, void *data2, void *data3) +{ +} + +static eq_vtbl eq_destructor_vtbl = { 0, eq_destructor_push }; + +static void CL_CALLBACK +eq_destructor_notify (cl_mem memobj, void *user_data) +{ + eq_enq (&eq_destructor_vtbl, (SV *)user_data, (void *)memobj, 0, 0); +} + +/*****************************************************************************/ /* event objects */ static void @@ -1027,9 +1043,22 @@ void type (OpenCL::Device self) + ALIAS: + type = CL_DEVICE_TYPE + address_bits = CL_DEVICE_ADDRESS_BITS + max_mem_alloc_size = CL_DEVICE_MAX_MEM_ALLOC_SIZE + single_fp_config = CL_DEVICE_SINGLE_FP_CONFIG + global_mem_cache_size = CL_DEVICE_GLOBAL_MEM_CACHE_SIZE + global_mem_size = CL_DEVICE_GLOBAL_MEM_SIZE + max_constant_buffer_size = CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE + local_mem_size = CL_DEVICE_LOCAL_MEM_SIZE + execution_capabilities = CL_DEVICE_EXECUTION_CAPABILITIES + properties = CL_DEVICE_QUEUE_PROPERTIES + double_fp_config = CL_DEVICE_DOUBLE_FP_CONFIG + half_fp_config = CL_DEVICE_HALF_FP_CONFIG PPCODE: - cl_device_type value [1]; - NEED_SUCCESS (GetDeviceInfo, (self, CL_DEVICE_TYPE, sizeof (value), value, 0)); + cl_ulong value [1]; + NEED_SUCCESS (GetDeviceInfo, (self, ix, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; PUSHs (sv_2mortal (newSVuv (value [i]))); @@ -1053,8 +1082,10 @@ max_samplers = CL_DEVICE_MAX_SAMPLERS mem_base_addr_align = CL_DEVICE_MEM_BASE_ADDR_ALIGN min_data_type_align_size = CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE + global_mem_cache_type = CL_DEVICE_GLOBAL_MEM_CACHE_TYPE global_mem_cacheline_size = CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE max_constant_args = CL_DEVICE_MAX_CONSTANT_ARGS + local_mem_type = CL_DEVICE_LOCAL_MEM_TYPE preferred_vector_width_half = CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF native_vector_width_char = CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR native_vector_width_short = CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT @@ -1102,61 +1133,6 @@ PUSHs (sv_2mortal (newSVuv (value [i]))); void -address_bits (OpenCL::Device self) - PPCODE: - cl_bitfield value [1]; - NEED_SUCCESS (GetDeviceInfo, (self, CL_DEVICE_ADDRESS_BITS, sizeof (value), value, 0)); - EXTEND (SP, 1); - const int i = 0; - PUSHs (sv_2mortal (newSVuv (value [i]))); - -void -max_mem_alloc_size (OpenCL::Device self) - ALIAS: - max_mem_alloc_size = CL_DEVICE_MAX_MEM_ALLOC_SIZE - global_mem_cache_size = CL_DEVICE_GLOBAL_MEM_CACHE_SIZE - global_mem_size = CL_DEVICE_GLOBAL_MEM_SIZE - max_constant_buffer_size = CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE - local_mem_size = CL_DEVICE_LOCAL_MEM_SIZE - PPCODE: - cl_ulong value [1]; - NEED_SUCCESS (GetDeviceInfo, (self, ix, sizeof (value), value, 0)); - EXTEND (SP, 1); - const int i = 0; - PUSHs (sv_2mortal (newSVuv (value [i]))); - -void -single_fp_config (OpenCL::Device self) - ALIAS: - single_fp_config = CL_DEVICE_SINGLE_FP_CONFIG - double_fp_config = CL_DEVICE_DOUBLE_FP_CONFIG - half_fp_config = CL_DEVICE_HALF_FP_CONFIG - PPCODE: - cl_device_fp_config value [1]; - NEED_SUCCESS (GetDeviceInfo, (self, ix, sizeof (value), value, 0)); - EXTEND (SP, 1); - const int i = 0; - PUSHs (sv_2mortal (newSVuv (value [i]))); - -void -global_mem_cache_type (OpenCL::Device self) - PPCODE: - cl_device_mem_cache_type value [1]; - NEED_SUCCESS (GetDeviceInfo, (self, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, sizeof (value), value, 0)); - EXTEND (SP, 1); - const int i = 0; - PUSHs (sv_2mortal (newSVuv (value [i]))); - -void -local_mem_type (OpenCL::Device self) - PPCODE: - cl_device_local_mem_type value [1]; - NEED_SUCCESS (GetDeviceInfo, (self, CL_DEVICE_LOCAL_MEM_TYPE, sizeof (value), value, 0)); - EXTEND (SP, 1); - const int i = 0; - PUSHs (sv_2mortal (newSVuv (value [i]))); - -void error_correction_support (OpenCL::Device self) ALIAS: error_correction_support = CL_DEVICE_ERROR_CORRECTION_SUPPORT @@ -1165,40 +1141,20 @@ compiler_available = CL_DEVICE_COMPILER_AVAILABLE host_unified_memory = CL_DEVICE_HOST_UNIFIED_MEMORY PPCODE: - cl_bool value [1]; + cl_uint value [1]; NEED_SUCCESS (GetDeviceInfo, (self, ix, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; PUSHs (sv_2mortal (value [i] ? &PL_sv_yes : &PL_sv_no)); void -execution_capabilities (OpenCL::Device self) - PPCODE: - cl_device_exec_capabilities value [1]; - NEED_SUCCESS (GetDeviceInfo, (self, CL_DEVICE_EXECUTION_CAPABILITIES, sizeof (value), value, 0)); - EXTEND (SP, 1); - const int i = 0; - PUSHs (sv_2mortal (newSVuv (value [i]))); - -void -properties (OpenCL::Device self) - PPCODE: - cl_command_queue_properties value [1]; - NEED_SUCCESS (GetDeviceInfo, (self, CL_DEVICE_QUEUE_PROPERTIES, sizeof (value), value, 0)); - EXTEND (SP, 1); - const int i = 0; - PUSHs (sv_2mortal (newSVuv (value [i]))); - -void platform (OpenCL::Device self) PPCODE: cl_platform_id value [1]; NEED_SUCCESS (GetDeviceInfo, (self, CL_DEVICE_PLATFORM, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; - { - PUSH_CLOBJ (stash_platform, value [i]); - } + PUSH_CLOBJ (stash_platform, value [i]); void name (OpenCL::Device self) @@ -1225,9 +1181,7 @@ NEED_SUCCESS (GetDeviceInfo, (self, CL_DEVICE_PARENT_DEVICE_EXT, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; - { - PUSH_CLOBJ (stash_device, value [i]); - } + PUSH_CLOBJ (stash_device, value [i]); void partition_types_ext (OpenCL::Device self) @@ -1557,9 +1511,7 @@ int i, n = size / sizeof (*value); EXTEND (SP, n); for (i = 0; i < n; ++i) - { - PUSH_CLOBJ (stash_device, value [i]); - } + PUSH_CLOBJ (stash_device, value [i]); void properties (OpenCL::Context self) @@ -2159,10 +2111,8 @@ NEED_SUCCESS (GetCommandQueueInfo, (self, CL_QUEUE_CONTEXT, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; - { - NEED_SUCCESS (RetainContext, (value [i])); - PUSH_CLOBJ (stash_context, value [i]); - } + NEED_SUCCESS (RetainContext, (value [i])); + PUSH_CLOBJ (stash_context, value [i]); void device (OpenCL::Queue self) @@ -2171,9 +2121,7 @@ NEED_SUCCESS (GetCommandQueueInfo, (self, CL_QUEUE_DEVICE, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; - { - PUSH_CLOBJ (stash_device, value [i]); - } + PUSH_CLOBJ (stash_device, value [i]); void reference_count (OpenCL::Queue self) @@ -2187,7 +2135,7 @@ void properties (OpenCL::Queue self) PPCODE: - cl_command_queue_properties value [1]; + cl_ulong value [1]; NEED_SUCCESS (GetCommandQueueInfo, (self, CL_QUEUE_PROPERTIES, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; @@ -2207,13 +2155,22 @@ PPCODE: INFO (MemObject) +void +destructor_callback (OpenCL::Memory self, SV *notify) + PPCODE: + clSetMemObjectDestructorCallback (self, eq_destructor_notify, SvREFCNT_inc (s_get_cv (notify))); + #BEGIN:mem void type (OpenCL::Memory self) + ALIAS: + type = CL_MEM_TYPE + map_count = CL_MEM_MAP_COUNT + reference_count = CL_MEM_REFERENCE_COUNT PPCODE: - cl_mem_object_type value [1]; - NEED_SUCCESS (GetMemObjectInfo, (self, CL_MEM_TYPE, sizeof (value), value, 0)); + cl_uint value [1]; + NEED_SUCCESS (GetMemObjectInfo, (self, ix, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; PUSHs (sv_2mortal (newSVuv (value [i]))); @@ -2221,7 +2178,7 @@ void flags (OpenCL::Memory self) PPCODE: - cl_mem_flags value [1]; + cl_ulong value [1]; NEED_SUCCESS (GetMemObjectInfo, (self, CL_MEM_FLAGS, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; @@ -2249,28 +2206,14 @@ PUSHs (sv_2mortal (newSVuv ((IV)(intptr_t)value [i]))); void -map_count (OpenCL::Memory self) - ALIAS: - map_count = CL_MEM_MAP_COUNT - reference_count = CL_MEM_REFERENCE_COUNT - PPCODE: - cl_uint value [1]; - NEED_SUCCESS (GetMemObjectInfo, (self, ix, sizeof (value), value, 0)); - EXTEND (SP, 1); - const int i = 0; - PUSHs (sv_2mortal (newSVuv (value [i]))); - -void context (OpenCL::Memory self) PPCODE: cl_context value [1]; NEED_SUCCESS (GetMemObjectInfo, (self, CL_MEM_CONTEXT, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; - { - NEED_SUCCESS (RetainContext, (value [i])); - PUSH_CLOBJ (stash_context, value [i]); - } + NEED_SUCCESS (RetainContext, (value [i])); + PUSH_CLOBJ (stash_context, value [i]); void associated_memobject (OpenCL::Memory self) @@ -2279,10 +2222,8 @@ NEED_SUCCESS (GetMemObjectInfo, (self, CL_MEM_ASSOCIATED_MEMOBJECT, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; - { - NEED_SUCCESS (RetainMemObject, (value [i])); - PUSH_CLOBJ (stash_memory, value [i]); - } + NEED_SUCCESS (RetainMemObject, (value [i])); + PUSH_CLOBJ (stash_memory, value [i]); #END:mem @@ -2391,9 +2332,13 @@ void reference_count (OpenCL::Sampler self) + ALIAS: + reference_count = CL_SAMPLER_REFERENCE_COUNT + normalized_coords = CL_SAMPLER_NORMALIZED_COORDS + addressing_mode = CL_SAMPLER_ADDRESSING_MODE PPCODE: cl_uint value [1]; - NEED_SUCCESS (GetSamplerInfo, (self, CL_SAMPLER_REFERENCE_COUNT, sizeof (value), value, 0)); + NEED_SUCCESS (GetSamplerInfo, (self, ix, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; PUSHs (sv_2mortal (newSVuv (value [i]))); @@ -2405,33 +2350,13 @@ NEED_SUCCESS (GetSamplerInfo, (self, CL_SAMPLER_CONTEXT, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; - { - NEED_SUCCESS (RetainContext, (value [i])); - PUSH_CLOBJ (stash_context, value [i]); - } - -void -normalized_coords (OpenCL::Sampler self) - PPCODE: - cl_addressing_mode value [1]; - NEED_SUCCESS (GetSamplerInfo, (self, CL_SAMPLER_NORMALIZED_COORDS, sizeof (value), value, 0)); - EXTEND (SP, 1); - const int i = 0; - PUSHs (sv_2mortal (newSVuv (value [i]))); - -void -addressing_mode (OpenCL::Sampler self) - PPCODE: - cl_filter_mode value [1]; - NEED_SUCCESS (GetSamplerInfo, (self, CL_SAMPLER_ADDRESSING_MODE, sizeof (value), value, 0)); - EXTEND (SP, 1); - const int i = 0; - PUSHs (sv_2mortal (newSVuv (value [i]))); + NEED_SUCCESS (RetainContext, (value [i])); + PUSH_CLOBJ (stash_context, value [i]); void filter_mode (OpenCL::Sampler self) PPCODE: - cl_bool value [1]; + cl_uint value [1]; NEED_SUCCESS (GetSamplerInfo, (self, CL_SAMPLER_FILTER_MODE, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; @@ -2526,7 +2451,7 @@ void build_status (OpenCL::Program self, OpenCL::Device device) PPCODE: - cl_build_status value [1]; + cl_int value [1]; NEED_SUCCESS (GetProgramBuildInfo, (self, device, CL_PROGRAM_BUILD_STATUS, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; @@ -2549,7 +2474,7 @@ void binary_type (OpenCL::Program self, OpenCL::Device device) PPCODE: - cl_program_binary_type value [1]; + cl_uint value [1]; NEED_SUCCESS (GetProgramBuildInfo, (self, device, CL_PROGRAM_BINARY_TYPE, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; @@ -2630,10 +2555,8 @@ NEED_SUCCESS (GetProgramInfo, (self, CL_PROGRAM_CONTEXT, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; - { - NEED_SUCCESS (RetainContext, (value [i])); - PUSH_CLOBJ (stash_context, value [i]); - } + NEED_SUCCESS (RetainContext, (value [i])); + PUSH_CLOBJ (stash_context, value [i]); void devices (OpenCL::Program self) @@ -2645,9 +2568,7 @@ int i, n = size / sizeof (*value); EXTEND (SP, n); for (i = 0; i < n; ++i) - { - PUSH_CLOBJ (stash_device, value [i]); - } + PUSH_CLOBJ (stash_device, value [i]); void source (OpenCL::Program self) @@ -2868,10 +2789,8 @@ NEED_SUCCESS (GetKernelInfo, (self, CL_KERNEL_CONTEXT, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; - { - NEED_SUCCESS (RetainContext, (value [i])); - PUSH_CLOBJ (stash_context, value [i]); - } + NEED_SUCCESS (RetainContext, (value [i])); + PUSH_CLOBJ (stash_context, value [i]); void program (OpenCL::Kernel self) @@ -2880,10 +2799,8 @@ NEED_SUCCESS (GetKernelInfo, (self, CL_KERNEL_PROGRAM, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; - { - NEED_SUCCESS (RetainProgram, (value [i])); - PUSH_CLOBJ (stash_program, value [i]); - } + NEED_SUCCESS (RetainProgram, (value [i])); + PUSH_CLOBJ (stash_program, value [i]); #END:kernel @@ -2957,18 +2874,12 @@ void arg_address_qualifier (OpenCL::Kernel self, cl_uint idx) + ALIAS: + arg_address_qualifier = CL_KERNEL_ARG_ADDRESS_QUALIFIER + arg_access_qualifier = CL_KERNEL_ARG_ACCESS_QUALIFIER PPCODE: - cl_kernel_arg_address_qualifier value [1]; - NEED_SUCCESS (GetKernelArgInfo, (self, idx, CL_KERNEL_ARG_ADDRESS_QUALIFIER, sizeof (value), value, 0)); - EXTEND (SP, 1); - const int i = 0; - PUSHs (sv_2mortal (newSVuv (value [i]))); - -void -arg_access_qualifier (OpenCL::Kernel self, cl_uint idx) - PPCODE: - cl_kernel_arg_access_qualifier value [1]; - NEED_SUCCESS (GetKernelArgInfo, (self, idx, CL_KERNEL_ARG_ACCESS_QUALIFIER, sizeof (value), value, 0)); + cl_uint value [1]; + NEED_SUCCESS (GetKernelArgInfo, (self, idx, ix, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; PUSHs (sv_2mortal (newSVuv (value [i]))); @@ -2990,7 +2901,7 @@ void arg_type_qualifier (OpenCL::Kernel self, cl_uint idx) PPCODE: - cl_kernel_arg_type_qualifier value [1]; + cl_ulong value [1]; NEED_SUCCESS (GetKernelArgInfo, (self, idx, CL_KERNEL_ARG_TYPE_QUALIFIER, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; @@ -3031,23 +2942,13 @@ NEED_SUCCESS (GetEventInfo, (self, CL_EVENT_COMMAND_QUEUE, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; - { - NEED_SUCCESS (RetainCommandQueue, (value [i])); - PUSH_CLOBJ (stash_queue, value [i]); - } + NEED_SUCCESS (RetainCommandQueue, (value [i])); + PUSH_CLOBJ (stash_queue, value [i]); void command_type (OpenCL::Event self) - PPCODE: - cl_command_type value [1]; - NEED_SUCCESS (GetEventInfo, (self, CL_EVENT_COMMAND_TYPE, sizeof (value), value, 0)); - EXTEND (SP, 1); - const int i = 0; - PUSHs (sv_2mortal (newSVuv (value [i]))); - -void -reference_count (OpenCL::Event self) ALIAS: + command_type = CL_EVENT_COMMAND_TYPE reference_count = CL_EVENT_REFERENCE_COUNT command_execution_status = CL_EVENT_COMMAND_EXECUTION_STATUS PPCODE: @@ -3064,10 +2965,8 @@ NEED_SUCCESS (GetEventInfo, (self, CL_EVENT_CONTEXT, sizeof (value), value, 0)); EXTEND (SP, 1); const int i = 0; - { - NEED_SUCCESS (RetainContext, (value [i])); - PUSH_CLOBJ (stash_context, value [i]); - } + NEED_SUCCESS (RetainContext, (value [i])); + PUSH_CLOBJ (stash_context, value [i]); #END:event