From: Jarkko Pöyry Date: Mon, 16 Mar 2015 20:05:57 +0000 (-0700) Subject: Remove struct-capturing XFB PIQ cases. X-Git-Tag: upstream/0.1.0~1879^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=46b763d53ec05813eb64188acff4191932d791ae;p=platform%2Fupstream%2FVK-GL-CTS.git Remove struct-capturing XFB PIQ cases. - Remove transform feedback program interface query cases that tried to capture whole struct. This was disallowed in the resolution of Khronos bug #12787. Bug: 18524718 Change-Id: Ibca5f334ffddb2647472c65dc34d5fa44953e730 --- diff --git a/modules/gles31/functional/es31fProgramInterfaceDefinition.cpp b/modules/gles31/functional/es31fProgramInterfaceDefinition.cpp index 01fc4b5..88ae724 100644 --- a/modules/gles31/functional/es31fProgramInterfaceDefinition.cpp +++ b/modules/gles31/functional/es31fProgramInterfaceDefinition.cpp @@ -22,6 +22,7 @@ *//*--------------------------------------------------------------------*/ #include "es31fProgramInterfaceDefinition.hpp" +#include "es31fProgramInterfaceDefinitionUtil.hpp" #include "gluVarType.hpp" #include "gluShaderProgram.hpp" #include "deSTLUtil.hpp" @@ -568,12 +569,13 @@ void Program::setTessellationNumOutputPatchVertices (deUint32 vertices) bool Program::isValid (void) const { - bool computePresent = false; - bool vertexPresent = false; - bool fragmentPresent = false; - bool tessControlPresent = false; - bool tessEvalPresent = false; - bool geometryPresent = false; + const bool isOpenGLES = (m_shaders.empty()) ? (false) : (glu::glslVersionIsES(m_shaders[0]->getVersion())); + bool computePresent = false; + bool vertexPresent = false; + bool fragmentPresent = false; + bool tessControlPresent = false; + bool tessEvalPresent = false; + bool geometryPresent = false; if (m_shaders.empty()) return false; @@ -629,6 +631,23 @@ bool Program::isValid (void) const if ((m_geoNumOutputVertices != 0) != geometryPresent) return false; + for (int ndx = 0; ndx < (int)m_xfbVaryings.size(); ++ndx) + { + // user-defined + if (m_xfbVaryings[ndx].find("gl_") != 0) + { + std::vector path; + if (!findProgramVariablePathByPathName(path, this, m_xfbVaryings[ndx], VariableSearchFilter::createShaderTypeStorageFilter(getProgramTransformFeedbackStage(this), glu::STORAGE_OUT))) + return false; + if (!path.back().isVariableType()) + return false; + + // Khronos bug #12787 disallowed capturing whole structs in OpenGL ES. + if (path.back().getVariableType()->isStructType() && isOpenGLES) + return false; + } + } + return true; } diff --git a/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp b/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp index b860f9e..83fa13c 100644 --- a/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp +++ b/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp @@ -6195,13 +6195,6 @@ static void generateTransformFeedbackResourceListBlockContents (Context& context const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(xfbTarget, glu::TYPE_FLOAT_VEC4)); targetGroup->addChild(new FeedbackResourceListTestCase(context, variable, "default_block_basic_type")); } - // .default_block_struct - { - const ResourceDefinition::Node::SharedPtr xfbTarget (new ResourceDefinition::TransformFeedbackTarget(output)); - const ResourceDefinition::Node::SharedPtr structMbr (new ResourceDefinition::StructMember(xfbTarget)); - const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(structMbr, glu::TYPE_FLOAT_VEC4)); - targetGroup->addChild(new FeedbackResourceListTestCase(context, variable, "default_block_struct")); - } // .default_block_struct_member { const ResourceDefinition::Node::SharedPtr structMbr (new ResourceDefinition::StructMember(output)); @@ -6244,13 +6237,6 @@ static void generateTransformFeedbackVariableBlockContents (Context& context, co const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(xfbTarget, glu::TYPE_FLOAT_VEC4)); targetGroup->addChild(new ResourceTestCase(context, variable, ProgramResourceQueryTestTarget(PROGRAMINTERFACE_TRANSFORM_FEEDBACK_VARYING, TargetProp), "default_block_basic_type")); } - // .default_block_struct - { - const ResourceDefinition::Node::SharedPtr xfbTarget (new ResourceDefinition::TransformFeedbackTarget(output)); - const ResourceDefinition::Node::SharedPtr structMbr (new ResourceDefinition::StructMember(xfbTarget)); - const ResourceDefinition::Node::SharedPtr variable (new ResourceDefinition::Variable(structMbr, glu::TYPE_FLOAT_VEC4)); - targetGroup->addChild(new ResourceTestCase(context, variable, ProgramResourceQueryTestTarget(PROGRAMINTERFACE_TRANSFORM_FEEDBACK_VARYING, TargetProp), "default_block_struct")); - } // .default_block_struct_member { const ResourceDefinition::Node::SharedPtr structMbr (new ResourceDefinition::StructMember(output));