CL_DX9_Media_Sharing.pas 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. (*******************************************************************************
  2. * Copyright (c) 2008-2012 The Khronos Group Inc.
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a
  5. * copy of this software and/or associated documentation files (the
  6. * "Materials"), to deal in the Materials without restriction, including
  7. * without limitation the rights to use, copy, modify, merge, publish,
  8. * distribute, sublicense, and/or sell copies of the Materials, and to
  9. * permit persons to whom the Materials are furnished to do so, subject to
  10. * the following conditions:
  11. *
  12. * The above copyright notice and this permission notice shall be included
  13. * in all copies or substantial portions of the Materials.
  14. *
  15. * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  16. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  18. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  19. * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  20. * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  21. * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
  22. ******************************************************************************)
  23. (************************************************)
  24. (* *)
  25. (* OpenCL1.2 and Delphi and Windows *)
  26. (* *)
  27. (* created by : Maksym Tymkovych *)
  28. (* (niello) *)
  29. (* *)
  30. (* headers versions: 0.07 *)
  31. (* file name : CL_dx9_media_sharing.pas*)
  32. (* last modify : 10.12.11 *)
  33. (* license : BSD *)
  34. (* *)
  35. (* Site : www.niello.org.ua *)
  36. (* e-mail : [email protected] *)
  37. (* ICQ : 446-769-253 *)
  38. (* *)
  39. (* updated by : Alexander Kiselev *)
  40. (* (Igroman) *)
  41. (* Site : http://Igroman14.livejournal.com *)
  42. (* e-mail : [email protected] *)
  43. (* ICQ : 207-381-695 *)
  44. (* (c) 2010 *)
  45. (* *)
  46. (***********Copyright (c) niello 2008-2011*******)
  47. unit CL_DX9_Media_Sharing;
  48. interface
  49. {$INCLUDE OpenCL.inc}
  50. uses
  51. CL_Platform,
  52. CL,
  53. Direct3D9;
  54. (******************************************************************************
  55. (* cl_khr_dx9_media_sharing *)
  56. const
  57. cl_khr_dx9_media_sharing = 1;
  58. type
  59. PIDirect3DSurface9 = ^IDirect3DSurface9;
  60. Pcl_dx9_surface_info_khr = ^Tcl_dx9_surface_info_khr;
  61. Tcl_dx9_surface_info_khr = packed record
  62. resource: PIDirect3DSurface9;
  63. shared_handle: THandle;
  64. end;
  65. (******************************************************************************)
  66. const
  67. // Error Codes
  68. CL_INVALID_DX9_MEDIA_ADAPTER_KHR = -1010;
  69. CL_INVALID_DX9_MEDIA_SURFACE_KHR = -1011;
  70. CL_DX9_MEDIA_SURFACE_ALREADY_ACQUIRED_KHR = -1012;
  71. CL_DX9_MEDIA_SURFACE_NOT_ACQUIRED_KHR = -1013;
  72. // cl_media_adapter_type_khr
  73. CL_ADAPTER_D3D9_KHR = $2020;
  74. CL_ADAPTER_D3D9EX_KHR = $2021;
  75. CL_ADAPTER_DXVA_KHR = $2022;
  76. // cl_media_adapter_set_khr
  77. CL_PREFERRED_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR = $2023;
  78. CL_ALL_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR = $2024;
  79. // cl_context_info
  80. CL_CONTEXT_D3D9_DEVICE_KHR = $2025;
  81. CL_CONTEXT_D3D9EX_DEVICE_KHR = $2026;
  82. CL_CONTEXT_DXVA_DEVICE_KHR = $2027;
  83. // cl_mem_info
  84. CL_MEM_DX9_MEDIA_ADAPTER_TYPE_KHR = $2028;
  85. CL_MEM_DX9_MEDIA_SURFACE_INFO_KHR = $2029;
  86. // cl_image_info
  87. CL_IMAGE_DX9_MEDIA_PLANE_KHR = $202A;
  88. // cl_command_type
  89. CL_COMMAND_ACQUIRE_DX9_MEDIA_SURFACES_KHR = $202B;
  90. CL_COMMAND_RELEASE_DX9_MEDIA_SURFACES_KHR = $202C;
  91. (******************************************************************************)
  92. {$IFDEF CL_VERSION_1_2}
  93. type
  94. TclGetDeviceIDsForDX9MediaAdapterKHR_fn = function
  95. (
  96. _platform: Pcl_platform_id;
  97. //media_adapter_type: Tcl_dx9_media_adapter_type_khr;
  98. //media_adapter: Pointer; media_adapter_set: Tcl_dx9_media_adapter_set_khr;
  99. num_entries: Tcl_uint; devices: PPcl_device_id;
  100. num_devices: Pcl_uint
  101. ): TCL_int; {$IFDEF CDECL} cdecl {$ELSE} stdcall{$ENDIF};
  102. TclCreateFromDX9MediaSurfaceKHR_fn = function
  103. (
  104. context: Pcl_context;
  105. flags: Tcl_mem_flags;
  106. //adapter_type: Tcl_dx9_media_adapter_type_khr;
  107. surface_info: Pointer;
  108. plane: Tcl_uint;
  109. errcode_ret: Pcl_int
  110. ): PCL_mem; {$IFDEF CDECL} cdecl {$ELSE} stdcall{$ENDIF};
  111. TclEnqueueAcquireDX9MediaSurfacesKHR_fn = function
  112. (
  113. command_queue: Pcl_command_queue;
  114. num_objects: Tcl_uint;
  115. const mem_objects: PPcl_mem;
  116. num_events_in_wait_list: Tcl_uint;
  117. const event_wait_list: PPcl_event;
  118. event: PPcl_event
  119. ): TCL_int; {$IFDEF CDECL} cdecl {$ELSE} stdcall{$ENDIF};
  120. TclEnqueueReleaseDX9MediaSurfacesKHR_fn = function
  121. (
  122. command_queue: Pcl_command_queue;
  123. num_objects: Tcl_uint;
  124. const mem_objects: PPcl_mem;
  125. num_events_in_wait_list: Tcl_uint;
  126. const event_wait_list: PPcl_event;
  127. event: PPcl_event
  128. ): TCL_int; {$IFDEF CDECL} cdecl {$ELSE} stdcall{$ENDIF};
  129. {$ENDIF}
  130. {$IFDEF CL_VERSION_1_2}
  131. var
  132. clGetDeviceIDsForDX9MediaAdapterKHR_fn: TclGetDeviceIDsForDX9MediaAdapterKHR_fn;
  133. clCreateFromDX9MediaSurfaceKHR_fn: TclCreateFromDX9MediaSurfaceKHR_fn;
  134. clEnqueueAcquireDX9MediaSurfacesKHR_fn: TclEnqueueAcquireDX9MediaSurfacesKHR_fn;
  135. clEnqueueReleaseDX9MediaSurfacesKHR_fn: TclEnqueueReleaseDX9MediaSurfacesKHR_fn;
  136. {$ENDIF}
  137. function InitCL_DX9MediaSharing: Boolean;
  138. implementation
  139. function InitCL_DX9MediaSharing: Boolean;
  140. begin
  141. Result := False;
  142. if OCL_LibHandle <> nil then
  143. begin
  144. {$IFDEF CL_VERSION_1_2}
  145. clGetDeviceIDsForDX9MediaAdapterKHR_fn := TclGetDeviceIDsForDX9MediaAdapterKHR_fn(oclGetProcAddress('clGetDeviceIDsForDX9MediaAdapterKHR_fn', OCL_LibHandle));
  146. clCreateFromDX9MediaSurfaceKHR_fn := TclCreateFromDX9MediaSurfaceKHR_fn(oclGetProcAddress('clCreateFromDX9MediaSurfaceKHR_fn', OCL_LibHandle));
  147. clEnqueueAcquireDX9MediaSurfacesKHR_fn := TclEnqueueAcquireDX9MediaSurfacesKHR_fn(oclGetProcAddress('clEnqueueAcquireDX9MediaSurfacesKHR_fn', OCL_LibHandle));
  148. clEnqueueReleaseDX9MediaSurfacesKHR_fn := TclEnqueueReleaseDX9MediaSurfacesKHR_fn(oclGetProcAddress('clEnqueueReleaseDX9MediaSurfacesKHR_fn', OCL_LibHandle));
  149. {$ENDIF}
  150. Result := True;
  151. end;
  152. end;
  153. end.