Commit 3350741e by Grigory Dzhavadyan

Make glslang validator support files ending in .glsl

This patch makes the validator accept *.<stage name>.[g/h]lsl pattern for file names. This patch preserves previous behavior (i.e. *.vert/*.frag/etc. in file names still work).
parent 0f8d43e5
...@@ -1196,38 +1196,47 @@ int C_DECL main(int argc, char* argv[]) ...@@ -1196,38 +1196,47 @@ int C_DECL main(int argc, char* argv[])
// .frag = fragment // .frag = fragment
// .comp = compute // .comp = compute
// //
EShLanguage FindLanguage(const std::string& name, bool parseSuffix) // Additionally, the file names may end in .<stage>.glsl and .<stage>.hlsl
// where <stage> is one of the stages listed above.
//
EShLanguage FindLanguage(const std::string& name, bool parseStageName)
{ {
size_t ext = 0; std::string stage_name;
std::string suffix;
if (shaderStageName) {
if (shaderStageName) stage_name = shaderStageName;
suffix = shaderStageName; } else if (parseStageName) {
else { // Note: "first" extension means "first from the end", i.e.
// Search for a suffix on a filename: e.g, "myfile.frag". If given // if the file is named foo.vert.glsl, then "glsl" is first,
// the suffix directly, we skip looking for the '.' // "vert" is second.
if (parseSuffix) { size_t first_ext_start = name.find_last_of(".");
ext = name.rfind('.'); bool has_first_ext = first_ext_start != std::string::npos;
if (ext == std::string::npos) { size_t second_ext_start =
usage(); has_first_ext ? name.find_last_of(".", first_ext_start - 1) : std::string::npos;
return EShLangVertex; bool has_second_ext = second_ext_start != std::string::npos;
} bool uses_unified_ext = has_first_ext && (first_ext == "glsl" ||
++ext; first_ext == "hlsl");
std::string first_ext = name.substr(first_ext_start + 1, std::string::npos);
if (has_first_ext && !uses_unified_ext) {
stage_name = first_ext;
} else if (uses_unified_ext && has_second_ext) {
stage_name = name.substr(second_ext_start + 1, first_ext_start - second_ext_start - 1);
} else {
usage();
return EShLangVertex;
} }
suffix = name.substr(ext, std::string::npos);
} }
if (stage_name == "vert")
if (suffix == "vert")
return EShLangVertex; return EShLangVertex;
else if (suffix == "tesc") else if (stage_name == "tesc")
return EShLangTessControl; return EShLangTessControl;
else if (suffix == "tese") else if (stage_name == "tese")
return EShLangTessEvaluation; return EShLangTessEvaluation;
else if (suffix == "geom") else if (stage_name == "geom")
return EShLangGeometry; return EShLangGeometry;
else if (suffix == "frag") else if (stage_name == "frag")
return EShLangFragment; return EShLangFragment;
else if (suffix == "comp") else if (stage_name == "comp")
return EShLangCompute; return EShLangCompute;
usage(); usage();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment