| #ifndef _ES31FPROGRAMINTERFACEDEFINITION_HPP |
| #define _ES31FPROGRAMINTERFACEDEFINITION_HPP |
| /*------------------------------------------------------------------------- |
| * drawElements Quality Program OpenGL ES 3.1 Module |
| * ------------------------------------------------- |
| * |
| * Copyright 2014 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| *//*! |
| * \file |
| * \brief Program interface |
| *//*--------------------------------------------------------------------*/ |
| |
| #include "tcuDefs.hpp" |
| #include "tes31TestCase.hpp" |
| #include "gluShaderUtil.hpp" |
| #include "gluVarType.hpp" |
| |
| namespace deqp |
| { |
| namespace gles31 |
| { |
| namespace Functional |
| { |
| |
| enum ProgramInterface |
| { |
| PROGRAMINTERFACE_UNIFORM = 0, |
| PROGRAMINTERFACE_UNIFORM_BLOCK, |
| PROGRAMINTERFACE_ATOMIC_COUNTER_BUFFER, |
| PROGRAMINTERFACE_PROGRAM_INPUT, |
| PROGRAMINTERFACE_PROGRAM_OUTPUT, |
| PROGRAMINTERFACE_TRANSFORM_FEEDBACK_VARYING, |
| PROGRAMINTERFACE_BUFFER_VARIABLE, |
| PROGRAMINTERFACE_SHADER_STORAGE_BLOCK, |
| |
| PROGRAMINTERFACE_LAST |
| }; |
| |
| namespace ProgramInterfaceDefinition |
| { |
| |
| class Program; |
| |
| struct DefaultBlock |
| { |
| std::vector<glu::VariableDeclaration> variables; |
| std::vector<glu::InterfaceBlock> interfaceBlocks; |
| }; |
| |
| class Shader |
| { |
| public: |
| glu::ShaderType getType (void) const { return m_shaderType; } |
| glu::GLSLVersion getVersion (void) const { return m_version; } |
| bool isValid (void) const; |
| |
| DefaultBlock& getDefaultBlock (void) { return m_defaultBlock; } |
| const DefaultBlock& getDefaultBlock (void) const { return m_defaultBlock; } |
| |
| private: |
| Shader (glu::ShaderType type, glu::GLSLVersion version); |
| ~Shader (void); |
| |
| Shader (const Shader&); |
| Shader& operator= (const Shader&); |
| |
| const glu::ShaderType m_shaderType; |
| const glu::GLSLVersion m_version; |
| DefaultBlock m_defaultBlock; |
| |
| friend class Program; |
| }; |
| |
| class Program |
| { |
| public: |
| Program (void); |
| ~Program (void); |
| |
| Shader* addShader (glu::ShaderType type, glu::GLSLVersion version); |
| |
| void setSeparable (bool separable); |
| bool isSeparable (void) const; |
| |
| const std::vector<Shader*>& getShaders (void) const; |
| glu::ShaderType getFirstStage (void) const; |
| glu::ShaderType getLastStage (void) const; |
| bool hasStage (glu::ShaderType stage) const; |
| |
| void addTransformFeedbackVarying (const std::string& varName); |
| const std::vector<std::string>& getTransformFeedbackVaryings (void) const; |
| void setTransformFeedbackMode (deUint32 mode); |
| deUint32 getTransformFeedbackMode (void) const; |
| |
| deUint32 getGeometryNumOutputVertices (void) const; |
| void setGeometryNumOutputVertices (deUint32); |
| deUint32 getTessellationNumOutputPatchVertices (void) const; |
| void setTessellationNumOutputPatchVertices (deUint32); |
| |
| bool isValid (void) const; |
| |
| private: |
| Program& operator= (const Program&); |
| Program (const Program&); |
| |
| bool m_separable; |
| std::vector<Shader*> m_shaders; |
| std::vector<std::string> m_xfbVaryings; |
| deUint32 m_xfbMode; |
| deUint32 m_geoNumOutputVertices; |
| deUint32 m_tessNumOutputVertices; |
| }; |
| |
| } // ProgramInterfaceDefinition |
| |
| } // Functional |
| } // gles31 |
| } // deqp |
| |
| #endif // _ES31FPROGRAMINTERFACEDEFINITION_HPP |