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