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_d3d10;
11 
12 import derelict.opencl.loader;
13 import derelict.opencl.types;
14 
15 extern (System)
16 {
17     // OpenCL 1.0
18     alias nothrow cl_int function(cl_platform_id platform, cl_d3d10_device_source_khr d3d_device_source, void* d3d_object, cl_d3d10_device_set_khr d3d_device_set, cl_uint num_entries, cl_device_id* devices, cl_uint* num_devices) da_clGetDeviceIDsFromD3D10KHR;
19     alias nothrow cl_mem function(cl_context context, cl_mem_flags flags, ID3D10Buffer* resource, cl_int* errcode_ret) da_clCreateFromD3D10BufferKHR;
20     alias nothrow cl_mem function(cl_context context, cl_mem_flags flags, ID3D10Texture2D* resource, uint subresource, cl_int* errcode_ret) da_clCreateFromD3D10Texture2DKHR;
21     alias nothrow cl_mem function(cl_context context, cl_mem_flags flags, ID3D10Texture3D* resource, uint subresource, cl_int* errcode_ret) da_clCreateFromD3D10Texture3DKHR;
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_clEnqueueAcquireD3D10ObjectsKHR;
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_clEnqueueReleaseD3D10ObjectsKHR;
24 }
25 
26 __gshared
27 {
28     // OpenCL 1.0
29     da_clGetDeviceIDsFromD3D10KHR clGetDeviceIDsFromD3D10KHR;
30     da_clCreateFromD3D10BufferKHR clCreateFromD3D10BufferKHR;
31     da_clCreateFromD3D10Texture2DKHR clCreateFromD3D10Texture2DKHR;
32     da_clCreateFromD3D10Texture3DKHR clCreateFromD3D10Texture3DKHR;
33     da_clEnqueueAcquireD3D10ObjectsKHR clEnqueueAcquireD3D10ObjectsKHR;
34     da_clEnqueueReleaseD3D10ObjectsKHR clEnqueueReleaseD3D10ObjectsKHR;
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_d3d10_sharing;
50     public bool EXT_cl_khr_d3d10_sharing() @property { return _EXT_cl_khr_d3d10_sharing; }
51     private void load_cl_khr_d3d10_sharing(CLVersion clVer, cl_platform_id platform)
52     {
53         try
54         {
55             loadExtensionFunction(cast(void**)&clGetDeviceIDsFromD3D10KHR, "clGetDeviceIDsFromD3D10KHR",clVer, platform);
56             loadExtensionFunction(cast(void**)&clCreateFromD3D10BufferKHR, "clCreateFromD3D10BufferKHR", clVer, platform);
57             loadExtensionFunction(cast(void**)&clCreateFromD3D10Texture2DKHR, "clCreateFromD3D10Texture2DKHR", clVer, platform);
58             loadExtensionFunction(cast(void**)&clCreateFromD3D10Texture3DKHR, "clCreateFromD3D10Texture3DKHR", clVer, platform);
59             loadExtensionFunction(cast(void**)&clEnqueueAcquireD3D10ObjectsKHR, "clEnqueueAcquireD3D10ObjectsKHR", clVer, platform);
60             loadExtensionFunction(cast(void**)&clEnqueueReleaseD3D10ObjectsKHR, "clEnqueueReleaseD3D10ObjectsKHR", clVer, platform);
61 
62             _EXT_cl_khr_d3d10_sharing = clGetDeviceIDsFromD3D10KHR !is null &&
63                                         clCreateFromD3D10BufferKHR !is null &&
64                                         clCreateFromD3D10Texture2DKHR !is null &&
65                                         clCreateFromD3D10Texture3DKHR !is null &&
66                                         clEnqueueAcquireD3D10ObjectsKHR !is null &&
67                                         clEnqueueReleaseD3D10ObjectsKHR !is null;
68         }
69         catch(Exception e)
70         {
71             _EXT_cl_khr_d3d10_sharing = false;
72         }
73     }
74 
75     void loadEXT(CLVersion clVer, cl_platform_id platform)
76     {
77         if(clVer >= CLVersion.CL10)
78         {
79             // OpenCL 1.0
80             load_cl_khr_d3d10_sharing(clVer, platform);
81         }
82     }
83 }