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