MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ detect_stage_from_extension()

std::optional< vk::ShaderStageFlagBits > MayaFlux::Core::VKShaderModule::detect_stage_from_extension ( const std::string &  filepath)
static

Auto-detect shader stage from file extension.

Parameters
filepathPath to shader file
Returns
Detected stage, or nullopt if unknown extension

Definition at line 452 of file VKShaderModule.cpp.

454{
455 std::filesystem::path path(filepath);
456 std::string ext = path.extension().string();
457
458 std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower);
459
460 static const std::unordered_map<std::string, vk::ShaderStageFlagBits> extension_map = {
461 { ".comp", vk::ShaderStageFlagBits::eCompute },
462 { ".vert", vk::ShaderStageFlagBits::eVertex },
463 { ".frag", vk::ShaderStageFlagBits::eFragment },
464 { ".geom", vk::ShaderStageFlagBits::eGeometry },
465 { ".tesc", vk::ShaderStageFlagBits::eTessellationControl },
466 { ".tese", vk::ShaderStageFlagBits::eTessellationEvaluation },
467 { ".rgen", vk::ShaderStageFlagBits::eRaygenKHR },
468 { ".rint", vk::ShaderStageFlagBits::eIntersectionKHR },
469 { ".rahit", vk::ShaderStageFlagBits::eAnyHitKHR },
470 { ".rchit", vk::ShaderStageFlagBits::eClosestHitKHR },
471 { ".rmiss", vk::ShaderStageFlagBits::eMissKHR },
472 { ".rcall", vk::ShaderStageFlagBits::eCallableKHR },
473 { ".mesh", vk::ShaderStageFlagBits::eMeshEXT },
474 { ".task", vk::ShaderStageFlagBits::eTaskEXT }
475 };
476
477 auto it = extension_map.find(ext);
478 if (it != extension_map.end()) {
479 return it->second;
480 }
481
482 return std::nullopt;
483}

Referenced by create_from_glsl_file(), and MayaFlux::Portal::Graphics::ShaderFoundry::detect_stage_from_extension().

+ Here is the caller graph for this function: