Merge pull request #461 from dankbaker/Error_Message_Fixes_for_HLSL
HLSL: Better error message for when HLSL translation fails
This commit is contained in:
commit
98f164ec48
2 changed files with 27 additions and 5 deletions
|
|
@ -412,7 +412,26 @@ void StderrIfNonEmpty(const char* str)
|
||||||
struct ShaderCompUnit {
|
struct ShaderCompUnit {
|
||||||
EShLanguage stage;
|
EShLanguage stage;
|
||||||
std::string fileName;
|
std::string fileName;
|
||||||
char** text; // memory owned/managed externally
|
char** text; // memory owned/managed externally
|
||||||
|
const char* fileNameList[1];
|
||||||
|
|
||||||
|
//Need to have a special constructors to adjust the fileNameList, since back end needs a list of ptrs
|
||||||
|
ShaderCompUnit(EShLanguage istage, std::string &ifileName, char** itext)
|
||||||
|
{
|
||||||
|
stage = istage;
|
||||||
|
fileName = ifileName;
|
||||||
|
text = itext;
|
||||||
|
fileNameList[0] = fileName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
ShaderCompUnit(const ShaderCompUnit &rhs)
|
||||||
|
{
|
||||||
|
stage = rhs.stage;
|
||||||
|
fileName = rhs.fileName;
|
||||||
|
text = rhs.text;
|
||||||
|
fileNameList[0] = fileName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
@ -439,7 +458,7 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
|
||||||
for (auto it = compUnits.cbegin(); it != compUnits.cend(); ++it) {
|
for (auto it = compUnits.cbegin(); it != compUnits.cend(); ++it) {
|
||||||
const auto &compUnit = *it;
|
const auto &compUnit = *it;
|
||||||
glslang::TShader* shader = new glslang::TShader(compUnit.stage);
|
glslang::TShader* shader = new glslang::TShader(compUnit.stage);
|
||||||
shader->setStrings(compUnit.text, 1);
|
shader->setStringsWithLengthsAndNames(compUnit.text, NULL, compUnit.fileNameList, 1);
|
||||||
if (entryPointName) // HLSL todo: this needs to be tracked per compUnits
|
if (entryPointName) // HLSL todo: this needs to be tracked per compUnits
|
||||||
shader->setEntryPoint(entryPointName);
|
shader->setEntryPoint(entryPointName);
|
||||||
shaders.push_back(shader);
|
shaders.push_back(shader);
|
||||||
|
|
|
||||||
|
|
@ -116,9 +116,12 @@ bool HlslParseContext::parseShaderStrings(TPpContext& ppContext, TInputScanner&
|
||||||
|
|
||||||
HlslScanContext scanContext(*this, ppContext);
|
HlslScanContext scanContext(*this, ppContext);
|
||||||
HlslGrammar grammar(scanContext, *this);
|
HlslGrammar grammar(scanContext, *this);
|
||||||
if (! grammar.parse())
|
if (!grammar.parse())
|
||||||
printf("HLSL translation failed.\n");
|
{
|
||||||
|
//Print out a nicer error message that should be formated such that if you click on the message it will take you right to the line through most UIs
|
||||||
|
const glslang::TSourceLoc& sourceLoc = input.getSourceLoc();
|
||||||
|
printf("\n%s(%i): error at column %i, HLSL translation failed.\n", sourceLoc.name, sourceLoc.line, sourceLoc.column);
|
||||||
|
}
|
||||||
return numErrors == 0;
|
return numErrors == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue