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