Merge branch 'nicebyte-glsl-ext'

This commit is contained in:
John Kessenich 2018-04-17 17:24:03 -06:00
commit fccbb8b40a

View File

@ -1196,38 +1196,46 @@ int C_DECL main(int argc, char* argv[])
// .frag = fragment
// .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 suffix;
std::string stageName;
if (shaderStageName)
suffix = shaderStageName;
else {
// Search for a suffix on a filename: e.g, "myfile.frag". If given
// the suffix directly, we skip looking for the '.'
if (parseSuffix) {
ext = name.rfind('.');
if (ext == std::string::npos) {
usage();
return EShLangVertex;
}
++ext;
stageName = shaderStageName;
else if (parseStageName) {
// Note: "first" extension means "first from the end", i.e.
// if the file is named foo.vert.glsl, then "glsl" is first,
// "vert" is second.
size_t firstExtStart = name.find_last_of(".");
bool hasFirstExt = firstExtStart != std::string::npos;
size_t secondExtStart = hasFirstExt ? name.find_last_of(".", firstExtStart - 1) : std::string::npos;
bool hasSecondExt = secondExtStart != std::string::npos;
std::string firstExt = name.substr(firstExtStart + 1, std::string::npos);
bool usesUnifiedExt = hasFirstExt && (firstExt == "glsl" || firstExt == "hlsl");
if (hasFirstExt && !usesUnifiedExt) {
stageName = firstExt;
} else if (usesUnifiedExt && hasSecondExt) {
stageName = name.substr(secondExtStart + 1, firstExtStart - secondExtStart - 1);
} else {
usage();
return EShLangVertex;
}
suffix = name.substr(ext, std::string::npos);
}
} else
stageName = name;
if (suffix == "vert")
if (stageName == "vert")
return EShLangVertex;
else if (suffix == "tesc")
else if (stageName == "tesc")
return EShLangTessControl;
else if (suffix == "tese")
else if (stageName == "tese")
return EShLangTessEvaluation;
else if (suffix == "geom")
else if (stageName == "geom")
return EShLangGeometry;
else if (suffix == "frag")
else if (stageName == "frag")
return EShLangFragment;
else if (suffix == "comp")
else if (stageName == "comp")
return EShLangCompute;
usage();