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
					
				@ -412,7 +412,26 @@ void StderrIfNonEmpty(const char* str)
 | 
			
		||||
struct ShaderCompUnit {
 | 
			
		||||
    EShLanguage stage;
 | 
			
		||||
    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) {
 | 
			
		||||
        const auto &compUnit = *it;
 | 
			
		||||
        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
 | 
			
		||||
            shader->setEntryPoint(entryPointName);
 | 
			
		||||
        shaders.push_back(shader);
 | 
			
		||||
 | 
			
		||||
@ -116,9 +116,12 @@ bool HlslParseContext::parseShaderStrings(TPpContext& ppContext, TInputScanner&
 | 
			
		||||
 | 
			
		||||
    HlslScanContext scanContext(*this, ppContext);
 | 
			
		||||
    HlslGrammar grammar(scanContext, *this);
 | 
			
		||||
    if (! grammar.parse())
 | 
			
		||||
        printf("HLSL translation failed.\n");
 | 
			
		||||
 | 
			
		||||
    if (!grammar.parse())
 | 
			
		||||
    {
 | 
			
		||||
        //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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user