Lines Matching refs:glu

61 static int getTypeSize (glu::DataType type)
63 if (type == glu::TYPE_FLOAT)
65 else if (type == glu::TYPE_INT || type == glu::TYPE_UINT)
67 else if (type == glu::TYPE_BOOL)
74 static int getVarTypeSize (const glu::VarType& type)
77 return glu::getDataTypeScalarSize(type.getBasicType()) * getTypeSize(glu::getDataTypeScalarType(type.getBasicType()));
87 if (type.getArraySize() == glu::VarType::UNSIZED_ARRAY)
222 Shader (const SharedPtr& enclosingNode, glu::ShaderType type, glu::GLSLVersion version)
230 const glu::ShaderType m_type;
231 const glu::GLSLVersion m_version;
249 StorageQualifier (const SharedPtr& enclosing, glu::Storage storage)
257 const glu::Storage m_storage;
263 Variable (const SharedPtr& enclosing, glu::DataType dataType)
276 const glu::DataType m_dataType;
342 LayoutQualifier (const SharedPtr& enclosing, const glu::Layout& layout)
353 const glu::Layout m_layout;
359 InterpolationQualifier (const SharedPtr& enclosing, const glu::Interpolation& interpolation)
370 const glu::Interpolation m_interpolation;
376 ShaderSet (const SharedPtr& enclosing, glu::GLSLVersion version);
378 void setStage (glu::ShaderType type, bool referencing);
379 bool isStagePresent (glu::ShaderType stage) const;
380 bool isStageReferencing (glu::ShaderType stage) const;
382 const glu::GLSLVersion m_version;
384 bool m_stagePresent[glu::SHADERTYPE_LAST];
385 bool m_stageReferencing[glu::SHADERTYPE_LAST];
388 ShaderSet::ShaderSet (const SharedPtr& enclosing, glu::GLSLVersion version)
398 void ShaderSet::setStage (glu::ShaderType type, bool referencing)
404 bool ShaderSet::isStagePresent (glu::ShaderType stage) const
406 DE_ASSERT(stage < glu::SHADERTYPE_LAST);
410 bool ShaderSet::isStageReferencing (glu::ShaderType stage) const
412 DE_ASSERT(stage < glu::SHADERTYPE_LAST);
430 static glu::Precision getDataTypeDefaultPrecision (const glu::DataType& type)
432 if (glu::isDataTypeBoolOrBVec(type))
433 return glu::PRECISION_LAST;
434 else if (glu::isDataTypeScalarOrVector(type) || glu::isDataTypeMatrix(type))
435 return glu::PRECISION_HIGHP;
436 else if (glu::isDataTypeSampler(type))
437 return glu::PRECISION_HIGHP;
438 else if (glu::isDataTypeImage(type))
439 return glu::PRECISION_HIGHP;
440 else if (type == glu::TYPE_UINT_ATOMIC_COUNTER)
441 return glu::PRECISION_HIGHP;
444 return glu::PRECISION_LAST;
465 const glu::DataType basicType = static_cast<const ResourceDefinition::Variable*>(resource)->m_dataType;
467 glu::VariableDeclaration variable (glu::VarType(basicType, getDataTypeDefaultPrecision(basicType)), "target");
468 glu::InterfaceBlock interfaceBlock;
474 if (glu::isDataTypeImage(basicType))
476 variable.memoryAccessQualifierBits |= glu::MEMORYACCESSQUALIFIER_READONLY_BIT;
479 if (basicType >= glu::TYPE_IMAGE_2D && basicType <= glu::TYPE_IMAGE_3D)
480 variable.layout.format = glu::FORMATLAYOUT_RGBA8;
481 else if (basicType >= glu::TYPE_INT_IMAGE_2D && basicType <= glu::TYPE_INT_IMAGE_3D)
482 variable.layout.format = glu::FORMATLAYOUT_RGBA8I;
483 else if (basicType >= glu::TYPE_UINT_IMAGE_2D && basicType <= glu::TYPE_UINT_IMAGE_3D)
484 variable.layout.format = glu::FORMATLAYOUT_RGBA8UI;
490 if (basicType == glu::TYPE_UINT_ATOMIC_COUNTER)
503 DE_ASSERT(variable.storage == glu::STORAGE_LAST);
508 DE_ASSERT(interfaceBlock.storage == glu::STORAGE_LAST);
517 glu::Layout* targetLayout = DE_NULL;
537 if (qualifier->m_layout.format != glu::FORMATLAYOUT_LAST)
540 if (qualifier->m_layout.matrixOrder != glu::MATRIXORDER_LAST)
570 arraySize = glu::VarType::UNSIZED_ARRAY;
575 variable.varType = glu::VarType(variable.varType, arraySize);
590 DE_ASSERT(variable.interpolation == glu::INTERPOLATION_LAST);
591 DE_ASSERT(variable.layout == glu::Layout());
593 DE_ASSERT(variable.storage == glu::STORAGE_LAST);
596 glu::StructType* structPtr = new glu::StructType(("StructType" + de::toString(structNdx++)).c_str());
599 variable = glu::VariableDeclaration(glu::VarType(structPtr), "target");
650 for (int shaderType = 0; shaderType < glu::SHADERTYPE_LAST; ++shaderType)
652 if (shaderDef->isStagePresent((glu::ShaderType)shaderType))
654 ProgramInterfaceDefinition::Shader* shader = program->addShader((glu::ShaderType)shaderType, shaderDef->m_version);
656 if (shaderDef->isStageReferencing((glu::ShaderType)shaderType))
728 for (int shaderType = 0; shaderType < glu::SHADERTYPE_LAST; ++shaderType)
729 if (shaderDef->isStagePresent((glu::ShaderType)shaderType))
730 program->addShader((glu::ShaderType)shaderType, shaderDef->m_version);
770 static void checkAndLogProgram (const glu::ShaderProgram& program, const ProgramInterfaceDefinition::Program* programDefinition, const glw::Functions& gl, tcu::TestLog& log)
830 const glu::ShaderProgram program (m_context.getRenderContext(), generateProgramInterfaceProgramSources(programDefinition.get()));
870 m_testCtx.getLog() << tcu::TestLog::Message << "Querying " << glu::getProgramInterfaceName(programInterface) << " interface:" << tcu::TestLog::EndMessage;
1122 return convertGLTypeNameToTestName(glu::getDataTypeName(variable->m_dataType));
1148 uniformType = std::string(" ") + glu::getStorageName(storageDef->m_storage);
1149 structureDescriptor << "\n\tdeclared as " << glu::getStorageName(storageDef->m_storage);
1165 buf << "Querying properties of " << glu::getDataTypeName(varDef->m_dataType) << uniformType << " variable.\n"
1167 << "\t" << glu::getDataTypeName(varDef->m_dataType)
1218 const glu::ShaderProgram program (m_context.getRenderContext(), glu::ProgramSources() << glu::ComputeSource(computeSource));
1344 const glu::ShaderProgram program (m_context.getRenderContext(), glu::ProgramSources() << glu::ComputeSource(computeSource));
1430 InterfaceBlockBaseCase (Context& context, const char* name, const char* description, glu::Storage storage, CaseType caseType);
1438 const glu::Storage m_storage;
1443 InterfaceBlockBaseCase::InterfaceBlockBaseCase (Context& context, const char* name, const char* description, glu::Storage storage, CaseType caseType)
1449 DE_ASSERT(storage == glu::STORAGE_UNIFORM || storage == glu::STORAGE_BUFFER);
1462 shader = m_program->addShader(glu::SHADERTYPE_COMPUTE, glu::GLSL_VERSION_310_ES);
1466 glu::InterfaceBlock precedingInterfaceBlock;
1473 precedingInterfaceBlock.variables.push_back(glu::VariableDeclaration(glu::VarType(glu::TYPE_FLOAT_VEC4, glu::PRECISION_HIGHP), "precedingMember"));
1476 if (m_storage == glu::STORAGE_BUFFER)
1477 precedingInterfaceBlock.variables.push_back(glu::VariableDeclaration(glu::VarType(glu::VarType(glu::TYPE_FLOAT, glu::PRECISION_HIGHP), glu::VarType::UNSIZED_ARRAY), "precedingMemberUnsizedArray"));
1479 precedingInterfaceBlock.variables.push_back(glu::VariableDeclaration(glu::VarType(glu::VarType(glu::TYPE_FLOAT, glu::PRECISION_HIGHP), 2), "precedingMemberArray"));
1486 glu::InterfaceBlock targetInterfaceBlock;
1502 targetInterfaceBlock.variables.push_back(glu::VariableDeclaration(glu::VarType(glu::TYPE_FLOAT_VEC4, glu::PRECISION_HIGHP), "blockMemberBasic"));
1507 targetInterfaceBlock.variables.push_back(glu::VariableDeclaration(glu::VarType(glu::VarType(glu::TYPE_FLOAT, glu::PRECISION_HIGHP), 3), "blockMemberArray"));
1512 glu::StructType* structPtr = new glu::StructType("StructType");
1513 structPtr->addMember("structMemberBasic", glu::VarType(glu::TYPE_FLOAT_VEC4, glu::PRECISION_HIGHP));
1514 structPtr->addMember("structMemberArray", glu::VarType(glu::VarType(glu::TYPE_FLOAT, glu::PRECISION_HIGHP), 2));
1516 targetInterfaceBlock.variables.push_back(glu::VariableDeclaration(glu::VarType(glu::VarType(structPtr), 2), "blockMemberStruct"));
1520 if (m_storage == glu::STORAGE_BUFFER)
1521 targetInterfaceBlock.variables.push_back(glu::VariableDeclaration(glu::VarType(glu::VarType(glu::TYPE_FLOAT, glu::PRECISION_HIGHP), glu::VarType::UNSIZED_ARRAY), "blockMemberUnsizedArray"));
1528 glu::InterfaceBlock trailingInterfaceBlock;
1534 trailingInterfaceBlock.variables.push_back(glu::VariableDeclaration(glu::VarType(glu::TYPE_FLOAT_VEC4, glu::PRECISION_HIGHP), "trailingMember"));
1551 InterfaceBlockActiveVariablesTestCase (Context& context, const char* name, const char* description, glu::Storage storage, CaseType caseType);
1557 InterfaceBlockActiveVariablesTestCase::InterfaceBlockActiveVariablesTestCase (Context& context, const char* name, const char* description, glu::Storage storage, CaseType caseType)
1564 const ProgramInterface programInterface = (m_storage == glu::STORAGE_UNIFORM) ? (PROGRAMINTERFACE_UNIFORM_BLOCK) :
1565 (m_storage == glu::STORAGE_BUFFER) ? (PROGRAMINTERFACE_SHADER_STORAGE_BLOCK) :
1568 const glw::GLenum programMemberInterfaceValue = (m_storage == glu::STORAGE_UNIFORM) ? (GL_UNIFORM) :
1569 (m_storage == glu::STORAGE_BUFFER) ? (GL_BUFFER_VARIABLE) :
1572 glu::ShaderProgram program (m_context.getRenderContext(), generateProgramInterfaceProgramSources(m_program));
1731 glu::InterfaceBlock* block = DE_NULL;
1732 const std::string blockName = glu::parseVariableName(blockNames[blockNdx].c_str());
1819 InterfaceBlockDataSizeTestCase (Context& context, const char* name, const char* description, glu::Storage storage, CaseType caseType);
1824 int getBlockMinDataSize (const glu::InterfaceBlock& block) const;
1827 InterfaceBlockDataSizeTestCase::InterfaceBlockDataSizeTestCase (Context& context, const char* name, const char* description, glu::Storage storage, CaseType caseType)
1834 const ProgramInterface programInterface = (m_storage == glu::STORAGE_UNIFORM) ? (PROGRAMINTERFACE_UNIFORM_BLOCK) :
1835 (m_storage == glu::STORAGE_BUFFER) ? (PROGRAMINTERFACE_SHADER_STORAGE_BLOCK) :
1839 glu::ShaderProgram program (m_context.getRenderContext(), generateProgramInterfaceProgramSources(m_program));
1893 const std::string blockName = glu::parseVariableName(blockFullName.c_str());
1941 shader = m_program->addShader(glu::SHADERTYPE_COMPUTE, glu::GLSL_VERSION_310_ES);
1944 glu::VariableDeclaration decl(glu::VarType(glu::TYPE_UINT_ATOMIC_COUNTER, glu::PRECISION_LAST), "binding1_counter1", glu::STORAGE_UNIFORM);
1949 glu::VariableDeclaration decl(glu::VarType(glu::TYPE_UINT_ATOMIC_COUNTER, glu::PRECISION_LAST), "binding1_counter2", glu::STORAGE_UNIFORM);
1956 glu::VariableDeclaration decl(glu::VarType(glu::TYPE_UINT_ATOMIC_COUNTER, glu::PRECISION_LAST), "binding2_counter1", glu::STORAGE_UNIFORM);
1977 glu::isDataTypeAtomicCounter(m_program->getShaders()[0]->getDefaultBlock().variables[ndx].varType.getBasicType()))
1994 glu::isDataTypeAtomicCounter(m_program->getShaders()[0]->getDefaultBlock().variables[ndx].varType.getBasicType()))
2018 glu::isDataTypeAtomicCounter(m_program->getShaders()[0]->getDefaultBlock().variables[ndx].varType.getBasicType()) &&
2034 glu::isDataTypeAtomicCounter(m_program->getShaders()[0]->getDefaultBlock().variables[ndx].varType.getBasicType()) &&
2063 const glu::ShaderProgram program(m_context.getRenderContext(), generateProgramInterfaceProgramSources(m_program));
2110 const glu::ShaderProgram program (m_context.getRenderContext(), generateProgramInterfaceProgramSources(m_program));
2330 const glu::ShaderProgram program (m_context.getRenderContext(), generateProgramInterfaceProgramSources(m_program));
2383 const glu::ShaderProgram program (m_context.getRenderContext(), generateProgramInterfaceProgramSources(m_program));
2467 glu::VariableDeclaration atomicVar(glu::VarType(glu::TYPE_UINT_ATOMIC_COUNTER, glu::PRECISION_LAST), "targetCounter", glu::STORAGE_UNIFORM);
2472 m_program->setSeparable(((m_presentStagesMask & (1 << glu::SHADERTYPE_VERTEX)) != 0) != ((m_presentStagesMask & (1 << glu::SHADERTYPE_FRAGMENT)) != 0));
2474 for (int shaderType = 0; shaderType < glu::SHADERTYPE_LAST; ++shaderType)
2477 m_program->addShader((glu::ShaderType)shaderType, glu::GLSL_VERSION_310_ES)->getDefaultBlock().variables.push_back(atomicVar);
2479 m_program->addShader((glu::ShaderType)shaderType, glu::GLSL_VERSION_310_ES);
2496 glu::ShaderType shaderType;
2499 { GL_REFERENCED_BY_VERTEX_SHADER, glu::SHADERTYPE_VERTEX },
2500 { GL_REFERENCED_BY_FRAGMENT_SHADER, glu::SHADERTYPE_FRAGMENT },
2501 { GL_REFERENCED_BY_COMPUTE_SHADER, glu::SHADERTYPE_COMPUTE },
2505 const glu::ShaderProgram program (m_context.getRenderContext(), generateProgramInterfaceProgramSources(m_program));
2518 m_testCtx.getLog() << tcu::TestLog::Message << "Verifying " << glu::getProgramResourcePropertyName(prop) << ", expecting " << glu::getBooleanName(expected) << tcu::TestLog::EndMessage;
2530 m_testCtx.getLog() << tcu::TestLog::Message << glu::getProgramResourcePropertyName(prop) << " = " << glu::getBooleanStr(value) << tcu::TestLog::EndMessage;
2554 ProgramInputOutputReferencedByCase (Context& context, const char* name, const char* description, glu::Storage targetStorage, CaseType caseType);
2563 const glu::Storage m_targetStorage;
2567 ProgramInputOutputReferencedByCase::ProgramInputOutputReferencedByCase (Context& context, const char* name, const char* description, glu::Storage targetStorage, CaseType caseType)
2587 const std::string varName = (m_targetStorage == glu::STORAGE_IN) ? ("shaderInput") : ("shaderOutput");
2588 const glu::VariableDeclaration targetDecl (glu::VarType(glu::TYPE_FLOAT_VEC4, glu::PRECISION_HIGHP), varName, m_targetStorage);
2591 m_program->addShader((m_caseType == CASE_SEPARABLE_VERTEX) ? (glu::SHADERTYPE_VERTEX) : (glu::SHADERTYPE_FRAGMENT), glu::GLSL_VERSION_310_ES)->getDefaultBlock().variables.push_back(targetDecl);
2595 ProgramInterfaceDefinition::Shader* vertex = m_program->addShader(glu::SHADERTYPE_VERTEX, glu::GLSL_VERSION_310_ES);
2596 ProgramInterfaceDefinition::Shader* fragment = m_program->addShader(glu::SHADERTYPE_FRAGMENT, glu::GLSL_VERSION_310_ES);
2600 vertex->getDefaultBlock().variables.push_back(glu::VariableDeclaration(glu::VarType(glu::TYPE_FLOAT_VEC4, glu::PRECISION_HIGHP), "shaderInput", glu::STORAGE_IN));
2601 vertex->getDefaultBlock().variables.push_back(glu::VariableDeclaration(glu::VarType(glu::TYPE_FLOAT_VEC4, glu::PRECISION_HIGHP), "shaderOutput", glu::STORAGE_OUT, glu::INTERPOLATION_LAST, glu::Layout(1)));
2603 fragment->getDefaultBlock().variables.push_back(glu::VariableDeclaration(glu::VarType(glu::TYPE_FLOAT_VEC4, glu::PRECISION_HIGHP), "shaderInput", glu::STORAGE_IN, glu::INTERPOLATION_LAST, glu::Layout(1)));
2604 fragment->getDefaultBlock().variables.push_back(glu::VariableDeclaration(glu::VarType(glu::TYPE_FLOAT_VEC4, glu::PRECISION_HIGHP), "shaderOutput", glu::STORAGE_OUT, glu::INTERPOLATION_LAST, glu::Layout(0)));
2623 glu::ShaderType shaderType;
2626 { GL_REFERENCED_BY_VERTEX_SHADER, glu::SHADERTYPE_VERTEX },
2627 { GL_REFERENCED_BY_FRAGMENT_SHADER, glu::SHADERTYPE_FRAGMENT },
2628 { GL_REFERENCED_BY_COMPUTE_SHADER, glu::SHADERTYPE_COMPUTE },
2632 const glu::ShaderProgram program (m_context.getRenderContext(), generateProgramInterfaceProgramSources(m_program));
2633 const std::string targetResourceName = (m_targetStorage == glu::STORAGE_IN) ? ("shaderInput") : ("shaderOutput");
2634 const glw::GLenum programGLInterface = (m_targetStorage == glu::STORAGE_IN) ? (GL_PROGRAM_INPUT) : (GL_PROGRAM_OUTPUT);
2658 const bool expected = (m_targetStorage == glu::STORAGE_IN) ?
2659 ((vertexPresent) ? (targetProps[propNdx].shaderType == glu::SHADERTYPE_VERTEX) : (targetProps[propNdx].shaderType == glu::SHADERTYPE_FRAGMENT)) :
2660 ((fragmentPresent) ? (targetProps[propNdx].shaderType == glu::SHADERTYPE_FRAGMENT) : (targetProps[propNdx].shaderType == glu::SHADERTYPE_VERTEX));
2664 m_testCtx.getLog() << tcu::TestLog::Message << "Verifying " << glu::getProgramResourcePropertyName(prop) << ", expecting " << ((expected) ? ("TRUE") : ("FALSE")) << tcu::TestLog::EndMessage;
2676 m_testCtx.getLog() << tcu::TestLog::Message << glu::getProgramResourcePropertyName(prop) << " = " << glu::getBooleanStr(value) << tcu::TestLog::EndMessage;
2712 const glu::ShaderProgram program (m_context.getRenderContext(), generateProgramInterfaceProgramSources(programDefinition.get()));
2758 int InterfaceBlockDataSizeTestCase::getBlockMinDataSize (const glu::InterfaceBlock& block) const
2768 static bool isDataTypeLayoutQualified (glu::DataType type)
2770 return glu::isDataTypeImage(type) || glu::isDataTypeAtomicCounter(type);
2778 glu::DataType dataType;
2781 { 0, glu::TYPE_FLOAT },
2782 { 1, glu::TYPE_INT },
2783 { 1, glu::TYPE_UINT },
2784 { 1, glu::TYPE_BOOL },
2786 { 3, glu::TYPE_FLOAT_VEC2 },
2787 { 1, glu::TYPE_FLOAT_VEC3 },
2788 { 1, glu::TYPE_FLOAT_VEC4 },
2790 { 3, glu::TYPE_INT_VEC2 },
2791 { 2, glu::TYPE_INT_VEC3 },
2792 { 3, glu::TYPE_INT_VEC4 },
2794 { 3, glu::TYPE_UINT_VEC2 },
2795 { 2, glu::TYPE_UINT_VEC3 },
2796 { 3, glu::TYPE_UINT_VEC4 },
2798 { 3, glu::TYPE_BOOL_VEC2 },
2799 { 2, glu::TYPE_BOOL_VEC3 },
2800 { 3, glu::TYPE_BOOL_VEC4 },
2802 { 2, glu::TYPE_FLOAT_MAT2 },
2803 { 3, glu::TYPE_FLOAT_MAT2X3 },
2804 { 3, glu::TYPE_FLOAT_MAT2X4 },
2805 { 2, glu::TYPE_FLOAT_MAT3X2 },
2806 { 2, glu::TYPE_FLOAT_MAT3 },
2807 { 3, glu::TYPE_FLOAT_MAT3X4 },
2808 { 2, glu::TYPE_FLOAT_MAT4X2 },
2809 { 3, glu::TYPE_FLOAT_MAT4X3 },
2810 { 2, glu::TYPE_FLOAT_MAT4 },
2838 glu::DataType dataType;
2841 { 0, glu::TYPE_SAMPLER_2D },
2842 { 2, glu::TYPE_SAMPLER_CUBE },
2843 { 1, glu::TYPE_SAMPLER_2D_ARRAY },
2844 { 1, glu::TYPE_SAMPLER_3D },
2845 { 2, glu::TYPE_SAMPLER_2D_SHADOW },
2846 { 3, glu::TYPE_SAMPLER_CUBE_SHADOW },
2847 { 3, glu::TYPE_SAMPLER_2D_ARRAY_SHADOW },
2848 { 1, glu::TYPE_INT_SAMPLER_2D },
2849 { 3, glu::TYPE_INT_SAMPLER_CUBE },
2850 { 3, glu::TYPE_INT_SAMPLER_2D_ARRAY },
2851 { 3, glu::TYPE_INT_SAMPLER_3D },
2852 { 2, glu::TYPE_UINT_SAMPLER_2D },
2853 { 3, glu::TYPE_UINT_SAMPLER_CUBE },
2854 { 3, glu::TYPE_UINT_SAMPLER_2D_ARRAY },
2855 { 3, glu::TYPE_UINT_SAMPLER_3D },
2856 { 2, glu::TYPE_SAMPLER_2D_MULTISAMPLE },
2857 { 2, glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE },
2858 { 3, glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE },
2859 { 1, glu::TYPE_IMAGE_2D },
2860 { 3, glu::TYPE_IMAGE_CUBE },
2861 { 3, glu::TYPE_IMAGE_2D_ARRAY },
2862 { 3, glu::TYPE_IMAGE_3D },
2863 { 3, glu::TYPE_INT_IMAGE_2D },
2864 { 3, glu::TYPE_INT_IMAGE_CUBE },
2865 { 1, glu::TYPE_INT_IMAGE_2D_ARRAY },
2866 { 3, glu::TYPE_INT_IMAGE_3D },
2867 { 2, glu::TYPE_UINT_IMAGE_2D },
2868 { 3, glu::TYPE_UINT_IMAGE_CUBE },
2869 { 3, glu::TYPE_UINT_IMAGE_2D_ARRAY },
2870 { 3, glu::TYPE_UINT_IMAGE_3D },
2871 { 1, glu::TYPE_UINT_ATOMIC_COUNTER },
2978 const ResourceDefinition::Node::SharedPtr uniform (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_UNIFORM));
3028 const ResourceDefinition::Node::SharedPtr variable(new ResourceDefinition::Variable(parentStructure, glu::TYPE_FLOAT_VEC4));
3047 static void generateBufferBackedVariableAggregateTypeCases (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* const targetGroup, ProgramInterface interface, ProgramResourcePropFlags targetProp, glu::DataType dataType, const std::string& nameSuffix, int depth)
3099 generateBufferBackedVariableAggregateTypeCases(context, parentStructure, blockGroup, queryTarget.interface, PROGRAMRESOURCEPROP_ARRAY_SIZE, glu::TYPE_FLOAT, "", 3);
3105 generateBufferBackedVariableAggregateTypeCases(context, parentStructure, targetGroup, queryTarget.interface, PROGRAMRESOURCEPROP_ARRAY_SIZE, glu::TYPE_FLOAT, "", 2);
3109 static void generateBufferBackedArrayStrideTypeAggregateSubCases (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* const targetGroup, const std::string& namePrefix, ProgramInterface interface, glu::DataType type, int expandLevel)
3130 static void generateBufferBackedArrayStrideTypeAggregateCases (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* const targetGroup, ProgramInterface interface, glu::DataType type, int expandLevel, bool includeBaseCase)
3134 const std::string namePrefix = glu::getDataTypeName(type);
3144 if (!glu::isDataTypeAtomicCounter(type))
3178 generateBufferBackedArrayStrideTypeAggregateCases(context, parentStructure, blockGroup, queryTarget.interface, glu::TYPE_SAMPLER_2D, 1, false);
3183 const ResourceDefinition::Node::SharedPtr layout(new ResourceDefinition::LayoutQualifier(parentStructure, glu::Layout(-1, 0)));
3184 generateBufferBackedArrayStrideTypeAggregateCases(context, layout, blockGroup, queryTarget.interface, glu::TYPE_UINT_ATOMIC_COUNTER, 1, false);
3188 generateBufferBackedArrayStrideTypeAggregateCases(context, parentStructure, blockGroup, queryTarget.interface, glu::TYPE_FLOAT, 2, false);
3191 generateBufferBackedArrayStrideTypeAggregateCases(context, parentStructure, blockGroup, queryTarget.interface, glu::TYPE_BOOL, 1, false);
3194 generateBufferBackedArrayStrideTypeAggregateCases(context, parentStructure, blockGroup, queryTarget.interface, glu::TYPE_BOOL_VEC3, 2, false);
3197 generateBufferBackedArrayStrideTypeAggregateCases(context, parentStructure, blockGroup, queryTarget.interface, glu::TYPE_FLOAT_VEC3, 2, false);
3200 generateBufferBackedArrayStrideTypeAggregateCases(context, parentStructure, blockGroup, queryTarget.interface, glu::TYPE_INT_VEC3, 2, false);
3230 const ResourceDefinition::Node::SharedPtr shader (new ResourceDefinition::Shader(program, glu::SHADERTYPE_COMPUTE, glu::GLSL_VERSION_310_ES));
3232 const ResourceDefinition::Node::SharedPtr uniform (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_UNIFORM));
3233 const ResourceDefinition::Node::SharedPtr binding (new ResourceDefinition::LayoutQualifier(uniform, glu::Layout(-1, 0)));
3237 const ResourceDefinition::Node::SharedPtr variable(new ResourceDefinition::Variable(uniform, glu::TYPE_FLOAT_VEC4));
3245 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(buffer, glu::TYPE_FLOAT_VEC4));
3253 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(buffer, glu::TYPE_FLOAT_VEC4));
3262 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(buffer, glu::TYPE_FLOAT_VEC4));
3282 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElement, glu::TYPE_UINT_ATOMIC_COUNTER));
3283 const ResourceDefinition::Node::SharedPtr elementvariable (new ResourceDefinition::Variable(arrayArrayElement, glu::TYPE_UINT_ATOMIC_COUNTER));
3304 generateBufferBackedVariableAggregateTypeCases(context, parentStructure, targetGroup, PROGRAMINTERFACE_UNIFORM, PROGRAMRESOURCEPROP_NAME_LENGTH, glu::TYPE_FLOAT, "", 2);
3306 generateBufferBackedVariableAggregateTypeCases(context, parentStructure, targetGroup, PROGRAMINTERFACE_UNIFORM, PROGRAMRESOURCEPROP_NAME_LENGTH, glu::TYPE_FLOAT, "", 1);
3367 const ResourceDefinition::Node::SharedPtr offset (new ResourceDefinition::LayoutQualifier(parentStructure, glu::Layout(-1, -1, 4)));
3369 const ResourceDefinition::Node::SharedPtr elementVariable (new ResourceDefinition::Variable(arrayElement, glu::TYPE_UINT_ATOMIC_COUNTER));
3379 const ResourceDefinition::Node::SharedPtr memberVariable (new ResourceDefinition::Variable(structMember, glu::TYPE_FLOAT));
3380 const ResourceDefinition::Node::SharedPtr elementVariable (new ResourceDefinition::Variable(arrayElement, glu::TYPE_FLOAT));
3408 const ResourceDefinition::Node::SharedPtr memberVariable (new ResourceDefinition::Variable(structMember, glu::TYPE_FLOAT));
3409 const ResourceDefinition::Node::SharedPtr elementVariable (new ResourceDefinition::Variable(arrayElement, glu::TYPE_FLOAT));
3429 glu::DataType type;
3432 { 0, glu::TYPE_FLOAT_MAT2 },
3433 { 1, glu::TYPE_FLOAT_MAT2X3 },
3434 { 2, glu::TYPE_FLOAT_MAT2X4 },
3435 { 2, glu::TYPE_FLOAT_MAT3X2 },
3436 { 1, glu::TYPE_FLOAT_MAT3 },
3437 { 0, glu::TYPE_FLOAT_MAT3X4 },
3438 { 2, glu::TYPE_FLOAT_MAT4X2 },
3439 { 1, glu::TYPE_FLOAT_MAT4X3 },
3440 { 0, glu::TYPE_FLOAT_MAT4 },
3511 glu::MatrixOrder order;
3514 { "no_qualifier", glu::MATRIXORDER_LAST },
3515 { "row_major", glu::MATRIXORDER_ROW_MAJOR },
3516 { "column_major", glu::MATRIXORDER_COLUMN_MAJOR },
3524 if (qualifiers[qualifierNdx].order == glu::MATRIXORDER_LAST || parentStructure->getType() == ResourceDefinition::Node::TYPE_INTERFACE_BLOCK)
3531 if (qualifiers[qualifierNdx].order != glu::MATRIXORDER_LAST)
3533 glu::Layout layout;
3538 if (extendedBasicTypeCases && qualifiers[qualifierNdx].order == glu::MATRIXORDER_LAST)
3556 generateBufferBackedVariableAggregateTypeCases(context, subStructure, blockGroup, queryTarget.interface, PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR, glu::TYPE_FLOAT_MAT3X2, "", 1);
3561 generateBufferBackedVariableAggregateTypeCases(context, subStructure, qualifierGroup, queryTarget.interface, PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR, glu::TYPE_FLOAT_MAT3X2, "", 1);
3572 glu::MatrixOrder order;
3575 { "no_qualifier", glu::MATRIXORDER_LAST },
3576 { "row_major", glu::MATRIXORDER_ROW_MAJOR },
3577 { "column_major", glu::MATRIXORDER_COLUMN_MAJOR },
3585 if (qualifiers[qualifierNdx].order == glu::MATRIXORDER_LAST || parentStructure->getType() == ResourceDefinition::Node::TYPE_INTERFACE_BLOCK)
3592 if (qualifiers[qualifierNdx].order != glu::MATRIXORDER_LAST)
3594 glu::Layout layout;
3603 if (qualifiers[qualifierNdx].order == glu::MATRIXORDER_LAST)
3621 generateBufferBackedVariableAggregateTypeCases(context, subStructure, blockGroup, queryTarget.interface, PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR, glu::TYPE_FLOAT_MAT3X2, "", 1);
3625 generateBufferBackedVariableAggregateTypeCases(context, subStructure, qualifierGroup, queryTarget.interface, PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR, glu::TYPE_FLOAT_MAT3X2, "", 1);
3639 glu::MatrixOrder order;
3642 { "default_block", "Default block", false, true, true, glu::MATRIXORDER_LAST },
3643 { "named_block", "Named uniform block", true, true, true, glu::MATRIXORDER_LAST },
3644 { "named_block_row_major", "Named uniform block", true, true, false, glu::MATRIXORDER_ROW_MAJOR },
3645 { "named_block_col_major", "Named uniform block", true, true, false, glu::MATRIXORDER_COLUMN_MAJOR },
3646 { "unnamed_block", "Unnamed uniform block", true, false, false, glu::MATRIXORDER_LAST },
3647 { "unnamed_block_row_major", "Unnamed uniform block", true, false, false, glu::MATRIXORDER_ROW_MAJOR },
3648 { "unnamed_block_col_major", "Unnamed uniform block", true, false, false, glu::MATRIXORDER_COLUMN_MAJOR },
3652 const ResourceDefinition::Node::SharedPtr uniform (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_UNIFORM));
3662 if (children[childNdx].order != glu::MATRIXORDER_LAST)
3664 glu::Layout layout;
3684 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(parentStructure, glu::TYPE_FLOAT));
3687 const ResourceDefinition::Node::SharedPtr variableArray (new ResourceDefinition::Variable(arrayElement, glu::TYPE_FLOAT));
3688 const ResourceDefinition::Node::SharedPtr variableStruct (new ResourceDefinition::Variable(structMember, glu::TYPE_FLOAT));
3700 const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(parentStructure, glu::Layout(-1, 0)));
3701 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(layout, glu::TYPE_SAMPLER_2D));
3704 const ResourceDefinition::Node::SharedPtr variableArray (new ResourceDefinition::Variable(arrayElement, glu::TYPE_SAMPLER_2D));
3705 const ResourceDefinition::Node::SharedPtr variableStruct (new ResourceDefinition::Variable(structMember, glu::TYPE_SAMPLER_2D));
3716 const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(parentStructure, glu::Layout(-1, 0)));
3717 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(layout, glu::TYPE_UINT_ATOMIC_COUNTER));
3719 const ResourceDefinition::Node::SharedPtr variableArray (new ResourceDefinition::Variable(arrayElement, glu::TYPE_UINT_ATOMIC_COUNTER));
3731 const ResourceDefinition::Node::SharedPtr variableArrayStruct (new ResourceDefinition::Variable(arrayElement, glu::TYPE_FLOAT));
3740 const ResourceDefinition::Node::SharedPtr variableArrayStruct (new ResourceDefinition::Variable(arrayStructMember, glu::TYPE_FLOAT));
3749 const ResourceDefinition::Node::SharedPtr variableArrayStruct (new ResourceDefinition::Variable(subArrayElement, glu::TYPE_FLOAT));
3758 const ResourceDefinition::Node::SharedPtr variableArrayStruct (new ResourceDefinition::Variable(subStructMember, glu::TYPE_FLOAT));
3769 const ResourceDefinition::Node::SharedPtr variableArray (new ResourceDefinition::Variable(arrayElement, glu::TYPE_FLOAT));
3777 const ResourceDefinition::Node::SharedPtr variableArray (new ResourceDefinition::Variable(structMember, glu::TYPE_FLOAT));
3790 const ResourceDefinition::Node::SharedPtr uniform (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_UNIFORM));
3839 glu::ShaderType stage;
3843 { "compute", glu::SHADERTYPE_COMPUTE, 3 },
3844 { "separable_vertex", glu::SHADERTYPE_VERTEX, 2 },
3845 { "separable_fragment", glu::SHADERTYPE_FRAGMENT, 2 },
3856 { "vertex_fragment", (1 << glu::SHADERTYPE_VERTEX) | (1 << glu::SHADERTYPE_FRAGMENT), (1 << glu::SHADERTYPE_VERTEX) | (1 << glu::SHADERTYPE_FRAGMENT), 3 },
3857 { "vertex_fragment_only_fragment", (1 << glu::SHADERTYPE_VERTEX) | (1 << glu::SHADERTYPE_FRAGMENT), (1 << glu::SHADERTYPE_FRAGMENT), 2 },
3858 { "vertex_fragment_only_vertex", (1 << glu::SHADERTYPE_VERTEX) | (1 << glu::SHADERTYPE_FRAGMENT), (1 << glu::SHADERTYPE_VERTEX), 2 },
3864 const bool programSeparable = (singleStageCases[ndx].stage != glu::SHADERTYPE_COMPUTE);
3866 const ResourceDefinition::Node::SharedPtr stage (new ResourceDefinition::Shader(program, singleStageCases[ndx].stage, glu::GLSL_VERSION_310_ES));
3877 ResourceDefinition::ShaderSet* shaderSet = new ResourceDefinition::ShaderSet(program, glu::GLSL_VERSION_310_ES);
3881 for (int shaderBit = 0; shaderBit < glu::SHADERTYPE_LAST; ++shaderBit)
3890 shaderSet->setStage((glu::ShaderType)shaderBit, stageReferencing);
3901 static glu::DataType generateRandomDataType (de::Random& rnd, bool excludeOpaqueTypes)
3903 static const glu::DataType s_types[] =
3905 glu::TYPE_FLOAT,
3906 glu::TYPE_INT,
3907 glu::TYPE_UINT,
3908 glu::TYPE_BOOL,
3909 glu::TYPE_FLOAT_VEC2,
3910 glu::TYPE_FLOAT_VEC3,
3911 glu::TYPE_FLOAT_VEC4,
3912 glu::TYPE_INT_VEC2,
3913 glu::TYPE_INT_VEC3,
3914 glu::TYPE_INT_VEC4,
3915 glu::TYPE_UINT_VEC2,
3916 glu::TYPE_UINT_VEC3,
3917 glu::TYPE_UINT_VEC4,
3918 glu::TYPE_BOOL_VEC2,
3919 glu::TYPE_BOOL_VEC3,
3920 glu::TYPE_BOOL_VEC4,
3921 glu::TYPE_FLOAT_MAT2,
3922 glu::TYPE_FLOAT_MAT2X3,
3923 glu::TYPE_FLOAT_MAT2X4,
3924 glu::TYPE_FLOAT_MAT3X2,
3925 glu::TYPE_FLOAT_MAT3,
3926 glu::TYPE_FLOAT_MAT3X4,
3927 glu::TYPE_FLOAT_MAT4X2,
3928 glu::TYPE_FLOAT_MAT4X3,
3929 glu::TYPE_FLOAT_MAT4,
3931 glu::TYPE_SAMPLER_2D,
3932 glu::TYPE_SAMPLER_CUBE,
3933 glu::TYPE_SAMPLER_2D_ARRAY,
3934 glu::TYPE_SAMPLER_3D,
3935 glu::TYPE_SAMPLER_2D_SHADOW,
3936 glu::TYPE_SAMPLER_CUBE_SHADOW,
3937 glu::TYPE_SAMPLER_2D_ARRAY_SHADOW,
3938 glu::TYPE_INT_SAMPLER_2D,
3939 glu::TYPE_INT_SAMPLER_CUBE,
3940 glu::TYPE_INT_SAMPLER_2D_ARRAY,
3941 glu::TYPE_INT_SAMPLER_3D,
3942 glu::TYPE_UINT_SAMPLER_2D,
3943 glu::TYPE_UINT_SAMPLER_CUBE,
3944 glu::TYPE_UINT_SAMPLER_2D_ARRAY,
3945 glu::TYPE_UINT_SAMPLER_3D,
3946 glu::TYPE_SAMPLER_2D_MULTISAMPLE,
3947 glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE,
3948 glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE,
3949 glu::TYPE_IMAGE_2D,
3950 glu::TYPE_IMAGE_CUBE,
3951 glu::TYPE_IMAGE_2D_ARRAY,
3952 glu::TYPE_IMAGE_3D,
3953 glu::TYPE_INT_IMAGE_2D,
3954 glu::TYPE_INT_IMAGE_CUBE,
3955 glu::TYPE_INT_IMAGE_2D_ARRAY,
3956 glu::TYPE_INT_IMAGE_3D,
3957 glu::TYPE_UINT_IMAGE_2D,
3958 glu::TYPE_UINT_IMAGE_CUBE,
3959 glu::TYPE_UINT_IMAGE_2D_ARRAY,
3960 glu::TYPE_UINT_IMAGE_3D,
3961 glu::TYPE_UINT_ATOMIC_COUNTER
3966 const glu::DataType type = s_types[rnd.getInt(0, DE_LENGTH_OF_ARRAY(s_types)-1)];
3969 glu::isDataTypeScalarOrVector(type) ||
3970 glu::isDataTypeMatrix(type))
3975 static ResourceDefinition::Node::SharedPtr generateRandomVariableDefinition (de::Random& rnd, const ResourceDefinition::Node::SharedPtr& parentStructure, glu::DataType baseType, const glu::Layout& layout, bool allowUnsized)
4002 return ResourceDefinition::Node::SharedPtr(new ResourceDefinition::Shader(program, glu::SHADERTYPE_COMPUTE, glu::GLSL_VERSION_310_ES));
4008 ResourceDefinition::ShaderSet* shaderSet = new ResourceDefinition::ShaderSet(program, glu::GLSL_VERSION_310_ES);
4012 shaderSet->setStage(glu::SHADERTYPE_VERTEX, true);
4013 shaderSet->setStage(glu::SHADERTYPE_FRAGMENT, rnd.getBool());
4017 shaderSet->setStage(glu::SHADERTYPE_VERTEX, rnd.getBool());
4018 shaderSet->setStage(glu::SHADERTYPE_FRAGMENT, true);
4027 const glu::ShaderType shaderType = (rnd.getBool()) ? (glu::SHADERTYPE_VERTEX) : (glu::SHADERTYPE_FRAGMENT);
4029 return ResourceDefinition::Node::SharedPtr(new ResourceDefinition::Shader(program, shaderType, glu::GLSL_VERSION_310_ES));
4033 static glu::Layout generateRandomUniformBlockLayout (de::Random& rnd)
4035 glu::Layout layout;
4041 layout.matrixOrder = (rnd.getBool()) ? (glu::MATRIXORDER_COLUMN_MAJOR) : (glu::MATRIXORDER_ROW_MAJOR);
4046 static glu::Layout generateRandomBufferBlockLayout (de::Random& rnd)
4051 static glu::Layout generateRandomVariableLayout (de::Random& rnd, glu::DataType type, bool interfaceBlockMember)
4053 glu::Layout layout;
4055 if ((glu::isDataTypeAtomicCounter(type) || glu::isDataTypeImage(type) || glu::isDataTypeSampler(type)) && rnd.getBool())
4058 if (glu::isDataTypeAtomicCounter(type) && rnd.getBool())
4061 if (glu::isDataTypeMatrix(type) && interfaceBlockMember && rnd.getBool())
4062 layout.matrixOrder = (rnd.getBool()) ? (glu::MATRIXORDER_COLUMN_MAJOR) : (glu::MATRIXORDER_ROW_MAJOR);
4072 const glu::DataType type = generateRandomDataType(rnd, interfaceBlock);
4073 const glu::Layout layout = generateRandomVariableLayout(rnd, type, interfaceBlock);
4075 const ResourceDefinition::Node::SharedPtr uniform (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_UNIFORM));
4119 const ResourceDefinition::Node::SharedPtr computeShader (new ResourceDefinition::Shader(program, glu::SHADERTYPE_COMPUTE, glu::GLSL_VERSION_310_ES));
4223 static void generateBufferBackedInterfaceResourceBasicBlockTypes (Context& context, tcu::TestCaseGroup* targetGroup, glu::Storage storage, void (*blockContentGenerator)(Context&, const ResourceDefinition::Node::SharedPtr&, tcu::TestCaseGroup* const, ProgramInterface interface, const char* blockName))
4226 const ResourceDefinition::Node::SharedPtr shader (new ResourceDefinition::Shader(program, glu::SHADERTYPE_COMPUTE, glu::GLSL_VERSION_310_ES));
4229 const ResourceDefinition::Node::SharedPtr binding (new ResourceDefinition::LayoutQualifier(storageQualifier, glu::Layout(-1, 1)));
4230 const ProgramInterface programInterface = (storage == glu::STORAGE_UNIFORM) ? (PROGRAMINTERFACE_UNIFORM_BLOCK) : (PROGRAMINTERFACE_SHADER_STORAGE_BLOCK);
4235 const ResourceDefinition::Node::SharedPtr dummyVariable (new ResourceDefinition::Variable(block, glu::TYPE_BOOL_VEC3));
4243 const ResourceDefinition::Node::SharedPtr dummyVariable (new ResourceDefinition::Variable(block, glu::TYPE_BOOL_VEC3));
4252 const ResourceDefinition::Node::SharedPtr dummyVariable (new ResourceDefinition::Variable(block, glu::TYPE_BOOL_VEC3));
4261 const ResourceDefinition::Node::SharedPtr dummyVariable (new ResourceDefinition::Variable(block, glu::TYPE_BOOL_VEC3));
4267 static void generateBufferBackedInterfaceResourceBufferBindingCases (Context& context, tcu::TestCaseGroup* targetGroup, glu::Storage storage)
4270 const ResourceDefinition::Node::SharedPtr shader (new ResourceDefinition::Shader(program, glu::SHADERTYPE_COMPUTE, glu::GLSL_VERSION_310_ES));
4279 const ResourceDefinition::Node::SharedPtr binding (new ResourceDefinition::LayoutQualifier(storageQualifier, glu::Layout(-1, bindingNdx)));
4280 const ProgramInterface programInterface = (storage == glu::STORAGE_UNIFORM) ? (PROGRAMINTERFACE_UNIFORM_BLOCK) : (PROGRAMINTERFACE_SHADER_STORAGE_BLOCK);
4285 const ResourceDefinition::Node::SharedPtr dummyVariable (new ResourceDefinition::Variable(block, glu::TYPE_BOOL_VEC3));
4293 const ResourceDefinition::Node::SharedPtr dummyVariable (new ResourceDefinition::Variable(block, glu::TYPE_BOOL_VEC3));
4302 const ResourceDefinition::Node::SharedPtr dummyVariable (new ResourceDefinition::Variable(block, glu::TYPE_BOOL_VEC3));
4309 template <glu::Storage Storage>
4312 const ProgramInterface programInterface = (Storage == glu::STORAGE_UNIFORM) ? (PROGRAMINTERFACE_UNIFORM_BLOCK) :
4313 (Storage == glu::STORAGE_BUFFER) ? (PROGRAMINTERFACE_SHADER_STORAGE_BLOCK) :
4325 const ResourceDefinition::Node::SharedPtr dummyVariable (new ResourceDefinition::Variable(block, glu::TYPE_BOOL_VEC3));
4333 const ResourceDefinition::Node::SharedPtr dummyVariable (new ResourceDefinition::Variable(block, glu::TYPE_BOOL_VEC3));
4342 const ResourceDefinition::Node::SharedPtr dummyVariable (new ResourceDefinition::Variable(block, glu::TYPE_BOOL_VEC3));
4348 static void generateBufferBackedInterfaceResourceActiveVariablesCase (Context& context, tcu::TestCaseGroup* targetGroup, glu::Storage storage)
4355 static void generateBufferBackedInterfaceResourceBufferDataSizeCases (Context& context, tcu::TestCaseGroup* targetGroup, glu::Storage storage)
4365 BufferBackedBlockInterfaceTestGroup (Context& context, glu::Storage interfaceBlockStorage);
4369 static const char* getGroupName (glu::Storage storage);
4370 static const char* getGroupDescription (glu::Storage storage);
4372 const glu::Storage m_storage;
4375 BufferBackedBlockInterfaceTestGroup::BufferBackedBlockInterfaceTestGroup(Context& context, glu::Storage storage)
4379 DE_ASSERT(storage == glu::STORAGE_BUFFER || storage == glu::STORAGE_UNIFORM);
4424 if (m_storage == glu::STORAGE_UNIFORM)
4425 generateReferencedByShaderCaseBlocks(m_context, blockGroup, generateBufferBlockReferencedByShaderSingleBlockContentCases<glu::STORAGE_UNIFORM>);
4426 else if (m_storage == glu::STORAGE_BUFFER)
4427 generateReferencedByShaderCaseBlocks(m_context, blockGroup, generateBufferBlockReferencedByShaderSingleBlockContentCases<glu::STORAGE_BUFFER>);
4433 const char* BufferBackedBlockInterfaceTestGroup::getGroupName (glu::Storage storage)
4437 case glu::STORAGE_UNIFORM: return "uniform_block";
4438 case glu::STORAGE_BUFFER: return "shader_storage_block";
4445 const char* BufferBackedBlockInterfaceTestGroup::getGroupDescription (glu::Storage storage)
4449 case glu::STORAGE_UNIFORM: return "Uniform block interface";
4450 case glu::STORAGE_BUFFER: return "Shader storage block interface";
4484 addChild(new AtomicCounterReferencedByCase(m_context, "referenced_by_compute", "", (1 << glu::SHADERTYPE_COMPUTE), (1 << glu::SHADERTYPE_COMPUTE)));
4485 addChild(new AtomicCounterReferencedByCase(m_context, "referenced_by_separable_vertex", "", (1 << glu::SHADERTYPE_VERTEX), (1 << glu::SHADERTYPE_VERTEX)));
4486 addChild(new AtomicCounterReferencedByCase(m_context, "referenced_by_separable_fragment", "", (1 << glu::SHADERTYPE_FRAGMENT), (1 << glu::SHADERTYPE_FRAGMENT)));
4487 addChild(new AtomicCounterReferencedByCase(m_context, "referenced_by_vertex_fragment", "", (1 << glu::SHADERTYPE_VERTEX) | (1 << glu::SHADERTYPE_FRAGMENT), (1 << glu::SHADERTYPE_VERTEX) | (1 << glu::SHADERTYPE_FRAGMENT)));
4488 addChild(new AtomicCounterReferencedByCase(m_context, "referenced_by_vertex_fragment_only_fragment", "", (1 << glu::SHADERTYPE_VERTEX) | (1 << glu::SHADERTYPE_FRAGMENT), (1 << glu::SHADERTYPE_FRAGMENT)));
4489 addChild(new AtomicCounterReferencedByCase(m_context, "referenced_by_vertex_fragment_only_vertex", "", (1 << glu::SHADERTYPE_VERTEX) | (1 << glu::SHADERTYPE_FRAGMENT), (1 << glu::SHADERTYPE_VERTEX)));
4498 ResourceDefinition::ShaderSet* shaderSetPtr = new ResourceDefinition::ShaderSet(program, glu::GLSL_VERSION_310_ES);
4501 shaderSetPtr->setStage(glu::SHADERTYPE_VERTEX, inputCase);
4502 shaderSetPtr->setStage(glu::SHADERTYPE_FRAGMENT, !inputCase);
4506 blockContentGenerator(context, shaderSet, blockGroup, (1 << glu::SHADERTYPE_VERTEX) | (1 << glu::SHADERTYPE_FRAGMENT));
4513 const ResourceDefinition::Node::SharedPtr shader (new ResourceDefinition::Shader(program, glu::SHADERTYPE_VERTEX, glu::GLSL_VERSION_310_ES));
4517 blockContentGenerator(context, shader, blockGroup, (1 << glu::SHADERTYPE_VERTEX));
4524 const ResourceDefinition::Node::SharedPtr shader (new ResourceDefinition::Shader(program, glu::SHADERTYPE_FRAGMENT, glu::GLSL_VERSION_310_ES));
4528 blockContentGenerator(context, shader, blockGroup, (1 << glu::SHADERTYPE_FRAGMENT));
4536 const ResourceDefinition::Node::SharedPtr shader (new ResourceDefinition::Shader(program, glu::SHADERTYPE_COMPUTE, glu::GLSL_VERSION_310_ES));
4540 blockContentGenerator(context, shader, blockGroup, (1 << glu::SHADERTYPE_COMPUTE));
4547 const ResourceDefinition::Node::SharedPtr input (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_IN));
4553 if (presentShadersMask & (1 << glu::SHADERTYPE_VERTEX))
4556 const ResourceDefinition::Node::SharedPtr variable(new ResourceDefinition::Variable(input, glu::TYPE_FLOAT_VEC4));
4561 if (presentShadersMask == (1 << glu::SHADERTYPE_FRAGMENT))
4565 const ResourceDefinition::Node::SharedPtr variable(new ResourceDefinition::Variable(input, glu::TYPE_FLOAT_VEC4));
4571 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(structMbr, glu::TYPE_FLOAT_VEC4));
4577 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
4586 const ResourceDefinition::Node::SharedPtr output (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_OUT));
4592 if (presentShadersMask == (1 << glu::SHADERTYPE_VERTEX))
4596 const ResourceDefinition::Node::SharedPtr variable(new ResourceDefinition::Variable(output, glu::TYPE_FLOAT_VEC4));
4602 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(structMbr, glu::TYPE_FLOAT_VEC4));
4608 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
4614 if (presentShadersMask & (1 << glu::SHADERTYPE_FRAGMENT))
4618 const ResourceDefinition::Node::SharedPtr variable(new ResourceDefinition::Variable(output, glu::TYPE_FLOAT_VEC4));
4624 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
4634 const ResourceDefinition::Node::SharedPtr input (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_IN));
4637 if (presentShadersMask & (1 << glu::SHADERTYPE_VERTEX))
4640 const ResourceDefinition::Node::SharedPtr variable(new ResourceDefinition::Variable(input, glu::TYPE_FLOAT_VEC4));
4645 if (presentShadersMask == (1 << glu::SHADERTYPE_FRAGMENT))
4649 const ResourceDefinition::Node::SharedPtr variable(new ResourceDefinition::Variable(input, glu::TYPE_FLOAT_VEC4));
4655 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(structMbr, glu::TYPE_FLOAT_VEC4));
4661 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
4671 const ResourceDefinition::Node::SharedPtr output (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_OUT));
4674 if (presentShadersMask == (1 << glu::SHADERTYPE_VERTEX))
4678 const ResourceDefinition::Node::SharedPtr variable(new ResourceDefinition::Variable(output, glu::TYPE_FLOAT_VEC4));
4684 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(structMbr, glu::TYPE_FLOAT_VEC4));
4690 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
4696 if (presentShadersMask & (1 << glu::SHADERTYPE_FRAGMENT))
4700 const ResourceDefinition::Node::SharedPtr variable(new ResourceDefinition::Variable(output, glu::TYPE_FLOAT_VEC4));
4706 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
4715 const ResourceDefinition::Node::SharedPtr input (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_IN));
4718 if (presentShadersMask & (1 << glu::SHADERTYPE_VERTEX))
4722 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(input, glu::TYPE_FLOAT_VEC4));
4727 const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(input, glu::Layout(2)));
4728 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(layout, glu::TYPE_FLOAT_VEC4));
4734 if (presentShadersMask == (1 << glu::SHADERTYPE_FRAGMENT))
4738 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(input, glu::TYPE_FLOAT_VEC4));
4743 const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(input, glu::Layout(2)));
4744 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(layout, glu::TYPE_FLOAT_VEC4));
4750 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(structMbr, glu::TYPE_FLOAT_VEC4));
4755 const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(input, glu::Layout(2)));
4757 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(structMbr, glu::TYPE_FLOAT_VEC4));
4763 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
4768 const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(input, glu::Layout(2)));
4770 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
4779 const ResourceDefinition::Node::SharedPtr output (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_OUT));
4782 if (presentShadersMask == (1 << glu::SHADERTYPE_VERTEX))
4786 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(output, glu::TYPE_FLOAT_VEC4));
4791 const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(output, glu::Layout(2)));
4792 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(layout, glu::TYPE_FLOAT_VEC4));
4798 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(structMbr, glu::TYPE_FLOAT_VEC4));
4803 const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(output, glu::Layout(2)));
4805 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(structMbr, glu::TYPE_FLOAT_VEC4));
4811 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
4816 const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(output, glu::Layout(2)));
4818 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
4824 if (presentShadersMask & (1 << glu::SHADERTYPE_FRAGMENT))
4828 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(output, glu::TYPE_FLOAT_VEC4));
4833 const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(output, glu::Layout(2)));
4834 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(layout, glu::TYPE_FLOAT_VEC4));
4840 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
4845 const ResourceDefinition::Node::SharedPtr layout (new ResourceDefinition::LayoutQualifier(output, glu::Layout(1)));
4847 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
4853 static void generateProgramInputOutputReferencedByCases (Context& context, tcu::TestCaseGroup* targetGroup, glu::Storage storage)
4862 static const glu::DataType variableTypes[] =
4864 glu::TYPE_FLOAT,
4865 glu::TYPE_INT,
4866 glu::TYPE_UINT,
4868 glu::TYPE_FLOAT_VEC2,
4869 glu::TYPE_FLOAT_VEC3,
4870 glu::TYPE_FLOAT_VEC4,
4872 glu::TYPE_INT_VEC2,
4873 glu::TYPE_INT_VEC3,
4874 glu::TYPE_INT_VEC4,
4876 glu::TYPE_UINT_VEC2,
4877 glu::TYPE_UINT_VEC3,
4878 glu::TYPE_UINT_VEC4,
4880 glu::TYPE_FLOAT_MAT2,
4881 glu::TYPE_FLOAT_MAT2X3,
4882 glu::TYPE_FLOAT_MAT2X4,
4883 glu::TYPE_FLOAT_MAT3X2,
4884 glu::TYPE_FLOAT_MAT3,
4885 glu::TYPE_FLOAT_MAT3X4,
4886 glu::TYPE_FLOAT_MAT4X2,
4887 glu::TYPE_FLOAT_MAT4X3,
4888 glu::TYPE_FLOAT_MAT4,
4901 const ResourceDefinition::Node::SharedPtr input (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_IN));
4904 if (presentShadersMask & (1 << glu::SHADERTYPE_VERTEX))
4911 if (presentShadersMask == (1 << glu::SHADERTYPE_FRAGMENT))
4913 const ResourceDefinition::Node::SharedPtr flatShading(new ResourceDefinition::InterpolationQualifier(input, glu::INTERPOLATION_FLAT));
4940 static const glu::DataType variableTypes[] =
4942 glu::TYPE_FLOAT,
4943 glu::TYPE_INT,
4944 glu::TYPE_UINT,
4946 glu::TYPE_FLOAT_VEC2,
4947 glu::TYPE_FLOAT_VEC3,
4948 glu::TYPE_FLOAT_VEC4,
4950 glu::TYPE_INT_VEC2,
4951 glu::TYPE_INT_VEC3,
4952 glu::TYPE_INT_VEC4,
4954 glu::TYPE_UINT_VEC2,
4955 glu::TYPE_UINT_VEC3,
4956 glu::TYPE_UINT_VEC4,
4958 glu::TYPE_FLOAT_MAT2,
4959 glu::TYPE_FLOAT_MAT2X3,
4960 glu::TYPE_FLOAT_MAT2X4,
4961 glu::TYPE_FLOAT_MAT3X2,
4962 glu::TYPE_FLOAT_MAT3,
4963 glu::TYPE_FLOAT_MAT3X4,
4964 glu::TYPE_FLOAT_MAT4X2,
4965 glu::TYPE_FLOAT_MAT4X3,
4966 glu::TYPE_FLOAT_MAT4,
4971 if (addMatrixCases || !glu::isDataTypeMatrix(variableTypes[ndx]))
4982 const ResourceDefinition::Node::SharedPtr output (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_OUT));
4985 if (presentShadersMask == (1 << glu::SHADERTYPE_VERTEX))
4987 const ResourceDefinition::Node::SharedPtr flatShading(new ResourceDefinition::InterpolationQualifier(output, glu::INTERPOLATION_FLAT));
5012 if (presentShadersMask & (1 << glu::SHADERTYPE_FRAGMENT))
5076 generateProgramInputOutputReferencedByCases(m_context, blockGroup, glu::STORAGE_IN);
5133 generateProgramInputOutputReferencedByCases(m_context, blockGroup, glu::STORAGE_OUT);
5150 ResourceDefinition::ShaderSet* shaderSetPtr = new ResourceDefinition::ShaderSet(program, glu::GLSL_VERSION_310_ES);
5153 shaderSetPtr->setStage(glu::SHADERTYPE_VERTEX, true);
5154 shaderSetPtr->setStage(glu::SHADERTYPE_FRAGMENT, false);
5165 const ResourceDefinition::Node::SharedPtr shader (new ResourceDefinition::Shader(program, glu::SHADERTYPE_VERTEX, glu::GLSL_VERSION_310_ES));
5176 const ResourceDefinition::Node::SharedPtr output (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_OUT));
5186 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(xfbTarget, glu::TYPE_FLOAT_VEC4));
5193 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(structMbr, glu::TYPE_FLOAT_VEC4));
5200 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(xfbTarget, glu::TYPE_FLOAT_VEC4));
5207 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
5214 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(xfbTarget, glu::TYPE_FLOAT_VEC4));
5223 const ResourceDefinition::Node::SharedPtr output (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_OUT));
5233 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(xfbTarget, glu::TYPE_FLOAT_VEC4));
5240 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(structMbr, glu::TYPE_FLOAT_VEC4));
5247 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(xfbTarget, glu::TYPE_FLOAT_VEC4));
5254 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(arrayElem, glu::TYPE_FLOAT_VEC4));
5261 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(xfbTarget, glu::TYPE_FLOAT_VEC4));
5268 static const glu::DataType variableTypes[] =
5270 glu::TYPE_FLOAT,
5271 glu::TYPE_INT,
5272 glu::TYPE_UINT,
5274 glu::TYPE_FLOAT_VEC2,
5275 glu::TYPE_FLOAT_VEC3,
5276 glu::TYPE_FLOAT_VEC4,
5278 glu::TYPE_INT_VEC2,
5279 glu::TYPE_INT_VEC3,
5280 glu::TYPE_INT_VEC4,
5282 glu::TYPE_UINT_VEC2,
5283 glu::TYPE_UINT_VEC3,
5284 glu::TYPE_UINT_VEC4,
5286 glu::TYPE_FLOAT_MAT2,
5287 glu::TYPE_FLOAT_MAT2X3,
5288 glu::TYPE_FLOAT_MAT2X4,
5289 glu::TYPE_FLOAT_MAT3X2,
5290 glu::TYPE_FLOAT_MAT3,
5291 glu::TYPE_FLOAT_MAT3X4,
5292 glu::TYPE_FLOAT_MAT4X2,
5293 glu::TYPE_FLOAT_MAT4X3,
5294 glu::TYPE_FLOAT_MAT4,
5307 const ResourceDefinition::Node::SharedPtr output (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_OUT));
5308 const ResourceDefinition::Node::SharedPtr flatShading (new ResourceDefinition::InterpolationQualifier(output, glu::INTERPOLATION_FLAT));
5397 const ResourceDefinition::Node::SharedPtr shader (new ResourceDefinition::Shader(program, glu::SHADERTYPE_COMPUTE, glu::GLSL_VERSION_310_ES));
5399 const ResourceDefinition::Node::SharedPtr bufferStorage (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_BUFFER));
5400 const ResourceDefinition::Node::SharedPtr binding (new ResourceDefinition::LayoutQualifier(bufferStorage, glu::Layout(-1, 0)));
5463 generateBufferBackedArrayStrideTypeAggregateCases(context, parentStructure, aggregateGroup, queryTarget.interface, glu::TYPE_FLOAT, (extendedCases && sizedArray) ? (2) : (1), !extendedCases);
5466 generateBufferBackedArrayStrideTypeAggregateCases(context, parentStructure, aggregateGroup, queryTarget.interface, glu::TYPE_BOOL, (extendedCases && sizedArray) ? (1) : (0), !extendedCases);
5469 generateBufferBackedArrayStrideTypeAggregateCases(context, parentStructure, aggregateGroup, queryTarget.interface, glu::TYPE_BOOL_VEC3, (extendedCases && sizedArray) ? (2) : (1), !extendedCases);
5472 generateBufferBackedArrayStrideTypeAggregateCases(context, parentStructure, aggregateGroup, queryTarget.interface, glu::TYPE_FLOAT_VEC4, (extendedCases && sizedArray) ? (2) : (1), !extendedCases);
5475 generateBufferBackedArrayStrideTypeAggregateCases(context, parentStructure, aggregateGroup, queryTarget.interface, glu::TYPE_INT_VEC2, (extendedCases && sizedArray) ? (2) : (1), !extendedCases);
5515 const ResourceDefinition::Node::SharedPtr shader (new ResourceDefinition::Shader(program, glu::SHADERTYPE_COMPUTE, glu::GLSL_VERSION_310_ES));
5517 const ResourceDefinition::Node::SharedPtr bufferStorage (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_BUFFER));
5518 const ResourceDefinition::Node::SharedPtr binding (new ResourceDefinition::LayoutQualifier(bufferStorage, glu::Layout(-1, 0)));
5523 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(buffer, glu::TYPE_FLOAT_VEC4));
5531 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(buffer, glu::TYPE_FLOAT_VEC4));
5540 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(buffer, glu::TYPE_FLOAT_VEC4));
5554 glu::MatrixOrder order;
5557 { "named_block", "Named uniform block", true, true, glu::MATRIXORDER_LAST },
5558 { "named_block_row_major", "Named uniform block", true, false, glu::MATRIXORDER_ROW_MAJOR },
5559 { "named_block_col_major", "Named uniform block", true, false, glu::MATRIXORDER_COLUMN_MAJOR },
5560 { "unnamed_block", "Unnamed uniform block", false, false, glu::MATRIXORDER_LAST },
5561 { "unnamed_block_row_major", "Unnamed uniform block", false, false, glu::MATRIXORDER_ROW_MAJOR },
5562 { "unnamed_block_col_major", "Unnamed uniform block", false, false, glu::MATRIXORDER_COLUMN_MAJOR },
5566 const ResourceDefinition::Node::SharedPtr shader (new ResourceDefinition::Shader(program, glu::SHADERTYPE_COMPUTE, glu::GLSL_VERSION_310_ES));
5568 const ResourceDefinition::Node::SharedPtr buffer (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_BUFFER));
5577 if (children[childNdx].order != glu::MATRIXORDER_LAST)
5579 glu::Layout layout;
5594 static const glu::DataType variableTypes[] =
5596 glu::TYPE_FLOAT,
5597 glu::TYPE_INT_VEC3,
5598 glu::TYPE_FLOAT_MAT2,
5599 glu::TYPE_FLOAT_MAT2X3,
5600 glu::TYPE_FLOAT_MAT2X4,
5601 glu::TYPE_FLOAT_MAT3X2,
5602 glu::TYPE_FLOAT_MAT3,
5603 glu::TYPE_FLOAT_MAT3X4,
5604 glu::TYPE_FLOAT_MAT4X2,
5605 glu::TYPE_FLOAT_MAT4X3,
5606 glu::TYPE_FLOAT_MAT4,
5619 generateBufferBackedVariableAggregateTypeCases(context, parentStructure, targetGroup, PROGRAMINTERFACE_BUFFER_VARIABLE, targetProp, glu::TYPE_FLOAT_MAT3X2, "", 2);
5624 const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(unsized, glu::TYPE_FLOAT_MAT3X2));
5650 const ResourceDefinition::Node::SharedPtr matrixOrder(new ResourceDefinition::LayoutQualifier(parentStructure, glu::Layout(-1, -1, -1, glu::FORMATLAYOUT_LAST, glu::MATRIXORDER_COLUMN_MAJOR)));
5659 const ResourceDefinition::Node::SharedPtr matrixOrder(new ResourceDefinition::LayoutQualifier(parentStructure, glu::Layout(-1, -1, -1, glu::FORMATLAYOUT_LAST, glu::MATRIXORDER_ROW_MAJOR)));
5674 generateBufferBackedVariableAggregateTypeCases(context, parentStructure, blockGroup, PROGRAMINTERFACE_BUFFER_VARIABLE, PROGRAMRESOURCEPROP_NAME_LENGTH, glu::TYPE_FLOAT, "", 3);
5683 generateBufferBackedVariableAggregateTypeCases(context, unsized, blockGroup, PROGRAMINTERFACE_BUFFER_VARIABLE, PROGRAMRESOURCEPROP_NAME_LENGTH, glu::TYPE_FLOAT, "", 2);
5694 generateBufferBackedVariableAggregateTypeCases(context, parentStructure, blockGroup, PROGRAMINTERFACE_BUFFER_VARIABLE, PROGRAMRESOURCEPROP_OFFSET, glu::TYPE_FLOAT, "", 3);
5703 generateBufferBackedVariableAggregateTypeCases(context, unsized, blockGroup, PROGRAMINTERFACE_BUFFER_VARIABLE, PROGRAMRESOURCEPROP_OFFSET, glu::TYPE_FLOAT, "", 2);
5713 const ResourceDefinition::Node::SharedPtr storage (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_BUFFER));
5752 generateBufferBackedVariableAggregateTypeCases(context, parentStructure, targetGroup, PROGRAMINTERFACE_BUFFER_VARIABLE, TargetProp, glu::TYPE_FLOAT_VEC4, "", 3);
5758 generateBufferBackedVariableAggregateTypeCases(context, unsized, targetGroup, PROGRAMINTERFACE_BUFFER_VARIABLE, TargetProp, glu::TYPE_FLOAT_VEC4, "_unsized_array", 2);
5767 glu::DataType dataType;
5770 { 0, glu::TYPE_FLOAT },
5771 { 1, glu::TYPE_INT },
5772 { 1, glu::TYPE_UINT },
5773 { 1, glu::TYPE_BOOL },
5775 { 3, glu::TYPE_FLOAT_VEC2 },
5776 { 1, glu::TYPE_FLOAT_VEC3 },
5777 { 1, glu::TYPE_FLOAT_VEC4 },
5779 { 3, glu::TYPE_INT_VEC2 },
5780 { 2, glu::TYPE_INT_VEC3 },
5781 { 3, glu::TYPE_INT_VEC4 },
5783 { 3, glu::TYPE_UINT_VEC2 },
5784 { 2, glu::TYPE_UINT_VEC3 },
5785 { 3, glu::TYPE_UINT_VEC4 },
5787 { 3, glu::TYPE_BOOL_VEC2 },
5788 { 2, glu::TYPE_BOOL_VEC3 },
5789 { 3, glu::TYPE_BOOL_VEC4 },
5791 { 2, glu::TYPE_FLOAT_MAT2 },
5792 { 3, glu::TYPE_FLOAT_MAT2X3 },
5793 { 3, glu::TYPE_FLOAT_MAT2X4 },
5794 { 2, glu::TYPE_FLOAT_MAT3X2 },
5795 { 2, glu::TYPE_FLOAT_MAT3 },
5796 { 3, glu::TYPE_FLOAT_MAT3X4 },
5797 { 2, glu::TYPE_FLOAT_MAT4X2 },
5798 { 3, glu::TYPE_FLOAT_MAT4X3 },
5799 { 2, glu::TYPE_FLOAT_MAT4 },
5851 const ResourceDefinition::Node::SharedPtr shader (new ResourceDefinition::Shader(program, glu::SHADERTYPE_COMPUTE, glu::GLSL_VERSION_310_ES));
5853 const ResourceDefinition::Node::SharedPtr buffer (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_BUFFER));
5863 const glu::DataType type = generateRandomDataType(rnd, true);
5864 const glu::Layout layout = generateRandomVariableLayout(rnd, type, true);
5867 const ResourceDefinition::Node::SharedPtr buffer (new ResourceDefinition::StorageQualifier(defaultBlock, glu::STORAGE_BUFFER));
6025 addChild(new BufferBackedBlockInterfaceTestGroup(m_context, glu::STORAGE_UNIFORM));
6043 addChild(new BufferBackedBlockInterfaceTestGroup(m_context, glu::STORAGE_BUFFER));