1 /*
2  * Copyright (C) 2018-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #include "opencl/source/context/context.inl"
9 #include "opencl/source/os_interface/windows/d3d_sharing_functions.h"
10 #include "opencl/source/sharings/sharing_factory.h"
11 
12 using namespace NEO;
13 
14 template class D3DSharingFunctions<D3DTypesHelper::D3D9>;
15 const uint32_t D3DSharingFunctions<D3DTypesHelper::D3D9>::sharingId = SharingType::D3D9_SHARING;
16 
17 template <>
createQuery(D3DQuery ** query)18 void D3DSharingFunctions<D3DTypesHelper::D3D9>::createQuery(D3DQuery **query) {
19     D3DQUERYTYPE queryType = D3DQUERYTYPE_EVENT;
20     d3dDevice->CreateQuery(queryType, query);
21 }
22 
23 template <>
updateDevice(D3DResource * resource)24 void D3DSharingFunctions<D3DTypesHelper::D3D9>::updateDevice(D3DResource *resource) {
25     resource->GetDevice(&d3dDevice);
26 }
27 
28 template <>
fillCreateBufferDesc(D3DBufferDesc & desc,unsigned int width)29 void D3DSharingFunctions<D3DTypesHelper::D3D9>::fillCreateBufferDesc(D3DBufferDesc &desc, unsigned int width) {
30 }
31 
32 template <>
retrieveTextureFormats(cl_mem_object_type imageType,cl_uint plane)33 std::vector<DXGI_FORMAT> &D3DSharingFunctions<D3DTypesHelper::D3D9>::retrieveTextureFormats(cl_mem_object_type imageType, cl_uint plane) {
34     return DXGINoFormats;
35 }
36 
37 template <>
fillCreateTexture2dDesc(D3DTexture2dDesc & desc,D3DTexture2dDesc * srcDesc,cl_uint subresource)38 void D3DSharingFunctions<D3DTypesHelper::D3D9>::fillCreateTexture2dDesc(D3DTexture2dDesc &desc, D3DTexture2dDesc *srcDesc, cl_uint subresource) {
39 }
40 
41 template <>
fillCreateTexture3dDesc(D3DTexture3dDesc & desc,D3DTexture3dDesc * srcDesc,cl_uint subresource)42 void D3DSharingFunctions<D3DTypesHelper::D3D9>::fillCreateTexture3dDesc(D3DTexture3dDesc &desc, D3DTexture3dDesc *srcDesc, cl_uint subresource) {
43 }
44 
45 template <>
createBuffer(D3DBufferObj ** buffer,unsigned int width)46 void D3DSharingFunctions<D3DTypesHelper::D3D9>::createBuffer(D3DBufferObj **buffer, unsigned int width) {
47 }
48 
49 template <>
createTexture2d(D3DTexture2d ** texture,D3DTexture2dDesc * desc,cl_uint subresource)50 void D3DSharingFunctions<D3DTypesHelper::D3D9>::createTexture2d(D3DTexture2d **texture, D3DTexture2dDesc *desc, cl_uint subresource) {
51     d3dDevice->CreateOffscreenPlainSurface(desc->Width, desc->Height, desc->Format, D3DPOOL_SYSTEMMEM, texture, nullptr);
52 }
53 
54 template <>
createTexture3d(D3DTexture3d ** texture,D3DTexture3dDesc * desc,cl_uint subresource)55 void D3DSharingFunctions<D3DTypesHelper::D3D9>::createTexture3d(D3DTexture3d **texture, D3DTexture3dDesc *desc, cl_uint subresource) {
56 }
57 
58 template <>
checkFormatSupport(DXGI_FORMAT format,UINT * pFormat)59 bool D3DSharingFunctions<D3DTypesHelper::D3D9>::checkFormatSupport(DXGI_FORMAT format, UINT *pFormat) {
60     return false;
61 }
62 
validateFormatSupport(DXGI_FORMAT format,cl_mem_object_type type)63 cl_int D3DSharingFunctions<D3DTypesHelper::D3D9>::validateFormatSupport(DXGI_FORMAT format, cl_mem_object_type type) {
64     return CL_SUCCESS;
65 }
66 
67 template <>
memObjectFormatSupport(cl_mem_object_type object,UINT format)68 bool D3DSharingFunctions<D3DTypesHelper::D3D9>::memObjectFormatSupport(cl_mem_object_type object, UINT format) {
69     return false;
70 }
71 
72 template <>
getBufferDesc(D3DBufferDesc * bufferDesc,D3DBufferObj * buffer)73 void D3DSharingFunctions<D3DTypesHelper::D3D9>::getBufferDesc(D3DBufferDesc *bufferDesc, D3DBufferObj *buffer) {
74 }
75 
76 template <>
getTexture2dDesc(D3DTexture2dDesc * textureDesc,D3DTexture2d * texture)77 void D3DSharingFunctions<D3DTypesHelper::D3D9>::getTexture2dDesc(D3DTexture2dDesc *textureDesc, D3DTexture2d *texture) {
78     texture->GetDesc(textureDesc);
79 }
80 
81 template <>
getTexture3dDesc(D3DTexture3dDesc * textureDesc,D3DTexture3d * texture)82 void D3DSharingFunctions<D3DTypesHelper::D3D9>::getTexture3dDesc(D3DTexture3dDesc *textureDesc, D3DTexture3d *texture) {
83 }
84 
85 template <>
getSharedHandle(D3DResource * resource,void ** handle)86 void D3DSharingFunctions<D3DTypesHelper::D3D9>::getSharedHandle(D3DResource *resource, void **handle) {
87 }
88 
89 template <>
getSharedNTHandle(D3DResource * resource,void ** handle)90 void D3DSharingFunctions<D3DTypesHelper::D3D9>::getSharedNTHandle(D3DResource *resource, void **handle) {
91 }
92 
93 template <>
addRef(D3DResource * resource)94 void D3DSharingFunctions<D3DTypesHelper::D3D9>::addRef(D3DResource *resource) {
95     resource->AddRef();
96 }
97 
98 template <>
release(IUnknown * resource)99 void D3DSharingFunctions<D3DTypesHelper::D3D9>::release(IUnknown *resource) {
100     if (resource) {
101         resource->Release();
102     }
103 }
104 
105 template <>
lockRect(D3DTexture2d * d3dresource,D3DLOCKED_RECT * lockedRect,uint32_t flags)106 void D3DSharingFunctions<D3DTypesHelper::D3D9>::lockRect(D3DTexture2d *d3dresource, D3DLOCKED_RECT *lockedRect, uint32_t flags) {
107     d3dresource->LockRect(lockedRect, nullptr, flags);
108 }
109 
110 template <>
unlockRect(D3DTexture2d * d3dresource)111 void D3DSharingFunctions<D3DTypesHelper::D3D9>::unlockRect(D3DTexture2d *d3dresource) {
112     d3dresource->UnlockRect();
113 }
114 
115 template <>
getRenderTargetData(D3DTexture2d * renderTarget,D3DTexture2d * dstSurface)116 void D3DSharingFunctions<D3DTypesHelper::D3D9>::getRenderTargetData(D3DTexture2d *renderTarget, D3DTexture2d *dstSurface) {
117     d3dDevice->GetRenderTargetData(renderTarget, dstSurface);
118 }
119 
120 template <>
copySubresourceRegion(D3DResource * dst,cl_uint dstSubresource,D3DResource * src,cl_uint srcSubresource)121 void D3DSharingFunctions<D3DTypesHelper::D3D9>::copySubresourceRegion(D3DResource *dst, cl_uint dstSubresource,
122                                                                       D3DResource *src, cl_uint srcSubresource) {
123 }
124 
125 template <>
updateSurface(D3DTexture2d * src,D3DTexture2d * dst)126 void D3DSharingFunctions<D3DTypesHelper::D3D9>::updateSurface(D3DTexture2d *src, D3DTexture2d *dst) {
127     d3dDevice->UpdateSurface(src, nullptr, dst, nullptr);
128 }
129 
130 template <>
flushAndWait(D3DQuery * query)131 void D3DSharingFunctions<D3DTypesHelper::D3D9>::flushAndWait(D3DQuery *query) {
132     query->Issue(D3DISSUE_END);
133     while (query->GetData(nullptr, 0, D3DGETDATA_FLUSH) != S_OK)
134         ;
135 }
136 
137 template <>
getDeviceContext(D3DQuery * query)138 void D3DSharingFunctions<D3DTypesHelper::D3D9>::getDeviceContext(D3DQuery *query) {
139 }
140 
141 template <>
releaseDeviceContext(D3DQuery * query)142 void D3DSharingFunctions<D3DTypesHelper::D3D9>::releaseDeviceContext(D3DQuery *query) {
143 }
144 
145 template <>
getDxgiDesc(DXGI_ADAPTER_DESC * dxgiDesc,IDXGIAdapter * adapter,D3DDevice * device)146 void D3DSharingFunctions<D3DTypesHelper::D3D9>::getDxgiDesc(DXGI_ADAPTER_DESC *dxgiDesc, IDXGIAdapter *adapter, D3DDevice *device) {
147     if (!adapter) {
148         IDXGIDevice *dxgiDevice = nullptr;
149         device->QueryInterface(__uuidof(IDXGIDevice), (void **)&dxgiDevice);
150         dxgiDevice->GetAdapter(&adapter);
151         dxgiDevice->Release();
152     } else {
153         adapter->AddRef();
154     }
155     adapter->GetDesc(dxgiDesc);
156     adapter->Release();
157 }
158 
159 template D3DSharingFunctions<D3DTypesHelper::D3D9> *Context::getSharing<D3DSharingFunctions<D3DTypesHelper::D3D9>>();
160