Commit afe6e9c4 by dankbaker

HLSL and standalone, modifying Standalone to send filename as string source, and…

HLSL and standalone, modifying Standalone to send filename as string source, and HLSL backend will use this to print a better error mesage when things fail
parent 7fb66097
...@@ -412,7 +412,26 @@ void StderrIfNonEmpty(const char* str) ...@@ -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) ...@@ -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& ...@@ -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;
} }
......
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