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_d3d11;
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_d3d11_device_source_khr d3d_device_source, void* d3d_object, cl_d3d11_device_set_khr d3d_device_set, cl_uint num_entries, cl_device_id* devices, cl_uint* num_devices) da_clGetDeviceIDsFromD3D11KHR;
19     alias nothrow cl_mem function(cl_context context, cl_mem_flags flags, ID3D11Buffer* resource, cl_int* errcode_ret) da_clCreateFromD3D11BufferKHR;
20     alias nothrow cl_mem function(cl_context context, cl_mem_flags flags, ID3D11Texture2D* resource, uint subresource, cl_int* errcode_ret) da_clCreateFromD3D11Texture2DKHR;
21     alias nothrow cl_mem function(cl_context context, cl_mem_flags flags, ID3D11Texture3D* resource, uint subresource, cl_int* errcode_ret) da_clCreateFromD3D11Texture3DKHR;
22     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_clEnqueueAcquireD3D11ObjectsKHR;
23     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_clEnqueueReleaseD3D11ObjectsKHR;
24 }
25 
26 __gshared
27 {
28     // OpenCL 1.2
29     da_clGetDeviceIDsFromD3D11KHR clGetDeviceIDsFromD3D11KHR;
30     da_clCreateFromD3D11BufferKHR clCreateFromD3D11BufferKHR;
31     da_clCreateFromD3D11Texture2DKHR clCreateFromD3D11Texture2DKHR;
32     da_clCreateFromD3D11Texture3DKHR clCreateFromD3D11Texture3DKHR;
33     da_clEnqueueAcquireD3D11ObjectsKHR clEnqueueAcquireD3D11ObjectsKHR;
34     da_clEnqueueReleaseD3D11ObjectsKHR clEnqueueReleaseD3D11ObjectsKHR;
35 }
36 
37 package
38 {
39     void loadSymbols(void delegate(void**, string, bool doThrow) bindFunc)
40     {
41 
42     }
43 
44     CLVersion reload(void delegate(void**, string, bool doThrow) bindFunc, CLVersion clVer)
45     {
46         return clVer;
47     }
48 
49     private __gshared bool _EXT_cl_khr_d3d11_sharing;
50     public bool EXT_cl_khr_d3d11_sharing() @property { return _EXT_cl_khr_d3d11_sharing; }
51     private void load_cl_khr_d3d11_sharing(CLVersion clVer, cl_platform_id platform)
52     {
53         try
54         {
55             loadExtensionFunction(cast(void**)&clGetDeviceIDsFromD3D11KHR, "clGetDeviceIDsFromD3D11KHR", clVer, platform);
56             loadExtensionFunction(cast(void**)&clCreateFromD3D11BufferKHR, "clCreateFromD3D11BufferKHR", clVer, platform);
57             loadExtensionFunction(cast(void**)&clCreateFromD3D11Texture2DKHR, "clCreateFromD3D11Texture2DKHR", clVer, platform);
58             loadExtensionFunction(cast(void**)&clCreateFromD3D11Texture3DKHR, "clCreateFromD3D11Texture3DKHR", clVer, platform);
59             loadExtensionFunction(cast(void**)&clEnqueueAcquireD3D11ObjectsKHR, "clEnqueueAcquireD3D11ObjectsKHR", clVer, platform);
60             loadExtensionFunction(cast(void**)&clEnqueueReleaseD3D11ObjectsKHR, "clEnqueueReleaseD3D11ObjectsKHR", clVer, platform);
61 
62             _EXT_cl_khr_d3d11_sharing = clGetDeviceIDsFromD3D11KHR !is null &&
63                                         clCreateFromD3D11BufferKHR !is null &&
64                                         clCreateFromD3D11Texture2DKHR !is null &&
65                                         clCreateFromD3D11Texture3DKHR !is null &&
66                                         clEnqueueAcquireD3D11ObjectsKHR !is null &&
67                                         clEnqueueReleaseD3D11ObjectsKHR !is null;
68         }
69         catch(Exception e)
70         {
71             _EXT_cl_khr_d3d11_sharing = false;
72         }
73     }
74 
75     void loadEXT(CLVersion clVer, cl_platform_id platform)
76     {
77         if(clVer >= CLVersion.CL12)
78         {
79             // OpenCL 1.2
80             load_cl_khr_d3d11_sharing(clVer, platform);
81         }
82     }
83 }