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/conversions.h" 17*6467f958SSadaf Ebrahimi #include "harness/errorHelpers.h" 18*6467f958SSadaf Ebrahimi #include "harness/kernelHelpers.h" 19*6467f958SSadaf Ebrahimi #include "harness/mt19937.h" 20*6467f958SSadaf Ebrahimi #include "harness/typeWrappers.h" 21*6467f958SSadaf Ebrahimi 22*6467f958SSadaf Ebrahimi // This is a macro rather than a function to be able to use and act like the 23*6467f958SSadaf Ebrahimi // existing test_error macro. 24*6467f958SSadaf Ebrahimi // 25*6467f958SSadaf Ebrahimi // Not all compiler tests need to use this macro, only those that don't use the 26*6467f958SSadaf Ebrahimi // test harness compiler helpers. 27*6467f958SSadaf Ebrahimi #define check_compiler_available(DEVICE) \ 28*6467f958SSadaf Ebrahimi { \ 29*6467f958SSadaf Ebrahimi cl_bool compilerAvailable = CL_FALSE; \ 30*6467f958SSadaf Ebrahimi cl_int error = clGetDeviceInfo((DEVICE), CL_DEVICE_COMPILER_AVAILABLE, \ 31*6467f958SSadaf Ebrahimi sizeof(compilerAvailable), \ 32*6467f958SSadaf Ebrahimi &compilerAvailable, NULL); \ 33*6467f958SSadaf Ebrahimi test_error(error, "Unable to query CL_DEVICE_COMPILER_AVAILABLE"); \ 34*6467f958SSadaf Ebrahimi if (compilerAvailable == CL_FALSE) \ 35*6467f958SSadaf Ebrahimi { \ 36*6467f958SSadaf Ebrahimi log_info("Skipping test - no compiler is available.\n"); \ 37*6467f958SSadaf Ebrahimi return TEST_SKIPPED_ITSELF; \ 38*6467f958SSadaf Ebrahimi } \ 39*6467f958SSadaf Ebrahimi } 40*6467f958SSadaf Ebrahimi 41*6467f958SSadaf Ebrahimi extern int test_load_program_source(cl_device_id deviceID, cl_context context, 42*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 43*6467f958SSadaf Ebrahimi extern int test_load_multistring_source(cl_device_id deviceID, 44*6467f958SSadaf Ebrahimi cl_context context, 45*6467f958SSadaf Ebrahimi cl_command_queue queue, 46*6467f958SSadaf Ebrahimi int num_elements); 47*6467f958SSadaf Ebrahimi extern int test_load_two_kernel_source(cl_device_id deviceID, 48*6467f958SSadaf Ebrahimi cl_context context, 49*6467f958SSadaf Ebrahimi cl_command_queue queue, 50*6467f958SSadaf Ebrahimi int num_elements); 51*6467f958SSadaf Ebrahimi extern int test_load_null_terminated_source(cl_device_id deviceID, 52*6467f958SSadaf Ebrahimi cl_context context, 53*6467f958SSadaf Ebrahimi cl_command_queue queue, 54*6467f958SSadaf Ebrahimi int num_elements); 55*6467f958SSadaf Ebrahimi extern int test_load_null_terminated_multi_line_source(cl_device_id deviceID, 56*6467f958SSadaf Ebrahimi cl_context context, 57*6467f958SSadaf Ebrahimi cl_command_queue queue, 58*6467f958SSadaf Ebrahimi int num_elements); 59*6467f958SSadaf Ebrahimi extern int test_load_null_terminated_partial_multi_line_source( 60*6467f958SSadaf Ebrahimi cl_device_id deviceID, cl_context context, cl_command_queue queue, 61*6467f958SSadaf Ebrahimi int num_elements); 62*6467f958SSadaf Ebrahimi extern int test_load_discreet_length_source(cl_device_id deviceID, 63*6467f958SSadaf Ebrahimi cl_context context, 64*6467f958SSadaf Ebrahimi cl_command_queue queue, 65*6467f958SSadaf Ebrahimi int num_elements); 66*6467f958SSadaf Ebrahimi extern int test_get_program_source(cl_device_id deviceID, cl_context context, 67*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 68*6467f958SSadaf Ebrahimi extern int test_get_program_build_info(cl_device_id deviceID, 69*6467f958SSadaf Ebrahimi cl_context context, 70*6467f958SSadaf Ebrahimi cl_command_queue queue, 71*6467f958SSadaf Ebrahimi int num_elements); 72*6467f958SSadaf Ebrahimi extern int test_get_program_info(cl_device_id deviceID, cl_context context, 73*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 74*6467f958SSadaf Ebrahimi 75*6467f958SSadaf Ebrahimi extern int test_large_compile(cl_device_id deviceID, cl_context context, 76*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 77*6467f958SSadaf Ebrahimi extern int test_async_build(cl_device_id deviceID, cl_context context, 78*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 79*6467f958SSadaf Ebrahimi 80*6467f958SSadaf Ebrahimi extern int test_options_build_optimizations(cl_device_id deviceID, 81*6467f958SSadaf Ebrahimi cl_context context, 82*6467f958SSadaf Ebrahimi cl_command_queue queue, 83*6467f958SSadaf Ebrahimi int num_elements); 84*6467f958SSadaf Ebrahimi extern int test_options_build_macro(cl_device_id deviceID, cl_context context, 85*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 86*6467f958SSadaf Ebrahimi extern int test_options_build_macro_existence(cl_device_id deviceID, 87*6467f958SSadaf Ebrahimi cl_context context, 88*6467f958SSadaf Ebrahimi cl_command_queue queue, 89*6467f958SSadaf Ebrahimi int num_elements); 90*6467f958SSadaf Ebrahimi extern int test_options_include_directory(cl_device_id deviceID, 91*6467f958SSadaf Ebrahimi cl_context context, 92*6467f958SSadaf Ebrahimi cl_command_queue queue, 93*6467f958SSadaf Ebrahimi int num_elements); 94*6467f958SSadaf Ebrahimi extern int test_options_denorm_cache(cl_device_id deviceID, cl_context context, 95*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 96*6467f958SSadaf Ebrahimi 97*6467f958SSadaf Ebrahimi extern int test_preprocessor_define_udef(cl_device_id deviceID, 98*6467f958SSadaf Ebrahimi cl_context context, 99*6467f958SSadaf Ebrahimi cl_command_queue queue, 100*6467f958SSadaf Ebrahimi int num_elements); 101*6467f958SSadaf Ebrahimi extern int test_preprocessor_include(cl_device_id deviceID, cl_context context, 102*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 103*6467f958SSadaf Ebrahimi extern int test_preprocessor_line_error(cl_device_id deviceID, 104*6467f958SSadaf Ebrahimi cl_context context, 105*6467f958SSadaf Ebrahimi cl_command_queue queue, 106*6467f958SSadaf Ebrahimi int num_elements); 107*6467f958SSadaf Ebrahimi extern int test_preprocessor_pragma(cl_device_id deviceID, cl_context context, 108*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 109*6467f958SSadaf Ebrahimi 110*6467f958SSadaf Ebrahimi extern int test_opencl_c_versions(cl_device_id device, cl_context context, 111*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 112*6467f958SSadaf Ebrahimi extern int test_compiler_defines_for_extensions(cl_device_id device, 113*6467f958SSadaf Ebrahimi cl_context context, 114*6467f958SSadaf Ebrahimi cl_command_queue queue, 115*6467f958SSadaf Ebrahimi int n_elems); 116*6467f958SSadaf Ebrahimi extern int test_image_macro(cl_device_id deviceID, cl_context context, 117*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 118*6467f958SSadaf Ebrahimi 119*6467f958SSadaf Ebrahimi extern int test_simple_compile_only(cl_device_id deviceID, cl_context context, 120*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 121*6467f958SSadaf Ebrahimi extern int test_simple_static_compile_only(cl_device_id deviceID, 122*6467f958SSadaf Ebrahimi cl_context context, 123*6467f958SSadaf Ebrahimi cl_command_queue queue, 124*6467f958SSadaf Ebrahimi int num_elements); 125*6467f958SSadaf Ebrahimi extern int test_simple_extern_compile_only(cl_device_id deviceID, 126*6467f958SSadaf Ebrahimi cl_context context, 127*6467f958SSadaf Ebrahimi cl_command_queue queue, 128*6467f958SSadaf Ebrahimi int num_elements); 129*6467f958SSadaf Ebrahimi extern int test_simple_compile_with_callback(cl_device_id deviceID, 130*6467f958SSadaf Ebrahimi cl_context context, 131*6467f958SSadaf Ebrahimi cl_command_queue queue, 132*6467f958SSadaf Ebrahimi int num_elements); 133*6467f958SSadaf Ebrahimi extern int test_simple_embedded_header_compile(cl_device_id deviceID, 134*6467f958SSadaf Ebrahimi cl_context context, 135*6467f958SSadaf Ebrahimi cl_command_queue queue, 136*6467f958SSadaf Ebrahimi int num_elements); 137*6467f958SSadaf Ebrahimi 138*6467f958SSadaf Ebrahimi extern int test_simple_link_only(cl_device_id deviceID, cl_context context, 139*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 140*6467f958SSadaf Ebrahimi extern int test_two_file_regular_variable_access(cl_device_id deviceID, 141*6467f958SSadaf Ebrahimi cl_context context, 142*6467f958SSadaf Ebrahimi cl_command_queue queue, 143*6467f958SSadaf Ebrahimi int num_elements); 144*6467f958SSadaf Ebrahimi extern int test_two_file_regular_struct_access(cl_device_id deviceID, 145*6467f958SSadaf Ebrahimi cl_context context, 146*6467f958SSadaf Ebrahimi cl_command_queue queue, 147*6467f958SSadaf Ebrahimi int num_elements); 148*6467f958SSadaf Ebrahimi extern int test_two_file_regular_function_access(cl_device_id deviceID, 149*6467f958SSadaf Ebrahimi cl_context context, 150*6467f958SSadaf Ebrahimi cl_command_queue queue, 151*6467f958SSadaf Ebrahimi int num_elements); 152*6467f958SSadaf Ebrahimi 153*6467f958SSadaf Ebrahimi extern int test_simple_link_with_callback(cl_device_id deviceID, 154*6467f958SSadaf Ebrahimi cl_context context, 155*6467f958SSadaf Ebrahimi cl_command_queue queue, 156*6467f958SSadaf Ebrahimi int num_elements); 157*6467f958SSadaf Ebrahimi extern int test_simple_embedded_header_link(cl_device_id deviceID, 158*6467f958SSadaf Ebrahimi cl_context context, 159*6467f958SSadaf Ebrahimi cl_command_queue queue, 160*6467f958SSadaf Ebrahimi int num_elements); 161*6467f958SSadaf Ebrahimi 162*6467f958SSadaf Ebrahimi extern int test_execute_after_simple_compile_and_link(cl_device_id deviceID, 163*6467f958SSadaf Ebrahimi cl_context context, 164*6467f958SSadaf Ebrahimi cl_command_queue queue, 165*6467f958SSadaf Ebrahimi int num_elements); 166*6467f958SSadaf Ebrahimi extern int test_execute_after_simple_compile_and_link_no_device_info( 167*6467f958SSadaf Ebrahimi cl_device_id deviceID, cl_context context, cl_command_queue queue, 168*6467f958SSadaf Ebrahimi int num_elements); 169*6467f958SSadaf Ebrahimi extern int test_execute_after_simple_compile_and_link_with_defines( 170*6467f958SSadaf Ebrahimi cl_device_id deviceID, cl_context context, cl_command_queue queue, 171*6467f958SSadaf Ebrahimi int num_elements); 172*6467f958SSadaf Ebrahimi extern int test_execute_after_simple_compile_and_link_with_callbacks( 173*6467f958SSadaf Ebrahimi cl_device_id deviceID, cl_context context, cl_command_queue queue, 174*6467f958SSadaf Ebrahimi int num_elements); 175*6467f958SSadaf Ebrahimi extern int test_execute_after_simple_library_with_link(cl_device_id deviceID, 176*6467f958SSadaf Ebrahimi cl_context context, 177*6467f958SSadaf Ebrahimi cl_command_queue queue, 178*6467f958SSadaf Ebrahimi int num_elements); 179*6467f958SSadaf Ebrahimi extern int test_execute_after_two_file_link(cl_device_id deviceID, 180*6467f958SSadaf Ebrahimi cl_context context, 181*6467f958SSadaf Ebrahimi cl_command_queue queue, 182*6467f958SSadaf Ebrahimi int num_elements); 183*6467f958SSadaf Ebrahimi extern int test_execute_after_embedded_header_link(cl_device_id deviceID, 184*6467f958SSadaf Ebrahimi cl_context context, 185*6467f958SSadaf Ebrahimi cl_command_queue queue, 186*6467f958SSadaf Ebrahimi int num_elements); 187*6467f958SSadaf Ebrahimi extern int test_execute_after_included_header_link(cl_device_id deviceID, 188*6467f958SSadaf Ebrahimi cl_context context, 189*6467f958SSadaf Ebrahimi cl_command_queue queue, 190*6467f958SSadaf Ebrahimi int num_elements); 191*6467f958SSadaf Ebrahimi extern int test_execute_after_serialize_reload_object(cl_device_id deviceID, 192*6467f958SSadaf Ebrahimi cl_context context, 193*6467f958SSadaf Ebrahimi cl_command_queue queue, 194*6467f958SSadaf Ebrahimi int num_elements); 195*6467f958SSadaf Ebrahimi extern int test_execute_after_serialize_reload_library(cl_device_id deviceID, 196*6467f958SSadaf Ebrahimi cl_context context, 197*6467f958SSadaf Ebrahimi cl_command_queue queue, 198*6467f958SSadaf Ebrahimi int num_elements); 199*6467f958SSadaf Ebrahimi 200*6467f958SSadaf Ebrahimi extern int test_simple_library_only(cl_device_id deviceID, cl_context context, 201*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 202*6467f958SSadaf Ebrahimi extern int test_simple_library_with_callback(cl_device_id deviceID, 203*6467f958SSadaf Ebrahimi cl_context context, 204*6467f958SSadaf Ebrahimi cl_command_queue queue, 205*6467f958SSadaf Ebrahimi int num_elements); 206*6467f958SSadaf Ebrahimi extern int test_simple_library_with_link(cl_device_id deviceID, 207*6467f958SSadaf Ebrahimi cl_context context, 208*6467f958SSadaf Ebrahimi cl_command_queue queue, 209*6467f958SSadaf Ebrahimi int num_elements); 210*6467f958SSadaf Ebrahimi extern int test_two_file_link(cl_device_id deviceID, cl_context context, 211*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 212*6467f958SSadaf Ebrahimi extern int test_multi_file_libraries(cl_device_id deviceID, cl_context context, 213*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 214*6467f958SSadaf Ebrahimi extern int test_multiple_libraries(cl_device_id deviceID, cl_context context, 215*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 216*6467f958SSadaf Ebrahimi extern int test_multiple_files(cl_device_id deviceID, cl_context context, 217*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 218*6467f958SSadaf Ebrahimi extern int test_multiple_files_multiple_libraries(cl_device_id deviceID, 219*6467f958SSadaf Ebrahimi cl_context context, 220*6467f958SSadaf Ebrahimi cl_command_queue queue, 221*6467f958SSadaf Ebrahimi int num_elements); 222*6467f958SSadaf Ebrahimi extern int test_multiple_embedded_headers(cl_device_id deviceID, 223*6467f958SSadaf Ebrahimi cl_context context, 224*6467f958SSadaf Ebrahimi cl_command_queue queue, 225*6467f958SSadaf Ebrahimi int num_elements); 226*6467f958SSadaf Ebrahimi 227*6467f958SSadaf Ebrahimi extern int test_program_binary_type(cl_device_id deviceID, cl_context context, 228*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 229*6467f958SSadaf Ebrahimi extern int test_compile_and_link_status_options_log(cl_device_id deviceID, 230*6467f958SSadaf Ebrahimi cl_context context, 231*6467f958SSadaf Ebrahimi cl_command_queue queue, 232*6467f958SSadaf Ebrahimi int num_elements); 233*6467f958SSadaf Ebrahimi 234*6467f958SSadaf Ebrahimi extern int test_pragma_unroll(cl_device_id deviceID, cl_context context, 235*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 236*6467f958SSadaf Ebrahimi extern int test_features_macro(cl_device_id deviceID, cl_context context, 237*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 238*6467f958SSadaf Ebrahimi extern int test_unload_valid(cl_device_id deviceID, cl_context context, 239*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 240*6467f958SSadaf Ebrahimi extern int test_unload_invalid(cl_device_id deviceID, cl_context context, 241*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 242*6467f958SSadaf Ebrahimi extern int test_unload_repeated(cl_device_id deviceID, cl_context context, 243*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 244*6467f958SSadaf Ebrahimi extern int test_unload_compile_unload_link(cl_device_id deviceID, 245*6467f958SSadaf Ebrahimi cl_context context, 246*6467f958SSadaf Ebrahimi cl_command_queue queue, 247*6467f958SSadaf Ebrahimi int num_elements); 248*6467f958SSadaf Ebrahimi extern int test_unload_build_unload_create_kernel(cl_device_id deviceID, 249*6467f958SSadaf Ebrahimi cl_context context, 250*6467f958SSadaf Ebrahimi cl_command_queue queue, 251*6467f958SSadaf Ebrahimi int num_elements); 252*6467f958SSadaf Ebrahimi extern int test_unload_link_different(cl_device_id deviceID, cl_context context, 253*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 254*6467f958SSadaf Ebrahimi extern int test_unload_build_threaded(cl_device_id deviceID, cl_context context, 255*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 256*6467f958SSadaf Ebrahimi extern int test_unload_build_info(cl_device_id deviceID, cl_context context, 257*6467f958SSadaf Ebrahimi cl_command_queue queue, int num_elements); 258*6467f958SSadaf Ebrahimi extern int test_unload_program_binaries(cl_device_id deviceID, 259*6467f958SSadaf Ebrahimi cl_context context, 260*6467f958SSadaf Ebrahimi cl_command_queue queue, 261*6467f958SSadaf Ebrahimi int num_elements); 262