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 #if defined( _WIN32 )
17*6467f958SSadaf Ebrahimi
18*6467f958SSadaf Ebrahimi #define _CRT_SECURE_NO_WARNINGS
19*6467f958SSadaf Ebrahimi #include "harness.h"
20*6467f958SSadaf Ebrahimi #include "harness/testHarness.h"
21*6467f958SSadaf Ebrahimi #include "harness/parseParameters.h"
22*6467f958SSadaf Ebrahimi
main(int argc,const char * argv[])23*6467f958SSadaf Ebrahimi int main(int argc, const char* argv[])
24*6467f958SSadaf Ebrahimi {
25*6467f958SSadaf Ebrahimi cl_int result;
26*6467f958SSadaf Ebrahimi cl_platform_id platform = NULL;
27*6467f958SSadaf Ebrahimi cl_uint num_devices_tested = 0;
28*6467f958SSadaf Ebrahimi
29*6467f958SSadaf Ebrahimi argc = parseCustomParam(argc, argv);
30*6467f958SSadaf Ebrahimi
31*6467f958SSadaf Ebrahimi // get the platform to test
32*6467f958SSadaf Ebrahimi result = clGetPlatformIDs(1, &platform, NULL); NonTestRequire(result == CL_SUCCESS, "Failed to get any platforms.");
33*6467f958SSadaf Ebrahimi
34*6467f958SSadaf Ebrahimi HarnessD3D10_Initialize(platform);
35*6467f958SSadaf Ebrahimi
36*6467f958SSadaf Ebrahimi // for each adapter...
37*6467f958SSadaf Ebrahimi IDXGIFactory* pFactory = NULL;
38*6467f958SSadaf Ebrahimi HRESULT hr = CreateDXGIFactory(IID_IDXGIFactory, (void**)(&pFactory) );
39*6467f958SSadaf Ebrahimi NonTestRequire(SUCCEEDED(hr), "Failed to create DXGI factory.");
40*6467f958SSadaf Ebrahimi for (UINT adapter = 0;; ++adapter)
41*6467f958SSadaf Ebrahimi {
42*6467f958SSadaf Ebrahimi IDXGIAdapter* pAdapter = NULL;
43*6467f958SSadaf Ebrahimi ID3D10Device* pDevice = NULL;
44*6467f958SSadaf Ebrahimi HRESULT hr = pFactory->EnumAdapters(adapter, &pAdapter);
45*6467f958SSadaf Ebrahimi if (FAILED(hr))
46*6467f958SSadaf Ebrahimi {
47*6467f958SSadaf Ebrahimi break;
48*6467f958SSadaf Ebrahimi }
49*6467f958SSadaf Ebrahimi
50*6467f958SSadaf Ebrahimi // print data about the adapter
51*6467f958SSadaf Ebrahimi DXGI_ADAPTER_DESC desc;
52*6467f958SSadaf Ebrahimi hr = pAdapter->GetDesc(&desc);
53*6467f958SSadaf Ebrahimi NonTestRequire(SUCCEEDED(hr), "IDXGIAdapter::GetDesc failed.");
54*6467f958SSadaf Ebrahimi
55*6467f958SSadaf Ebrahimi TestPrint("=====================================\n");
56*6467f958SSadaf Ebrahimi TestPrint("Testing DXGI Adapter and D3D10 Device\n");
57*6467f958SSadaf Ebrahimi TestPrint("Description=%ls, VendorID=%x, DeviceID=%x\n", desc.Description, desc.VendorId, desc.DeviceId);
58*6467f958SSadaf Ebrahimi TestPrint("=====================================\n");
59*6467f958SSadaf Ebrahimi
60*6467f958SSadaf Ebrahimi // run the test on the adapter
61*6467f958SSadaf Ebrahimi HarnessD3D10_CreateDevice(pAdapter, &pDevice);
62*6467f958SSadaf Ebrahimi
63*6467f958SSadaf Ebrahimi cl_uint num_devices = 0;
64*6467f958SSadaf Ebrahimi
65*6467f958SSadaf Ebrahimi // test adapter and device enumeration
66*6467f958SSadaf Ebrahimi TestAdapterEnumeration(platform, pAdapter, pDevice, &num_devices);
67*6467f958SSadaf Ebrahimi
68*6467f958SSadaf Ebrahimi // if there were any devices found in enumeration, run the tests on them
69*6467f958SSadaf Ebrahimi if (num_devices)
70*6467f958SSadaf Ebrahimi {
71*6467f958SSadaf Ebrahimi TestAdapterDevices(platform, pAdapter, pDevice, num_devices);
72*6467f958SSadaf Ebrahimi }
73*6467f958SSadaf Ebrahimi num_devices_tested += num_devices;
74*6467f958SSadaf Ebrahimi
75*6467f958SSadaf Ebrahimi // destroy the D3D10 device
76*6467f958SSadaf Ebrahimi if (pDevice)
77*6467f958SSadaf Ebrahimi {
78*6467f958SSadaf Ebrahimi HarnessD3D10_DestroyDevice();
79*6467f958SSadaf Ebrahimi }
80*6467f958SSadaf Ebrahimi
81*6467f958SSadaf Ebrahimi pAdapter->Release();
82*6467f958SSadaf Ebrahimi }
83*6467f958SSadaf Ebrahimi pFactory->Release();
84*6467f958SSadaf Ebrahimi
85*6467f958SSadaf Ebrahimi NonTestRequire(num_devices_tested, "No D3D10 compatible cl_device_ids were found.");
86*6467f958SSadaf Ebrahimi
87*6467f958SSadaf Ebrahimi HarnessD3D10_TestStats();
88*6467f958SSadaf Ebrahimi }
89*6467f958SSadaf Ebrahimi
TestAdapterEnumeration(cl_platform_id platform,IDXGIAdapter * pAdapter,ID3D10Device * pDevice,cl_uint * num_devices)90*6467f958SSadaf Ebrahimi void TestAdapterEnumeration(cl_platform_id platform, IDXGIAdapter* pAdapter, ID3D10Device* pDevice, cl_uint* num_devices)
91*6467f958SSadaf Ebrahimi {
92*6467f958SSadaf Ebrahimi cl_uint num_adapter_devices = 0;
93*6467f958SSadaf Ebrahimi cl_device_id* adapter_devices = NULL;
94*6467f958SSadaf Ebrahimi
95*6467f958SSadaf Ebrahimi cl_uint num_device_devices = 0;
96*6467f958SSadaf Ebrahimi cl_device_id* device_devices = NULL;
97*6467f958SSadaf Ebrahimi
98*6467f958SSadaf Ebrahimi cl_int result;
99*6467f958SSadaf Ebrahimi
100*6467f958SSadaf Ebrahimi HarnessD3D10_TestBegin("cl_device_id Enumeration");
101*6467f958SSadaf Ebrahimi
102*6467f958SSadaf Ebrahimi // get the cl_device_ids for the adapter
103*6467f958SSadaf Ebrahimi {
104*6467f958SSadaf Ebrahimi result = clGetDeviceIDsFromD3D10KHR(
105*6467f958SSadaf Ebrahimi platform,
106*6467f958SSadaf Ebrahimi CL_D3D10_DXGI_ADAPTER_KHR,
107*6467f958SSadaf Ebrahimi pAdapter,
108*6467f958SSadaf Ebrahimi CL_ALL_DEVICES_FOR_D3D10_KHR,
109*6467f958SSadaf Ebrahimi 0,
110*6467f958SSadaf Ebrahimi NULL,
111*6467f958SSadaf Ebrahimi &num_adapter_devices);
112*6467f958SSadaf Ebrahimi TestRequire(
113*6467f958SSadaf Ebrahimi (result == CL_SUCCESS || result == CL_DEVICE_NOT_FOUND),
114*6467f958SSadaf Ebrahimi "clGetDeviceIDsFromD3D10KHR failed.");
115*6467f958SSadaf Ebrahimi
116*6467f958SSadaf Ebrahimi if (result == CL_DEVICE_NOT_FOUND)
117*6467f958SSadaf Ebrahimi {
118*6467f958SSadaf Ebrahimi TestPrint("No devices found for adapter.\n");
119*6467f958SSadaf Ebrahimi }
120*6467f958SSadaf Ebrahimi else
121*6467f958SSadaf Ebrahimi {
122*6467f958SSadaf Ebrahimi // if there were devices, query them
123*6467f958SSadaf Ebrahimi adapter_devices = new cl_device_id[num_adapter_devices];
124*6467f958SSadaf Ebrahimi result = clGetDeviceIDsFromD3D10KHR(
125*6467f958SSadaf Ebrahimi platform,
126*6467f958SSadaf Ebrahimi CL_D3D10_DXGI_ADAPTER_KHR,
127*6467f958SSadaf Ebrahimi pAdapter,
128*6467f958SSadaf Ebrahimi CL_ALL_DEVICES_FOR_D3D10_KHR,
129*6467f958SSadaf Ebrahimi num_adapter_devices,
130*6467f958SSadaf Ebrahimi adapter_devices,
131*6467f958SSadaf Ebrahimi NULL);
132*6467f958SSadaf Ebrahimi TestRequire(
133*6467f958SSadaf Ebrahimi (result == CL_SUCCESS),
134*6467f958SSadaf Ebrahimi "clGetDeviceIDsFromD3D10KHR failed.");
135*6467f958SSadaf Ebrahimi }
136*6467f958SSadaf Ebrahimi }
137*6467f958SSadaf Ebrahimi
138*6467f958SSadaf Ebrahimi // get the cl_device_ids for the device (if it was successfully created)
139*6467f958SSadaf Ebrahimi if (pDevice)
140*6467f958SSadaf Ebrahimi {
141*6467f958SSadaf Ebrahimi result = clGetDeviceIDsFromD3D10KHR(
142*6467f958SSadaf Ebrahimi platform,
143*6467f958SSadaf Ebrahimi CL_D3D10_DEVICE_KHR,
144*6467f958SSadaf Ebrahimi pDevice,
145*6467f958SSadaf Ebrahimi CL_ALL_DEVICES_FOR_D3D10_KHR,
146*6467f958SSadaf Ebrahimi 0,
147*6467f958SSadaf Ebrahimi NULL,
148*6467f958SSadaf Ebrahimi &num_device_devices);
149*6467f958SSadaf Ebrahimi TestRequire(
150*6467f958SSadaf Ebrahimi (result == CL_SUCCESS || result == CL_DEVICE_NOT_FOUND),
151*6467f958SSadaf Ebrahimi "clGetDeviceIDsFromD3D10KHR failed.");
152*6467f958SSadaf Ebrahimi
153*6467f958SSadaf Ebrahimi if (result == CL_DEVICE_NOT_FOUND)
154*6467f958SSadaf Ebrahimi {
155*6467f958SSadaf Ebrahimi TestPrint("No devices found for D3D device.\n");
156*6467f958SSadaf Ebrahimi }
157*6467f958SSadaf Ebrahimi else
158*6467f958SSadaf Ebrahimi {
159*6467f958SSadaf Ebrahimi // if there were devices, query them
160*6467f958SSadaf Ebrahimi device_devices = new cl_device_id[num_device_devices];
161*6467f958SSadaf Ebrahimi result = clGetDeviceIDsFromD3D10KHR(
162*6467f958SSadaf Ebrahimi platform,
163*6467f958SSadaf Ebrahimi CL_D3D10_DEVICE_KHR,
164*6467f958SSadaf Ebrahimi pDevice,
165*6467f958SSadaf Ebrahimi CL_ALL_DEVICES_FOR_D3D10_KHR,
166*6467f958SSadaf Ebrahimi num_device_devices,
167*6467f958SSadaf Ebrahimi device_devices,
168*6467f958SSadaf Ebrahimi NULL);
169*6467f958SSadaf Ebrahimi TestRequire(
170*6467f958SSadaf Ebrahimi (result == CL_SUCCESS),
171*6467f958SSadaf Ebrahimi "clGetDeviceIDsFromD3D10KHR failed.");
172*6467f958SSadaf Ebrahimi }
173*6467f958SSadaf Ebrahimi
174*6467f958SSadaf Ebrahimi // require that each cl_device_id returned for the ID3D10Device was among the devices listed for the adapter
175*6467f958SSadaf Ebrahimi for (cl_uint device_device = 0; device_device < num_device_devices; ++device_device)
176*6467f958SSadaf Ebrahimi {
177*6467f958SSadaf Ebrahimi cl_uint adapter_device;
178*6467f958SSadaf Ebrahimi for (adapter_device = 0; adapter_device < num_adapter_devices; ++adapter_device)
179*6467f958SSadaf Ebrahimi {
180*6467f958SSadaf Ebrahimi if (device_devices[device_device] == adapter_devices[adapter_device])
181*6467f958SSadaf Ebrahimi {
182*6467f958SSadaf Ebrahimi break;
183*6467f958SSadaf Ebrahimi }
184*6467f958SSadaf Ebrahimi }
185*6467f958SSadaf Ebrahimi TestRequire(
186*6467f958SSadaf Ebrahimi (adapter_device != num_adapter_devices),
187*6467f958SSadaf Ebrahimi "CL_D3D10_DEVICE_KHR devices not a subset of CL_D3D10_DXGI_ADAPTER_KHR devices");
188*6467f958SSadaf Ebrahimi }
189*6467f958SSadaf Ebrahimi }
190*6467f958SSadaf Ebrahimi
191*6467f958SSadaf Ebrahimi Cleanup:
192*6467f958SSadaf Ebrahimi
193*6467f958SSadaf Ebrahimi if (adapter_devices)
194*6467f958SSadaf Ebrahimi {
195*6467f958SSadaf Ebrahimi delete[] adapter_devices;
196*6467f958SSadaf Ebrahimi }
197*6467f958SSadaf Ebrahimi if (device_devices)
198*6467f958SSadaf Ebrahimi {
199*6467f958SSadaf Ebrahimi delete[] device_devices;
200*6467f958SSadaf Ebrahimi }
201*6467f958SSadaf Ebrahimi
202*6467f958SSadaf Ebrahimi *num_devices = num_device_devices;
203*6467f958SSadaf Ebrahimi
204*6467f958SSadaf Ebrahimi HarnessD3D10_TestEnd();
205*6467f958SSadaf Ebrahimi }
206*6467f958SSadaf Ebrahimi
TestAdapterDevices(cl_platform_id platform,IDXGIAdapter * pAdapter,ID3D10Device * pDevice,cl_uint num_devices_expected)207*6467f958SSadaf Ebrahimi void TestAdapterDevices(cl_platform_id platform, IDXGIAdapter* pAdapter, ID3D10Device* pDevice, cl_uint num_devices_expected)
208*6467f958SSadaf Ebrahimi {
209*6467f958SSadaf Ebrahimi cl_int result;
210*6467f958SSadaf Ebrahimi cl_uint num_devices = 0;
211*6467f958SSadaf Ebrahimi cl_device_id* devices = NULL;
212*6467f958SSadaf Ebrahimi
213*6467f958SSadaf Ebrahimi devices = new cl_device_id[num_devices_expected];
214*6467f958SSadaf Ebrahimi NonTestRequire(
215*6467f958SSadaf Ebrahimi devices,
216*6467f958SSadaf Ebrahimi "Memory allocation failure.");
217*6467f958SSadaf Ebrahimi
218*6467f958SSadaf Ebrahimi result = clGetDeviceIDsFromD3D10KHR(
219*6467f958SSadaf Ebrahimi platform,
220*6467f958SSadaf Ebrahimi CL_D3D10_DEVICE_KHR,
221*6467f958SSadaf Ebrahimi pDevice,
222*6467f958SSadaf Ebrahimi CL_ALL_DEVICES_FOR_D3D10_KHR,
223*6467f958SSadaf Ebrahimi num_devices_expected,
224*6467f958SSadaf Ebrahimi devices,
225*6467f958SSadaf Ebrahimi &num_devices);
226*6467f958SSadaf Ebrahimi NonTestRequire(
227*6467f958SSadaf Ebrahimi (result == CL_SUCCESS),
228*6467f958SSadaf Ebrahimi "clGetDeviceIDsFromD3D10KHR failed.");
229*6467f958SSadaf Ebrahimi NonTestRequire(
230*6467f958SSadaf Ebrahimi (num_devices == num_devices_expected),
231*6467f958SSadaf Ebrahimi "clGetDeviceIDsFromD3D10KHR returned an unexpected number of devices.");
232*6467f958SSadaf Ebrahimi
233*6467f958SSadaf Ebrahimi for (cl_uint i = 0; i < num_devices; ++i)
234*6467f958SSadaf Ebrahimi {
235*6467f958SSadaf Ebrahimi // make sure the device supports the extension
236*6467f958SSadaf Ebrahimi if (!is_extension_available(devices[i], "cl_khr_d3d10_sharing")) {
237*6467f958SSadaf Ebrahimi TestPrint("Device does not support cl_khr_d3d10_sharing extension\n");
238*6467f958SSadaf Ebrahimi continue;
239*6467f958SSadaf Ebrahimi }
240*6467f958SSadaf Ebrahimi
241*6467f958SSadaf Ebrahimi TestDevice(devices[i], pDevice);
242*6467f958SSadaf Ebrahimi }
243*6467f958SSadaf Ebrahimi }
244*6467f958SSadaf Ebrahimi
TestDevice(cl_device_id device,ID3D10Device * pDevice)245*6467f958SSadaf Ebrahimi void TestDevice(cl_device_id device, ID3D10Device* pDevice)
246*6467f958SSadaf Ebrahimi {
247*6467f958SSadaf Ebrahimi char device_name[1024];
248*6467f958SSadaf Ebrahimi cl_int result = CL_SUCCESS;
249*6467f958SSadaf Ebrahimi cl_context context = NULL;
250*6467f958SSadaf Ebrahimi cl_command_queue command_queue = NULL;
251*6467f958SSadaf Ebrahimi cl_bool prefer_shared_resources = CL_FALSE;
252*6467f958SSadaf Ebrahimi ID3D10Device* clDevice = NULL;
253*6467f958SSadaf Ebrahimi
254*6467f958SSadaf Ebrahimi result = clGetDeviceInfo(
255*6467f958SSadaf Ebrahimi device,
256*6467f958SSadaf Ebrahimi CL_DEVICE_NAME,
257*6467f958SSadaf Ebrahimi sizeof(device_name),
258*6467f958SSadaf Ebrahimi device_name,
259*6467f958SSadaf Ebrahimi NULL);
260*6467f958SSadaf Ebrahimi NonTestRequire(CL_SUCCESS == result, "clGetDeviceInfo with CL_DEVICE_NAME failed");
261*6467f958SSadaf Ebrahimi TestPrint("--------------------\n");
262*6467f958SSadaf Ebrahimi TestPrint("Testing cl_device_id\n");
263*6467f958SSadaf Ebrahimi TestPrint("Name=%s\n", device_name);
264*6467f958SSadaf Ebrahimi TestPrint("--------------------\n");
265*6467f958SSadaf Ebrahimi
266*6467f958SSadaf Ebrahimi if (!TestDeviceContextCreate(device, pDevice, &context, &command_queue) )
267*6467f958SSadaf Ebrahimi {
268*6467f958SSadaf Ebrahimi return;
269*6467f958SSadaf Ebrahimi }
270*6467f958SSadaf Ebrahimi
271*6467f958SSadaf Ebrahimi // make sure that we can query the shared resource preference
272*6467f958SSadaf Ebrahimi result = clGetContextInfo(
273*6467f958SSadaf Ebrahimi context,
274*6467f958SSadaf Ebrahimi CL_CONTEXT_D3D10_PREFER_SHARED_RESOURCES_KHR,
275*6467f958SSadaf Ebrahimi sizeof(prefer_shared_resources),
276*6467f958SSadaf Ebrahimi &prefer_shared_resources,
277*6467f958SSadaf Ebrahimi NULL);
278*6467f958SSadaf Ebrahimi NonTestRequire(CL_SUCCESS == result, "clGetContextInfo with CL_CONTEXT_D3D10_PREFER_SHARED_RESOURCES_KHR failed");
279*6467f958SSadaf Ebrahimi
280*6467f958SSadaf Ebrahimi // run buffer tests
281*6467f958SSadaf Ebrahimi TestDeviceBuffer(
282*6467f958SSadaf Ebrahimi context,
283*6467f958SSadaf Ebrahimi command_queue,
284*6467f958SSadaf Ebrahimi pDevice);
285*6467f958SSadaf Ebrahimi
286*6467f958SSadaf Ebrahimi // run 2D texture tests
287*6467f958SSadaf Ebrahimi TestDeviceTexture2D(
288*6467f958SSadaf Ebrahimi device,
289*6467f958SSadaf Ebrahimi context,
290*6467f958SSadaf Ebrahimi command_queue,
291*6467f958SSadaf Ebrahimi pDevice);
292*6467f958SSadaf Ebrahimi
293*6467f958SSadaf Ebrahimi // run 3D texture tests
294*6467f958SSadaf Ebrahimi TestDeviceTexture3D(
295*6467f958SSadaf Ebrahimi device,
296*6467f958SSadaf Ebrahimi context,
297*6467f958SSadaf Ebrahimi command_queue,
298*6467f958SSadaf Ebrahimi pDevice);
299*6467f958SSadaf Ebrahimi
300*6467f958SSadaf Ebrahimi // run misc tests
301*6467f958SSadaf Ebrahimi TestDeviceMisc(
302*6467f958SSadaf Ebrahimi device,
303*6467f958SSadaf Ebrahimi context,
304*6467f958SSadaf Ebrahimi command_queue,
305*6467f958SSadaf Ebrahimi pDevice);
306*6467f958SSadaf Ebrahimi
307*6467f958SSadaf Ebrahimi clReleaseContext(context);
308*6467f958SSadaf Ebrahimi clReleaseCommandQueue(command_queue);
309*6467f958SSadaf Ebrahimi }
310*6467f958SSadaf Ebrahimi
TestDeviceContextCreate(cl_device_id device,ID3D10Device * pDevice,cl_context * out_context,cl_command_queue * out_command_queue)311*6467f958SSadaf Ebrahimi bool TestDeviceContextCreate(
312*6467f958SSadaf Ebrahimi cl_device_id device,
313*6467f958SSadaf Ebrahimi ID3D10Device* pDevice,
314*6467f958SSadaf Ebrahimi cl_context* out_context,
315*6467f958SSadaf Ebrahimi cl_command_queue* out_command_queue)
316*6467f958SSadaf Ebrahimi {
317*6467f958SSadaf Ebrahimi cl_int result = CL_SUCCESS;
318*6467f958SSadaf Ebrahimi cl_context context = NULL;
319*6467f958SSadaf Ebrahimi cl_command_queue command_queue = NULL;
320*6467f958SSadaf Ebrahimi
321*6467f958SSadaf Ebrahimi ID3D10Device* clDevice = NULL;
322*6467f958SSadaf Ebrahimi
323*6467f958SSadaf Ebrahimi bool succeeded = false;
324*6467f958SSadaf Ebrahimi
325*6467f958SSadaf Ebrahimi HarnessD3D10_TestBegin("Context creation");
326*6467f958SSadaf Ebrahimi
327*6467f958SSadaf Ebrahimi cl_context_properties properties[5];
328*6467f958SSadaf Ebrahimi
329*6467f958SSadaf Ebrahimi // create the context
330*6467f958SSadaf Ebrahimi properties[0] = (cl_context_properties)CL_CONTEXT_D3D10_DEVICE_KHR;
331*6467f958SSadaf Ebrahimi properties[1] = (cl_context_properties)pDevice;
332*6467f958SSadaf Ebrahimi properties[2] = (cl_context_properties)CL_CONTEXT_INTEROP_USER_SYNC;
333*6467f958SSadaf Ebrahimi properties[3] = (cl_context_properties)CL_TRUE;
334*6467f958SSadaf Ebrahimi properties[4] = (cl_context_properties)0;
335*6467f958SSadaf Ebrahimi context = clCreateContext(
336*6467f958SSadaf Ebrahimi properties,
337*6467f958SSadaf Ebrahimi 1,
338*6467f958SSadaf Ebrahimi &device,
339*6467f958SSadaf Ebrahimi NULL,
340*6467f958SSadaf Ebrahimi NULL,
341*6467f958SSadaf Ebrahimi &result);
342*6467f958SSadaf Ebrahimi TestRequire(
343*6467f958SSadaf Ebrahimi (result == CL_SUCCESS),
344*6467f958SSadaf Ebrahimi "clCreateContext with CL_CONTEXT_D3D10_DEVICE_KHR failed");
345*6467f958SSadaf Ebrahimi result = clReleaseContext(context);
346*6467f958SSadaf Ebrahimi TestRequire(
347*6467f958SSadaf Ebrahimi (result == CL_SUCCESS),
348*6467f958SSadaf Ebrahimi "clReleaseContext with CL_CONTEXT_D3D10_DEVICE_KHR failed");
349*6467f958SSadaf Ebrahimi
350*6467f958SSadaf Ebrahimi // create the context
351*6467f958SSadaf Ebrahimi properties[0] = (cl_context_properties)CL_CONTEXT_D3D10_DEVICE_KHR;
352*6467f958SSadaf Ebrahimi properties[1] = (cl_context_properties)pDevice;
353*6467f958SSadaf Ebrahimi properties[2] = (cl_context_properties)CL_CONTEXT_INTEROP_USER_SYNC;
354*6467f958SSadaf Ebrahimi properties[3] = (cl_context_properties)CL_FALSE;
355*6467f958SSadaf Ebrahimi properties[4] = (cl_context_properties)0;
356*6467f958SSadaf Ebrahimi context = clCreateContext(
357*6467f958SSadaf Ebrahimi properties,
358*6467f958SSadaf Ebrahimi 1,
359*6467f958SSadaf Ebrahimi &device,
360*6467f958SSadaf Ebrahimi NULL,
361*6467f958SSadaf Ebrahimi NULL,
362*6467f958SSadaf Ebrahimi &result);
363*6467f958SSadaf Ebrahimi TestRequire(
364*6467f958SSadaf Ebrahimi (result == CL_SUCCESS),
365*6467f958SSadaf Ebrahimi "clCreateContext with CL_CONTEXT_D3D10_DEVICE_KHR failed");
366*6467f958SSadaf Ebrahimi result = clReleaseContext(context);
367*6467f958SSadaf Ebrahimi TestRequire(
368*6467f958SSadaf Ebrahimi (result == CL_SUCCESS),
369*6467f958SSadaf Ebrahimi "clReleaseContext with CL_CONTEXT_D3D10_DEVICE_KHR failed");
370*6467f958SSadaf Ebrahimi
371*6467f958SSadaf Ebrahimi // create the context
372*6467f958SSadaf Ebrahimi properties[0] = (cl_context_properties)CL_CONTEXT_D3D10_DEVICE_KHR;
373*6467f958SSadaf Ebrahimi properties[1] = (cl_context_properties)pDevice;
374*6467f958SSadaf Ebrahimi properties[2] = (cl_context_properties)0;
375*6467f958SSadaf Ebrahimi context = clCreateContext(
376*6467f958SSadaf Ebrahimi properties,
377*6467f958SSadaf Ebrahimi 1,
378*6467f958SSadaf Ebrahimi &device,
379*6467f958SSadaf Ebrahimi NULL,
380*6467f958SSadaf Ebrahimi NULL,
381*6467f958SSadaf Ebrahimi &result);
382*6467f958SSadaf Ebrahimi TestRequire(
383*6467f958SSadaf Ebrahimi (result == CL_SUCCESS),
384*6467f958SSadaf Ebrahimi "clCreateContext with CL_CONTEXT_D3D10_DEVICE_KHR failed");
385*6467f958SSadaf Ebrahimi
386*6467f958SSadaf Ebrahimi // create the command queue
387*6467f958SSadaf Ebrahimi TestPrint("Creating a command queue.\n");
388*6467f958SSadaf Ebrahimi command_queue = clCreateCommandQueueWithProperties(
389*6467f958SSadaf Ebrahimi context,
390*6467f958SSadaf Ebrahimi device,
391*6467f958SSadaf Ebrahimi NULL,
392*6467f958SSadaf Ebrahimi &result);
393*6467f958SSadaf Ebrahimi TestRequire(
394*6467f958SSadaf Ebrahimi (result == CL_SUCCESS),
395*6467f958SSadaf Ebrahimi "clCreateContext with CL_CONTEXT_D3D10_DEVICE_KHR failed");
396*6467f958SSadaf Ebrahimi
397*6467f958SSadaf Ebrahimi succeeded = true;
398*6467f958SSadaf Ebrahimi
399*6467f958SSadaf Ebrahimi Cleanup:
400*6467f958SSadaf Ebrahimi
401*6467f958SSadaf Ebrahimi if (succeeded)
402*6467f958SSadaf Ebrahimi {
403*6467f958SSadaf Ebrahimi *out_context = context;
404*6467f958SSadaf Ebrahimi *out_command_queue = command_queue;
405*6467f958SSadaf Ebrahimi }
406*6467f958SSadaf Ebrahimi else
407*6467f958SSadaf Ebrahimi {
408*6467f958SSadaf Ebrahimi if (context)
409*6467f958SSadaf Ebrahimi {
410*6467f958SSadaf Ebrahimi clReleaseContext(context);
411*6467f958SSadaf Ebrahimi }
412*6467f958SSadaf Ebrahimi if (command_queue)
413*6467f958SSadaf Ebrahimi {
414*6467f958SSadaf Ebrahimi clReleaseCommandQueue(command_queue);
415*6467f958SSadaf Ebrahimi }
416*6467f958SSadaf Ebrahimi }
417*6467f958SSadaf Ebrahimi HarnessD3D10_TestEnd();
418*6467f958SSadaf Ebrahimi return succeeded;
419*6467f958SSadaf Ebrahimi }
420*6467f958SSadaf Ebrahimi
421*6467f958SSadaf Ebrahimi #else
422*6467f958SSadaf Ebrahimi
423*6467f958SSadaf Ebrahimi #include "errorHelpers.h"
424*6467f958SSadaf Ebrahimi
main(int argc,char * argv[])425*6467f958SSadaf Ebrahimi int main(int argc, char* argv[])
426*6467f958SSadaf Ebrahimi {
427*6467f958SSadaf Ebrahimi log_info( "Windows-specific test skipped.\n" );
428*6467f958SSadaf Ebrahimi return 0;
429*6467f958SSadaf Ebrahimi }
430*6467f958SSadaf Ebrahimi
431*6467f958SSadaf Ebrahimi #endif
432