The OpenD Programming Language

1 // DerelictCL - a Derelict based dynamic binding for OpenCL
2 // written in the D programming language
3 //
4 // Copyright: MeinMein 2013-2014.
5 // License:   Boost License 1.0
6 //            (See accompanying file LICENSE_1_0.txt or copy at
7 //             http://www.boost.org/LICENSE_1_0.txt)
8 // Authors:   Gerbrand Kamphuis (meinmein.com),
9 //            Marvin Meeng (meinmein.com).
10 module derelict.opencl.cl_dx9_media_sharing;
11 
12 import derelict.opencl.loader;
13 import derelict.opencl.types;
14 
15 extern (System)
16 {
17     // OpenCL 1.2
18     alias nothrow cl_int function(cl_platform_id platform, cl_uint num_media_adapters, cl_dx9_media_adapter_type_khr* media_adapter_type, void* media_adapters, cl_dx9_media_adapter_set_khr media_adapter_set, cl_uint num_entries, cl_device_id* devices, cl_uint* num_devices) da_clGetDeviceIDsFromDX9MediaAdapterKHR;
19     alias nothrow cl_mem function(cl_context context, cl_mem_flags flags, cl_dx9_media_adapter_type_khr adapter_type, void* surface_info, cl_uint plane, cl_int* errcode_ret) da_clCreateFromDX9MediaSurfaceKHR;
20     alias nothrow cl_int function(cl_command_queue command_queue, cl_uint num_objects, const(cl_mem*) mem_objects, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event) da_clEnqueueAcquireDX9MediaSurfacesKHR;
21     alias nothrow cl_int function(cl_command_queue command_queue, cl_uint num_objects, const(cl_mem*) mem_objects, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event) da_clEnqueueReleaseDX9MediaSurfacesKHR;
22 }
23 
24 __gshared
25 {
26     // OpenCL 1.2
27     da_clGetDeviceIDsFromDX9MediaAdapterKHR clGetDeviceIDsFromDX9MediaAdapterKHR;
28     da_clCreateFromDX9MediaSurfaceKHR clCreateFromDX9MediaSurfaceKHR;
29     da_clEnqueueAcquireDX9MediaSurfacesKHR clEnqueueAcquireDX9MediaSurfacesKHR;
30     da_clEnqueueReleaseDX9MediaSurfacesKHR clEnqueueReleaseDX9MediaSurfacesKHR;
31 }
32 
33 package
34 {
35     void loadSymbols(void delegate(void**, string, bool doThrow) bindFunc)
36     {
37 
38     }
39 
40     CLVersion reload(void delegate(void**, string, bool doThrow) bindFunc, CLVersion clVer)
41     {
42         return clVer;
43     }
44 
45     private __gshared bool _EXT_cl_dx9_media_sharing;
46     public bool EXT_cl_dx9_media_sharing() @property { return _EXT_cl_dx9_media_sharing; }
47     private void load_cl_dx9_media_sharing(CLVersion clVer, cl_platform_id platform)
48     {
49         try
50         {
51             loadExtensionFunction(cast(void**)&clGetDeviceIDsFromDX9MediaAdapterKHR, "clGetDeviceIDsFromDX9MediaAdapterKHR", clVer, platform);
52             loadExtensionFunction(cast(void**)&clCreateFromDX9MediaSurfaceKHR, "clCreateFromDX9MediaSurfaceKHR", clVer, platform);
53             loadExtensionFunction(cast(void**)&clEnqueueAcquireDX9MediaSurfacesKHR, "clEnqueueAcquireDX9MediaSurfacesKHR", clVer, platform);
54             loadExtensionFunction(cast(void**)&clEnqueueReleaseDX9MediaSurfacesKHR, "clEnqueueReleaseDX9MediaSurfacesKHR", clVer, platform);
55 
56             _EXT_cl_dx9_media_sharing = clGetDeviceIDsFromDX9MediaAdapterKHR !is null &&
57                                         clCreateFromDX9MediaSurfaceKHR !is null &&
58                                         clEnqueueAcquireDX9MediaSurfacesKHR !is null &&
59                                         clEnqueueReleaseDX9MediaSurfacesKHR !is null;
60         }
61         catch(Exception e)
62         {
63             _EXT_cl_dx9_media_sharing = false;
64         }
65     }
66 
67     void loadEXT(CLVersion clVer, cl_platform_id platform)
68     {
69         if(clVer >= CLVersion.CL12)
70         {
71             // OpenCL 1.2
72             load_cl_dx9_media_sharing(clVer, platform);
73         }
74     }
75 }