xref: /aosp_15_r20/external/OpenCL-CTS/test_conformance/d3d10/harness.h (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 #ifndef HARNESS_H_
17*6467f958SSadaf Ebrahimi #define HARNESS_H_
18*6467f958SSadaf Ebrahimi 
19*6467f958SSadaf Ebrahimi #define _CRT_SECURE_NO_WARNINGS
20*6467f958SSadaf Ebrahimi 
21*6467f958SSadaf Ebrahimi #if defined (__MINGW32__)
22*6467f958SSadaf Ebrahimi #include <rpcsal.h>
23*6467f958SSadaf Ebrahimi typedef unsigned char UINT8;
24*6467f958SSadaf Ebrahimi #define __out
25*6467f958SSadaf Ebrahimi #define __in
26*6467f958SSadaf Ebrahimi #define __inout
27*6467f958SSadaf Ebrahimi #define __out_bcount_opt(size)
28*6467f958SSadaf Ebrahimi #define __in_opt
29*6467f958SSadaf Ebrahimi #define __in_ecount(size)
30*6467f958SSadaf Ebrahimi #define __in_ecount_opt(size)
31*6467f958SSadaf Ebrahimi #define __out_opt
32*6467f958SSadaf Ebrahimi #define __out_ecount(size)
33*6467f958SSadaf Ebrahimi #define __out_ecount_opt(size)
34*6467f958SSadaf Ebrahimi #define __in_bcount_opt(size)
35*6467f958SSadaf Ebrahimi #define __inout_opt
36*6467f958SSadaf Ebrahimi #endif
37*6467f958SSadaf Ebrahimi 
38*6467f958SSadaf Ebrahimi #include <CL/cl.h>
39*6467f958SSadaf Ebrahimi #include <CL/cl_platform.h>
40*6467f958SSadaf Ebrahimi #include <CL/cl_d3d10.h>
41*6467f958SSadaf Ebrahimi #include <stdio.h>
42*6467f958SSadaf Ebrahimi #include "errorHelpers.h"
43*6467f958SSadaf Ebrahimi #include "kernelHelpers.h"
44*6467f958SSadaf Ebrahimi 
45*6467f958SSadaf Ebrahimi // #define log_info(...) printf(__VA_ARGS__)
46*6467f958SSadaf Ebrahimi // #define log_error(...) printf(__VA_ARGS__)
47*6467f958SSadaf Ebrahimi 
48*6467f958SSadaf Ebrahimi #define NonTestRequire(x, ...) \
49*6467f958SSadaf Ebrahimi do \
50*6467f958SSadaf Ebrahimi { \
51*6467f958SSadaf Ebrahimi     if (!(x) ) \
52*6467f958SSadaf Ebrahimi     { \
53*6467f958SSadaf Ebrahimi         log_info("\n[assertion failed: %s at %s:%d]\n", #x, __FILE__, __LINE__); \
54*6467f958SSadaf Ebrahimi         log_info("CATASTROPHIC NON-TEST ERROR: "); \
55*6467f958SSadaf Ebrahimi         log_error(__VA_ARGS__); \
56*6467f958SSadaf Ebrahimi         log_info("\n"); \
57*6467f958SSadaf Ebrahimi         log_info("***FAILED***\n"); \
58*6467f958SSadaf Ebrahimi         exit(1); \
59*6467f958SSadaf Ebrahimi     } \
60*6467f958SSadaf Ebrahimi } while (0)
61*6467f958SSadaf Ebrahimi 
62*6467f958SSadaf Ebrahimi #define TestRequire(x, ...) \
63*6467f958SSadaf Ebrahimi     do \
64*6467f958SSadaf Ebrahimi     { \
65*6467f958SSadaf Ebrahimi         if (!(x) ) \
66*6467f958SSadaf Ebrahimi         { \
67*6467f958SSadaf Ebrahimi             log_info("\n[assertion failed: %s at %s:%d]\n", #x, __FILE__, __LINE__); \
68*6467f958SSadaf Ebrahimi             log_info("ERROR: "); \
69*6467f958SSadaf Ebrahimi             log_error(__VA_ARGS__); \
70*6467f958SSadaf Ebrahimi             log_info("\n"); \
71*6467f958SSadaf Ebrahimi             HarnessD3D10_TestFail(); \
72*6467f958SSadaf Ebrahimi             goto Cleanup; \
73*6467f958SSadaf Ebrahimi         } \
74*6467f958SSadaf Ebrahimi     } while (0)
75*6467f958SSadaf Ebrahimi 
76*6467f958SSadaf Ebrahimi #define TestPrint(...) \
77*6467f958SSadaf Ebrahimi     do \
78*6467f958SSadaf Ebrahimi     { \
79*6467f958SSadaf Ebrahimi         log_error(__VA_ARGS__); \
80*6467f958SSadaf Ebrahimi     } while (0)
81*6467f958SSadaf Ebrahimi 
82*6467f958SSadaf Ebrahimi struct TextureFormat
83*6467f958SSadaf Ebrahimi {
84*6467f958SSadaf Ebrahimi     DXGI_FORMAT format;
85*6467f958SSadaf Ebrahimi     cl_channel_order channel_order;
86*6467f958SSadaf Ebrahimi     cl_channel_type  channel_type;
87*6467f958SSadaf Ebrahimi     UINT bytesPerPixel;
88*6467f958SSadaf Ebrahimi     enum
89*6467f958SSadaf Ebrahimi     {
90*6467f958SSadaf Ebrahimi         GENERIC_FLOAT = 0,
91*6467f958SSadaf Ebrahimi         GENERIC_UINT  = 1,
92*6467f958SSadaf Ebrahimi         GENERIC_SINT  = 2,
93*6467f958SSadaf Ebrahimi     } generic;
94*6467f958SSadaf Ebrahimi 
95*6467f958SSadaf Ebrahimi     const char *name_format;
96*6467f958SSadaf Ebrahimi     const char *name_channel_order;
97*6467f958SSadaf Ebrahimi     const char *name_channel_type;
98*6467f958SSadaf Ebrahimi };
99*6467f958SSadaf Ebrahimi extern TextureFormat formats[];
100*6467f958SSadaf Ebrahimi extern UINT formatCount;
101*6467f958SSadaf Ebrahimi 
102*6467f958SSadaf Ebrahimi 
103*6467f958SSadaf Ebrahimi #define MAX_REGISTERED_SUBRESOURCES 4 // limit to just make life easier
104*6467f958SSadaf Ebrahimi 
105*6467f958SSadaf Ebrahimi struct BufferProperties
106*6467f958SSadaf Ebrahimi {
107*6467f958SSadaf Ebrahimi     UINT ByteWidth;
108*6467f958SSadaf Ebrahimi     UINT BindFlags;
109*6467f958SSadaf Ebrahimi     D3D10_USAGE Usage;
110*6467f958SSadaf Ebrahimi     UINT CPUAccess;
111*6467f958SSadaf Ebrahimi     const char* name_BindFlags;
112*6467f958SSadaf Ebrahimi     const char* name_Usage;
113*6467f958SSadaf Ebrahimi     const char* name_CPUAccess;
114*6467f958SSadaf Ebrahimi };
115*6467f958SSadaf Ebrahimi 
116*6467f958SSadaf Ebrahimi struct Texture2DSize
117*6467f958SSadaf Ebrahimi {
118*6467f958SSadaf Ebrahimi     UINT Width;
119*6467f958SSadaf Ebrahimi     UINT Height;
120*6467f958SSadaf Ebrahimi     UINT MipLevels;
121*6467f958SSadaf Ebrahimi     UINT ArraySize;
122*6467f958SSadaf Ebrahimi     UINT SubResourceCount;
123*6467f958SSadaf Ebrahimi     struct
124*6467f958SSadaf Ebrahimi     {
125*6467f958SSadaf Ebrahimi         UINT MipLevel;
126*6467f958SSadaf Ebrahimi         UINT ArraySlice;
127*6467f958SSadaf Ebrahimi     } subResources[MAX_REGISTERED_SUBRESOURCES];
128*6467f958SSadaf Ebrahimi     UINT MiscFlags;
129*6467f958SSadaf Ebrahimi };
130*6467f958SSadaf Ebrahimi struct Texture3DSize
131*6467f958SSadaf Ebrahimi {
132*6467f958SSadaf Ebrahimi     UINT Width;
133*6467f958SSadaf Ebrahimi     UINT Height;
134*6467f958SSadaf Ebrahimi     UINT Depth;
135*6467f958SSadaf Ebrahimi     UINT MipLevels;
136*6467f958SSadaf Ebrahimi     UINT SubResourceCount;
137*6467f958SSadaf Ebrahimi     struct
138*6467f958SSadaf Ebrahimi     {
139*6467f958SSadaf Ebrahimi         UINT MipLevel;
140*6467f958SSadaf Ebrahimi     } subResources[MAX_REGISTERED_SUBRESOURCES];
141*6467f958SSadaf Ebrahimi     UINT MiscFlags;
142*6467f958SSadaf Ebrahimi };
143*6467f958SSadaf Ebrahimi 
144*6467f958SSadaf Ebrahimi void HarnessD3D10_Initialize(cl_platform_id platform);
145*6467f958SSadaf Ebrahimi cl_int HarnessD3D10_CreateDevice(IDXGIAdapter* pAdapter, ID3D10Device **ppDevice);
146*6467f958SSadaf Ebrahimi void HarnessD3D10_DestroyDevice();
147*6467f958SSadaf Ebrahimi 
148*6467f958SSadaf Ebrahimi void HarnessD3D10_TestBegin(const char* fmt, ...);
149*6467f958SSadaf Ebrahimi void HarnessD3D10_TestFail();
150*6467f958SSadaf Ebrahimi void HarnessD3D10_TestEnd();
151*6467f958SSadaf Ebrahimi void HarnessD3D10_TestStats();
152*6467f958SSadaf Ebrahimi 
153*6467f958SSadaf Ebrahimi 
154*6467f958SSadaf Ebrahimi void TestAdapterEnumeration(
155*6467f958SSadaf Ebrahimi     cl_platform_id platform,
156*6467f958SSadaf Ebrahimi     IDXGIAdapter* pAdapter,
157*6467f958SSadaf Ebrahimi     ID3D10Device* pDevice,
158*6467f958SSadaf Ebrahimi     cl_uint* num_devices);
159*6467f958SSadaf Ebrahimi 
160*6467f958SSadaf Ebrahimi void TestAdapterDevices(
161*6467f958SSadaf Ebrahimi     cl_platform_id platform,
162*6467f958SSadaf Ebrahimi     IDXGIAdapter* pAdapter,
163*6467f958SSadaf Ebrahimi     ID3D10Device* pDevice,
164*6467f958SSadaf Ebrahimi     cl_uint num_devices);
165*6467f958SSadaf Ebrahimi 
166*6467f958SSadaf Ebrahimi void TestDevice(
167*6467f958SSadaf Ebrahimi     cl_device_id device,
168*6467f958SSadaf Ebrahimi     ID3D10Device* pDevice);
169*6467f958SSadaf Ebrahimi 
170*6467f958SSadaf Ebrahimi bool TestDeviceContextCreate(
171*6467f958SSadaf Ebrahimi     cl_device_id device,
172*6467f958SSadaf Ebrahimi     ID3D10Device* pDevice,
173*6467f958SSadaf Ebrahimi     cl_context* out_context,
174*6467f958SSadaf Ebrahimi     cl_command_queue* out_command_queue);
175*6467f958SSadaf Ebrahimi 
176*6467f958SSadaf Ebrahimi void TestDeviceBuffer(
177*6467f958SSadaf Ebrahimi     cl_context context,
178*6467f958SSadaf Ebrahimi     cl_command_queue command_queue,
179*6467f958SSadaf Ebrahimi     ID3D10Device* pDevice);
180*6467f958SSadaf Ebrahimi 
181*6467f958SSadaf Ebrahimi void TestDeviceTexture2D(
182*6467f958SSadaf Ebrahimi     cl_device_id device,
183*6467f958SSadaf Ebrahimi     cl_context context,
184*6467f958SSadaf Ebrahimi     cl_command_queue command_queue,
185*6467f958SSadaf Ebrahimi     ID3D10Device* pDevice);
186*6467f958SSadaf Ebrahimi 
187*6467f958SSadaf Ebrahimi void TestDeviceTexture3D(
188*6467f958SSadaf Ebrahimi     cl_device_id device,
189*6467f958SSadaf Ebrahimi     cl_context context,
190*6467f958SSadaf Ebrahimi     cl_command_queue command_queue,
191*6467f958SSadaf Ebrahimi     ID3D10Device* pDevice);
192*6467f958SSadaf Ebrahimi 
193*6467f958SSadaf Ebrahimi void TestDeviceMisc(
194*6467f958SSadaf Ebrahimi     cl_device_id device,
195*6467f958SSadaf Ebrahimi     cl_context context,
196*6467f958SSadaf Ebrahimi     cl_command_queue command_queue,
197*6467f958SSadaf Ebrahimi     ID3D10Device* pDevice);
198*6467f958SSadaf Ebrahimi 
199*6467f958SSadaf Ebrahimi cl_int HarnessD3D10_CreateKernelFromSource(
200*6467f958SSadaf Ebrahimi     cl_kernel *outKernel,
201*6467f958SSadaf Ebrahimi     cl_device_id device,
202*6467f958SSadaf Ebrahimi     cl_context context,
203*6467f958SSadaf Ebrahimi     const char *source,
204*6467f958SSadaf Ebrahimi     const char *entrypoint);
205*6467f958SSadaf Ebrahimi 
206*6467f958SSadaf Ebrahimi extern clGetDeviceIDsFromD3D10KHR_fn      clGetDeviceIDsFromD3D10KHR;
207*6467f958SSadaf Ebrahimi extern clCreateFromD3D10BufferKHR_fn      clCreateFromD3D10BufferKHR;
208*6467f958SSadaf Ebrahimi extern clCreateFromD3D10Texture2DKHR_fn   clCreateFromD3D10Texture2DKHR;
209*6467f958SSadaf Ebrahimi extern clCreateFromD3D10Texture3DKHR_fn   clCreateFromD3D10Texture3DKHR;
210*6467f958SSadaf Ebrahimi extern clEnqueueAcquireD3D10ObjectsKHR_fn clEnqueueAcquireD3D10ObjectsKHR;
211*6467f958SSadaf Ebrahimi extern clEnqueueReleaseD3D10ObjectsKHR_fn clEnqueueReleaseD3D10ObjectsKHR;
212*6467f958SSadaf Ebrahimi 
213*6467f958SSadaf Ebrahimi #endif
214