[PATCH v2 3/4] opencl: Update to OpenCL 1.1.

Zebediah Figura z.figura12 at gmail.com
Sat Mar 20 15:59:24 CDT 2021


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/opencl/make_opencl     |  9 ++++++-
 dlls/opencl/opencl.spec     |  8 +++++++
 dlls/opencl/opencl_types.h  | 28 ++++++++++++++++++++++
 dlls/opencl/pe_thunks.c     | 48 +++++++++++++++++++++++++++++++++++++
 dlls/opencl/unix_private.h  |  8 +++++++
 dlls/opencl/unix_thunks.c   | 38 +++++++++++++++++++++++++++++
 dlls/opencl/unix_wrappers.c | 16 +++++++++++++
 dlls/opencl/unixlib.h       |  8 +++++++
 8 files changed, 162 insertions(+), 1 deletion(-)

diff --git a/dlls/opencl/make_opencl b/dlls/opencl/make_opencl
index ce9660866ec..3274d6aa8ca 100755
--- a/dlls/opencl/make_opencl
+++ b/dlls/opencl/make_opencl
@@ -30,6 +30,7 @@ my $gen_traces = 1;
 
 # List of categories to put in the 'opengl_core.c' file
 my %cat_1_0 = ( "CL_VERSION_1_0" => 1 );
+my %cat_1_1 = ( %cat_1_0, "CL_VERSION_1_1" => 1 );
 
 my %core_categories = ();
 
@@ -183,11 +184,15 @@ if (@ARGV > 1)
     $name0 =~ s%^.*/%%;
     die "Usage: $name0 [version]\n";
 }
-my $version = $ARGV[0] || "1.0";
+my $version = $ARGV[0] || "1.1";
 if ($version eq "1.0")
 {
     %core_categories = %cat_1_0;
 }
+elsif ($version eq "1.1")
+{
+    %core_categories = %cat_1_1;
+}
 else
 {
     die "Incorrect OpenCL version.\n";
@@ -256,6 +261,8 @@ sub needs_unix_wrapper($)
             "clCreateContext" => 1,
             "clCreateContextFromType" => 1,
             "clEnqueueNativeKernel" => 1,
+            "clSetEventCallback" => 1,
+            "clSetMemObjectDestructorCallback" => 1,
         );
     my $name = shift;
 
diff --git a/dlls/opencl/opencl.spec b/dlls/opencl/opencl.spec
index 61a83fae8cd..099b9617cd0 100644
--- a/dlls/opencl/opencl.spec
+++ b/dlls/opencl/opencl.spec
@@ -10,8 +10,11 @@
 @ stdcall clCreateProgramWithBinary(ptr long ptr ptr ptr ptr ptr)
 @ stdcall clCreateProgramWithSource(ptr long ptr ptr ptr)
 @ stdcall clCreateSampler(ptr long long long ptr)
+@ stdcall clCreateSubBuffer(ptr int64 long ptr ptr)
+@ stdcall clCreateUserEvent(ptr ptr)
 @ stdcall clEnqueueBarrier(ptr)
 @ stdcall clEnqueueCopyBuffer(ptr ptr ptr long long long long ptr ptr)
+@ stdcall clEnqueueCopyBufferRect(ptr ptr ptr ptr ptr ptr long long long long long ptr ptr)
 @ stdcall clEnqueueCopyBufferToImage(ptr ptr ptr long ptr ptr long ptr ptr)
 @ stdcall clEnqueueCopyImage(ptr ptr ptr ptr ptr ptr long ptr ptr)
 @ stdcall clEnqueueCopyImageToBuffer(ptr ptr ptr ptr ptr long long ptr ptr)
@@ -21,11 +24,13 @@
 @ stdcall clEnqueueNDRangeKernel(ptr ptr long ptr ptr ptr long ptr ptr)
 @ stdcall clEnqueueNativeKernel(ptr ptr ptr long long ptr ptr long ptr ptr)
 @ stdcall clEnqueueReadBuffer(ptr ptr long long long ptr long ptr ptr)
+@ stdcall clEnqueueReadBufferRect(ptr ptr long ptr ptr ptr long long long long ptr long ptr ptr)
 @ stdcall clEnqueueReadImage(ptr ptr long ptr ptr long long ptr long ptr ptr)
 @ stdcall clEnqueueTask(ptr ptr long ptr ptr)
 @ stdcall clEnqueueUnmapMemObject(ptr ptr ptr long ptr ptr)
 @ stdcall clEnqueueWaitForEvents(ptr long ptr)
 @ stdcall clEnqueueWriteBuffer(ptr ptr long long long ptr long ptr ptr)
