Lines Matching defs:const

70 static const int MAX_RENDER_WIDTH			= 32;
71 static const int MAX_RENDER_HEIGHT = 32;
72 static const int MAX_NUM_SAMPLER_UNIFORMS = 16;
74 static const glu::DataType s_testDataTypes[] =
110 static inline int getGLInt (const glw::Functions& funcs, const deUint32 name)
117 static inline tcu::Vec4 vec4FromPtr (const float* const ptr)
125 static inline string beforeLast (const string& str, const char c)
130 static inline void fillWithColor (const tcu::PixelBufferAccess& access, const tcu::Vec4& color)
138 static inline int getSamplerNumLookupDimensions (const glu::DataType type)
169 static inline glu::DataType getSamplerLookupReturnType (const glu::DataType type)
203 static bool dataTypeEquals (const glu::DataType t)
209 static bool dataTypeIsMatrixWithNRows (const glu::DataType t)
214 static bool typeContainsMatchingBasicType (const glu::VarType& type, const dataTypePredicate predicate)
223 const StructType& structType = *type.getStructPtr();
231 static void getDistinctSamplerTypes (vector<glu::DataType>& dst, const glu::VarType& type)
235 const glu::DataType basicType = type.getBasicType();
244 const StructType& structType = *type.getStructPtr();
250 static int getNumSamplersInType (const glu::VarType& type)
259 const StructType& structType = *type.getStructPtr();
267 static glu::VarType generateRandomType (const int maxDepth, int& curStructIdx, vector<const StructType*>& structTypesDst, Random& rnd)
269 const bool isStruct = maxDepth > 0 && rnd.getFloat() < 0.2f;
270 const bool isArray = rnd.getFloat() < 0.3f;
274 const int numMembers = rnd.getInt(1, 5);
275 StructType* const structType = new StructType(("structType" + de::toString(curStructIdx++)).c_str());
285 const glu::DataType basicType = (glu::DataType)s_testDataTypes[rnd.getInt(0, DE_LENGTH_OF_ARRAY(s_testDataTypes)-1)];
286 const glu::Precision precision = glu::isDataTypeBoolOrBVec(basicType) ? glu::PRECISION_LAST : glu::PRECISION_MEDIUMP;
331 Uniform (const char* const name_, const glu::VarType& type_) : name(name_), type(type_) {}
338 int getNumUniforms (void) const { return (int)m_uniforms.size(); }
339 int getNumStructTypes (void) const { return (int)m_structTypes.size(); }
340 Uniform& getUniform (const int ndx) { return m_uniforms[ndx]; }
341 const Uniform& getUniform (const int ndx) const { return m_uniforms[ndx]; }
342 const StructType* getStructType (const int ndx) const { return m_structTypes[ndx]; }
343 void addUniform (const Uniform& uniform) { m_uniforms.push_back(uniform); }
344 void addStructType (const StructType* const type) { m_structTypes.push_back(type); }
366 bool containsMatchingBasicType (const dataTypePredicate predicate) const
374 vector<glu::DataType> getSamplerTypes (void) const
382 bool containsSeveralSamplerTypes (void) const
387 int getNumSamplers (void) const
395 static UniformCollection* basic (const glu::DataType type, const char* const nameSuffix = "")
397 UniformCollection* const res = new UniformCollection;
398 const glu::Precision prec = glu::isDataTypeBoolOrBVec(type) ? glu::PRECISION_LAST : glu::PRECISION_MEDIUMP;
403 static UniformCollection* basicArray (const glu::DataType type, const char* const nameSuffix = "")
405 UniformCollection* const res = new UniformCollection;
406 const glu::Precision prec = glu::isDataTypeBoolOrBVec(type) ? glu::PRECISION_LAST : glu::PRECISION_MEDIUMP;
411 static UniformCollection* basicStruct (const glu::DataType type0, const glu::DataType type1, const bool containsArrays, const char* const nameSuffix = "")
413 UniformCollection* const res = new UniformCollection;
414 const glu::Precision prec0 = glu::isDataTypeBoolOrBVec(type0) ? glu::PRECISION_LAST : glu::PRECISION_MEDIUMP;
415 const glu::Precision prec1 = glu::isDataTypeBoolOrBVec(type1) ? glu::PRECISION_LAST : glu::PRECISION_MEDIUMP;
417 StructType* const structType = new StructType((string("structType") + nameSuffix).c_str());
432 static UniformCollection* structInArray (const glu::DataType type0, const glu::DataType type1, const bool containsArrays, const char* const nameSuffix = "")
434 UniformCollection* const res = basicStruct(type0, type1, containsArrays, nameSuffix);
439 static UniformCollection* nestedArraysStructs (const glu::DataType type0, const glu::DataType type1, const char* const nameSuffix = "")
441 UniformCollection* const res = new UniformCollection;
442 const glu::Precision prec0 = glu::isDataTypeBoolOrBVec(type0) ? glu::PRECISION_LAST : glu::PRECISION_MEDIUMP;
443 const glu::Precision prec1 = glu::isDataTypeBoolOrBVec(type1) ? glu::PRECISION_LAST : glu::PRECISION_MEDIUMP;
444 StructType* const structType = new StructType((string("structType") + nameSuffix).c_str());
445 StructType* const subStructType = new StructType((string("subStructType") + nameSuffix).c_str());
446 StructType* const subSubStructType = new StructType((string("subSubStructType") + nameSuffix).c_str());
468 static UniformCollection* multipleBasic (const char* const nameSuffix = "")
470 static const glu::DataType types[] = { glu::TYPE_FLOAT, glu::TYPE_INT_VEC3, glu::TYPE_UINT_VEC4, glu::TYPE_FLOAT_MAT3, glu::TYPE_BOOL_VEC2 };
471 UniformCollection* const res = new UniformCollection;
475 UniformCollection* const sub = basic(types[i], ("_" + de::toString(i) + nameSuffix).c_str());
483 static UniformCollection* multipleBasicArray (const char* const nameSuffix = "")
485 static const glu::DataType types[] = { glu::TYPE_FLOAT, glu::TYPE_INT_VEC3, glu::TYPE_BOOL_VEC2 };
486 UniformCollection* const res = new UniformCollection;
490 UniformCollection* const sub = basicArray(types[i], ("_" + de::toString(i) + nameSuffix).c_str());
498 static UniformCollection* multipleNestedArraysStructs (const char* const nameSuffix = "")
500 static const glu::DataType types0[] = { glu::TYPE_FLOAT, glu::TYPE_INT, glu::TYPE_BOOL_VEC4 };
501 static const glu::DataType types1[] = { glu::TYPE_FLOAT_VEC4, glu::TYPE_INT_VEC4, glu::TYPE_BOOL };
502 UniformCollection* const res = new UniformCollection;
508 UniformCollection* const sub = nestedArraysStructs(types0[i], types1[i], ("_" + de::toString(i) + nameSuffix).c_str());
516 static UniformCollection* random (const deUint32 seed)
519 const int numUniforms = rnd.getInt(1, 5);
521 UniformCollection* const res = new UniformCollection;
525 vector<const StructType*> structTypes;
549 UniformCollection (const UniformCollection&); // Not allowed.
550 UniformCollection& operator= (const UniformCollection&); // Not allowed.
553 vector<const StructType*> m_structTypes;
558 static VarValue getSamplerFillValue (const VarValue& sampler)
589 static VarValue getSamplerUnitValue (const VarValue& sampler)
600 static glu::DataType getDataTypeTransposedMatrix (const glu::DataType original)
605 static VarValue getTransposeMatrix (const VarValue& original)
609 const int rows = glu::getDataTypeMatrixNumRows(original.type);
610 const int cols = glu::getDataTypeMatrixNumColumns(original.type);
621 static string shaderVarValueStr (const VarValue& value)
623 const int numElems = glu::getDataTypeScalarSize(value.type);
654 static string apiVarValueStr (const VarValue& value)
656 const int numElems = glu::getDataTypeScalarSize(value.type);
687 static VarValue generateRandomVarValue (const glu::DataType type, Random& rnd, int samplerUnit = -1 /* Used if type is a sampler type. \note Samplers' unit numbers are not randomized. */)
689 const int numElems = glu::getDataTypeScalarSize(type);
717 const glu::DataType texResultType = getSamplerLookupReturnType(type);
718 const glu::DataType texResultScalarType = glu::getDataTypeScalarType(texResultType);
719 const int texResultNumDims = glu::getDataTypeScalarSize(texResultType);
741 static VarValue generateZeroVarValue (const glu::DataType type)
743 const int numElems = glu::getDataTypeScalarSize(type);
769 const glu::DataType texResultType = getSamplerLookupReturnType(type);
770 const glu::DataType texResultScalarType = glu::getDataTypeScalarType(texResultType);
771 const int texResultNumDims = glu::getDataTypeScalarSize(texResultType);
793 static bool apiVarValueEquals (const VarValue& a, const VarValue& b)
795 const int size = glu::getDataTypeScalarSize(a.type);
796 const float floatThreshold = 0.05f;
835 static VarValue getRandomBoolRepresentation (const VarValue& boolValue, const glu::DataType targetScalarType, Random& rnd)
839 const int size = glu::getDataTypeScalarSize(boolValue.type);
840 const glu::DataType targetType = size == 1 ? targetScalarType : glu::getDataTypeVector(targetScalarType, size);
891 static const char* getCaseShaderTypeName (const CaseShaderType type)
904 static CaseShaderType randomCaseShaderType (const deUint32 seed)
941 UniformCase (Context& context, const char* name, const char* description, CaseShaderType caseType, const SharedPtr<const UniformCollection>& uniformCollection, deUint32 features);
942 UniformCase (Context& context, const char* name, const char* description, deUint32 seed); // \note Randomizes caseType, uniformCollection and features.
963 BasicUniform (const char* const name_,
964 const glu::DataType type_,
965 const bool isUsedInShader_,
966 const VarValue& finalValue_,
967 const char* const rootName_ = DE_NULL,
968 const int elemNdx_ = -1,
969 const int rootSize_ = 1)
980 static vector<BasicUniform>::const_iterator findWithName (const vector<BasicUniform>& vec, const char* const name)
1001 BasicUniformReportRef (const char* const name_, const int minS, const int maxS, const glu::DataType type_, const bool used)
1003 BasicUniformReportRef (const char* const name_, const glu::DataType type_, const bool used)
1017 BasicUniformReportGL (const char* const name_, const int nameLength_, const int size_, const glu::DataType type_, const int index_)
1020 static vector<BasicUniformReportGL>::const_iterator findWithName (const vector<BasicUniformReportGL>& vec, const char* const name)
1032 bool getActiveUniforms (vector<BasicUniformReportGL>& dst, const vector<BasicUniformReportRef>& ref, deUint32 programGL);
1034 bool getActiveUniformsiv (vector<BasicUniformReportGL>& dst, const vector<BasicUniformReportRef>& ref, deUint32 programGL);
1036 bool uniformVsUniformsivComparison (const vector<BasicUniformReportGL>& uniformsResult, const vector<BasicUniformReportGL>& uniformsivResult);
1038 bool getUniforms (vector<VarValue>& valuesDst, const vector<BasicUniform>& basicUniforms, deUint32 programGL);
1040 bool checkUniformDefaultValues (const vector<VarValue>& values, const vector<BasicUniform>& basicUniforms);
1042 void assignUniforms (const vector<BasicUniform>& basicUniforms, deUint32 programGL, Random& rnd);
1044 bool compareUniformValues (const vector<VarValue>& values, const vector<BasicUniform>& basicUniforms);
1046 bool renderTest (const vector<BasicUniform>& basicUniforms, const ShaderProgram& program, Random& rnd);
1048 virtual bool test (const vector<BasicUniform>& basicUniforms, const vector<BasicUniformReportRef>& basicUniformReportsRef, const ShaderProgram& program, Random& rnd) = 0;
1050 const deUint32 m_features;
1051 const SharedPtr<const UniformCollection> m_uniformCollection;
1060 const glu::VarType& varType,
1061 const char* varName,
1064 Random& rnd) const;
1066 void writeUniformDefinitions (std::ostringstream& dst) const;
1067 void writeUniformCompareExpr (std::ostringstream& dst, const BasicUniform& uniform) const;
1068 void writeUniformComparisons (std::ostringstream& dst, const vector<BasicUniform>& basicUniforms, const char* variableName) const;
1070 string generateVertexSource (const vector<BasicUniform>& basicUniforms) const;
1071 string generateFragmentSource (const vector<BasicUniform>& basicUniforms) const;
1073 void setupTexture (const VarValue& value);
1075 const CaseShaderType m_caseShaderType;
1082 deUint32 UniformCase::randomFeatures (const deUint32 seed)
1084 static const deUint32 arrayUsageChoices[] = { 0, FEATURE_ARRAYUSAGE_ONLY_MIDDLE_INDEX };
1085 static const deUint32 uniformFuncChoices[] = { 0, FEATURE_UNIFORMFUNC_VALUE };
1086 static const deUint32 matrixModeChoices[] = { 0, FEATURE_MATRIXMODE_ROWMAJOR };
1087 static const deUint32 arrayAssignChoices[] = { 0, FEATURE_ARRAYASSIGN_FULL, FEATURE_ARRAYASSIGN_BLOCKS_OF_TWO };
1088 static const deUint32 uniformUsageChoices[] = { 0, FEATURE_UNIFORMUSAGE_EVERY_OTHER };
1089 static const deUint32 booleanApiTypeChoices[] = { 0, FEATURE_BOOLEANAPITYPE_INT, FEATURE_BOOLEANAPITYPE_UINT };
1090 static const deUint32 uniformValueChoices[] = { 0, FEATURE_UNIFORMVALUE_ZERO };
1111 UniformCase::UniformCase (Context& context, const char* const name, const char* const description, const CaseShaderType caseShaderType, const SharedPtr<const UniformCollection>& uniformCollection, const deUint32 features)
1120 UniformCase::UniformCase (Context& context, const char* name, const char* description, const deUint32 seed)
1132 const glw::Functions& funcs = m_context.getRenderContext().getFunctions();
1133 const int numSamplerUniforms = m_uniformCollection->getNumSamplers();
1134 const int vertexTexUnitsRequired = m_caseShaderType != CASESHADERTYPE_FRAGMENT ? numSamplerUniforms : 0;
1135 const int fragmentTexUnitsRequired = m_caseShaderType != CASESHADERTYPE_VERTEX ? numSamplerUniforms : 0;
1136 const int combinedTexUnitsRequired = vertexTexUnitsRequired + fragmentTexUnitsRequired;
1137 const int vertexTexUnitsSupported = getGLInt(funcs, GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS);
1138 const int fragmentTexUnitsSupported = getGLInt(funcs, GL_MAX_TEXTURE_IMAGE_UNITS);
1139 const int combinedTexUnitsSupported = getGLInt(funcs, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS);
1172 void UniformCase::generateBasicUniforms (vector<BasicUniform>& basicUniformsDst, vector<BasicUniformReportRef>& basicUniformReportsDst, const glu::VarType& varType, const char* const varName, const bool isParentActive, int& samplerUnitCounter, Random& rnd) const
1176 const bool isActive = isParentActive && (m_features & FEATURE_UNIFORMUSAGE_EVERY_OTHER ? basicUniformsDst.size() % 2 == 0 : true);
1177 const glu::DataType type = varType.getBasicType();
1178 const VarValue value = m_features & FEATURE_UNIFORMVALUE_ZERO ? generateZeroVarValue(type)
1187 const int size = varType.getArraySize();
1188 const string arrayRootName = string("") + varName + "[0]";
1193 const string indexedName = string("") + varName + "[" + de::toString(elemNdx) + "]";
1194 const bool isCurElemActive = isParentActive &&
1203 const glu::DataType elemBasicType = varType.getElementType().getBasicType();
1204 const VarValue value = m_features & FEATURE_UNIFORMVALUE_ZERO ? generateZeroVarValue(elemBasicType)
1226 const StructType& structType = *varType.getStructPtr();
1230 const glu::StructMember& member = structType.getMember(i);
1231 const string memberFullName = string("") + varName + "." + member.getName();
1238 void UniformCase::writeUniformDefinitions (std::ostringstream& dst) const
1249 static const struct
1252 const char* definition;
1282 const vector<glu::DataType> samplerTypes = m_uniformCollection->getSamplerTypes();
1286 const dataTypePredicate (&typeReq)[2] = compareFuncs[compFuncNdx].requiringTypes;
1293 const glu::DataType retType = getSamplerLookupReturnType(samplerTypes[i]);
1308 void UniformCase::writeUniformCompareExpr (std::ostringstream& dst, const BasicUniform& uniform) const
1318 void UniformCase::writeUniformComparisons (std::ostringstream& dst, const vector<BasicUniform>& basicUniforms, const char* const variableName) const
1322 const BasicUniform& unif = basicUniforms[i];
1335 string UniformCase::generateVertexSource (const vector<BasicUniform>& basicUniforms) const
1337 const bool isVertexCase = m_caseShaderType == CASESHADERTYPE_VERTEX || m_caseShaderType == CASESHADERTYPE_BOTH;
1362 string UniformCase::generateFragmentSource (const vector<BasicUniform>& basicUniforms) const
1364 const bool isFragmentCase = m_caseShaderType == CASESHADERTYPE_FRAGMENT || m_caseShaderType == CASESHADERTYPE_BOTH;
1390 void UniformCase::setupTexture (const VarValue& value)
1398 const int width = 32;
1399 const int height = 32;
1400 const tcu::Vec4 color = vec4FromPtr(&value.val.samplerV.fillColor.floatV[0]);
1448 bool UniformCase::getActiveUniforms (vector<BasicUniformReportGL>& basicUniformReportsDst, const vector<BasicUniformReportRef>& basicUniformReportsRef, const deUint32 programGL)
1470 const glu::DataType reportedType = glu::getDataTypeFromGLType(reportedTypeGL);
1471 const string reportedNameStr (&nameBuffer[0]);
1499 const BasicUniformReportRef& reference = basicUniformReportsRef[referenceNdx];
1533 const BasicUniformReportRef& expected = basicUniformReportsRef[i];
1544 bool UniformCase::getActiveUniformsiv (vector<BasicUniformReportGL>& basicUniformReportsDst, const vector<BasicUniformReportRef>& basicUniformReportsRef, const deUint32 programGL)
1548 vector<const char*> queryNamesC (basicUniformReportsRef.size());
1555 const string& name = basicUniformReportsRef[i].name;
1595 const BasicUniformReportRef& reference = basicUniformReportsRef[unifNdx];
1596 const int reportedIndex = validUniformIndices[validNdx];
1597 const int reportedNameLength = (int)uniformNameLengthBuf[validNdx];
1598 const int reportedSize = (int)uniformSizeBuf[validNdx];
1599 const glu::DataType reportedType = glu::getDataTypeFromGLType((deUint32)uniformTypeBuf[validNdx]);
1643 bool UniformCase::uniformVsUniformsivComparison (const vector<BasicUniformReportGL>& uniformResults, const vector<BasicUniformReportGL>& uniformsivResults)
1650 const BasicUniformReportGL& uniformResult = uniformResults[uniformResultNdx];
1651 const string& uniformName = uniformResult.name;
1652 const vector<BasicUniformReportGL>::const_iterator uniformsivResultIt = BasicUniformReportGL::findWithName(uniformsivResults, uniformName.c_str());
1656 const BasicUniformReportGL& uniformsivResult = *uniformsivResultIt;
1690 const BasicUniformReportGL& uniformsivResult = uniformsivResults[uniformsivResultNdx];
1691 const string& uniformsivName = uniformsivResult.name;
1692 const vector<BasicUniformReportGL>::const_iterator uniformsResultIt = BasicUniformReportGL::findWithName(uniformsivResults, uniformsivName.c_str());
1704 bool UniformCase::getUniforms (vector<VarValue>& valuesDst, const vector<BasicUniform>& basicUniforms, const deUint32 programGL)
1711 const BasicUniform& uniform = basicUniforms[unifNdx];
1712 const string queryName = m_features & FEATURE_ARRAY_FIRST_ELEM_NAME_NO_INDEX && uniform.elemNdx == 0 ? beforeLast(uniform.name, '[') : uniform.name;
1713 const int location = glGetUniformLocation(programGL, queryName.c_str());
1714 const int size = glu::getDataTypeScalarSize(uniform.type);
1781 bool UniformCase::checkUniformDefaultValues (const vector<VarValue>& values, const vector<BasicUniform>& basicUniforms)
1790 const BasicUniform& uniform = basicUniforms[unifNdx];
1791 const VarValue& unifValue = values[unifNdx];
1792 const int valSize = glu::getDataTypeScalarSize(uniform.type);
1837 void UniformCase::assignUniforms (const vector<BasicUniform>& basicUniforms, deUint32 programGL, Random& rnd)
1840 const bool transpose = (m_features & FEATURE_MATRIXMODE_ROWMAJOR) != 0;
1841 const GLboolean transposeGL = transpose ? GL_TRUE : GL_FALSE;
1842 const glu::DataType boolApiType = m_features & FEATURE_BOOLEANAPITYPE_INT ? glu::TYPE_INT
1848 const BasicUniform& uniform = basicUniforms[unifNdx];
1849 const bool isArrayMember = uniform.elemNdx >= 0;
1850 const string queryName = m_features & FEATURE_ARRAY_FIRST_ELEM_NAME_NO_INDEX && uniform.elemNdx == 0 ? beforeLast(uniform.name, '[') : uniform.name;
1851 const int numValuesToAssign = !isArrayMember ? 1
1865 const int location = glGetUniformLocation(programGL, queryName.c_str());
1866 const int typeSize = glu::getDataTypeScalarSize(uniform.type);
1867 const bool assignByValue = m_features & FEATURE_UNIFORMFUNC_VALUE && !glu::isDataTypeMatrix(uniform.type) && numValuesToAssign == 1;
1872 const string curName = isArrayMember ? beforeLast(uniform.rootName, '[') + "[" + de::toString(uniform.elemNdx+i) + "]" : uniform.name;
1877 const vector<BasicUniform>::const_iterator elemUnif = BasicUniform::findWithName(basicUniforms, curName.c_str());
1885 const VarValue apiValue = glu::isDataTypeBoolOrBVec(unifValue.type) ? getRandomBoolRepresentation(unifValue, boolApiType, rnd)
1903 const float* const ptr = &valuesToAssign[0].val.floatV[0];
1961 const deInt32* const ptr = &valuesToAssign[0].val.intV[0];
1995 const deUint32* const ptr = &valuesToAssign[0].val.uintV[0];
2031 const GLint unit = uniform.finalValue.val.samplerV.unit;
2040 bool UniformCase::compareUniformValues (const vector<VarValue>& values, const vector<BasicUniform>& basicUniforms)
2047 const BasicUniform& uniform = basicUniforms[unifNdx];
2048 const VarValue& unifValue = values[unifNdx];
2065 bool UniformCase::renderTest (const vector<BasicUniform>& basicUniforms, const ShaderProgram& program, Random& rnd)
2068 const tcu::RenderTarget& renderTarget = m_context.getRenderTarget();
2069 const int viewportW = de::min(renderTarget.getWidth(), MAX_RENDER_WIDTH);
2070 const int viewportH = de::min(renderTarget.getHeight(), MAX_RENDER_HEIGHT);
2071 const int viewportX = rnd.getInt(0, renderTarget.getWidth() - viewportW);
2072 const int viewportY = rnd.getInt(0, renderTarget.getHeight() - viewportH);
2100 static const float position[] =
2107 static const deUint16 indices[] = { 0, 1, 2, 2, 1, 3 };
2109 const int posLoc = glGetAttribLocation(program.getProgram(), "a_position");
2153 const string vertexSource = generateVertexSource(basicUniforms);
2154 const string fragmentSource = generateFragmentSource(basicUniforms);
2155 const ShaderProgram program (m_context.getRenderContext(), glu::makeVtxFragSources(vertexSource, fragmentSource));
2167 const bool success = test(basicUniforms, basicUniformReportsRef, program, rnd);
2186 UniformInfoQueryCase (Context& context, const char* name, const char* description, CaseShaderType shaderType, const SharedPtr<const UniformCollection>& uniformCollection, CaseType caseType, deUint32 additionalFeatures = 0);
2187 bool test (const vector<BasicUniform>& basicUniforms, const vector<BasicUniformReportRef>& basicUniformReportsRef, const ShaderProgram& program, Random& rnd);
2189 static const char* getCaseTypeName (CaseType caseType);
2190 static const char* getCaseTypeDescription (CaseType caseType);
2193 const CaseType m_caseType;
2196 const char* UniformInfoQueryCase::getCaseTypeName (const CaseType caseType)
2209 const char* UniformInfoQueryCase::getCaseTypeDescription (const CaseType caseType)
2222 UniformInfoQueryCase::UniformInfoQueryCase (Context& context, const char* const name, const char* const description, const CaseShaderType shaderType, const SharedPtr<const UniformCollection>& uniformCollection, const CaseType caseType, const deUint32 additionalFeatures)
2228 bool UniformInfoQueryCase::test (const vector<BasicUniform>& basicUniforms, const vector<BasicUniformReportRef>& basicUniformReportsRef, const ShaderProgram& program, Random& rnd)
2233 const deUint32 programGL = program.getProgram();
2243 const ScopedLogSection section(log, "InfoGetActiveUniform", "Uniform information queries with glGetActiveUniform()");
2264 const ScopedLogSection section(log, "InfoGetActiveUniformsiv", "Uniform information queries with glGetUniformIndices() and glGetActiveUniformsiv()");
2285 const ScopedLogSection section(log, "CompareUniformVsUniformsiv", "Comparison of results from glGetActiveUniform() and glGetActiveUniformsiv()");
2322 const char* name,
2323 const char* description,
2325 const SharedPtr<const UniformCollection>& uniformCollection,
2331 bool test (const vector<BasicUniform>& basicUniforms, const vector<BasicUniformReportRef>& basicUniformReportsRef, const ShaderProgram& program, Random& rnd);
2333 static const char* getValueToCheckName (ValueToCheck valueToCheck);
2334 static const char* getValueToCheckDescription (ValueToCheck valueToCheck);
2335 static const char* getCheckMethodName (CheckMethod checkMethod);
2336 static const char* getCheckMethodDescription (CheckMethod checkMethod);
2337 static const char* getAssignMethodName (AssignMethod checkMethod);
2338 static const char* getAssignMethodDescription (AssignMethod checkMethod);
2341 const ValueToCheck m_valueToCheck;
2342 const CheckMethod m_checkMethod;
2345 const char* UniformValueCase::getValueToCheckName (const ValueToCheck valueToCheck)
2355 const char* UniformValueCase::getValueToCheckDescription (const ValueToCheck valueToCheck)
2365 const char* UniformValueCase::getCheckMethodName (const CheckMethod checkMethod)
2375 const char* UniformValueCase::getCheckMethodDescription (const CheckMethod checkMethod)
2385 const char* UniformValueCase::getAssignMethodName (const AssignMethod assignMethod)
2395 const char* UniformValueCase::getAssignMethodDescription (const AssignMethod assignMethod)
2406 const char* const name,
2407 const char* const description,
2408 const CaseShaderType shaderType,
2409 const SharedPtr<const UniformCollection>& uniformCollection,
2410 const ValueToCheck valueToCheck,
2411 const CheckMethod checkMethod,
2412 const AssignMethod assignMethod,
2413 const deUint32 additionalFeatures)
2422 bool UniformValueCase::test (const vector<BasicUniform>& basicUniforms, const vector<BasicUniformReportRef>& basicUniformReportsRef, const ShaderProgram& program, Random& rnd)
2426 const deUint32 programGL = program.getProgram();
2431 const ScopedLogSection section(log, "UniformAssign", "Uniform value assignments");
2442 const ScopedLogSection section(log, "GetUniforms", "Uniform value query");
2443 const bool success = getUniforms(values, basicUniforms, program.getProgram());
2451 const ScopedLogSection section(log, "ValueCheck", "Verify that the reported values match the assigned values");
2452 const bool success = compareUniformValues(values, basicUniforms);
2461 const ScopedLogSection section(log, "ValueCheck", "Verify that the uniforms have correct initial values (zeros)");
2462 const bool success = checkUniformDefaultValues(values, basicUniforms);
2472 const ScopedLogSection section(log, "RenderTest", "Render test");
2473 const bool success = renderTest(basicUniforms, program, rnd);
2485 RandomUniformCase (Context& m_context, const char* name, const char* description, deUint32 seed);
2487 bool test (const vector<BasicUniform>& basicUniforms, const vector<BasicUniformReportRef>& basicUniformReportsRef, const ShaderProgram& program, Random& rnd);
2490 RandomUniformCase::RandomUniformCase (Context& context, const char* const name, const char* const description, const deUint32 seed)
2495 bool RandomUniformCase::test (const vector<BasicUniform>& basicUniforms, const vector<BasicUniformReportRef>& basicUniformReportsRef, const ShaderProgram& program, Random& rnd)
2498 const bool renderingPossible = (m_features & FEATURE_UNIFORMVALUE_ZERO) == 0 || !m_uniformCollection->containsSeveralSamplerTypes();
2501 const bool performGetActiveUniformsiv = rnd.getBool();
2502 const bool performUniformVsUniformsivComparison = performGetActiveUniforms && performGetActiveUniformsiv && rnd.getBool();
2503 const bool performGetUniforms = rnd.getBool();
2504 const bool performCheckUniformDefaultValues = performGetUniforms && rnd.getBool();
2505 const bool performAssignUniforms = rnd.getBool();
2506 const bool performCompareUniformValues = performGetUniforms && performAssignUniforms && rnd.getBool();
2507 const bool performRenderTest = renderingPossible && performAssignUniforms && rnd.getBool();
2508 const deUint32 programGL = program.getProgram();
2517 const ScopedLogSection section(log, (SECTION_NAME), (SECTION_DESCRIPTION)); \
2518 const bool success = (CALL); \
2549 const ScopedLogSection section(log, "UniformAssign", "Uniform value assignments");
2583 SharedPtr<const UniformCollection> uniformCollection;
2585 UniformCollectionCase (const char* const name, const UniformCollection* uniformCollection_)
2631 const glu::DataType dataType = s_testDataTypes[dataTypeNdx];
2632 const char* const typeName = glu::getDataTypeName(dataType);
2646 const glu::DataType secondDataType = glu::isDataTypeScalar(dataType) ? glu::getDataTypeVector(dataType, 4)
2651 const char* const secondTypeName = glu::getDataTypeName(secondDataType);
2652 const string name = string("") + typeName + "_" + secondTypeName;
2667 TestCaseGroup* const infoQueryGroup = new TestCaseGroup(m_context, "info_query", "Test uniform info querying functions");
2671 const UniformInfoQueryCase::CaseType caseType = (UniformInfoQueryCase::CaseType)caseTypeI;
2672 TestCaseGroup* const caseTypeGroup = new TestCaseGroup(m_context, UniformInfoQueryCase::getCaseTypeName(caseType), UniformInfoQueryCase::getCaseTypeDescription(caseType));
2677 const int numArrayFirstElemNameCases = caseType == UniformInfoQueryCase::CASETYPE_INDICES_UNIFORMSIV && collectionGroupNdx == UNIFORMCOLLECTIONS_BASIC_ARRAY ? 2 : 1;
2681 const UniformCollectionGroup& collectionGroup = defaultUniformCollections[collectionGroupNdx];
2682 const string collectionGroupName = collectionGroup.name + (referToFirstArrayElemWithoutIndexI == 0 ? "" : "_first_elem_without_brackets");
2683 TestCaseGroup* const collectionTestGroup = new TestCaseGroup(m_context, collectionGroupName.c_str(), "");
2688 const UniformCollectionCase& collectionCase = collectionGroup.cases[collectionNdx];
2692 const string name = collectionCase.namePrefix + getCaseShaderTypeName((CaseShaderType)shaderType);
2693 const SharedPtr<const UniformCollection>& uniformCollection = collectionCase.uniformCollection;
2705 TestCaseGroup* const unusedUniformsGroup = new TestCaseGroup(m_context, "unused_uniforms", "Test with unused uniforms");
2708 const UniformCollectionGroup& collectionGroup = defaultUniformCollections[UNIFORMCOLLECTIONS_ARRAY_IN_STRUCT];
2712 const UniformCollectionCase& collectionCase = collectionGroup.cases[collectionNdx];
2713 const string collName = collectionCase.namePrefix;
2714 const SharedPtr<const UniformCollection>& uniformCollection = collectionCase.uniformCollection;
2718 const string name = collName + getCaseShaderTypeName((CaseShaderType)shaderType);
2730 TestCaseGroup* const valueGroup = new TestCaseGroup(m_context, "value", "Uniform value tests");
2736 TestCaseGroup* const initialValuesGroup = new TestCaseGroup(m_context,
2743 const UniformValueCase::CheckMethod checkMethod = (UniformValueCase::CheckMethod)checkMethodI;
2744 TestCaseGroup* const checkMethodGroup = new TestCaseGroup(m_context, UniformValueCase::getCheckMethodName(checkMethod), UniformValueCase::getCheckMethodDescription(checkMethod));
2749 const UniformCollectionGroup& collectionGroup = defaultUniformCollections[collectionGroupNdx];
2750 TestCaseGroup* const collectionTestGroup = new TestCaseGroup(m_context, collectionGroup.name.c_str(), "");
2755 const UniformCollectionCase& collectionCase = collectionGroup.cases[collectionNdx];
2756 const string collName = collectionCase.namePrefix;
2757 const SharedPtr<const UniformCollection>& uniformCollection = collectionCase.uniformCollection;
2758 const bool containsBooleans = uniformCollection->containsMatchingBasicType(glu::isDataTypeBoolOrBVec);
2759 const bool varyBoolApiType = checkMethod == UniformValueCase::CHECKMETHOD_GET_UNIFORM && containsBooleans &&
2761 const int numBoolVariations = varyBoolApiType ? 3 : 1;
2768 const deUint32 booleanTypeFeat = booleanTypeI == 1 ? UniformCase::FEATURE_BOOLEANAPITYPE_INT
2771 const char* const booleanTypeName = booleanTypeI == 1 ? "int"
2774 const string nameWithApiType = varyBoolApiType ? collName + "api_" + booleanTypeName + "_" : collName;
2778 const string name = nameWithApiType + getCaseShaderTypeName((CaseShaderType)shaderType);
2791 TestCaseGroup* const assignedValuesGroup = new TestCaseGroup(m_context,
2798 const UniformValueCase::AssignMethod assignMethod = (UniformValueCase::AssignMethod)assignMethodI;
2799 TestCaseGroup* const assignMethodGroup = new TestCaseGroup(m_context, UniformValueCase::getAssignMethodName(assignMethod), UniformValueCase::getAssignMethodDescription(assignMethod));
2804 const UniformValueCase::CheckMethod checkMethod = (UniformValueCase::CheckMethod)checkMethodI;
2805 TestCaseGroup* const checkMethodGroup = new TestCaseGroup(m_context, UniformValueCase::getCheckMethodName(checkMethod), UniformValueCase::getCheckMethodDescription(checkMethod));
2810 const int numArrayFirstElemNameCases = checkMethod == UniformValueCase::CHECKMETHOD_GET_UNIFORM && collectionGroupNdx == UNIFORMCOLLECTIONS_BASIC_ARRAY ? 2 : 1;
2814 const UniformCollectionGroup& collectionGroup = defaultUniformCollections[collectionGroupNdx];
2815 const string collectionGroupName = collectionGroup.name + (referToFirstArrayElemWithoutIndexI == 0 ? "" : "_first_elem_without_brackets");
2820 const UniformCollectionCase& collectionCase = collectionGroup.cases[collectionNdx];
2821 const string collName = collectionCase.namePrefix;
2822 const SharedPtr<const UniformCollection>& uniformCollection = collectionCase.uniformCollection;
2823 const bool containsBooleans = uniformCollection->containsMatchingBasicType(glu::isDataTypeBoolOrBVec);
2824 const bool varyBoolApiType = checkMethod == UniformValueCase::CHECKMETHOD_GET_UNIFORM && containsBooleans &&
2826 const int numBoolVariations = varyBoolApiType ? 3 : 1;
2827 const bool containsMatrices = uniformCollection->containsMatchingBasicType(glu::isDataTypeMatrix);
2828 const bool varyMatrixMode = containsMatrices &&
2830 const int numMatVariations = varyMatrixMode ? 2 : 1;
2837 const deUint32 booleanTypeFeat = booleanTypeI == 1 ? UniformCase::FEATURE_BOOLEANAPITYPE_INT
2840 const char* const booleanTypeName = booleanTypeI == 1 ? "int"
2843 const string nameWithBoolType = varyBoolApiType ? collName + "api_" + booleanTypeName + "_" : collName;
2847 const string nameWithMatrixType = nameWithBoolType + (matrixTypeI == 1 ? "row_major_" : "");
2851 const string name = nameWithMatrixType + getCaseShaderTypeName((CaseShaderType)shaderType);
2852 const deUint32 arrayFirstElemNameNoIndexFeat = referToFirstArrayElemWithoutIndexI == 0 ? 0 : UniformCase::FEATURE_ARRAY_FIRST_ELEM_NAME_NO_INDEX;
2876 static const struct
2879 const char* name;
2880 const char* description;
2890 const char* const groupName = arrayAssignGroups[arrayAssignGroupNdx].name;
2891 const char* const groupDesc = arrayAssignGroups[arrayAssignGroupNdx].description;
2893 TestCaseGroup* const curArrayAssignGroup = new TestCaseGroup(m_context, groupName, groupDesc);
2896 static const int basicArrayCollectionGroups[] = { UNIFORMCOLLECTIONS_BASIC_ARRAY, UNIFORMCOLLECTIONS_ARRAY_IN_STRUCT, UNIFORMCOLLECTIONS_MULTIPLE_BASIC_ARRAY };
2900 const UniformCollectionGroup& collectionGroup = defaultUniformCollections[basicArrayCollectionGroups[collectionGroupNdx]];
2901 TestCaseGroup* const collectionTestGroup = new TestCaseGroup(m_context, collectionGroup.name.c_str(), "");
2906 const UniformCollectionCase& collectionCase = collectionGroup.cases[collectionNdx];
2907 const string collName = collectionCase.namePrefix;
2908 const SharedPtr<const UniformCollection>& uniformCollection = collectionCase.uniformCollection;
2912 const string name = collName + getCaseShaderTypeName((CaseShaderType)shaderType);
2925 TestCaseGroup* const unusedUniformsGroup = new TestCaseGroup(m_context, "unused_uniforms", "Test with unused uniforms");
2928 const UniformCollectionGroup& collectionGroup = defaultUniformCollections[UNIFORMCOLLECTIONS_ARRAY_IN_STRUCT];
2932 const UniformCollectionCase& collectionCase = collectionGroup.cases[collectionNdx];
2933 const string collName = collectionCase.namePrefix;
2934 const SharedPtr<const UniformCollection>& uniformCollection = collectionCase.uniformCollection;
2938 const string name = collName + getCaseShaderTypeName((CaseShaderType)shaderType);
2951 const int numRandomCases = 100;
2952 TestCaseGroup* const randomGroup = new TestCaseGroup(m_context, "random", "Random cases");