1 #ifndef _ES31FPROGRAMINTERFACEDEFINITION_HPP 2 #define _ES31FPROGRAMINTERFACEDEFINITION_HPP 3 /*------------------------------------------------------------------------- 4 * drawElements Quality Program OpenGL ES 3.1 Module 5 * ------------------------------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Program interface 24 *//*--------------------------------------------------------------------*/ 25 26 #include "tcuDefs.hpp" 27 #include "tes31TestCase.hpp" 28 #include "gluShaderUtil.hpp" 29 #include "gluVarType.hpp" 30 31 namespace deqp 32 { 33 namespace gles31 34 { 35 namespace Functional 36 { 37 38 enum ProgramInterface 39 { 40 PROGRAMINTERFACE_UNIFORM = 0, 41 PROGRAMINTERFACE_UNIFORM_BLOCK, 42 PROGRAMINTERFACE_ATOMIC_COUNTER_BUFFER, 43 PROGRAMINTERFACE_PROGRAM_INPUT, 44 PROGRAMINTERFACE_PROGRAM_OUTPUT, 45 PROGRAMINTERFACE_TRANSFORM_FEEDBACK_VARYING, 46 PROGRAMINTERFACE_BUFFER_VARIABLE, 47 PROGRAMINTERFACE_SHADER_STORAGE_BLOCK, 48 49 PROGRAMINTERFACE_LAST 50 }; 51 52 namespace ProgramInterfaceDefinition 53 { 54 55 class Program; 56 57 struct DefaultBlock 58 { 59 std::vector<glu::VariableDeclaration> variables; 60 std::vector<glu::InterfaceBlock> interfaceBlocks; 61 }; 62 63 class Shader 64 { 65 public: 66 glu::ShaderType getType (void) const { return m_shaderType; } 67 glu::GLSLVersion getVersion (void) const { return m_version; } 68 bool isValid (void) const; 69 70 DefaultBlock& getDefaultBlock (void) { return m_defaultBlock; } 71 const DefaultBlock& getDefaultBlock (void) const { return m_defaultBlock; } 72 73 private: 74 Shader (glu::ShaderType type, glu::GLSLVersion version); 75 ~Shader (void); 76 77 Shader (const Shader&); 78 Shader& operator= (const Shader&); 79 80 const glu::ShaderType m_shaderType; 81 const glu::GLSLVersion m_version; 82 DefaultBlock m_defaultBlock; 83 84 friend class Program; 85 }; 86 87 class Program 88 { 89 public: 90 Program (void); 91 ~Program (void); 92 93 Shader* addShader (glu::ShaderType type, glu::GLSLVersion version); 94 95 void setSeparable (bool separable); 96 bool isSeparable (void) const; 97 98 const std::vector<Shader*>& getShaders (void) const; 99 glu::ShaderType getFirstStage (void) const; 100 glu::ShaderType getLastStage (void) const; 101 bool hasStage (glu::ShaderType stage) const; 102 103 void addTransformFeedbackVarying (const std::string& varName); 104 const std::vector<std::string>& getTransformFeedbackVaryings (void) const; 105 void setTransformFeedbackMode (deUint32 mode); 106 deUint32 getTransformFeedbackMode (void) const; 107 108 deUint32 getGeometryNumOutputVertices (void) const; 109 void setGeometryNumOutputVertices (deUint32); 110 deUint32 getTessellationNumOutputPatchVertices (void) const; 111 void setTessellationNumOutputPatchVertices (deUint32); 112 113 bool isValid (void) const; 114 115 private: 116 Program& operator= (const Program&); 117 Program (const Program&); 118 119 bool m_separable; 120 std::vector<Shader*> m_shaders; 121 std::vector<std::string> m_xfbVaryings; 122 deUint32 m_xfbMode; 123 deUint32 m_geoNumOutputVertices; 124 deUint32 m_tessNumOutputVertices; 125 }; 126 127 } // ProgramInterfaceDefinition 128 129 } // Functional 130 } // gles31 131 } // deqp 132 133 #endif // _ES31FPROGRAMINTERFACEDEFINITION_HPP 134