From bed203bbefa2f3c69d3122d5a274888de46fbe41 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Fri, 18 Mar 2022 02:20:56 +0100 Subject: [PATCH] rusticl: add svm func stubs Signed-off-by: Karol Herbst Acked-by: Alyssa Rosenzweig Part-of: --- src/gallium/frontends/rusticl/api/icd.rs | 123 ++++++++++++++++++-- src/gallium/frontends/rusticl/api/memory.rs | 1 + src/gallium/frontends/rusticl/api/types.rs | 9 ++ 3 files changed, 123 insertions(+), 10 deletions(-) diff --git a/src/gallium/frontends/rusticl/api/icd.rs b/src/gallium/frontends/rusticl/api/icd.rs index e5d8f00127d..2657fcbb8b7 100644 --- a/src/gallium/frontends/rusticl/api/icd.rs +++ b/src/gallium/frontends/rusticl/api/icd.rs @@ -148,20 +148,20 @@ pub static DISPATCH: cl_icd_dispatch = cl_icd_dispatch { clCreateCommandQueueWithProperties: Some(cl_create_command_queue_with_properties), clCreatePipe: None, clGetPipeInfo: None, - clSVMAlloc: None, - clSVMFree: None, - clEnqueueSVMFree: None, - clEnqueueSVMMemcpy: None, - clEnqueueSVMMemFill: None, - clEnqueueSVMMap: None, - clEnqueueSVMUnmap: None, + clSVMAlloc: Some(cl_svm_alloc), + clSVMFree: Some(cl_svm_free), + clEnqueueSVMFree: Some(cl_enqueue_svm_free), + clEnqueueSVMMemcpy: Some(cl_enqueue_svm_memcpy), + clEnqueueSVMMemFill: Some(cl_enqueue_svm_mem_fill), + clEnqueueSVMMap: Some(cl_enqueue_svm_map), + clEnqueueSVMUnmap: Some(cl_enqueue_svm_unmap), clCreateSamplerWithProperties: None, - clSetKernelArgSVMPointer: None, - clSetKernelExecInfo: None, + clSetKernelArgSVMPointer: Some(cl_set_kernel_arg_svm_pointer), + clSetKernelExecInfo: Some(cl_set_kernel_exec_info), clGetKernelSubGroupInfoKHR: None, clCloneKernel: Some(cl_clone_kernel), clCreateProgramWithIL: Some(cl_create_program_with_il), - clEnqueueSVMMigrateMem: None, + clEnqueueSVMMigrateMem: Some(cl_enqueue_svm_migrate_mem), clGetDeviceAndHostTimer: None, clGetHostTimer: None, clGetKernelSubGroupInfo: None, @@ -1503,6 +1503,96 @@ extern "C" fn cl_create_command_queue_with_properties( match_obj!(create_command_queue(context, device, 0), errcode_ret) } +extern "C" fn cl_svm_alloc( + _context: cl_context, + _flags: cl_svm_mem_flags, + _size: usize, + _alignment: ::std::os::raw::c_uint, +) -> *mut ::std::os::raw::c_void { + ptr::null_mut() +} + +extern "C" fn cl_svm_free(_context: cl_context, _svm_pointer: *mut ::std::os::raw::c_void) {} + +extern "C" fn cl_enqueue_svm_free( + _command_queue: cl_command_queue, + _num_svm_pointers: cl_uint, + _svm_pointers: *mut *mut ::std::os::raw::c_void, + _pfn_free_func: ::std::option::Option, + _user_data: *mut ::std::os::raw::c_void, + _num_events_in_wait_list: cl_uint, + _event_wait_list: *const cl_event, + _event: *mut cl_event, +) -> cl_int { + CL_INVALID_OPERATION +} + +extern "C" fn cl_enqueue_svm_memcpy( + _command_queue: cl_command_queue, + _blocking_copy: cl_bool, + _dst_ptr: *mut ::std::os::raw::c_void, + _src_ptr: *const ::std::os::raw::c_void, + _size: usize, + _num_events_in_wait_list: cl_uint, + _event_wait_list: *const cl_event, + _event: *mut cl_event, +) -> cl_int { + CL_INVALID_OPERATION +} + +extern "C" fn cl_enqueue_svm_mem_fill( + _command_queue: cl_command_queue, + _svm_ptr: *mut ::std::os::raw::c_void, + _pattern: *const ::std::os::raw::c_void, + _pattern_size: usize, + _size: usize, + _num_events_in_wait_list: cl_uint, + _event_wait_list: *const cl_event, + _event: *mut cl_event, +) -> cl_int { + CL_INVALID_OPERATION +} + +extern "C" fn cl_enqueue_svm_map( + _command_queue: cl_command_queue, + _blocking_map: cl_bool, + _flags: cl_map_flags, + _svm_ptr: *mut ::std::os::raw::c_void, + _size: usize, + _num_events_in_wait_list: cl_uint, + _event_wait_list: *const cl_event, + _event: *mut cl_event, +) -> cl_int { + CL_INVALID_OPERATION +} + +extern "C" fn cl_enqueue_svm_unmap( + _command_queue: cl_command_queue, + _svm_ptr: *mut ::std::os::raw::c_void, + _num_events_in_wait_list: cl_uint, + _event_wait_list: *const cl_event, + _event: *mut cl_event, +) -> cl_int { + CL_INVALID_OPERATION +} + +extern "C" fn cl_set_kernel_arg_svm_pointer( + _kernel: cl_kernel, + _arg_index: cl_uint, + _arg_value: *const ::std::os::raw::c_void, +) -> cl_int { + CL_INVALID_OPERATION +} + +extern "C" fn cl_set_kernel_exec_info( + _kernel: cl_kernel, + _param_name: cl_kernel_exec_info, + _param_value_size: usize, + _param_value: *const ::std::os::raw::c_void, +) -> cl_int { + CL_INVALID_OPERATION +} + extern "C" fn cl_clone_kernel(source_kernel: cl_kernel, errcode_ret: *mut cl_int) -> cl_kernel { match_obj!(clone_kernel(source_kernel), errcode_ret) } @@ -1516,6 +1606,19 @@ extern "C" fn cl_create_program_with_il( match_obj!(create_program_with_il(context, il, length), errcode_ret) } +extern "C" fn cl_enqueue_svm_migrate_mem( + _command_queue: cl_command_queue, + _num_svm_pointers: cl_uint, + _svm_pointers: *mut *const ::std::os::raw::c_void, + _sizes: *const usize, + _flags: cl_mem_migration_flags, + _num_events_in_wait_list: cl_uint, + _event_wait_list: *const cl_event, + _event: *mut cl_event, +) -> cl_int { + CL_INVALID_OPERATION +} + extern "C" fn cl_set_program_specialization_constant( program: cl_program, spec_id: cl_uint, diff --git a/src/gallium/frontends/rusticl/api/memory.rs b/src/gallium/frontends/rusticl/api/memory.rs index 40c613d428d..93b2d5a4801 100644 --- a/src/gallium/frontends/rusticl/api/memory.rs +++ b/src/gallium/frontends/rusticl/api/memory.rs @@ -195,6 +195,7 @@ impl CLInfo for cl_mem { CL_MEM_REFERENCE_COUNT => cl_prop::(self.refcnt()?), CL_MEM_SIZE => cl_prop::(mem.size), CL_MEM_TYPE => cl_prop::(mem.mem_type), + CL_MEM_USES_SVM_POINTER => cl_prop::(CL_FALSE), _ => return Err(CL_INVALID_VALUE), }) } diff --git a/src/gallium/frontends/rusticl/api/types.rs b/src/gallium/frontends/rusticl/api/types.rs index 1dcc1755a7c..14f442a01ed 100644 --- a/src/gallium/frontends/rusticl/api/types.rs +++ b/src/gallium/frontends/rusticl/api/types.rs @@ -62,6 +62,15 @@ cl_callback!( } ); +cl_callback!( + SVMFreeCb { + queue: cl_command_queue, + num_svm_pointers: cl_uint, + svm_pointers: *mut *mut ::std::os::raw::c_void, + user_data: *mut ::std::os::raw::c_void, + } +); + // a lot of APIs use 3 component vectors passed as C arrays #[derive(Clone, Copy, PartialEq, Eq)] pub struct CLVec {