/*--------------------------------------------------------------------*//*! * \brief Write a OpenGL ES shader into the log. * \param type Shader type * \param source Shader source * \param compileOk Shader compilation result, false on failure * \param infoLog Implementation provided shader compilation log *//*--------------------------------------------------------------------*/ deBool qpTestLog_writeShader (qpTestLog* log, qpShaderType type, const char* source, deBool compileOk, const char* infoLog) { const char* tagName = QP_LOOKUP_STRING(s_qpShaderTypeMap, type); const char* sourceStr = ((log->flags & QP_TEST_LOG_EXCLUDE_SHADER_SOURCES) == 0 || !compileOk) ? source : ""; int numShaderAttribs = 0; qpXmlAttribute shaderAttribs[4]; deMutex_lock(log->lock); DE_ASSERT(source); DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM); shaderAttribs[numShaderAttribs++] = qpSetStringAttrib("CompileStatus", compileOk ? "OK" : "Fail"); if (!qpXmlWriter_startElement(log->writer, tagName, numShaderAttribs, shaderAttribs) || !qpXmlWriter_writeStringElement(log->writer, "ShaderSource", sourceStr) || !qpXmlWriter_writeStringElement(log->writer, "InfoLog", infoLog) || !qpXmlWriter_endElement(log->writer, tagName)) { qpPrintf("qpTestLog_writeShader(): Writing XML failed\n"); deMutex_unlock(log->lock); return DE_FALSE; } deMutex_unlock(log->lock); return DE_TRUE; }
/*--------------------------------------------------------------------*//*! * \brief Write OpenCL compute kernel source into the log. *//*--------------------------------------------------------------------*/ deBool qpTestLog_writeKernelSource (qpTestLog* log, const char* source) { DE_ASSERT(log); deMutex_lock(log->lock); if (!qpXmlWriter_writeStringElement(log->writer, "KernelSource", source)) { qpPrintf("qpTestLog_writeKernelSource(): Writing XML failed\n"); deMutex_unlock(log->lock); return DE_FALSE; } deMutex_unlock(log->lock); return DE_TRUE; }
/*--------------------------------------------------------------------*//*! * \brief Write OpenCL compute kernel source into the log. *//*--------------------------------------------------------------------*/ deBool qpTestLog_writeKernelSource (qpTestLog* log, const char* source) { const char* sourceStr = (log->flags & QP_TEST_LOG_EXCLUDE_SHADER_SOURCES) != 0 ? "" : source; DE_ASSERT(log); deMutex_lock(log->lock); if (!qpXmlWriter_writeStringElement(log->writer, "KernelSource", sourceStr)) { qpPrintf("qpTestLog_writeKernelSource(): Writing XML failed\n"); deMutex_unlock(log->lock); return DE_FALSE; } deMutex_unlock(log->lock); return DE_TRUE; }
/*--------------------------------------------------------------------*//*! * \brief Write a SPIR-V module assembly source into the log. *//*--------------------------------------------------------------------*/ deBool qpTestLog_writeSpirVAssemblySource (qpTestLog* log, const char* source) { const char* const sourceStr = (log->flags & QP_TEST_LOG_EXCLUDE_SHADER_SOURCES) != 0 ? "" : source; deMutex_lock(log->lock); DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM); if (!qpXmlWriter_writeStringElement(log->writer, "SpirVAssemblySource", sourceStr)) { qpPrintf("qpTestLog_writeSpirVAssemblySource(): Writing XML failed\n"); deMutex_unlock(log->lock); return DE_FALSE; } deMutex_unlock(log->lock); return DE_TRUE; }
deBool qpTestLog_writeValueInteger (qpTestLog* log, deInt64 value) { char tmpString[64]; int64ToString(value, tmpString); deMutex_lock(log->lock); DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SAMPLE); if (!qpXmlWriter_writeStringElement(log->writer, "Value", &tmpString[0])) { qpPrintf("qpTestLog_writeSampleValue(): Writing XML failed\n"); deMutex_unlock(log->lock); return DE_FALSE; } deMutex_unlock(log->lock); return DE_TRUE; }
deBool qpTestLog_writeValueFloat (qpTestLog* log, double value) { char tmpString[512]; doubleToString(value, tmpString, (int)sizeof(tmpString)); deMutex_lock(log->lock); DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SAMPLE); if (!qpXmlWriter_writeStringElement(log->writer, "Value", &tmpString[0])) { qpPrintf("qpTestLog_writeSampleValue(): Writing XML failed\n"); deMutex_unlock(log->lock); return DE_FALSE; } deMutex_unlock(log->lock); return DE_TRUE; }
/*--------------------------------------------------------------------*//*! * \brief Write a OpenGL ES shader program into the log. * \param linkOk Shader program link result, false on failure * \param linkInfoLog Implementation provided linkage log *//*--------------------------------------------------------------------*/ deBool qpTestLog_startShaderProgram (qpTestLog* log, deBool linkOk, const char* linkInfoLog) { qpXmlAttribute programAttribs[4]; int numProgramAttribs = 0; DE_ASSERT(log); deMutex_lock(log->lock); programAttribs[numProgramAttribs++] = qpSetStringAttrib("LinkStatus", linkOk ? "OK" : "Fail"); if (!qpXmlWriter_startElement(log->writer, "ShaderProgram", numProgramAttribs, programAttribs) || !qpXmlWriter_writeStringElement(log->writer, "InfoLog", linkInfoLog)) { qpPrintf("qpTestLog_startShaderProgram(): Writing XML failed\n"); deMutex_unlock(log->lock); return DE_FALSE; } DE_ASSERT(ContainerStack_push(&log->containerStack, CONTAINERTYPE_SHADERPROGRAM)); 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) { int numAttribs = 0; qpXmlAttribute attribs[3]; DE_ASSERT(log && name && description && infoLog); deMutex_lock(log->lock); attribs[numAttribs++] = qpSetStringAttrib("Name", name); attribs[numAttribs++] = qpSetStringAttrib("Description", description); attribs[numAttribs++] = qpSetStringAttrib("CompileStatus", compileOk ? "OK" : "Fail"); if (!qpXmlWriter_startElement(log->writer, "CompileInfo", numAttribs, attribs) || !qpXmlWriter_writeStringElement(log->writer, "InfoLog", infoLog) || !qpXmlWriter_endElement(log->writer, "CompileInfo")) { qpPrintf("qpTestLog_writeCompileInfo(): Writing XML failed\n"); deMutex_unlock(log->lock); return DE_FALSE; } deMutex_unlock(log->lock); return DE_TRUE; }