// Error helper functions s32 get_last_error() { // Convert the error code for socket functions to a one for sys_net s32 result; const char* name{}; #ifdef _WIN32 switch (s32 code = WSAGetLastError()) #define ERROR_CASE(error) case WSA ## error: result = SYS_NET_ ## error; name = #error; break; #else switch (s32 code = errno) #define ERROR_CASE(error) case error: result = SYS_NET_ ## error; name = #error; break; #endif { ERROR_CASE(EWOULDBLOCK); default: throw fmt::exception("Unknown/illegal socket error: %d" HERE, code); } if (name && result != SYS_NET_EWOULDBLOCK) { ppu_error_code::report(result, name); } return result; #undef ERROR_CASE }
const char* errString() throw() { #define ERROR_CASE(e) case e: return #e switch (_errNum) { ERROR_CASE(CL_SUCCESS); ERROR_CASE(CL_DEVICE_NOT_FOUND); ERROR_CASE(CL_DEVICE_NOT_AVAILABLE); ERROR_CASE(CL_COMPILER_NOT_AVAILABLE); ERROR_CASE(CL_MEM_OBJECT_ALLOCATION_FAILURE); ERROR_CASE(CL_OUT_OF_RESOURCES); ERROR_CASE(CL_OUT_OF_HOST_MEMORY); ERROR_CASE(CL_PROFILING_INFO_NOT_AVAILABLE); ERROR_CASE(CL_MEM_COPY_OVERLAP); ERROR_CASE(CL_IMAGE_FORMAT_MISMATCH); ERROR_CASE(CL_IMAGE_FORMAT_NOT_SUPPORTED); ERROR_CASE(CL_BUILD_PROGRAM_FAILURE); ERROR_CASE(CL_MAP_FAILURE); ERROR_CASE(CL_MISALIGNED_SUB_BUFFER_OFFSET); ERROR_CASE(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST); ERROR_CASE(CL_INVALID_VALUE); ERROR_CASE(CL_INVALID_DEVICE_TYPE); ERROR_CASE(CL_INVALID_PLATFORM); ERROR_CASE(CL_INVALID_DEVICE); ERROR_CASE(CL_INVALID_CONTEXT); ERROR_CASE(CL_INVALID_QUEUE_PROPERTIES); ERROR_CASE(CL_INVALID_COMMAND_QUEUE); ERROR_CASE(CL_INVALID_HOST_PTR); ERROR_CASE(CL_INVALID_MEM_OBJECT); ERROR_CASE(CL_INVALID_IMAGE_FORMAT_DESCRIPTOR); ERROR_CASE(CL_INVALID_IMAGE_SIZE); ERROR_CASE(CL_INVALID_SAMPLER); ERROR_CASE(CL_INVALID_BINARY); ERROR_CASE(CL_INVALID_BUILD_OPTIONS); ERROR_CASE(CL_INVALID_PROGRAM); ERROR_CASE(CL_INVALID_PROGRAM_EXECUTABLE); ERROR_CASE(CL_INVALID_KERNEL_NAME); ERROR_CASE(CL_INVALID_KERNEL_DEFINITION); ERROR_CASE(CL_INVALID_KERNEL); ERROR_CASE(CL_INVALID_ARG_INDEX); ERROR_CASE(CL_INVALID_ARG_VALUE); ERROR_CASE(CL_INVALID_ARG_SIZE); ERROR_CASE(CL_INVALID_KERNEL_ARGS); ERROR_CASE(CL_INVALID_WORK_DIMENSION); ERROR_CASE(CL_INVALID_WORK_GROUP_SIZE); ERROR_CASE(CL_INVALID_WORK_ITEM_SIZE); ERROR_CASE(CL_INVALID_GLOBAL_OFFSET); ERROR_CASE(CL_INVALID_EVENT_WAIT_LIST); ERROR_CASE(CL_INVALID_EVENT); ERROR_CASE(CL_INVALID_OPERATION); ERROR_CASE(CL_INVALID_GL_OBJECT); ERROR_CASE(CL_INVALID_BUFFER_SIZE); ERROR_CASE(CL_INVALID_MIP_LEVEL); ERROR_CASE(CL_INVALID_GLOBAL_WORK_SIZE); }; #undef ERROR_CASE return "Invalid error code"; }