blob: c1694626e9b472682daa80f8bba0f45116baa059 [file] [log] [blame]
//
// Copyright (c) 2017 The Khronos Group Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#ifndef TEST_CONFORMANCE_CLCPP_UTILS_COMMON_ERRORS_HPP
#define TEST_CONFORMANCE_CLCPP_UTILS_COMMON_ERRORS_HPP
#include <string>
#include "../harness/errorHelpers.h"
// ------------- Check OpenCL error helpers (marcos) -----------------
std::string get_cl_error_string(cl_int error)
{
#define CASE_CL_ERROR(x) case x: return #x;
switch (error)
{
CASE_CL_ERROR(CL_SUCCESS)
CASE_CL_ERROR(CL_DEVICE_NOT_FOUND)
CASE_CL_ERROR(CL_DEVICE_NOT_AVAILABLE)
CASE_CL_ERROR(CL_COMPILER_NOT_AVAILABLE)
CASE_CL_ERROR(CL_MEM_OBJECT_ALLOCATION_FAILURE)
CASE_CL_ERROR(CL_OUT_OF_RESOURCES)
CASE_CL_ERROR(CL_OUT_OF_HOST_MEMORY)
CASE_CL_ERROR(CL_PROFILING_INFO_NOT_AVAILABLE)
CASE_CL_ERROR(CL_MEM_COPY_OVERLAP)
CASE_CL_ERROR(CL_IMAGE_FORMAT_MISMATCH)
CASE_CL_ERROR(CL_IMAGE_FORMAT_NOT_SUPPORTED)
CASE_CL_ERROR(CL_BUILD_PROGRAM_FAILURE)
CASE_CL_ERROR(CL_MAP_FAILURE)
CASE_CL_ERROR(CL_MISALIGNED_SUB_BUFFER_OFFSET)
CASE_CL_ERROR(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST)
CASE_CL_ERROR(CL_COMPILE_PROGRAM_FAILURE)
CASE_CL_ERROR(CL_LINKER_NOT_AVAILABLE)
CASE_CL_ERROR(CL_LINK_PROGRAM_FAILURE)
CASE_CL_ERROR(CL_DEVICE_PARTITION_FAILED)
CASE_CL_ERROR(CL_KERNEL_ARG_INFO_NOT_AVAILABLE)
CASE_CL_ERROR(CL_INVALID_VALUE)
CASE_CL_ERROR(CL_INVALID_DEVICE_TYPE)
CASE_CL_ERROR(CL_INVALID_PLATFORM)
CASE_CL_ERROR(CL_INVALID_DEVICE)
CASE_CL_ERROR(CL_INVALID_CONTEXT)
CASE_CL_ERROR(CL_INVALID_QUEUE_PROPERTIES)
CASE_CL_ERROR(CL_INVALID_COMMAND_QUEUE)
CASE_CL_ERROR(CL_INVALID_HOST_PTR)
CASE_CL_ERROR(CL_INVALID_MEM_OBJECT)
CASE_CL_ERROR(CL_INVALID_IMAGE_FORMAT_DESCRIPTOR)
CASE_CL_ERROR(CL_INVALID_IMAGE_SIZE)
CASE_CL_ERROR(CL_INVALID_SAMPLER)
CASE_CL_ERROR(CL_INVALID_BINARY)
CASE_CL_ERROR(CL_INVALID_BUILD_OPTIONS)
CASE_CL_ERROR(CL_INVALID_PROGRAM)
CASE_CL_ERROR(CL_INVALID_PROGRAM_EXECUTABLE)
CASE_CL_ERROR(CL_INVALID_KERNEL_NAME)
CASE_CL_ERROR(CL_INVALID_KERNEL_DEFINITION)
CASE_CL_ERROR(CL_INVALID_KERNEL)
CASE_CL_ERROR(CL_INVALID_ARG_INDEX)
CASE_CL_ERROR(CL_INVALID_ARG_VALUE)
CASE_CL_ERROR(CL_INVALID_ARG_SIZE)
CASE_CL_ERROR(CL_INVALID_KERNEL_ARGS)
CASE_CL_ERROR(CL_INVALID_WORK_DIMENSION)
CASE_CL_ERROR(CL_INVALID_WORK_GROUP_SIZE)
CASE_CL_ERROR(CL_INVALID_WORK_ITEM_SIZE)
CASE_CL_ERROR(CL_INVALID_GLOBAL_OFFSET)
CASE_CL_ERROR(CL_INVALID_EVENT_WAIT_LIST)
CASE_CL_ERROR(CL_INVALID_EVENT)
CASE_CL_ERROR(CL_INVALID_OPERATION)
CASE_CL_ERROR(CL_INVALID_GL_OBJECT)
CASE_CL_ERROR(CL_INVALID_BUFFER_SIZE)
CASE_CL_ERROR(CL_INVALID_MIP_LEVEL)
CASE_CL_ERROR(CL_INVALID_GLOBAL_WORK_SIZE)
CASE_CL_ERROR(CL_INVALID_PROPERTY)
CASE_CL_ERROR(CL_INVALID_IMAGE_DESCRIPTOR)
CASE_CL_ERROR(CL_INVALID_COMPILER_OPTIONS)
CASE_CL_ERROR(CL_INVALID_LINKER_OPTIONS)
CASE_CL_ERROR(CL_INVALID_DEVICE_PARTITION_COUNT)
CASE_CL_ERROR(CL_INVALID_PIPE_SIZE)
CASE_CL_ERROR(CL_INVALID_DEVICE_QUEUE)
CASE_CL_ERROR(CL_INVALID_SPEC_ID)
CASE_CL_ERROR(CL_MAX_SIZE_RESTRICTION_EXCEEDED)
default: return "(unknown error code)";
}
#undef CASE_CL_ERROR
}
#define CHECK_ERROR(x) \
if(x != CL_SUCCESS) \
{ \
log_error("ERROR: %d, file: %s, line: %d\n", x, __FILE__, __LINE__);\
}
#define CHECK_ERROR_MSG(x, ...) \
if(x != CL_SUCCESS) \
{ \
log_error("ERROR: " __VA_ARGS__);\
log_error("\n");\
log_error("ERROR: %d, file: %s, line: %d\n", x, __FILE__, __LINE__);\
}
#define RETURN_ON_ERROR(x) \
if(x != CL_SUCCESS) \
{ \
log_error("ERROR: %d, file: %s, line: %d\n", x, __FILE__, __LINE__);\
return x;\
}
#define RETURN_ON_ERROR_MSG(x, ...) \
if(x != CL_SUCCESS) \
{ \
log_error("ERROR: " __VA_ARGS__);\
log_error("\n");\
log_error("ERROR: %d, file: %s, line: %d\n", x, __FILE__, __LINE__);\
return x;\
}
#define RETURN_ON_CL_ERROR(x, cl_func_name) \
if(x != CL_SUCCESS) \
{ \
log_error("ERROR: %s failed: %s (%d)\n", cl_func_name, get_cl_error_string(x).c_str(), x);\
log_error("ERROR: %d, file: %s, line: %d\n", x, __FILE__, __LINE__);\
return x;\
}
#endif // TEST_CONFORMANCE_CLCPP_UTILS_TEST_ERRORS_HPP