Commit 937e6a5a by Nicolas Capens Committed by Nicolas Capens

Also copy shader info log on success.

Previously we only copied the GLSL shader compiler's info log on failure. This hid any warnings or debug info from the application. Bug chromium:845103 Change-Id: Ia1877a405db2017d327dfc68037596fbda1579fa Reviewed-on: https://swiftshader-review.googlesource.com/19009Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com>
parent 4b74373a
...@@ -22,7 +22,8 @@ TDiagnostics::TDiagnostics(TInfoSink& infoSink) : ...@@ -22,7 +22,8 @@ TDiagnostics::TDiagnostics(TInfoSink& infoSink) :
mShaderVersion(100), mShaderVersion(100),
mInfoSink(infoSink), mInfoSink(infoSink),
mNumErrors(0), mNumErrors(0),
mNumWarnings(0) mNumWarnings(0),
mNumInfos(0)
{ {
} }
...@@ -52,6 +53,10 @@ void TDiagnostics::writeInfo(Severity severity, ...@@ -52,6 +53,10 @@ void TDiagnostics::writeInfo(Severity severity,
++mNumWarnings; ++mNumWarnings;
prefix = EPrefixWarning; prefix = EPrefixWarning;
break; break;
case PP_INFO:
++mNumInfos;
prefix = EPrefixInfo;
break;
default: default:
UNREACHABLE(severity); UNREACHABLE(severity);
break; break;
......
...@@ -30,6 +30,7 @@ public: ...@@ -30,6 +30,7 @@ public:
int numErrors() const { return mNumErrors; } int numErrors() const { return mNumErrors; }
int numWarnings() const { return mNumWarnings; } int numWarnings() const { return mNumWarnings; }
int numInfos() const { return mNumInfos; }
void setShaderVersion(int version); void setShaderVersion(int version);
...@@ -52,6 +53,7 @@ private: ...@@ -52,6 +53,7 @@ private:
TInfoSink& mInfoSink; TInfoSink& mInfoSink;
int mNumErrors; int mNumErrors;
int mNumWarnings; int mNumWarnings;
int mNumInfos;
}; };
#endif // COMPILER_DIAGNOSTICS_H_ #endif // COMPILER_DIAGNOSTICS_H_
...@@ -18,6 +18,9 @@ void TInfoSinkBase::prefix(TPrefixType message) { ...@@ -18,6 +18,9 @@ void TInfoSinkBase::prefix(TPrefixType message) {
switch(message) { switch(message) {
case EPrefixNone: case EPrefixNone:
break; break;
case EPrefixInfo:
sink.append("INFO: ");
break;
case EPrefixWarning: case EPrefixWarning:
sink.append("WARNING: "); sink.append("WARNING: ");
break; break;
......
...@@ -30,6 +30,7 @@ inline float fractionalPart(float f) { ...@@ -30,6 +30,7 @@ inline float fractionalPart(float f) {
// //
enum TPrefixType { enum TPrefixType {
EPrefixNone, EPrefixNone,
EPrefixInfo,
EPrefixWarning, EPrefixWarning,
EPrefixError, EPrefixError,
EPrefixInternalError, EPrefixInternalError,
......
...@@ -224,6 +224,14 @@ void TParseContext::warning(const TSourceLoc& loc, ...@@ -224,6 +224,14 @@ void TParseContext::warning(const TSourceLoc& loc,
srcLoc, reason, token, extraInfo); srcLoc, reason, token, extraInfo);
} }
void TParseContext::info(const TSourceLoc& loc,
const char* reason, const char* token,
const char* extraInfo) {
pp::SourceLocation srcLoc(loc.first_file, loc.first_line);
mDiagnostics.writeInfo(pp::Diagnostics::PP_INFO,
srcLoc, reason, token, extraInfo);
}
void TParseContext::trace(const char* str) void TParseContext::trace(const char* str)
{ {
mDiagnostics.writeDebug(str); mDiagnostics.writeDebug(str);
......
...@@ -80,6 +80,8 @@ public: ...@@ -80,6 +80,8 @@ public:
const char* extraInfo=""); const char* extraInfo="");
void warning(const TSourceLoc &loc, const char* reason, const char* token, void warning(const TSourceLoc &loc, const char* reason, const char* token,
const char* extraInfo=""); const char* extraInfo="");
void info(const TSourceLoc &loc, const char* reason, const char* token,
const char* extraInfo="");
void trace(const char* str); void trace(const char* str);
void recover(); void recover();
TIntermNode *getTreeRoot() const { return mTreeRoot; } TIntermNode *getTreeRoot() const { return mTreeRoot; }
......
...@@ -30,6 +30,7 @@ public: ...@@ -30,6 +30,7 @@ public:
// Severity is used to classify info log messages. // Severity is used to classify info log messages.
enum Severity enum Severity
{ {
PP_INFO,
PP_WARNING, PP_WARNING,
PP_ERROR PP_ERROR
}; };
......
...@@ -240,11 +240,12 @@ void Shader::compile() ...@@ -240,11 +240,12 @@ void Shader::compile()
success = false; success = false;
} }
infoLog += compiler->getInfoSink().info.c_str();
if(!success) if(!success)
{ {
deleteShader(); deleteShader();
infoLog += compiler->getInfoSink().info.c_str();
TRACE("\n%s", infoLog.c_str()); TRACE("\n%s", infoLog.c_str());
} }
......
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