+@ stdcall clEnqueueWriteBufferRect(ptr ptr long ptr ptr ptr long long long long ptr long ptr ptr)
 @ stdcall clEnqueueWriteImage(ptr ptr long ptr ptr long long ptr long ptr ptr)
 @ stdcall clFinish(ptr)
 @ stdcall clFlush(ptr)
@@ -61,6 +66,9 @@
 @ stdcall clRetainProgram(ptr)
 @ stdcall clRetainSampler(ptr)
 @ stdcall clSetCommandQueueProperty(ptr int64 long ptr)
+@ stdcall clSetEventCallback(ptr long ptr ptr)
 @ stdcall clSetKernelArg(ptr long long ptr)
+@ stdcall clSetMemObjectDestructorCallback(ptr ptr ptr)
+@ stdcall clSetUserEventStatus(ptr long)
 @ stdcall clUnloadCompiler()
 @ stdcall clWaitForEvents(long ptr)
diff --git a/dlls/opencl/opencl_types.h b/dlls/opencl/opencl_types.h
index eb5530d0a8d..5d10b2c9ee1 100644
--- a/dlls/opencl/opencl_types.h
+++ b/dlls/opencl/opencl_types.h
@@ -54,14 +54,17 @@ typedef struct _cl_buffer_region
     size_t origin;
     size_t size;
 } cl_buffer_region;
+typedef cl_uint          cl_buffer_create_type;
 
 #define CL_A 0x10B1
 #define CL_ADDRESS_CLAMP 0x1132
 #define CL_ADDRESS_CLAMP_TO_EDGE 0x1131
+#define CL_ADDRESS_MIRRORED_REPEAT 0x1134
 #define CL_ADDRESS_NONE 0x1130
 #define CL_ADDRESS_REPEAT 0x1133
 #define CL_ARGB 0x10B7
 #define CL_BGRA 0x10B6
+#define CL_BUFFER_CREATE_TYPE_REGION 0x1220
 #define CL_BUILD_ERROR -2
 #define CL_BUILD_IN_PROGRESS -3
 #define CL_BUILD_NONE -1
@@ -72,6 +75,7 @@ typedef struct _cl_buffer_region
 #define CL_CHAR_MIN CL_SCHAR_MIN
 #define CL_COMMAND_ACQUIRE_GL_OBJECTS 0x11FF
 #define CL_COMMAND_COPY_BUFFER 0x11F5
+#define CL_COMMAND_COPY_BUFFER_RECT 0x1203
 #define CL_COMMAND_COPY_BUFFER_TO_IMAGE 0x11FA
 #define CL_COMMAND_COPY_IMAGE 0x11F8
 #define CL_COMMAND_COPY_IMAGE_TO_BUFFER 0x11F9
@@ -81,15 +85,19 @@ typedef struct _cl_buffer_region
 #define CL_COMMAND_NATIVE_KERNEL 0x11F2
 #define CL_COMMAND_NDRANGE_KERNEL 0x11F0
 #define CL_COMMAND_READ_BUFFER 0x11F3
+#define CL_COMMAND_READ_BUFFER_RECT 0x1201
 #define CL_COMMAND_READ_IMAGE 0x11F6
 #define CL_COMMAND_RELEASE_GL_OBJECTS 0x1200
 #define CL_COMMAND_TASK 0x11F1
 #define CL_COMMAND_UNMAP_MEM_OBJECT 0x11FD
+#define CL_COMMAND_USER 0x1204
 #define CL_COMMAND_WRITE_BUFFER 0x11F4
+#define CL_COMMAND_WRITE_BUFFER_RECT 0x1202
 #define CL_COMMAND_WRITE_IMAGE 0x11F7
 #define CL_COMPILER_NOT_AVAILABLE -3
 #define CL_COMPLETE 0x0
 #define CL_CONTEXT_DEVICES 0x1081
+#define CL_CONTEXT_NUM_DEVICES 0x1083
 #define CL_CONTEXT_PLATFORM 0x1084
 #define CL_CONTEXT_PROPERTIES 0x1082
 #define CL_CONTEXT_REFERENCE_COUNT 0x1080
@@ -114,6 +122,7 @@ typedef struct _cl_buffer_region
 #define CL_DEVICE_GLOBAL_MEM_CACHE_SIZE 0x101E
 #define CL_DEVICE_GLOBAL_MEM_CACHE_TYPE 0x101C
 #define CL_DEVICE_GLOBAL_MEM_SIZE 0x101F
+#define CL_DEVICE_HOST_UNIFIED_MEMORY 0x1035
 #define CL_DEVICE_IMAGE2D_MAX_HEIGHT 0x1012
 #define CL_DEVICE_IMAGE2D_MAX_WIDTH 0x1011
 #define CL_DEVICE_IMAGE3D_MAX_DEPTH 0x1015
