// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #include "gpuhelper.hpp" #include "libvideostitch-base/msgboxhandler.hpp" #include <QCoreApplication> namespace VideoStitch { namespace GPU { bool checkGPUFrameworkAvailable(VideoStitch::Discovery::Framework framework) { QString message; switch (VideoStitch::Discovery::getFrameworkStatus(framework)) { case VideoStitch::Discovery::FrameworkStatus::Ok: return true; case VideoStitch::Discovery::FrameworkStatus::GenericError: switch (framework) { case VideoStitch::Discovery::Framework::CUDA: message = QCoreApplication::translate("GPU device check", "Unable to load CUDA runtime."); break; case VideoStitch::Discovery::Framework::OpenCL: message = QCoreApplication::translate("GPU device check", "Something went wrong with your graphics card."); break; case VideoStitch::Discovery::Framework::Unknown: Q_ASSERT(false); return false; } MsgBoxHandler::getInstance()->genericSync( message, QCoreApplication::translate("GPU device check", "Missing GPU driver"), CRITICAL_ERROR_ICON); return false; case VideoStitch::Discovery::FrameworkStatus::MissingDriver: switch (framework) { case VideoStitch::Discovery::Framework::CUDA: message = QCoreApplication::translate("GPU device check", "Unable to load CUDA driver."); break; case VideoStitch::Discovery::Framework::OpenCL: message = QCoreApplication::translate("GPU device check", "Unable to load GPU driver."); break; case VideoStitch::Discovery::Framework::Unknown: Q_ASSERT(false); return false; } MsgBoxHandler::getInstance()->genericSync( message, QCoreApplication::translate("GPU device check", "Missing GPU driver"), CRITICAL_ERROR_ICON); return false; case VideoStitch::Discovery::FrameworkStatus::OutdatedDriver: switch (framework) { case VideoStitch::Discovery::Framework::CUDA: message = QCoreApplication::translate("GPU device check", "Your CUDA driver appears to be outdated."); break; case VideoStitch::Discovery::Framework::OpenCL: message = QCoreApplication::translate("GPU device check", "Your GPU driver appears to be outdated."); break; case VideoStitch::Discovery::Framework::Unknown: Q_ASSERT(false); return false; } MsgBoxHandler::getInstance()->genericSync( message, QCoreApplication::translate("GPU device check", "Outdated GPU driver"), CRITICAL_ERROR_ICON); return false; case VideoStitch::Discovery::FrameworkStatus::NoCompatibleDevice: switch (framework) { case VideoStitch::Discovery::Framework::CUDA: message = QCoreApplication::translate("GPU device check", "No CUDA capable GPU detected on your system."); break; case VideoStitch::Discovery::Framework::OpenCL: message = QCoreApplication::translate("GPU device check", "No OpenCL capable GPU detected on your system."); break; case VideoStitch::Discovery::Framework::Unknown: Q_ASSERT(false); return false; } MsgBoxHandler::getInstance()->genericSync( message, QCoreApplication::translate("GPU device check", "No compatible device found"), CRITICAL_ERROR_ICON); return false; } Q_ASSERT(false); return false; } void showGPUInitializationError(int device, std::string const& error) { VideoStitch::Discovery::DeviceProperties prop; if (!VideoStitch::Discovery::getDeviceProperties(device, prop)) { Q_ASSERT(false); } QString deviceName = prop.name; QString message; if (VideoStitch::Discovery::getNumberOfDevices() == 1) { //: GPU error. %0 is the app name, %1 is the GPU name, %2 is the FAQ link message = QCoreApplication::translate("GPU Initialization", "%0 is unable to open the project with the graphics card.") .arg(QCoreApplication::applicationName()); } else { //: GPU error. %0 is the app name, %1 is the GPU name, %2 is the FAQ link message = QCoreApplication::translate("GPU Initialization", "%0 is unable to open a project with the selected graphics card.") .arg(QCoreApplication::applicationName()); } MsgBoxHandler::getInstance()->generic(message, QCoreApplication::translate("GPU Initialization", error.c_str()), CRITICAL_ERROR_ICON); } } // namespace GPU } // namespace VideoStitch