TYPE_SHADER,
TYPE_SHADERPROGRAM,
TYPE_SHADERSOURCE,
+ TYPE_SPIRVSOURCE,
TYPE_INFOLOG,
TYPE_EGLCONFIG,
TYPE_EGLCONFIGSET,
std::string source;
};
+class SpirVSource : public Item
+{
+public:
+ SpirVSource (void) : Item(TYPE_SPIRVSOURCE) {}
+ ~SpirVSource (void) {}
+
+ std::string source;
+};
+
class InfoLog : public Item
{
public:
dst << Writer::BeginElement("ShaderSource") << static_cast<const ri::ShaderSource&>(item).source << Writer::EndElement;
break;
+ case ri::TYPE_SPIRVSOURCE:
+ dst << Writer::BeginElement("SpirVAssemblySource") << static_cast<const ri::SpirVSource&>(item).source << Writer::EndElement;
+ break;
+
case ri::TYPE_INFOLOG:
dst << Writer::BeginElement("InfoLog") << static_cast<const ri::InfoLog&>(item).log << Writer::EndElement;
break;
{ 0x6c1415d9, "ComputeShader", ri::TYPE_SHADER },
{ 0x72863a54, "ShaderProgram", ri::TYPE_SHADERPROGRAM },
{ 0xb4efc08d, "ShaderSource", ri::TYPE_SHADERSOURCE },
+ { 0xaee4380a, "SpirVAssemblySource", ri::TYPE_SPIRVSOURCE },
{ 0xff265913, "InfoLog", ri::TYPE_INFOLOG },
{ 0x84159b73, "EglConfig", ri::TYPE_EGLCONFIG },
{ 0xdd34391f, "EglConfigSet", ri::TYPE_EGLCONFIGSET },
case ri::TYPE_SHADER:
{
if (parentType != ri::TYPE_SHADERPROGRAM)
- throw TestResultParseError("<VertexShader> outside of <ShaderProgram>");
+ throw TestResultParseError(string("<") + elemName + "> outside of <ShaderProgram>");
ri::Shader* shader = curList->allocItem<ri::Shader>();
break;
}
+ case ri::TYPE_SPIRVSOURCE:
+ {
+ if (parentType != ri::TYPE_SHADERPROGRAM)
+ throw TestResultParseError(string("<") + elemName + "> outside of <ShaderProgram>");
+ item = curList->allocItem<ri::SpirVSource>();
+ break;
+ }
+
case ri::TYPE_SHADERSOURCE:
if (parentType == ri::TYPE_SHADER)
item = &static_cast<ri::Shader*>(parentItem)->source;
m_xmlParser.appendDataStr(static_cast<ri::ShaderSource*>(curItem)->source);
break;
+ case ri::TYPE_SPIRVSOURCE:
+ m_xmlParser.appendDataStr(static_cast<ri::SpirVSource*>(curItem)->source);
+ break;
+
case ri::TYPE_INFOLOG:
m_xmlParser.appendDataStr(static_cast<ri::InfoLog*>(curItem)->log);
break;
tcu::TestLog& operator<< (tcu::TestLog& log, const SpirVProgramInfo& shaderInfo)
{
- log << tcu::TestLog::ShaderProgram(shaderInfo.compileOk , shaderInfo.infoLog) << tcu::TestLog::EndShaderProgram;
+ log << tcu::TestLog::ShaderProgram(shaderInfo.compileOk , shaderInfo.infoLog) << tcu::TestLog::SpirVAssemblySource(shaderInfo.source->program.str()) << tcu::TestLog::EndShaderProgram;
// Write statistics
log << tcu::TestLog::Float( "SpirVAssemblyTime",
throw LogWriteFailedError();
}
+void TestLog::writeSpirVAssemblySource (const char* source)
+{
+ if (qpTestLog_writeSpirVAssemblySource(m_log, source) == DE_FALSE)
+ throw LogWriteFailedError();
+}
+
void TestLog::writeKernelSource (const char* source)
{
if (qpTestLog_writeKernelSource(m_log, source) == DE_FALSE)
class LogSection;
class LogShaderProgram;
class LogShader;
+class LogSpirVAssemblySource;
class LogKernelSource;
class LogSampleList;
class LogValueInfo;
static const class EndSampleListToken {} EndSampleList;
// Typedefs.
- typedef LogImageSet ImageSet;
- typedef LogImage Image;
- typedef LogSection Section;
- typedef LogShaderProgram ShaderProgram;
- typedef LogShader Shader;
- typedef LogKernelSource KernelSource;
- typedef LogSampleList SampleList;
- typedef LogValueInfo ValueInfo;
- typedef LogNumber<float> Float;
- typedef LogNumber<deInt64> Integer;
+ typedef LogImageSet ImageSet;
+ typedef LogImage Image;
+ typedef LogSection Section;
+ typedef LogShaderProgram ShaderProgram;
+ typedef LogShader Shader;
+ typedef LogSpirVAssemblySource SpirVAssemblySource;
+ typedef LogKernelSource KernelSource;
+ typedef LogSampleList SampleList;
+ typedef LogValueInfo ValueInfo;
+ typedef LogNumber<float> Float;
+ typedef LogNumber<deInt64> Integer;
explicit TestLog (const char* fileName, deUint32 flags = 0);
~TestLog (void);
TestLog& operator<< (const ShaderProgram& shaderProgram);
TestLog& operator<< (const EndShaderProgramToken&);
TestLog& operator<< (const Shader& shader);
+ TestLog& operator<< (const SpirVAssemblySource& module);
TestLog& operator<< (const KernelSource& kernelSrc);
void startShaderProgram (bool linkOk, const char* linkInfoLog);
void endShaderProgram (void);
void writeShader (qpShaderType type, const char* source, bool compileOk, const char* infoLog);
-
+ void writeSpirVAssemblySource(const char* source);
void writeKernelSource (const char* source);
void writeCompileInfo (const char* name, const char* description, bool compileOk, const char* infoLog);
std::string m_infoLog;
};
+class LogSpirVAssemblySource
+{
+public:
+ LogSpirVAssemblySource (const std::string& source)
+ : m_source (source)
+ {
+ }
+
+ void write (TestLog& log) const;
+
+private:
+ std::string m_source;
+};
+
class LogKernelSource
{
public:
inline TestLog& TestLog::operator<< (const ShaderProgram& shaderProg) { shaderProg.write(*this); return *this; }
inline TestLog& TestLog::operator<< (const EndShaderProgramToken&) { endShaderProgram(); return *this; }
inline TestLog& TestLog::operator<< (const Shader& shader) { shader.write(*this); return *this; }
+inline TestLog& TestLog::operator<< (const SpirVAssemblySource& module) { module.write(*this); return *this; }
inline TestLog& TestLog::operator<< (const KernelSource& kernelSrc) { kernelSrc.write(*this); return *this; }
inline TestLog& TestLog::operator<< (const SampleList& sampleList) { sampleList.write(*this); return *this; }
inline TestLog& TestLog::operator<< (const SampleInfoToken&) { startSampleInfo(); return *this; }
log.writeShader(m_type, m_source.c_str(), m_compileOk, m_infoLog.c_str());
}
+inline void LogSpirVAssemblySource::write (TestLog& log) const
+{
+ log.writeSpirVAssemblySource(m_source.c_str());
+}
+
inline void LogKernelSource::write (TestLog& log) const
{
log.writeKernelSource(m_source.c_str());
char* string;
} qpKeyStringMap;
-static const char* LOG_FORMAT_VERSION = "0.3.3";
+static const char* LOG_FORMAT_VERSION = "0.3.4";
/* Mapping enum to above strings... */
static const qpKeyStringMap s_qpTestTypeMap[] =
}
/*--------------------------------------------------------------------*//*!
+ * \brief Write a SPIR-V module assembly source into the log.
+ *//*--------------------------------------------------------------------*/
+deBool qpTestLog_writeSpirVAssemblySource (qpTestLog* log, const char* source)
+{
+ DE_ASSERT(log);
+ DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM);
+ deMutex_lock(log->lock);
+
+ if (!qpXmlWriter_writeStringElement(log->writer, "SpirVAssemblySource", source))
+ {
+ qpPrintf("qpTestLog_writeSpirVAssemblySource(): Writing XML failed\n");
+ deMutex_unlock(log->lock);
+ return DE_FALSE;
+ }
+
+ deMutex_unlock(log->lock);
+ return DE_TRUE;
+}
+
+/*--------------------------------------------------------------------*//*!
* \brief Write OpenCL kernel compilation results into the log
*//*--------------------------------------------------------------------*/
deBool qpTestLog_writeCompileInfo (qpTestLog* log, const char* name, const char* description, deBool compileOk, const char* infoLog)
deBool qpTestLog_writeShader (qpTestLog* log, qpShaderType type, const char* source, deBool compileOk, const char* infoLog);
deBool qpTestLog_writeKernelSource (qpTestLog* log, const char* source);
+deBool qpTestLog_writeSpirVAssemblySource (qpTestLog* log, const char* source);
deBool qpTestLog_writeCompileInfo (qpTestLog* log, const char* name, const char* description, deBool compileOk, const char* infoLog);
deBool qpTestLog_startSampleList (qpTestLog* log, const char* name, const char* description);