xref: /aosp_15_r20/external/OpenCL-CTS/test_conformance/d3d10/main.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 #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