11 #include "flutter/fml/logging.h"
18 const std::string& suffix) {
19 if (suffix.size() >
string.size()) {
23 if (suffix.empty() || suffix.empty()) {
27 return string.rfind(suffix) == (
string.size() - suffix.size());
49 if (name ==
"vertex") {
53 if (name ==
"fragment") {
57 if (name ==
"compute") {
65 if (source_language ==
"glsl") {
68 if (source_language ==
"hlsl") {
79 return "MetalDesktop";
85 return "OpenGLDesktop";
89 return "RuntimeStageMetal";
91 return "RuntimeStageGLES";
93 return "RuntimeStageGLES3";
95 return "RuntimeStageVulkan";
103 switch (source_language) {
114 const std::string& file_name,
117 const std::string& entry_point_name) {
119 return entry_point_name;
122 std::stringstream stream;
123 std::filesystem::path file_path(file_name);
133 stream <<
"fragment";
163 using Status = shaderc_compilation_status;
165 case Status::shaderc_compilation_status_success:
167 case Status::shaderc_compilation_status_invalid_stage:
168 return "Invalid shader stage specified";
169 case Status::shaderc_compilation_status_compilation_error:
170 return "Compilation error";
171 case Status::shaderc_compilation_status_internal_error:
172 return "Internal error";
173 case Status::shaderc_compilation_status_null_result_object:
174 return "Internal error. Null result object";
175 case Status::shaderc_compilation_status_invalid_assembly:
176 return "Invalid assembly";
177 case Status::shaderc_compilation_status_validation_error:
178 return "Validation error";
179 case Status::shaderc_compilation_status_transformation_error:
180 return "Transform error";
181 case Status::shaderc_compilation_status_configuration_error:
182 return "Configuration error";
184 return "Unknown internal error";
190 return shaderc_shader_kind::shaderc_vertex_shader;
192 return shaderc_shader_kind::shaderc_fragment_shader;
194 return shaderc_shader_kind::shaderc_compute_shader;
198 return shaderc_shader_kind::shaderc_glsl_infer_from_source;
204 return spv::ExecutionModel::ExecutionModelVertex;
206 return spv::ExecutionModel::ExecutionModelFragment;
208 return spv::ExecutionModel::ExecutionModelGLCompute;
212 return spv::ExecutionModel::ExecutionModelMax;
220 return spirv_cross::CompilerMSL::Options::Platform::iOS;
222 return spirv_cross::CompilerMSL::Options::Platform::macOS;
231 return spirv_cross::CompilerMSL::Options::Platform::macOS;
std::string ConvertToEntrypointName(std::string_view string)
Ensure that the entrypoint name is a valid identifier in the target language.
std::string ToLowerCase(std::string_view string)
static bool StringEndWith(const std::string &string, const std::string &suffix)
std::string SourceLanguageToString(SourceLanguage source_language)
std::string TargetPlatformToString(TargetPlatform platform)
std::string TargetPlatformSLExtension(TargetPlatform platform)
shaderc_shader_kind ToShaderCShaderKind(SourceType type)
std::string SourceTypeToString(SourceType type)
SourceType SourceTypeFromString(std::string name)
SourceType SourceTypeFromFileName(const std::string &file_name)
std::string EntryPointFunctionNameFromSourceName(const std::string &file_name, SourceType type, SourceLanguage source_language, const std::string &entry_point_name)
bool TargetPlatformIsMetal(TargetPlatform platform)
bool TargetPlatformIsOpenGL(TargetPlatform platform)
std::string ShaderCErrorToString(shaderc_compilation_status status)
bool TargetPlatformIsVulkan(TargetPlatform platform)
std::string Utf8FromPath(const std::filesystem::path &path)
Converts a native format path to a utf8 string.
bool TargetPlatformBundlesSkSL(TargetPlatform platform)
spirv_cross::CompilerMSL::Options::Platform TargetPlatformToMSLPlatform(TargetPlatform platform)
SourceLanguage ToSourceLanguage(const std::string &source_language)
bool TargetPlatformNeedsReflection(TargetPlatform platform)
spv::ExecutionModel ToExecutionModel(SourceType type)