@@ -137,12 +146,21 @@ typedef struct _cl_buffer_region
 #define CL_DEVICE_MEM_BASE_ADDR_ALIGN 0x1019
 #define CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE 0x101A
 #define CL_DEVICE_NAME 0x102B
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR 0x1036
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE 0x103B
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT 0x103A
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF 0x103C
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_INT 0x1038
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG 0x1039
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT 0x1037
 #define CL_DEVICE_NOT_AVAILABLE -2
 #define CL_DEVICE_NOT_FOUND -1
+#define CL_DEVICE_OPENCL_C_VERSION 0x103D
 #define CL_DEVICE_PLATFORM 0x1031
 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR 0x1006
 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE 0x100B
 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT 0x100A
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF 0x1034
 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT 0x1008
 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG 0x1009
 #define CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT 0x1007
@@ -163,9 +181,11 @@ typedef struct _cl_buffer_region
 #define CL_EVENT_COMMAND_EXECUTION_STATUS 0x11D3
 #define CL_EVENT_COMMAND_QUEUE 0x11D0
 #define CL_EVENT_COMMAND_TYPE 0x11D1
+#define CL_EVENT_CONTEXT 0x11D4
 #define CL_EVENT_REFERENCE_COUNT 0x11D2
 #define CL_EXEC_KERNEL (1 << 0)
 #define CL_EXEC_NATIVE_KERNEL (1 << 1)
+#define CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST -14
 #define CL_FALSE 0
 #define CL_FILTER_LINEAR 0x1141
 #define CL_FILTER_NEAREST 0x1140
@@ -186,6 +206,7 @@ typedef struct _cl_buffer_region
 #define CL_FP_ROUND_TO_INF (1 << 4)
 #define CL_FP_ROUND_TO_NEAREST (1 << 2)
 #define CL_FP_ROUND_TO_ZERO (1 << 3)
+#define CL_FP_SOFT_FLOAT (1 << 6)
 #define CL_GLOBAL 0x2
 #define CL_HALF_FLOAT 0x10DD
 #define CL_HUGE_VAL ((cl_double) 1e500)
@@ -231,6 +252,7 @@ typedef struct _cl_buffer_region
 #define CL_INVALID_PLATFORM -32
 #define CL_INVALID_PROGRAM -44
 #define CL_INVALID_PROGRAM_EXECUTABLE -45
+#define CL_INVALID_PROPERTY -64
 #define CL_INVALID_QUEUE_PROPERTIES -35
 #define CL_INVALID_SAMPLER -41
 #define CL_INVALID_VALUE -30
@@ -256,6 +278,7 @@ typedef struct _cl_buffer_region
 #define CL_MAP_WRITE (1 << 1)
 #define CL_MAXFLOAT CL_FLT_MAX
 #define CL_MEM_ALLOC_HOST_PTR (1 << 4)
+#define CL_MEM_ASSOCIATED_MEMOBJECT 0x1107
 #define CL_MEM_CONTEXT 0x1106
 #define CL_MEM_COPY_HOST_PTR (1 << 5)
 #define CL_MEM_COPY_OVERLAP -8
@@ -266,6 +289,7 @@ typedef struct _cl_buffer_region
 #define CL_MEM_OBJECT_BUFFER 0x10F0
 #define CL_MEM_OBJECT_IMAGE2D 0x10F1
 #define CL_MEM_OBJECT_IMAGE3D 0x10F2
+#define CL_MEM_OFFSET 0x1108
 #define CL_MEM_READ_ONLY (1 << 2)
 #define CL_MEM_READ_WRITE (1 << 0)
 #define CL_MEM_REFERENCE_COUNT 0x1105
@@ -273,6 +297,7 @@ typedef struct _cl_buffer_region
 #define CL_MEM_TYPE 0x1100
 #define CL_MEM_USE_HOST_PTR (1 << 3)
 #define CL_MEM_WRITE_ONLY (1 << 1)
+#define CL_MISALIGNED_SUB_BUFFER_OFFSET -13
 #define CL_NAN (CL_INFINITY - CL_INFINITY)
 #define CL_NONE 0x0
 #define CL_OUT_OF_HOST_MEMORY -6
@@ -311,7 +336,10 @@ typedef struct _cl_buffer_region
 #define CL_RG 0x10B2
 #define CL_RGB 0x10B4
 #define CL_RGBA 0x10B5
+#define CL_RGBx 0x10BC
+#define CL_RGx 0x10BB
 #define CL_RUNNING 0x1
+#define CL_Rx 0x10BA
 #define CL_SAMPLER_ADDRESSING_MODE 0x1153
 #define CL_SAMPLER_CONTEXT 0x1151
 #define CL_SAMPLER_FILTER_MODE 0x1154
diff --git a/dlls/opencl/pe_thunks.c b/dlls/opencl/pe_thunks.c
index dc32146fcb4..74204aeb95c 100644
--- a/dlls/opencl/pe_thunks.c
+++ b/dlls/opencl/pe_thunks.c
@@ -78,6 +78,18 @@ cl_sampler WINAPI clCreateSampler( cl_context context, cl_bool normalized_coords
     return opencl_funcs->pclCreateSampler( context, normalized_coords, addressing_mode, filter_mode, errcode_ret );
 }
 
+cl_mem WINAPI clCreateSubBuffer( cl_mem buffer, cl_mem_flags flags, cl_buffer_create_type buffer_create_type, const void* buffer_create_info, cl_int* errcode_ret )
+{
+    TRACE( "(%p, %s, %u, %p, %p)\n", buffer, wine_dbgstr_longlong(flags), buffer_create_type, buffer_create_info, errcode_ret );
+    return opencl_funcs->pclCreateSubBuffer( buffer, flags, buffer_create_type, buffer_create_info, errcode_ret );
+}
+
+cl_event WINAPI clCreateUserEvent( cl_context context, cl_int* errcode_ret )
+{
+    TRACE( "(%p, %p)\n", context, errcode_ret );
+    return opencl_funcs->pclCreateUserEvent( context, errcode_ret );
+}
+
 cl_int WINAPI clEnqueueBarrier( cl_command_queue command_queue )
 {
     TRACE( "(%p)\n", command_queue );
@@ -90,6 +102,12 @@ cl_int WINAPI clEnqueueCopyBuffer( cl_command_queue command_queue, cl_mem src_bu
     return opencl_funcs->pclEnqueueCopyBuffer( command_queue, src_buffer, dst_buffer, src_offset, dst_offset, size, num_events_in_wait_list, event_wait_list, event );
 }
 
+cl_int WINAPI clEnqueueCopyBufferRect( cl_command_queue command_queue, cl_mem src_buffer, cl_mem dst_buffer, const size_t* src_origin, const size_t* dst_origin, const size_t* region, size_t src_row_pitch, size_t src_slice_pitch, size_t dst_row_pitch, size_t dst_slice_pitch, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event )
+{
+    TRACE( "(%p, %p, %p, %p, %p, %p, %Iu, %Iu, %Iu, %Iu, %u, %p, %p)\n", command_queue, src_buffer, dst_buffer, src_origin, dst_origin, region, src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch, num_events_in_wait_list, event_wait_list, event );
+    return opencl_funcs->pclEnqueueCopyBufferRect( command_queue, src_buffer, dst_buffer, src_origin, dst_origin, region, src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch, num_events_in_wait_list, event_wait_list, event );
+}
+
 cl_int WINAPI clEnqueueCopyBufferToImage( cl_command_queue command_queue, cl_mem src_buffer, cl_mem dst_image, size_t src_offset, const size_t* dst_origin, const size_t* region, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event )
 {
     TRACE( "(%p, %p, %p, %Iu, %p, %p, %u, %p, %p)\n", command_queue, src_buffer, dst_image, src_offset, dst_origin, region, num_events_in_wait_list, event_wait_list, event );
@@ -144,6 +162,12 @@ cl_int WINAPI clEnqueueReadBuffer( cl_command_queue command_queue, cl_mem buffer
     return opencl_funcs->pclEnqueueReadBuffer( command_queue, buffer, blocking_read, offset, size, ptr, num_events_in_wait_list, event_wait_list, event );
 }
 
+cl_int WINAPI clEnqueueReadBufferRect( cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_read, const size_t* buffer_origin, const size_t* host_origin, const size_t* region, size_t buffer_row_pitch, size_t buffer_slice_pitch, size_t host_row_pitch, size_t host_slice_pitch, void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event )
+{
+    TRACE( "(%p, %p, %u, %p, %p, %p, %Iu, %Iu, %Iu, %Iu, %p, %u, %p, %p)\n", command_queue, buffer, blocking_read, buffer_origin, host_origin, region, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, num_events_in_wait_list, event_wait_list, event );
+    return opencl_funcs->pclEnqueueReadBufferRect( command_queue, buffer, blocking_read, buffer_origin, host_origin, region, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, num_events_in_wait_list, event_wait_list, event );
+}
+
 cl_int WINAPI clEnqueueReadImage( cl_command_queue command_queue, cl_mem image, cl_bool blocking_read, const size_t* origin, const size_t* region, size_t row_pitch, size_t slice_pitch, void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event )
 {
     TRACE( "(%p, %p, %u, %p, %p, %Iu, %Iu, %p, %u, %p, %p)\n", command_queue, image, blocking_read, origin, region, row_pitch, slice_pitch, ptr, num_events_in_wait_list, event_wait_list, event );
@@ -174,6 +198,12 @@ cl_int WINAPI clEnqueueWriteBuffer( cl_command_queue command_queue, cl_mem buffe
     return opencl_funcs->pclEnqueueWriteBuffer( command_queue, buffer, blocking_write, offset, size, ptr, num_events_in_wait_list, event_wait_list, event );
 }
 
+cl_int WINAPI clEnqueueWriteBufferRect( cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write, const size_t* buffer_origin, const size_t* host_origin, const size_t* region, size_t buffer_row_pitch, size_t buffer_slice_pitch, size_t host_row_pitch, size_t host_slice_pitch, const void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event )
+{
+    TRACE( "(%p, %p, %u, %p, %p, %p, %Iu, %Iu, %Iu, %Iu, %p, %u, %p, %p)\n", command_queue, buffer, blocking_write, buffer_origin, host_origin, region, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, num_events_in_wait_list, event_wait_list, event );
+    return opencl_funcs->pclEnqueueWriteBufferRect( command_queue, buffer, blocking_write, buffer_origin, host_origin, region, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, num_events_in_wait_list, event_wait_list, event );
+}
+
 cl_int WINAPI clEnqueueWriteImage( cl_command_queue command_queue, cl_mem image, cl_bool blocking_write, const size_t* origin, const size_t* region, size_t input_row_pitch, size_t input_slice_pitch, const void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event )
 {
     TRACE( "(%p, %p, %u, %p, %p, %Iu, %Iu, %p, %u, %p, %p)\n", command_queue, image, blocking_write, origin, region, input_row_pitch, input_slice_pitch, ptr, num_events_in_wait_list, event_wait_list, event );
@@ -360,12 +390,30 @@ cl_int WINAPI clRetainSampler( cl_sampler sampler )
     return opencl_funcs->pclRetainSampler( sampler );
 }
 
+cl_int WINAPI clSetEventCallback( cl_event event, cl_int command_exec_callback_type, void (WINAPI* pfn_notify)(cl_event event, cl_int event_command_status, void *user_data), void* user_data )
+{
+    TRACE( "(%p, %d, %p, %p)\n", event, command_exec_callback_type, pfn_notify, user_data );
+    return opencl_funcs->pclSetEventCallback( event, command_exec_callback_type, pfn_notify, user_data );
+}
+
 cl_int WINAPI clSetKernelArg( cl_kernel kernel, cl_uint arg_index, size_t arg_size, const void* arg_value )
 {
     TRACE( "(%p, %u, %Iu, %p)\n", kernel, arg_index, arg_size, arg_value );
     return opencl_funcs->pclSetKernelArg( kernel, arg_index, arg_size, arg_value );
 }
 
+cl_int WINAPI clSetMemObjectDestructorCallback( cl_mem memobj, void (WINAPI* pfn_notify)(cl_mem memobj, void* user_data), void* user_data )
+{
+    TRACE( "(%p, %p, %p)\n", memobj, pfn_notify, user_data );
+    return opencl_funcs->pclSetMemObjectDestructorCallback( memobj, pfn_notify, user_data );
+}
+
+cl_int WINAPI clSetUserEventStatus( cl_event event, cl_int execution_status )
+{
+    TRACE( "(%p, %d)\n", event, execution_status );
+    return opencl_funcs->pclSetUserEventStatus( event, execution_status );
+}
+
 cl_int WINAPI clUnloadCompiler( void  )
 {
     TRACE( "()\n" );
diff --git a/dlls/opencl/unix_private.h b/dlls/opencl/unix_private.h
index d051ade01cc..324df387169 100644
--- a/dlls/opencl/unix_private.h
+++ b/dlls/opencl/unix_private.h
@@ -63,6 +63,14 @@ cl_int WINAPI wrap_clEnqueueNativeKernel( cl_command_queue command_queue,
         void *args, size_t cb_args, cl_uint num_mem_objects, const cl_mem *mem_list, const void **args_mem_loc,
         cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event ) DECLSPEC_HIDDEN;
 
+cl_int WINAPI wrap_clSetEventCallback( cl_event event, cl_int type,
+        void (WINAPI *pfn_notify)(cl_event, cl_int, void *),
+        void *user_data) DECLSPEC_HIDDEN;
+
+cl_int WINAPI wrap_clSetMemObjectDestructorCallback(cl_mem memobj,
+        void (WINAPI *pfn_notify)(cl_mem, void *),
+        void *user_data) DECLSPEC_HIDDEN;
+
 extern const struct opencl_funcs funcs;
 
 #endif
diff --git a/dlls/opencl/unix_thunks.c b/dlls/opencl/unix_thunks.c
index 579c12eed79..656d4787fb2 100644
--- a/dlls/opencl/unix_thunks.c
+++ b/dlls/opencl/unix_thunks.c
@@ -52,6 +52,16 @@ static cl_sampler WINAPI wrap_clCreateSampler( cl_context context, cl_bool norma
     return clCreateSampler( context, normalized_coords, addressing_mode, filter_mode, errcode_ret );
 }
 
+static cl_mem WINAPI wrap_clCreateSubBuffer( cl_mem buffer, cl_mem_flags flags, cl_buffer_create_type buffer_create_type, const void* buffer_create_info, cl_int* errcode_ret )
+{
+    return clCreateSubBuffer( buffer, flags, buffer_create_type, buffer_create_info, errcode_ret );
+}
+
+static cl_event WINAPI wrap_clCreateUserEvent( cl_context context, cl_int* errcode_ret )
+{
+    return clCreateUserEvent( context, errcode_ret );
+}
+
 static cl_int WINAPI wrap_clEnqueueBarrier( cl_command_queue command_queue )
 {
     return clEnqueueBarrier( command_queue );
@@ -62,6 +72,11 @@ static cl_int WINAPI wrap_clEnqueueCopyBuffer( cl_command_queue command_queue, c
     return clEnqueueCopyBuffer( command_queue, src_buffer, dst_buffer, src_offset, dst_offset, size, num_events_in_wait_list, event_wait_list, event );
 }
 
+static cl_int WINAPI wrap_clEnqueueCopyBufferRect( cl_command_queue command_queue, cl_mem src_buffer, cl_mem dst_buffer, const size_t* src_origin, const size_t* dst_origin, const size_t* region, size_t src_row_pitch, size_t src_slice_pitch, size_t dst_row_pitch, size_t dst_slice_pitch, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event )
+{
+    return clEnqueueCopyBufferRect( command_queue, src_buffer, dst_buffer, src_origin, dst_origin, region, src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch, num_events_in_wait_list, event_wait_list, event );
+}
+
 static cl_int WINAPI wrap_clEnqueueCopyBufferToImage( cl_command_queue command_queue, cl_mem src_buffer, cl_mem dst_image, size_t src_offset, const size_t* dst_origin, const size_t* region, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event )
 {
     return clEnqueueCopyBufferToImage( command_queue, src_buffer, dst_image, src_offset, dst_origin, region, num_events_in_wait_list, event_wait_list, event );
@@ -102,6 +117,11 @@ static cl_int WINAPI wrap_clEnqueueReadBuffer( cl_command_queue command_queue, c
     return clEnqueueReadBuffer( command_queue, buffer, blocking_read, offset, size, ptr, num_events_in_wait_list, event_wait_list, event );
 }
 
+static cl_int WINAPI wrap_clEnqueueReadBufferRect( cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_read, const size_t* buffer_origin, const size_t* host_origin, const size_t* region, size_t buffer_row_pitch, size_t buffer_slice_pitch, size_t host_row_pitch, size_t host_slice_pitch, void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event )
+{
+    return clEnqueueReadBufferRect( command_queue, buffer, blocking_read, buffer_origin, host_origin, region, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, num_events_in_wait_list, event_wait_list, event );
+}
+
 static cl_int WINAPI wrap_clEnqueueReadImage( cl_command_queue command_queue, cl_mem image, cl_bool blocking_read, const size_t* origin, const size_t* region, size_t row_pitch, size_t slice_pitch, void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event )
 {
     return clEnqueueReadImage( command_queue, image, blocking_read, origin, region, row_pitch, slice_pitch, ptr, num_events_in_wait_list, event_wait_list, event );
@@ -127,6 +147,11 @@ static cl_int WINAPI wrap_clEnqueueWriteBuffer( cl_command_queue command_queue,
     return clEnqueueWriteBuffer( command_queue, buffer, blocking_write, offset, size, ptr, num_events_in_wait_list, event_wait_list, event );
 }
 
+static cl_int WINAPI wrap_clEnqueueWriteBufferRect( cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write, const size_t* buffer_origin, const size_t* host_origin, const size_t* region, size_t buffer_row_pitch, size_t buffer_slice_pitch, size_t host_row_pitch, size_t host_slice_pitch, const void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event )
+{
+    return clEnqueueWriteBufferRect( command_queue, buffer, blocking_write, buffer_origin, host_origin, region, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, num_events_in_wait_list, event_wait_list, event );
+}
+
 static cl_int WINAPI wrap_clEnqueueWriteImage( cl_command_queue command_queue, cl_mem image, cl_bool blocking_write, const size_t* origin, const size_t* region, size_t input_row_pitch, size_t input_slice_pitch, const void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event )
 {
     return clEnqueueWriteImage( command_queue, image, blocking_write, origin, region, input_row_pitch, input_slice_pitch, ptr, num_events_in_wait_list, event_wait_list, event );
@@ -297,6 +322,11 @@ static cl_int WINAPI wrap_clSetKernelArg( cl_kernel kernel, cl_uint arg_index, s
     return clSetKernelArg( kernel, arg_index, arg_size, arg_value );
 }
 
+static cl_int WINAPI wrap_clSetUserEventStatus( cl_event event, cl_int execution_status )
+{
+    return clSetUserEventStatus( event, execution_status );
+}
+
 static cl_int WINAPI wrap_clUnloadCompiler( void  )
 {
     return clUnloadCompiler();
@@ -321,8 +351,11 @@ const struct opencl_funcs funcs =
     wrap_clCreateProgramWithBinary,
     wrap_clCreateProgramWithSource,
     wrap_clCreateSampler,
+    wrap_clCreateSubBuffer,
+    wrap_clCreateUserEvent,
     wrap_clEnqueueBarrier,
     wrap_clEnqueueCopyBuffer,
+    wrap_clEnqueueCopyBufferRect,
     wrap_clEnqueueCopyBufferToImage,
     wrap_clEnqueueCopyImage,
     wrap_clEnqueueCopyImageToBuffer,
@@ -332,11 +365,13 @@ const struct opencl_funcs funcs =
     wrap_clEnqueueNDRangeKernel,
     wrap_clEnqueueNativeKernel,
     wrap_clEnqueueReadBuffer,
+    wrap_clEnqueueReadBufferRect,
     wrap_clEnqueueReadImage,
     wrap_clEnqueueTask,
     wrap_clEnqueueUnmapMemObject,
     wrap_clEnqueueWaitForEvents,
     wrap_clEnqueueWriteBuffer,
+    wrap_clEnqueueWriteBufferRect,
     wrap_clEnqueueWriteImage,
     wrap_clFinish,
     wrap_clFlush,
@@ -370,7 +405,10 @@ const struct opencl_funcs funcs =
     wrap_clRetainMemObject,
     wrap_clRetainProgram,
     wrap_clRetainSampler,
+    wrap_clSetEventCallback,
     wrap_clSetKernelArg,
+    wrap_clSetMemObjectDestructorCallback,
+    wrap_clSetUserEventStatus,
     wrap_clUnloadCompiler,
     wrap_clWaitForEvents,
 };
diff --git a/dlls/opencl/unix_wrappers.c b/dlls/opencl/unix_wrappers.c
index 248fe80541c..fb4e611f3f0 100644
--- a/dlls/opencl/unix_wrappers.c
+++ b/dlls/opencl/unix_wrappers.c
@@ -138,6 +138,22 @@ cl_int WINAPI wrap_clEnqueueNativeKernel( cl_command_queue command_queue,
     return CL_INVALID_OPERATION;
 }
 
+cl_int WINAPI wrap_clSetEventCallback( cl_event event, cl_int type,
+        void (WINAPI *pfn_notify)(cl_event, cl_int, void *),
+        void *user_data)
+{
+    FIXME( "not yet implemented\n" );
+    return CL_INVALID_OPERATION;
+}
+
+cl_int WINAPI wrap_clSetMemObjectDestructorCallback(cl_mem memobj,
+        void (WINAPI *pfn_notify)(cl_mem, void *),
+        void *user_data)
+{
+    FIXME( "not yet implemented\n" );
+    return CL_INVALID_OPERATION;
+}
+
 NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out )
 {
     if (reason != DLL_PROCESS_ATTACH) return STATUS_SUCCESS;
diff --git a/dlls/opencl/unixlib.h b/dlls/opencl/unixlib.h
index d5b1da1b99e..617d590acc3 100644
--- a/dlls/opencl/unixlib.h
+++ b/dlls/opencl/unixlib.h
@@ -14,8 +14,11 @@ struct opencl_funcs
     cl_program (WINAPI *pclCreateProgramWithBinary)( cl_context context, cl_uint num_devices, const cl_device_id* device_list, const size_t* lengths, const unsigned char** binaries, cl_int* binary_status, cl_int* errcode_ret );
     cl_program (WINAPI *pclCreateProgramWithSource)( cl_context context, cl_uint count, const char** strings, const size_t* lengths, cl_int* errcode_ret );
     cl_sampler (WINAPI *pclCreateSampler)( cl_context context, cl_bool normalized_coords, cl_addressing_mode addressing_mode, cl_filter_mode filter_mode, cl_int* errcode_ret );
+    cl_mem (WINAPI *pclCreateSubBuffer)( cl_mem buffer, cl_mem_flags flags, cl_buffer_create_type buffer_create_type, const void* buffer_create_info, cl_int* errcode_ret );
+    cl_event (WINAPI *pclCreateUserEvent)( cl_context context, cl_int* errcode_ret );
     cl_int (WINAPI *pclEnqueueBarrier)( cl_command_queue command_queue );
     cl_int (WINAPI *pclEnqueueCopyBuffer)( cl_command_queue command_queue, cl_mem src_buffer, cl_mem dst_buffer, size_t src_offset, size_t dst_offset, size_t size, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
+    cl_int (WINAPI *pclEnqueueCopyBufferRect)( cl_command_queue command_queue, cl_mem src_buffer, cl_mem dst_buffer, const size_t* src_origin, const size_t* dst_origin, const size_t* region, size_t src_row_pitch, size_t src_slice_pitch, size_t dst_row_pitch, size_t dst_slice_pitch, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
     cl_int (WINAPI *pclEnqueueCopyBufferToImage)( cl_command_queue command_queue, cl_mem src_buffer, cl_mem dst_image, size_t src_offset, const size_t* dst_origin, const size_t* region, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
     cl_int (WINAPI *pclEnqueueCopyImage)( cl_command_queue command_queue, cl_mem src_image, cl_mem dst_image, const size_t* src_origin, const size_t* dst_origin, const size_t* region, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
     cl_int (WINAPI *pclEnqueueCopyImageToBuffer)( cl_command_queue command_queue, cl_mem src_image, cl_mem dst_buffer, const size_t* src_origin, const size_t* region, size_t dst_offset, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
@@ -25,11 +28,13 @@ struct opencl_funcs
     cl_int (WINAPI *pclEnqueueNDRangeKernel)( cl_command_queue command_queue, cl_kernel kernel, cl_uint work_dim, const size_t* global_work_offset, const size_t* global_work_size, const size_t* local_work_size, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
     cl_int (WINAPI *pclEnqueueNativeKernel)( cl_command_queue command_queue, void (WINAPI* user_func)(void*), void* args, size_t cb_args, cl_uint num_mem_objects, const cl_mem* mem_list, const void** args_mem_loc, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
     cl_int (WINAPI *pclEnqueueReadBuffer)( cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_read, size_t offset, size_t size, void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
+    cl_int (WINAPI *pclEnqueueReadBufferRect)( cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_read, const size_t* buffer_origin, const size_t* host_origin, const size_t* region, size_t buffer_row_pitch, size_t buffer_slice_pitch, size_t host_row_pitch, size_t host_slice_pitch, void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
     cl_int (WINAPI *pclEnqueueReadImage)( cl_command_queue command_queue, cl_mem image, cl_bool blocking_read, const size_t* origin, const size_t* region, size_t row_pitch, size_t slice_pitch, void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
     cl_int (WINAPI *pclEnqueueTask)( cl_command_queue command_queue, cl_kernel kernel, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
     cl_int (WINAPI *pclEnqueueUnmapMemObject)( cl_command_queue command_queue, cl_mem memobj, void* mapped_ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
     cl_int (WINAPI *pclEnqueueWaitForEvents)( cl_command_queue command_queue, cl_uint num_events, const cl_event* event_list );
     cl_int (WINAPI *pclEnqueueWriteBuffer)( cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write, size_t offset, size_t size, const void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
+    cl_int (WINAPI *pclEnqueueWriteBufferRect)( cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write, const size_t* buffer_origin, const size_t* host_origin, const size_t* region, size_t buffer_row_pitch, size_t buffer_slice_pitch, size_t host_row_pitch, size_t host_slice_pitch, const void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
     cl_int (WINAPI *pclEnqueueWriteImage)( cl_command_queue command_queue, cl_mem image, cl_bool blocking_write, const size_t* origin, const size_t* region, size_t input_row_pitch, size_t input_slice_pitch, const void* ptr, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event );
     cl_int (WINAPI *pclFinish)( cl_command_queue command_queue );
     cl_int (WINAPI *pclFlush)( cl_command_queue command_queue );
@@ -63,7 +68,10 @@ struct opencl_funcs
     cl_int (WINAPI *pclRetainMemObject)( cl_mem memobj );
     cl_int (WINAPI *pclRetainProgram)( cl_program program );
     cl_int (WINAPI *pclRetainSampler)( cl_sampler sampler );
+    cl_int (WINAPI *pclSetEventCallback)( cl_event event, cl_int command_exec_callback_type, void (WINAPI* pfn_notify)(cl_event event, cl_int event_command_status, void *user_data), void* user_data );
     cl_int (WINAPI *pclSetKernelArg)( cl_kernel kernel, cl_uint arg_index, size_t arg_size, const void* arg_value );
+    cl_int (WINAPI *pclSetMemObjectDestructorCallback)( cl_mem memobj, void (WINAPI* pfn_notify)(cl_mem memobj, void* user_data), void* user_data );
+    cl_int (WINAPI *pclSetUserEventStatus)( cl_event event, cl_int execution_status );
     cl_int (WINAPI *pclUnloadCompiler)( void  );
     cl_int (WINAPI *pclWaitForEvents)( cl_uint num_events, const cl_event* event_list );
 };
-- 
2.31.0




More information about the wine-devel mailing list