xref: /aosp_15_r20/external/OpenCL-CTS/test_conformance/d3d11/buffer.cpp (revision 6467f958c7de8070b317fc65bcb0f6472e388d82)
1*6467f958SSadaf Ebrahimi //
2*6467f958SSadaf Ebrahimi // Copyright (c) 2017 The Khronos Group Inc.
3*6467f958SSadaf Ebrahimi //
4*6467f958SSadaf Ebrahimi // Licensed under the Apache License, Version 2.0 (the "License");
5*6467f958SSadaf Ebrahimi // you may not use this file except in compliance with the License.
6*6467f958SSadaf Ebrahimi // You may obtain a copy of the License at
7*6467f958SSadaf Ebrahimi //
8*6467f958SSadaf Ebrahimi //    http://www.apache.org/licenses/LICENSE-2.0
9*6467f958SSadaf Ebrahimi //
10*6467f958SSadaf Ebrahimi // Unless required by applicable law or agreed to in writing, software
11*6467f958SSadaf Ebrahimi // distributed under the License is distributed on an "AS IS" BASIS,
12*6467f958SSadaf Ebrahimi // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6467f958SSadaf Ebrahimi // See the License for the specific language governing permissions and
14*6467f958SSadaf Ebrahimi // limitations under the License.
15*6467f958SSadaf Ebrahimi //
16*6467f958SSadaf Ebrahimi #include "harness.h"
17*6467f958SSadaf Ebrahimi 
18*6467f958SSadaf Ebrahimi #define ADD_BUFFER_PROPERTIES(w, x, y, z) \
19*6467f958SSadaf Ebrahimi     { w, x, y, z, #x, #y, #z, }
20*6467f958SSadaf Ebrahimi 
21*6467f958SSadaf Ebrahimi BufferProperties bufferProperties[] =
22*6467f958SSadaf Ebrahimi {
23*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(     0x110, D3D11_BIND_CONSTANT_BUFFER, D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE),
24*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(    0x1100, D3D11_BIND_CONSTANT_BUFFER, D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE),
25*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(    0x8000, D3D11_BIND_CONSTANT_BUFFER, D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE),
26*6467f958SSadaf Ebrahimi 
27*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(   0x7FFFF, D3D11_BIND_SHADER_RESOURCE, D3D11_USAGE_DEFAULT, 0),
28*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(  0x110000, D3D11_BIND_SHADER_RESOURCE, D3D11_USAGE_DEFAULT, 0),
29*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(  0x110000, D3D11_BIND_STREAM_OUTPUT,   D3D11_USAGE_DEFAULT, 0),
30*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(  0x110001, D3D11_BIND_STREAM_OUTPUT,   D3D11_USAGE_DEFAULT, 0),
31*6467f958SSadaf Ebrahimi 
32*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(      0x11, D3D11_BIND_VERTEX_BUFFER,   D3D11_USAGE_DEFAULT, 0),
33*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(      0x11, D3D11_BIND_INDEX_BUFFER,    D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE),
34*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(     0x121, D3D11_BIND_VERTEX_BUFFER,   D3D11_USAGE_DEFAULT, 0),
35*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(    0x1234, D3D11_BIND_INDEX_BUFFER,    D3D11_USAGE_DEFAULT, 0),
36*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(   0x12345, D3D11_BIND_VERTEX_BUFFER,   D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE),
37*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES(  0x123456, D3D11_BIND_INDEX_BUFFER,    D3D11_USAGE_DEFAULT, 0),
38*6467f958SSadaf Ebrahimi #if 0 // avoid large sizes on automation
39*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES( 0x1234567, D3D11_BIND_INDEX_BUFFER,    D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE),
40*6467f958SSadaf Ebrahimi 
41*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES( 0x4000000, D3D11_BIND_VERTEX_BUFFER,   D3D11_USAGE_DEFAULT, 0),
42*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES( 0x4000004, D3D11_BIND_VERTEX_BUFFER,   D3D11_USAGE_DEFAULT, 0),
43*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES( 0x4000008, D3D11_BIND_VERTEX_BUFFER,   D3D11_USAGE_DEFAULT, 0),
44*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES( 0x4000011, D3D11_BIND_VERTEX_BUFFER,   D3D11_USAGE_DEFAULT, 0),
45*6467f958SSadaf Ebrahimi     ADD_BUFFER_PROPERTIES( 0x4000014, D3D11_BIND_VERTEX_BUFFER,   D3D11_USAGE_DEFAULT, 0),
46*6467f958SSadaf Ebrahimi #endif
47*6467f958SSadaf Ebrahimi };
48*6467f958SSadaf Ebrahimi UINT bufferPropertyCount = sizeof(bufferProperties)/sizeof(bufferProperties[0]);
49*6467f958SSadaf Ebrahimi 
SubTestBuffer(cl_context context,cl_command_queue command_queue,ID3D11Device * pDevice,ID3D11DeviceContext * pDC,const BufferProperties * props)50*6467f958SSadaf Ebrahimi void SubTestBuffer(
51*6467f958SSadaf Ebrahimi     cl_context context,
52*6467f958SSadaf Ebrahimi     cl_command_queue command_queue,
53*6467f958SSadaf Ebrahimi     ID3D11Device* pDevice,
54*6467f958SSadaf Ebrahimi     ID3D11DeviceContext* pDC,
55*6467f958SSadaf Ebrahimi     const BufferProperties* props)
56*6467f958SSadaf Ebrahimi {
57*6467f958SSadaf Ebrahimi     ID3D11Buffer* pBuffer = NULL;
58*6467f958SSadaf Ebrahimi     HRESULT hr = S_OK;
59*6467f958SSadaf Ebrahimi     cl_mem mem = NULL;
60*6467f958SSadaf Ebrahimi     cl_int result = CL_SUCCESS;
61*6467f958SSadaf Ebrahimi 
62*6467f958SSadaf Ebrahimi     HarnessD3D11_TestBegin("Buffer: Size=%d, BindFlags=%s, Usage=%s, CPUAccess=%s",
63*6467f958SSadaf Ebrahimi         props->ByteWidth,
64*6467f958SSadaf Ebrahimi         props->name_BindFlags,
65*6467f958SSadaf Ebrahimi         props->name_Usage,
66*6467f958SSadaf Ebrahimi         props->name_CPUAccess);
67*6467f958SSadaf Ebrahimi 
68*6467f958SSadaf Ebrahimi     // create the D3D11 resource
69*6467f958SSadaf Ebrahimi     {
70*6467f958SSadaf Ebrahimi         D3D11_BUFFER_DESC desc = {0};
71*6467f958SSadaf Ebrahimi         desc.ByteWidth = props->ByteWidth;
72*6467f958SSadaf Ebrahimi         desc.Usage = props->Usage;
73*6467f958SSadaf Ebrahimi         desc.CPUAccessFlags = props->CPUAccess;
74*6467f958SSadaf Ebrahimi         desc.BindFlags = props->BindFlags;
75*6467f958SSadaf Ebrahimi         desc.MiscFlags = 0;
76*6467f958SSadaf Ebrahimi         hr = pDevice->CreateBuffer(&desc, NULL, &pBuffer);
77*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Creating vertex buffer failed!");
78*6467f958SSadaf Ebrahimi     }
79*6467f958SSadaf Ebrahimi 
80*6467f958SSadaf Ebrahimi     // populate the D3D11 resource with data
81*6467f958SSadaf Ebrahimi     {
82*6467f958SSadaf Ebrahimi         ID3D11Buffer* pStagingBuffer = NULL;
83*6467f958SSadaf Ebrahimi         char *pStagingData = NULL;
84*6467f958SSadaf Ebrahimi         D3D11_MAPPED_SUBRESOURCE map = {0};
85*6467f958SSadaf Ebrahimi 
86*6467f958SSadaf Ebrahimi         // create a staging buffer to use to copy data to the D3D buffer
87*6467f958SSadaf Ebrahimi         D3D11_BUFFER_DESC desc = {0};
88*6467f958SSadaf Ebrahimi         desc.ByteWidth      = 16;
89*6467f958SSadaf Ebrahimi         desc.Usage          = D3D11_USAGE_STAGING;
90*6467f958SSadaf Ebrahimi         desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE|D3D11_CPU_ACCESS_READ;
91*6467f958SSadaf Ebrahimi         desc.BindFlags      = 0;
92*6467f958SSadaf Ebrahimi         desc.MiscFlags      = 0;
93*6467f958SSadaf Ebrahimi         hr = pDevice->CreateBuffer(&desc, NULL, &pStagingBuffer);
94*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Creating staging vertex buffer failed!");
95*6467f958SSadaf Ebrahimi 
96*6467f958SSadaf Ebrahimi         // populate the staging buffer
97*6467f958SSadaf Ebrahimi         hr = pDC->Map(
98*6467f958SSadaf Ebrahimi             pStagingBuffer,
99*6467f958SSadaf Ebrahimi             0,
100*6467f958SSadaf Ebrahimi             D3D11_MAP_READ_WRITE,
101*6467f958SSadaf Ebrahimi             0,
102*6467f958SSadaf Ebrahimi             &map);
103*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Map failed!");
104*6467f958SSadaf Ebrahimi         memcpy(map.pData, "abcdXXXXxxxx1234", 16);
105*6467f958SSadaf Ebrahimi         pDC->Unmap(pStagingBuffer, 0);
106*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Unmap failed!");
107*6467f958SSadaf Ebrahimi 
108*6467f958SSadaf Ebrahimi         // copy 'abcdXXXX' to the front of the buffer and 'xxxx1234' to the back
109*6467f958SSadaf Ebrahimi         D3D11_BOX box = {0};
110*6467f958SSadaf Ebrahimi         box.front   = 0;
111*6467f958SSadaf Ebrahimi         box.back    = 1;
112*6467f958SSadaf Ebrahimi         box.top     = 0;
113*6467f958SSadaf Ebrahimi         box.bottom  = 1;
114*6467f958SSadaf Ebrahimi 
115*6467f958SSadaf Ebrahimi         box.left    = 0;
116*6467f958SSadaf Ebrahimi         box.right   = 8;
117*6467f958SSadaf Ebrahimi         pDC->CopySubresourceRegion(
118*6467f958SSadaf Ebrahimi             pBuffer,
119*6467f958SSadaf Ebrahimi             0,
120*6467f958SSadaf Ebrahimi             0,
121*6467f958SSadaf Ebrahimi             0,
122*6467f958SSadaf Ebrahimi             0,
123*6467f958SSadaf Ebrahimi             pStagingBuffer,
124*6467f958SSadaf Ebrahimi             0,
125*6467f958SSadaf Ebrahimi             &box);
126*6467f958SSadaf Ebrahimi         box.left    = 8;
127*6467f958SSadaf Ebrahimi         box.right   = 16;
128*6467f958SSadaf Ebrahimi         pDC->CopySubresourceRegion(
129*6467f958SSadaf Ebrahimi             pBuffer,
130*6467f958SSadaf Ebrahimi             0,
131*6467f958SSadaf Ebrahimi             props->ByteWidth-8,
132*6467f958SSadaf Ebrahimi             0,
133*6467f958SSadaf Ebrahimi             0,
134*6467f958SSadaf Ebrahimi             pStagingBuffer,
135*6467f958SSadaf Ebrahimi             0,
136*6467f958SSadaf Ebrahimi             &box);
137*6467f958SSadaf Ebrahimi         pStagingBuffer->Release();
138*6467f958SSadaf Ebrahimi     }
139*6467f958SSadaf Ebrahimi 
140*6467f958SSadaf Ebrahimi     // share the resource with OpenCL
141*6467f958SSadaf Ebrahimi     {
142*6467f958SSadaf Ebrahimi         mem = clCreateFromD3D11BufferKHR(
143*6467f958SSadaf Ebrahimi             context,
144*6467f958SSadaf Ebrahimi             0,
145*6467f958SSadaf Ebrahimi             pBuffer,
146*6467f958SSadaf Ebrahimi             &result);
147*6467f958SSadaf Ebrahimi         TestRequire(CL_SUCCESS == result, "clCreateFromD3D11BufferKHR failed");
148*6467f958SSadaf Ebrahimi     }
149*6467f958SSadaf Ebrahimi 
150*6467f958SSadaf Ebrahimi     // validate the OpenCL mem obj's properties
151*6467f958SSadaf Ebrahimi     {
152*6467f958SSadaf Ebrahimi         ID3D11Resource* clResource = NULL;
153*6467f958SSadaf Ebrahimi         result = clGetMemObjectInfo(
154*6467f958SSadaf Ebrahimi             mem,
155*6467f958SSadaf Ebrahimi             CL_MEM_D3D11_RESOURCE_KHR,
156*6467f958SSadaf Ebrahimi             sizeof(clResource),
157*6467f958SSadaf Ebrahimi             &clResource,
158*6467f958SSadaf Ebrahimi             NULL);
159*6467f958SSadaf Ebrahimi         TestRequire(result == CL_SUCCESS, "clGetMemObjectInfo for CL_MEM_D3D11_RESOURCE_KHR failed.");
160*6467f958SSadaf Ebrahimi         TestRequire(clResource == pBuffer, "clGetMemObjectInfo for CL_MEM_D3D11_RESOURCE_KHR returned incorrect value.");
161*6467f958SSadaf Ebrahimi     }
162*6467f958SSadaf Ebrahimi 
163*6467f958SSadaf Ebrahimi     // acquire the resource from OpenCL
164*6467f958SSadaf Ebrahimi     {
165*6467f958SSadaf Ebrahimi         result = clEnqueueAcquireD3D11ObjectsKHR(
166*6467f958SSadaf Ebrahimi             command_queue,
167*6467f958SSadaf Ebrahimi             1,
168*6467f958SSadaf Ebrahimi             &mem,
169*6467f958SSadaf Ebrahimi             0,
170*6467f958SSadaf Ebrahimi             NULL,
171*6467f958SSadaf Ebrahimi             NULL);
172*6467f958SSadaf Ebrahimi         TestRequire(result == CL_SUCCESS, "clEnqueueAcquireD3D11ObjectsKHR failed.");
173*6467f958SSadaf Ebrahimi     }
174*6467f958SSadaf Ebrahimi 
175*6467f958SSadaf Ebrahimi     // read+write data from the buffer in OpenCL
176*6467f958SSadaf Ebrahimi     {
177*6467f958SSadaf Ebrahimi         // overwrite the 'XXXX' with '1234' and the 'xxxx' with 'abcd' so we now have
178*6467f958SSadaf Ebrahimi         // 'abcd1234' at the beginning and end of the buffer
179*6467f958SSadaf Ebrahimi         result = clEnqueueCopyBuffer(
180*6467f958SSadaf Ebrahimi             command_queue,
181*6467f958SSadaf Ebrahimi             mem,
182*6467f958SSadaf Ebrahimi             mem,
183*6467f958SSadaf Ebrahimi             0,
184*6467f958SSadaf Ebrahimi             props->ByteWidth-8,
185*6467f958SSadaf Ebrahimi             4,
186*6467f958SSadaf Ebrahimi             0,
187*6467f958SSadaf Ebrahimi             NULL,
188*6467f958SSadaf Ebrahimi             NULL);
189*6467f958SSadaf Ebrahimi         TestRequire(result == CL_SUCCESS, "clEnqueueCopyBuffer failed.");
190*6467f958SSadaf Ebrahimi 
191*6467f958SSadaf Ebrahimi         result = clEnqueueCopyBuffer(
192*6467f958SSadaf Ebrahimi             command_queue,
193*6467f958SSadaf Ebrahimi             mem,
194*6467f958SSadaf Ebrahimi             mem,
195*6467f958SSadaf Ebrahimi             props->ByteWidth-4,
196*6467f958SSadaf Ebrahimi             4,
197*6467f958SSadaf Ebrahimi             4,
198*6467f958SSadaf Ebrahimi             0,
199*6467f958SSadaf Ebrahimi             NULL,
200*6467f958SSadaf Ebrahimi             NULL);
201*6467f958SSadaf Ebrahimi         TestRequire(result == CL_SUCCESS, "clEnqueueCopyBuffer failed.");
202*6467f958SSadaf Ebrahimi     }
203*6467f958SSadaf Ebrahimi 
204*6467f958SSadaf Ebrahimi     // release the resource from OpenCL
205*6467f958SSadaf Ebrahimi     {
206*6467f958SSadaf Ebrahimi         result = clEnqueueReleaseD3D11ObjectsKHR(
207*6467f958SSadaf Ebrahimi             command_queue,
208*6467f958SSadaf Ebrahimi             1,
209*6467f958SSadaf Ebrahimi             &mem,
210*6467f958SSadaf Ebrahimi             0,
211*6467f958SSadaf Ebrahimi             NULL,
212*6467f958SSadaf Ebrahimi             NULL);
213*6467f958SSadaf Ebrahimi         TestRequire(result == CL_SUCCESS, "clEnqueueReleaseD3D11ObjectsKHR failed.");
214*6467f958SSadaf Ebrahimi     }
215*6467f958SSadaf Ebrahimi 
216*6467f958SSadaf Ebrahimi     // read data in D3D
217*6467f958SSadaf Ebrahimi     {
218*6467f958SSadaf Ebrahimi         ID3D11Buffer* pStagingBuffer = NULL;
219*6467f958SSadaf Ebrahimi         char *pStagingData = NULL;
220*6467f958SSadaf Ebrahimi         D3D11_MAPPED_SUBRESOURCE map = {0};
221*6467f958SSadaf Ebrahimi 
222*6467f958SSadaf Ebrahimi         // create a staging buffer to read the data back
223*6467f958SSadaf Ebrahimi         D3D11_BUFFER_DESC desc = {0};
224*6467f958SSadaf Ebrahimi         desc.ByteWidth      = 16;
225*6467f958SSadaf Ebrahimi         desc.Usage          = D3D11_USAGE_STAGING;
226*6467f958SSadaf Ebrahimi         desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE|D3D11_CPU_ACCESS_READ;
227*6467f958SSadaf Ebrahimi         desc.BindFlags      = 0;
228*6467f958SSadaf Ebrahimi         desc.MiscFlags      = 0;
229*6467f958SSadaf Ebrahimi         hr = pDevice->CreateBuffer(&desc, NULL, &pStagingBuffer);
230*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Creating staging vertex buffer failed!");
231*6467f958SSadaf Ebrahimi 
232*6467f958SSadaf Ebrahimi         // make sure the staging buffer doesn't get stale data
233*6467f958SSadaf Ebrahimi         hr = pDC->Map(
234*6467f958SSadaf Ebrahimi             pStagingBuffer,
235*6467f958SSadaf Ebrahimi             0,
236*6467f958SSadaf Ebrahimi             D3D11_MAP_READ_WRITE,
237*6467f958SSadaf Ebrahimi             0,
238*6467f958SSadaf Ebrahimi             &map);
239*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Map failed!");
240*6467f958SSadaf Ebrahimi         memset(map.pData, 0, 16);
241*6467f958SSadaf Ebrahimi         pDC->Unmap(pStagingBuffer, 0);
242*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Unmap failed!");
243*6467f958SSadaf Ebrahimi 
244*6467f958SSadaf Ebrahimi         // copy the 'abcd1234' from the front and back of the buffer to the staging buffer
245*6467f958SSadaf Ebrahimi         D3D11_BOX box = {0};
246*6467f958SSadaf Ebrahimi         box.front   = 0;
247*6467f958SSadaf Ebrahimi         box.back    = 1;
248*6467f958SSadaf Ebrahimi         box.top     = 0;
249*6467f958SSadaf Ebrahimi         box.bottom  = 1;
250*6467f958SSadaf Ebrahimi 
251*6467f958SSadaf Ebrahimi         box.left    = 0;
252*6467f958SSadaf Ebrahimi         box.right   = 8;
253*6467f958SSadaf Ebrahimi         pDC->CopySubresourceRegion(
254*6467f958SSadaf Ebrahimi             pStagingBuffer,
255*6467f958SSadaf Ebrahimi             0,
256*6467f958SSadaf Ebrahimi             0,
257*6467f958SSadaf Ebrahimi             0,
258*6467f958SSadaf Ebrahimi             0,
259*6467f958SSadaf Ebrahimi             pBuffer,
260*6467f958SSadaf Ebrahimi             0,
261*6467f958SSadaf Ebrahimi             &box);
262*6467f958SSadaf Ebrahimi         box.left    = props->ByteWidth-8;
263*6467f958SSadaf Ebrahimi         box.right   = props->ByteWidth;
264*6467f958SSadaf Ebrahimi         pDC->CopySubresourceRegion(
265*6467f958SSadaf Ebrahimi             pStagingBuffer,
266*6467f958SSadaf Ebrahimi             0,
267*6467f958SSadaf Ebrahimi             8,
268*6467f958SSadaf Ebrahimi             0,
269*6467f958SSadaf Ebrahimi             0,
270*6467f958SSadaf Ebrahimi             pBuffer,
271*6467f958SSadaf Ebrahimi             0,
272*6467f958SSadaf Ebrahimi             &box);
273*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "CopySubresourceRegion failed!");
274*6467f958SSadaf Ebrahimi 
275*6467f958SSadaf Ebrahimi         // verify that we got the 'abcd1234'
276*6467f958SSadaf Ebrahimi         hr = pDC->Map(
277*6467f958SSadaf Ebrahimi             pStagingBuffer,
278*6467f958SSadaf Ebrahimi             0,
279*6467f958SSadaf Ebrahimi             D3D11_MAP_READ_WRITE,
280*6467f958SSadaf Ebrahimi             0,
281*6467f958SSadaf Ebrahimi             &map);
282*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Map failed!");
283*6467f958SSadaf Ebrahimi         TestRequire(!memcmp(map.pData, "abcd1234abcd1234", 16), "Data was not accurately");
284*6467f958SSadaf Ebrahimi         pDC->Unmap(pStagingBuffer, 0);
285*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Unmap failed!");
286*6467f958SSadaf Ebrahimi 
287*6467f958SSadaf Ebrahimi         pStagingBuffer->Release();
288*6467f958SSadaf Ebrahimi     }
289*6467f958SSadaf Ebrahimi 
290*6467f958SSadaf Ebrahimi Cleanup:
291*6467f958SSadaf Ebrahimi 
292*6467f958SSadaf Ebrahimi     if (pBuffer)
293*6467f958SSadaf Ebrahimi     {
294*6467f958SSadaf Ebrahimi         pBuffer->Release();
295*6467f958SSadaf Ebrahimi     }
296*6467f958SSadaf Ebrahimi     if (mem)
297*6467f958SSadaf Ebrahimi     {
298*6467f958SSadaf Ebrahimi         clReleaseMemObject(mem);
299*6467f958SSadaf Ebrahimi     }
300*6467f958SSadaf Ebrahimi 
301*6467f958SSadaf Ebrahimi     HarnessD3D11_TestEnd();
302*6467f958SSadaf Ebrahimi }
303*6467f958SSadaf Ebrahimi 
304*6467f958SSadaf Ebrahimi 
TestDeviceBuffer(cl_context context,cl_command_queue command_queue,ID3D11Device * pDevice,ID3D11DeviceContext * pDC)305*6467f958SSadaf Ebrahimi void TestDeviceBuffer(
306*6467f958SSadaf Ebrahimi     cl_context context,
307*6467f958SSadaf Ebrahimi     cl_command_queue command_queue,
308*6467f958SSadaf Ebrahimi     ID3D11Device* pDevice,
309*6467f958SSadaf Ebrahimi     ID3D11DeviceContext* pDC)
310*6467f958SSadaf Ebrahimi {
311*6467f958SSadaf Ebrahimi     for (UINT i = 0; i < bufferPropertyCount; ++i)
312*6467f958SSadaf Ebrahimi     {
313*6467f958SSadaf Ebrahimi         SubTestBuffer(
314*6467f958SSadaf Ebrahimi             context,
315*6467f958SSadaf Ebrahimi             command_queue,
316*6467f958SSadaf Ebrahimi             pDevice,
317*6467f958SSadaf Ebrahimi             pDC,
318*6467f958SSadaf Ebrahimi             &bufferProperties[i]);
319*6467f958SSadaf Ebrahimi     }
320*6467f958SSadaf Ebrahimi }
321*6467f958SSadaf Ebrahimi 
322