Home | History | Annotate | Download | only in functional
      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