40 if (backend_type ==
"auto") {
41#ifdef HELIOS_HAVE_OPTIX8
43 return std::make_unique<OptiX8Backend>();
46#ifdef HELIOS_HAVE_OPTIX
48 return std::make_unique<OptiX6Backend>();
51#ifdef HELIOS_HAVE_VULKAN
53 return std::make_unique<VulkanComputeBackend>();
56 std::string compiled_backends;
57#ifdef HELIOS_HAVE_OPTIX8
58 compiled_backends +=
"OptiX 8.1 (NVIDIA drivers >= 560)";
60#ifdef HELIOS_HAVE_OPTIX
61 if (!compiled_backends.empty()) compiled_backends +=
", ";
62 compiled_backends +=
"OptiX 6.5 (NVIDIA drivers < 590)";
64#ifdef HELIOS_HAVE_VULKAN
65 if (!compiled_backends.empty()) compiled_backends +=
", ";
66 compiled_backends +=
"Vulkan Compute (AMD/Intel/Apple Silicon)";
68 if (compiled_backends.empty()) {
69 compiled_backends =
"(none)";
73 "ERROR (RayTracingBackend::create): No compatible GPU backend found.\n\n"
74 "The radiation plugin requires a GPU with one of the following:\n"
75 " - NVIDIA GPU with CUDA drivers (for OptiX backend)\n"
76 " - AMD, Intel, or Apple Silicon GPU with Vulkan support\n\n"
77 "Backends compiled into this build: " + compiled_backends +
"\n"
78 "All failed hardware probing. Ensure GPU drivers are installed and up to date.\n\n"
80 " - NVIDIA: run 'nvidia-smi' to verify driver is loaded\n"
81 " - Vulkan: run 'vulkaninfo --summary' to verify Vulkan support"
85#ifdef HELIOS_HAVE_OPTIX8
87 if (backend_type ==
"optix8" || backend_type ==
"OptiX8") {
88 return std::make_unique<OptiX8Backend>();
92#ifdef HELIOS_HAVE_OPTIX8
94 if (backend_type ==
"optix" || backend_type ==
"OptiX" || backend_type ==
"optix6" || backend_type ==
"OptiX6") {
95 return std::make_unique<OptiX8Backend>();
97#elif defined(HELIOS_HAVE_OPTIX)
99 if (backend_type ==
"optix6" || backend_type ==
"OptiX6" || backend_type ==
"optix" || backend_type ==
"OptiX") {
100 return std::make_unique<OptiX6Backend>();
104#ifdef HELIOS_HAVE_VULKAN
106 if (backend_type ==
"vulkan_compute" || backend_type ==
"vulkan" || backend_type ==
"Vulkan") {
107 return std::make_unique<VulkanComputeBackend>();
112 std::string available_backends;
113#ifdef HELIOS_HAVE_OPTIX8
114 available_backends +=
"'optix8' (OptiX 8.1), 'optix6' (auto-selects OptiX 8.1)";
115#elif defined(HELIOS_HAVE_OPTIX)
116 available_backends +=
"'optix6' (OptiX 6.5)";
118#ifdef HELIOS_HAVE_VULKAN
119 if (!available_backends.empty()) {
120 available_backends +=
", ";
122 available_backends +=
"'vulkan_compute' (Vulkan compute shaders)";
125 helios_runtime_error(
"ERROR (RayTracingBackend::create): Unknown ray tracing backend type '" + backend_type +
127 "Supported backends: " +