| Name String |
| |
| cl_nv_d3d10_sharing |
| |
| Version |
| |
| Version 2, January 6, 2010 |
| |
| Number |
| |
| OpenCL Extension #3 |
| |
| Status |
| |
| Unknown |
| |
| Extension Type |
| |
| OpenCL platform extension |
| |
| Dependencies |
| |
| OpenCL 1.0 is required and a Direct3D 10 implementation supporting |
| sharing of buffer and texture objects with OpenCL is required. |
| |
| Overview |
| |
| The goal of this extension is to provide interoperability between |
| OpenCL and Direct3D 10. This is designed to function analogously to |
| the OpenGL interoperability as defined in the OpenCL 1.0 |
| specification and accompanying extensions. |
| |
| New Procedures and Functions |
| |
| cl_int clGetDeviceIDsFromD3D10NV( |
| cl_platform_id platform, |
| cl_d3d10_device_source_nv d3d_device_source, |
| void *d3d_object, |
| cl_d3d10_device_set_nv d3d_device_set, |
| cl_uint num_entries, |
| cl_device_id *devices, |
| cl_uint *num_devices) |
| |
| cl_mem clCreateFromD3D10BufferNV( |
| cl_context context, |
| cl_mem_flags flags, |
| ID3D10Buffer *resource, |
| cl_int *errcode_ret) |
| |
| cl_mem clCreateFromD3D10Texture2DNV( |
| cl_context context, |
| cl_mem_flags flags, |
| ID3D10Texture2D *resource, |
| UINT subresource, |
| cl_int *errcode_ret) |
| |
| cl_mem clCreateFromD3D10Texture3DNV( |
| cl_context context, |
| cl_mem_flags flags, |
| ID3D10Texture3D *resource, |
| UINT subresource, |
| cl_int *errcode_ret) |
| |
| cl_int clEnqueueAcquireD3D10ObjectsNV( |
| 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) |
| |
| cl_int clEnqueueReleaseD3D10ObjectsNV( |
| cl_command_queue command_queue, |
| cl_uint num_objects, |
| cl_mem *mem_objects, |
| cl_uint num_events_in_wait_list, |
| const cl_event *event_wait_list, |
| cl_event *event) |
| |
| New Tokens |
| |
| Accepted as a Direct3D 10 device source in the <d3d_device_source> |
| parameter of clGetDeviceIDsFromD3D10NV: |
| |
| CL_D3D10_DEVICE_NV 0x4010 |
| CL_D3D10_DXGI_ADAPTER_NV 0x4011 |
| |
| Accepted as a set of Direct3D 10 devices in the <d3d_device_set> parameter |
| of clGetDeviceIDsFromD3D10NV: |
| |
| CL_PREFERRED_DEVICES_FOR_D3D10_NV 0x4012 |
| CL_ALL_DEVICES_FOR_D3D10_NV 0x4013 |
| |
| Accepted as a property name in the <properties> parameter of |
| clCreateContext and clCreateContextFromType: |
| |
| CL_CONTEXT_D3D10_DEVICE_NV 0x4014 |
| |
| Accepted as the property being queried in the <param_name> |
| parameter of clGetMemObjectInfo: |
| |
| CL_MEM_D3D10_RESOURCE_NV 0x4015 |
| |
| Accepted as the property being queried in the <param_name> |
| parameter of clGetImageInfo: |
| |
| CL_IMAGE_D3D10_SUBRESOURCE_NV 0x4016 |
| |
| Returned in the <param_value> parameter of clGetEventInfo when |
| <param_name> is CL_EVENT_COMMAND_TYPE: |
| |
| CL_COMMAND_ACQUIRE_D3D10_OBJECTS_NV 0x4017 |
| CL_COMMAND_RELEASE_D3D10_OBJECTS_NV 0x4018 |
| |
| Returned by clCreateContext and clCreateContextFromType if the Direct3D 10 |
| device specified for interoperability is not compatible with the devices |
| against which the context is to be created: |
| |
| CL_INVALID_D3D10_DEVICE_NV -1002 |
| |
| Returned by clCreateFromD3D10BufferNV when <resource> is not a Direct3D 10 |
| buffer object, and by clCreateFromD3D10Texture2DNV and |
| clCreateFromD3D10Texture3DNV when <resource> is not a Direct3D 10 texture |
| object. |
| |
| CL_INVALID_D3D10_RESOURCE_NV -1003 |
| |
| Returned by clEnqueueAcquireD3D10ObjectsNV when any of <mem_objects> are |
| currently acquired by OpenCL |
| |
| CL_D3D10_RESOURCE_ALREADY_ACQUIRED_NV -1004 |
| |
| Returned by clEnqueueReleaseD3D10ObjectsNV when any of <mem_objects> are |
| not currently acquired by OpenCL |
| |
| CL_D3D10_RESOURCE_NOT_ACQUIRED_NV -1005 |
| |
| Additions to Chapter 4 of the OpenCL 1.0 Specification |
| |
| In section 4.3, replace the description of <properties> under |
| clCreateContext with: |
| |
| "<properties> specifies a list of context property names and their |
| corresponding values. Each property is followed immediately by the |
| corresponding desired value. The list is terminated with zero. |
| If a property is not specified in <properties>, then its default |
| value (listed in table 4.4) is used (it is said to be specified |
| implicitly). If <properties> is NULL or empty (points to a list |
| whose first value is zero), all attributes take on their default |
| values." |
| |
| Replace existing table 4.4 with: |
| |
| "-------------------------------------------------------------------------------------- |
| cl_context_properties Value type Default value Description |
| --------------------- ---------- ------------- ----------- |
| CL_CONTEXT_PLATFORM cl_platform_id NULL Specifies the cl_platform_id |
| on whic to create the OpenCL |
| context. |
| CL_CONTEXT_D3D10_DEVICE_NV ID3D10Device* NULL Specifies the ID3D10Device* |
| to use for Direct3D 10 |
| interoperabilty." |
| --------------------------------------------------------------------------------------" |
| |
| Add to the list of errors for clCreateContext: |
| |
| "* CL_INVALID_D3D10_DEVICE_NV if the value of the property |
| CL_CONTEXT_D3D10_DEVICE_NV is non-NULL and does not specify a valid |
| Direct3D 10 device with which the cl_device_ids against which this context |
| is to be created may interoperate. |
| |
| * CL_INVALID_OPERATION if Direct3D 10 interoperability is specified by |
| setting CL_INVALID_D3D10_DEVICE_NV to a non-NULL value, and |
| interoperability with another graphics API is also specified." |
| |
| Add to the list of errors for clCreateContextFromType the same new |
| errors described above for clCreateContext. |
| |
| Additions to Chapter 5 of the OpenCL 1.0 Specification |
| |
| 5.2.9 Memory Object Queries |
| |
| Change the last paragraph before table 5.8 to read |
| |
| "clGetMemObjectInfo returns CL_SUCCESS if the function is executed successfully. |
| Otherwise it returns one of the following errors: |
| |
| * CL_INVALID_VALUE if <param_name> is not valid, or if the size in bytes |
| specified by <param_value_size> is less than the size of the return type as |
| described in table 5.8 and <param_value> is not NULL. |
| |
| * CL_INVALID_MEM_OBJECT if <memobj> is a not a valid memory object. |
| |
| * CL_INVALID_D3D10_RESOURCE_NV if <param_name> is CL_MEM_D3D10_RESOURCE_NV |
| and <memobj> was not created by the function clCreateFromD3D10BufferNV, |
| clCreateFromD3D10Texture2DNV, or |
| clCreateFromD3D10Texture3DNV." |
| |
| Extend table 5.8 to include the following entry. |
| |
| cl_mem_info Return type Info. returned in param_value |
| ----------- --------------- ----------------------------- |
| CL_MEM_D3D10_RESOURCE_NV ID3D10Resource* If <memobj> was created using |
| clCreateFromD3D10BufferNV, |
| clCreateFromD3D10Texture2DNV, or |
| clCreateFromD3D10Texture3DNV, |
| returns the <resource> argument |
| specified when <memobj> was |
| created. |
| |
| Change the last paragraph before table 5.9 to read |
| |
| "clGetImageInfo returns CL_SUCCESS if the function is executed successfully. |
| Otherwise it returns one of the following errors: |
| |
| * CL_INVALID_VALUE if <param_name> is not valid, or if the size in bytes |
| specified by <param_value_size> is less than the size of the return type as |
| described in table 5.9 and <param_value> is not NULL. |
| |
| * CL_INVALID_MEM_OBJECT if <image> is a not a valid image object. |
| |
| * CL_INVALID_D3D10_RESOURCE_NV if <param_name> is CL_MEM_D3D10_SUBRESOURCE_NV |
| and <image> was not created by the function clCreateFromD3D10Texture2DNV or |
| clCreateFromD3D10Texture3DNV." |
| |
| Extend table 5.9 to include the following entry. |
| |
| cl_image_info Return type Info. returned in param_value |
| ------------- --------------- ----------------------------- |
| CL_IMAGE_D3D10_SUBRESOURCE_NV ID3D10Resource* If <image> was created using |
| clCreateFromD3D10Texture2DNV, or |
| clCreateFromD3D10Texture3DNV, |
| returns the <subresource> argument |
| specified when <image> was |
| created. |
| |
| 5.7 Event Objects |
| |
| Add to Table 5.15 in the "Info returned in <param_value>" column |
| for cl_event_info CL_EVENT_COMMAND_TYPE: |
| |
| CL_COMMAND_ACQUIRE_D3D10_OBJECTS_NV |
| CL_COMMAND_RELEASE_D3D10_OBJECTS_NV |
| |
| Add new section 9.13 |
| |
| 9.13 Sharing Memory Objects with Direct3D 10 Resources |
| |
| This section discusses OpenCL functions that allow applications to use |
| Direct3D 10 resources as OpenCL memory objects. This allows efficient |
| sharing of data between OpenCL and Direct3D 10. The OpenCL API may be |
| used to execute kernels that read and/or write memory objects that are |
| also Direct3D 10 resources. An OpenCL image object may be created from |
| a Direct3D 10 texture or surface resource. An OpenCL buffer object may |
| be created from a Direct3D 10 buffer resource. OpenCL memory objects |
| may be created from Direct3D 10 objects if and only if the OpenCL context |
| has been created from a Direct3D 10 device. |
| |
| 9.13.1 Querying OpenCL Devices Corresponding to Direct3D 10 Devices |
| |
| The OpenCL devices corresponding to a Direct3D 10 device may be queried. |
| The OpenCL devices corresponding to a DXGI adapter may also be |
| queried. The OpenCL devices corresponding to a Direct3D 10 device will |
| be a subset of the OpenCL devices corresponding to the DXGI adapter |
| against which the Direct3D 10 device was created. |
| |
| The OpenCL devices corresponding to a Direct3D 10 device or a DXGI device |
| may be queried using the function |
| |
| cl_int clGetDeviceIDsFromD3D10NV( |
| cl_platform_id platform, |
| cl_d3d10_device_source_nv d3d_device_source, |
| void *d3d_object, |
| cl_d3d10_device_set_nv d3d_device_set, |
| cl_uint num_entries, |
| cl_device_id *devices, |
| cl_uint *num_devices) |
| |
| <platform> refers to the platform ID returned by clGetPlatformIDs. |
| |
| <d3d_device_source> specifies the type of <d3d_object>, and must be |
| one of the values shown in table 9.13.1.1. |
| |
| <d3d_object> specifies the object whose corresponding OpenCL devices |
| are being queried. The type of <d3d_object> must be as specified in |
| table 9.13.1.1. |
| |
| <cl_device_set> specifies the set of devices to return, and must be |
| one of the values shown in table 9.13.1.2. |
| |
| <num_entries> is the number of cl_device_id entries that can be added to |
| <devices>. If <devices> is not NULL then <num_entries> must be greater than |
| zero. |
| |
| <devices> returns a list of OpenCL devices found. The cl_device_id values |
| returned in <devices> can be used to identify a specific OpenCL device. |
| If <devices> is NULL, this argument is ignored. The number of |
| OpenCL devices returned is the mininum of the value specified by |
| <num_entries> and the number of OpenCL devices corresponding to |
| <d3d_object>. |
| |
| <num_devices> returns the number of OpenCL devices available that |
| correspond to <d3d_object>. If <num_devices> is NULL, this argument |
| is ignored. |
| |
| clGetDeviceIDsFromD3D10NV returns CL_SUCCESS if the function is executed |
| successfully. Otherwise it may return |
| |
| * CL_INVALID_PLATFORM if <platform> is not a valid platform, |
| |
| * CL_INVALID_VALUE if <d3d_device_source> is not a valid value, |
| <d3d_device_set> is not a valid value, <num_entries> is equal |
| to zero and <devices> is not NULL, or if both <num_devices> |
| and <devices> are NULL. |
| |
| * CL_DEVICE_NOT_FOUND if no OpenCL devices that correspond to |
| <d3d_object> were found. |
| |
| -------------------------------------------------------------------- |
| cl_d3d_device_source_nv Type of <d3d_object> |
| ------------------------ -------------------- |
| CL_D3D10_DEVICE_NV ID3D10Device * |
| CL_D3D10_DXGI_ADAPTER_NV IDXGIAdapter * |
| -------------------------------------------------------------------- |
| Table 9.13.1.1: Types used to specify the object whose corresponding |
| OpenCL devices are being queried by clGetDeviceIDsFromD3D10NV. |
| |
| -------------------------------------------------------------------- |
| cl_d3d_device_set_nv Devices returned in <devices> |
| ------------------------ ----------------------------- |
| CL_PREFERRED_DEVICES_FOR_D3D10_NV The OpenCL devices associated with |
| the specified Direct3D object. |
| |
| CL_ALL_DEVICES_FOR_D3D10_NV All OpenCL devices which may |
| interoperate with the specified |
| Direct3D object. Performance of |
| sharing data on these devices may |
| be considerably less than on the |
| preferred devices. |
| -------------------------------------------------------------------- |
| Table 9.13.1.2: Sets of devices queriable using |
| clGetDeviceIDsFromD3D10NV. |
| |
| 9.13.2 Lifetime of Shared Objects |
| |
| An OpenCL memory object created from a Direct3D 10 resource remains |
| valid as long as the corresponding Direct3D 10 resource has not been |
| deleted. If the Direct3D 10 resource is deleted through the Direct3D |
| 10 API, subsequent use of the OpenCL memory object will result |
| in undefined behavior, including but not limited to possible OpenCL |
| errors, data corruption, and program termination. |
| |
| The successful creation of a cl_context against a Direct3D 10 device |
| specified via the context create parameter CL_CONTEXT_D3D10_DEVICE_NV |
| will increment the internal Direct3D reference count on the specified |
| Direct3D 10 device. The internal Direct3D reference count on that |
| Direct3D 10 device will be decremented when the OpenCL reference |
| count on the returned OpenCL context drops to zero. |
| |
| The OpenCL context and corresponding command-queues are dependent on |
| the existence of the Direct3D 10 device from which the OpenCL context |
| was created. If the Direct3D 10 device is deleted through the Direct3D 10 |
| API, subsequent use of the OpenCL context will result in undefined |
| behavior, including but not limited to possible OpenCL errors, data |
| corruption, and program termination. |
| |
| 9.13.3 Sharing Direct3D 10 Buffer Resources as OpenCL Buffer Objects |
| |
| The function |
| |
| cl_mem clCreateFromD3D10BufferNV( |
| cl_context context, |
| cl_mem_flags flags, |
| ID3D10Buffer *resource, |
| int *errcode_ret) |
| |
| creates an OpenCL buffer object from a Direct3D 10 buffer. |
| |
| <context> is a valid OpenCL context created from a Direct3D 10 device. |
| |
| <flags> is a bit-field that is used to specify usage information. |
| Refer to table 5.3 for a description of <flags>. Only |
| CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY and CL_MEM_READ_WRITE values |
| specified in table 5.3 can be used. |
| |
| <resource> is a pointer to the Direct3D 10 buffer to share. |
| |
| <errcode_ret> will return an appropriate error code. If |
| <errcode_ret> is NULL, no error code is returned. |
| |
| clCreateFromD3D10BufferNV returns a valid non-zero OpenCL buffer object |
| and <errcode_ret> is set to CL_SUCCESS if the buffer object is |
| created successfully. Otherwise, it returns a NULL value with one of |
| the following error values returned in <errcode_ret>: |
| |
| * CL_INVALID_CONTEXT if <context> is not a valid context. |
| |
| * CL_INVALID_VALUE if values specified in <flags> are not valid. |
| |
| * CL_INVALID_D3D10_RESOURCE_NV if <resource> is not a Direct3D 10 |
| buffer resource, if <resource> was created with the D3D10_USAGE |
| flag D3D10_USAGE_IMMUTABLE, if a cl_mem from <resource> has already |
| been created using clCreateFromD3D10BufferNV, or if <context> |
| was not created against the same Direct3D 10 device from which |
| <resource> was created. |
| |
| * CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources |
| required by the OpenCL implementation on the host. |
| |
| The size of the returned OpenCL buffer object is the same as the |
| size of <resource>. |
| |
| This call will increment the internal Direct3D reference count on |
| <resource>. The internal Direct3D reference count on <resource> |
| will be decremented when the OpenCL reference count on the returned |
| OpenCL memory object drops to zero. |
| |
| 9.13.4 Sharing Direct3D 10 Texture and Resources as OpenCL Image |
| Objects |
| |
| The function |
| |
| cl_mem clCreateFromD3D10Texture2DNV( |
| cl_context context, |
| cl_mem_flags flags, |
| ID3D10Texture2D *resource, |
| UINT subresource, |
| int *errcode_ret) |
| |
| creates an OpenCL 2D image object from a subresource of a Direct3D |
| 10 2D texture. |
| |
| <context> is a valid OpenCL context created from a Direct3D 10 device. |
| |
| <flags> is a bit-field that is used to specify usage information. |
| Refer to table 5.3 for a description of <flags>. Only |
| CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY and CL_MEM_READ_WRITE values |
| specified in table 5.3 can be used. |
| |
| <resource> is a pointer to the Direct3D 10 2D texture to share. |
| |
| <subresource> is the subresource of <resource> to share. |
| |
| <errcode_ret> will return an appropriate error code. If |
| <errcode_ret> is NULL, no error code is returned. |
| |
| clCreateFromD3D10Texture2DNV returns a valid non-zero OpenCL image |
| object and <errcode_ret> is set to CL_SUCCESS if the image object is |
| created successfully. Otherwise, it returns a NULL value with one |
| of the following error values returned in <errcode_ret>: |
| |
| * CL_INVALID_CONTEXT if <context> is not a valid context. |
| |
| * CL_INVALID_VALUE if values specified in <flags> are not valid or if |
| <subresource> is not a valid subresource index for <resource>. |
| |
| * CL_INVALID_D3D10_RESOURCE_NV if <resource> is not a Direct3D 10 |
| texture resource, if <resource> was created with the D3D10_USAGE flag |
| D3D10_USAGE_IMMUTABLE, if <resource> is a multisampled |
| texture, if a cl_mem from subresource <subresource> of <resource> has |
| already been created using clCreateFromD3D10Texture2DNV, |
| or if <context> was not created against the same Direct3D 10 device |
| from which <resource> was created. |
| |
| * CL_INVALID_IMAGE_FORMAT_DESCRIPTOR if the Direct3D 10 texture |
| format of <resource> is not listed in table 9.13.4.1. |
| |
| * CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources |
| required by the OpenCL implementation on the host. |
| |
| The width and height of the returned OpenCL 2D image object are |
| determined by the width and height of subresource <subresource> |
| of <resource>. The channel type and order of the returned |
| OpenCL 2D image object is determined by the format of <resource> |
| by table 9.13.4.1. |
| |
| This call will increment the internal Direct3D reference count on |
| <resource>. The internal Direct3D reference count on <resource> |
| will be decremented when the OpenCL reference count on the returned |
| OpenCL memory object drops to zero. |
| |
| The function |
| |
| cl_mem clCreateFromD3D10Texture3DNV( |
| cl_context context, |
| cl_mem_flags flags, |
| ID3D10Texture3D *resource, |
| UINT subresource, |
| int *errcode_ret) |
| |
| creates an OpenCL 3D image object from a subresource of a Direct3D |
| 10 3D texture. |
| |
| <context> is a valid OpenCL context created from a Direct3D 10 device. |
| |
| <flags> is a bit-field that is used to specify usage information. |
| Refer to table 5.3 for a description of <flags>. Only |
| CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY and CL_MEM_READ_WRITE values |
| specified in table 5.3 can be used. |
| |
| <resource> is a pointer to the Direct3D 10 3D texture to share. |
| |
| <subresource> is the subresource of <resource> to share. |
| |
| <errcode_ret> will return an appropriate error code. If |
| <errcode_ret> is NULL, no error code is returned. |
| |
| clCreateFromD3D10Texture3DNV returns a valid non-zero OpenCL image |
| object and <errcode_ret> is set to CL_SUCCESS if the image object is |
| created successfully. Otherwise, it returns a NULL value with one |
| of the following error values returned in <errcode_ret>: |
| |
| * CL_INVALID_CONTEXT if <context> is not a valid context. |
| |
| * CL_INVALID_VALUE if values specified in <flags> are not valid or if |
| <subresource> is not a valid subresource index for <resource>. |
| |
| * CL_INVALID_D3D10_RESOURCE_NV if <resource> is not a Direct3D 10 |
| texture resource, if <resource> was created with the D3D10_USAGE flag |
| D3D10_USAGE_IMMUTABLE, if a cl_mem from subresource <subresource> of |
| <resource> has already been created using clCreateFromD3D10Texture3DNV, |
| or if <context> was not created against the same Direct3D 10 device |
| from which <resource> was created. |
| |
| * CL_INVALID_IMAGE_FORMAT_DESCRIPTOR if the Direct3D 10 texture |
| format of <resource> is not listed in table 9.13.4.1. |
| |
| * CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources |
| required by the OpenCL implementation on the host. |
| |
| The width, height, and depth of the return OpenCL 3D image object |
| are determined by the width, height, and depth of subresource |
| <subresource> of <resource>. The channel type and order of the |
| returned OpenCL 3D image object is determined by the format of <resource> |
| by table 9.13.4.1. |
| |
| This call will increment the internal Direct3D reference count on |
| <resource>. The internal Direct3D reference count on <resource> |
| will be decremented when the OpenCL reference count on the returned |
| OpenCL memory object drops to zero. |
| |
| ------------------------------------------------------------------ |
| DXGI Format cl_channel_order cl_channel_type |
| ------------------------------ ---------------- --------------- |
| DXGI_FORMAT_R32G32B32A32_FLOAT CL_RGBA CL_FLOAT |
| DXGI_FORMAT_R32G32B32A32_UINT CL_RGBA CL_UNSIGNED_INT32 |
| DXGI_FORMAT_R32G32B32A32_SINT CL_RGBA CL_SIGNED_INT32 |
| DXGI_FORMAT_R16G16B16A16_FLOAT CL_RGBA CL_HALF_FLOAT |
| DXGI_FORMAT_R16G16B16A16_UNORM CL_RGBA CL_UNORM_INT16 |
| DXGI_FORMAT_R16G16B16A16_UINT CL_RGBA CL_UNSIGNED_INT16 |
| DXGI_FORMAT_R16G16B16A16_SNORM CL_RGBA CL_SNORM_INT16 |
| DXGI_FORMAT_R16G16B16A16_SINT CL_RGBA CL_SIGNED_INT16 |
| DXGI_FORMAT_R8G8B8A8_UNORM CL_RGBA CL_UNORM_INT8 |
| DXGI_FORMAT_R8G8B8A8_UINT CL_RGBA CL_UNSIGNED_INT8 |
| DXGI_FORMAT_R8G8B8A8_SNORM CL_RGBA CL_SNORM_INT8 |
| DXGI_FORMAT_R8G8B8A8_SINT CL_RGBA CL_SIGNED_INT8 |
| DXGI_FORMAT_R32G32_FLOAT CL_RG CL_FLOAT |
| DXGI_FORMAT_R32G32_UINT CL_RG CL_UNSIGNED_INT32 |
| DXGI_FORMAT_R32G32_SINT CL_RG CL_SIGNED_INT32 |
| DXGI_FORMAT_R16G16_FLOAT CL_RG CL_HALF_FLOAT |
| DXGI_FORMAT_R16G16_UNORM CL_RG CL_UNORM_INT16 |
| DXGI_FORMAT_R16G16_UINT CL_RG CL_UNSIGNED_INT16 |
| DXGI_FORMAT_R16G16_SNORM CL_RG CL_SNORM_INT16 |
| DXGI_FORMAT_R16G16_SINT CL_RG CL_SIGNED_INT16 |
| DXGI_FORMAT_R8G8_UNORM CL_RG CL_UNORM_INT8 |
| DXGI_FORMAT_R8G8_UINT CL_RG CL_UNSIGNED_INT8 |
| DXGI_FORMAT_R8G8_SNORM CL_RG CL_SNORM_INT8 |
| DXGI_FORMAT_R8G8_SINT CL_RG CL_SIGNED_INT8 |
| DXGI_FORMAT_R32_FLOAT CL_R CL_FLOAT |
| DXGI_FORMAT_R32_UINT CL_R CL_UNSIGNED_INT32 |
| DXGI_FORMAT_R32_SINT CL_R CL_SIGNED_INT32 |
| DXGI_FORMAT_R16_FLOAT CL_R CL_HALF_FLOAT |
| DXGI_FORMAT_R16_UNORM CL_R CL_UNORM_INT16 |
| DXGI_FORMAT_R16_UINT CL_R CL_UNSIGNED_INT16 |
| DXGI_FORMAT_R16_SNORM CL_R CL_SNORM_INT16 |
| DXGI_FORMAT_R16_SINT CL_R CL_SIGNED_INT16 |
| DXGI_FORMAT_R8_UNORM CL_R CL_UNORM_INT8 |
| DXGI_FORMAT_R8_UINT CL_R CL_UNSIGNED_INT8 |
| DXGI_FORMAT_R8_SNORM CL_R CL_SNORM_INT8 |
| DXGI_FORMAT_R8_SINT CL_R CL_SIGNED_INT8 |
| ------------------------------------------------------------------ |
| Table 9.13.4.1: List of Direct3D 10 and corresponding OpenCL Image |
| Formats. |
| |
| 9.13.5 Querying Direct3D properties of memory objects created from |
| Direct3D 10 resources. |
| |
| Properties of Direct3D 10 objects may be queried using clGetMemObjectInfo |
| and clGetImageInfo with <param_name> CL_MEM_D3D10_RESOURCE_NV and |
| CL_IMAGE_D3D10_SUBRESOURCE_NV as described in section 5.2.9. |
| |
| 9.13.6 Sharing memory objects created from Direct3D 10 resources between |
| Direct3D 10 and OpenCL contexts |
| |
| The function |
| |
| cl_int clEnqueueAcquireD3D10ObjectsNV( |
| 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) |
| |
| is used to acquire OpenCL memory objects that have been created from |
| Direct3D 10 resources. The Direct3D 10 objects are acquired by the |
| OpenCL context associated with <command_queue> and can therefore be |
| used by all command-queues associated with the OpenCL context. |
| |
| OpenCL memory objects created from Direct3D 10 resources must be |
| acquired before they can be used by any OpenCL commands queued to |
| a command-queue. If an OpenCL memory object created from a Direct3D 10 |
| resource is used while it is not currently acquired by OpenCL, the call |
| attempting to use that OpenCL memory object will return |
| CL_D3D10_RESOURCE_NOT_ACQUIRED_NV. |
| |
| clEnqueueAcquireD3D10ObjectsNV provides the synchronization guarantee |
| that any Direct3D 10 calls made before clEnqueueAcquireD3D10ObjectsNV is |
| called will complete executing before <event> reports completion |
| and before the execution of any subsequent OpenCL work issued in |
| <command_queue> begins. |
| |
| <command_queue> is a valid command-queue. |
| |
| <num_objects> is the number of memory objects to be acquired in |
| <mem_objects>. |
| |
| <mem_objects> is a pointer to a list of OpenCL memory objects that |
| were created from Direct3D 10 resources. |
| |
| <event_wait_list> and <num_events_in_wait_list> specify events that |
| need to complete before this particular command can be executed. If |
| <event_wait_list> is NULL, then this particular command does not |
| wait on any event to complete. If <event_wait_list> is NULL, |
| <num_events_in_wait_list> must be 0. If <event_wait_list> is not |
| NULL, the list of events pointed to by <event_wait_list> must be |
| valid and <num_events_in_wait_list> must be greater than 0. The |
| events specified in <event_wait_list> act as synchronization points. |
| |
| <event> returns an event object that identifies this particular |
| command and can be used to query or queue a wait for this |
| particular command to complete. <event> can be NULL in which case it |
| will not be possible for the application to query the status of this |
| command or queue a wait for this command to complete. |
| |
| clEnqueueAcquireD3D10ObjectsNV returns CL_SUCCESS if the function is |
| executed successfully. If <num_objects> is 0 and <mem_objects> is |
| NULL then the function does nothing and returns CL_SUCCESS. Otherwise it |
| returns one of the following errors: |
| |
| * CL_INVALID_VALUE if <num_objects> is zero and <mem_objects> is |
| not a NULL value or if <num_objects> > 0 and <mem_objects> is |
| NULL. |
| |
| * CL_INVALID_MEM_OBJECT if memory objects in <mem_objects> are not |
| valid OpenCL memory objects or if memory objects in <mem_objects> |
| have not been created from Direct3D 10 resources. |
| |
| * CL_INVALID_COMMAND_QUEUE if <command_queue> is not a valid |
| command-queue. |
| |
| * CL_INVALID_CONTEXT if context associated with <command_queue> was |
| not created from an Direct3D 10 context. |
| |
| * CL_D3D10_RESOURCE_ALREADY_ACQUIRED_NV if memory objects in |
| <mem_objects> have previously been acquired using |
| clEnqueueAcquireD3D10ObjectsNV but have not been released |
| using clEnqueueReleaseD3D10ObjectsNV. |
| |
| * CL_INVALID_EVENT_WAIT_LIST if <event_wait_list> is NULL and |
| <num_events_in_wait_list> > 0, or <event_wait_list> is not NULL |
| and <num_events_in_wait_list> is 0, or if event objects in |
| <event_wait_list> are not valid events. |
| |
| * CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources |
| required by the OpenCL implementation on the host. |
| |
| The function |
| |
| cl_int clEnqueueReleaseD3D10ObjectsNV( |
| 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) |
| |
| is used to release OpenCL memory objects that have been created from |
| Direct3D 10 resources. The Direct3D 10 objects are released by the |
| OpenCL context associated with <command_queue>. |
| |
| OpenCL memory objects created from Direct3D 10 resources which have |
| been acquired by OpenCL must be released by OpenCL before they may be |
| accessed by Direct3D 10. Accessing a Direct3D 10 resource while its |
| corresponding OpenCL memory object is acquired is in error and will |
| result in undefined behavior, including but not limited to possible |
| OpenCL errors, data corruption, and program termination. |
| |
| clEnqueueReleaseD3D10ObjectsNV provides the synchronization guarantee |
| that any calls to Direct3D 10 made after the call to |
| clEnqueueReleaseD3D10ObjectsNV will not start executing until after |
| all events in <event_wait_list> are complete and all work already |
| submitted to <command_queue> completes execution. |
| |
| <num_objects> is the number of memory objects to be released in |
| <mem_objects>. |
| |
| <mem_objects> is a pointer to a list of OpenCL memory objects that |
| were created from Direct3D 10 resources. |
| |
| <event_wait_list> and <num_events_in_wait_list> specify events that |
| need to complete before this particular command can be executed. If |
| <event_wait_list> is NULL, then this particular command does not |
| wait on any event to complete. If <event_wait_list> is NULL, |
| <num_events_in_wait_list> must be 0. If <event_wait_list> is not |
| NULL, the list of events pointed to by <event_wait_list> must be |
| valid and <num_events_in_wait_list> must be greater than 0. The |
| events specified in |
| |
| <event> returns an event object that identifies this particular |
| command and can be used to query or queue a wait for this |
| particular command to complete. <event> can be NULL in which case it |
| will not be possible for the application to query the status of this |
| command or queue a wait for this command to complete. |
| |
| clEnqueueReleaseExternalObjectsNV returns CL_SUCCESS if the function |
| is executed successfully. If <num_objects> is 0 and <mem_objects> is |
| NULL the function does nothing and returns CL_SUCCESS. Otherwise it |
| returns one of the following errors: |
| |
| * CL_INVALID_VALUE if <num_objects> is zero and <mem_objects> is |
| not a NULL value or if <num_objects> > 0 and <mem_objects> is |
| NULL. |
| |
| * CL_INVALID_MEM_OBJECT if memory objects in <mem_objects> are not |
| valid OpenCL memory objects or if memory objects in <mem_objects> |
| have not been created from Direct3D 10 resources. |
| |
| * CL_INVALID_COMMAND_QUEUE if <command_queue> is not a valid |
| command-queue. |
| |
| * CL_INVALID_CONTEXT if context associated with <command_queue> was |
| not created from a Direct3D 10 device. |
| |
| * CL_D3D10_RESOURCE_NOT_ACQUIRED_NV if memory objects in |
| <mem_objects> have not previously |
| clEnqueueAcquireD3D10ObjectsNV, or have been released using |
| clEnqueueReleaseD3D10ObjectsNV since the last time that they |
| were acquired. |
| |
| * CL_INVALID_EVENT_WAIT_LIST if <event_wait_list> is NULL and |
| <num_events_in_wait_list> > 0, or <event_wait_list> is not NULL |
| and <num_events_in_wait_list> is 0, or if event objects in |
| <event_wait_list> are not valid events. |
| |
| * CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources |
| required by the OpenCL implementation on the host. |
| |
| Revision History |
| |
| Version 2, 2010/01/06 (Jon Leech) - add missing extension template |
| fields and publish in the Khronos Registry. |
| Version 1, 2009/12/07 - branched from draft of cl_nv_d3d10_sharing. |