am b2c6d88a: Merge "Remove SRGB copy image test bug from test issues list." into...
[platform/upstream/VK-GL-CTS.git] / modules / glshared / glsRandomShaderCase.hpp
1 #ifndef _GLSRANDOMSHADERCASE_HPP
2 #define _GLSRANDOMSHADERCASE_HPP
3 /*-------------------------------------------------------------------------
4  * drawElements Quality Program OpenGL (ES) 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 Random shader test case.
24  *//*--------------------------------------------------------------------*/
25
26 #include "tcuDefs.hpp"
27 #include "tcuTestCase.hpp"
28 #include "gluRenderContext.hpp"
29 #include "rsgParameters.hpp"
30 #include "tcuSurface.hpp"
31 #include "rsgShader.hpp"
32 #include "rsgVariableValue.hpp"
33 #include "gluTexture.hpp"
34
35 #include <string>
36 #include <vector>
37 #include <map>
38
39 namespace deqp
40 {
41 namespace gls
42 {
43
44 class VertexArray
45 {
46 public:
47                                                                 VertexArray                     (const rsg::ShaderInput* input, int numVertices);
48                                                                 ~VertexArray            (void) {}
49
50         const std::vector<float>&       getVertices                     (void) const    { return m_vertices;            }
51         std::vector<float>&                     getVertices                     (void)                  { return m_vertices;            }
52         const char*                                     getName                         (void) const    { return m_input->getVariable()->getName();                                             }
53         int                                                     getNumComponents        (void) const    { return m_input->getVariable()->getType().getNumElements();    }
54         rsg::ConstValueRangeAccess      getValueRange           (void) const    { return m_input->getValueRange();                                                              }
55
56 private:
57         const rsg::ShaderInput*         m_input;
58         std::vector<float>                      m_vertices;
59 };
60
61 class TextureManager
62 {
63 public:
64                                                                                                                         TextureManager          (void);
65                                                                                                                         ~TextureManager         (void);
66
67         void                                                                                                    bindTexture                     (int unit, const glu::Texture2D* tex2D);
68         void                                                                                                    bindTexture                     (int unit, const glu::TextureCube* texCube);
69
70         std::vector<std::pair<int, const glu::Texture2D*> >             getBindings2D           (void) const;
71         std::vector<std::pair<int, const glu::TextureCube*> >   getBindingsCube         (void) const;
72
73 private:
74         std::map<int, const glu::Texture2D*>                                    m_tex2D;
75         std::map<int, const glu::TextureCube*>                                  m_texCube;
76 };
77
78 class RandomShaderCase : public tcu::TestCase
79 {
80 public:
81                                                                         RandomShaderCase                (tcu::TestContext& testCtx, glu::RenderContext& renderCtx, const char* name, const char* description, const rsg::ProgramParameters& params);
82         virtual                                                 ~RandomShaderCase               (void);
83
84         virtual void                                    init                                    (void);
85         virtual void                                    deinit                                  (void);
86         virtual IterateResult                   iterate                                 (void);
87
88 private:
89         void                                                    checkShaderLimits               (const rsg::Shader& shader) const;
90         void                                                    checkProgramLimits              (const rsg::Shader& vtxShader, const rsg::Shader& frgShader) const;
91
92 protected:
93         glu::RenderContext&                             m_renderCtx;
94
95         // \todo [2011-12-21 pyry] Multiple textures!
96         const glu::Texture2D*                   getTex2D                                (void);
97         const glu::TextureCube*                 getTexCube                              (void);
98
99         rsg::ProgramParameters                  m_parameters;
100         int                                                             m_gridWidth;
101         int                                                             m_gridHeight;
102
103         rsg::Shader                                             m_vertexShader;
104         rsg::Shader                                             m_fragmentShader;
105         std::vector<rsg::VariableValue> m_uniforms;
106
107         std::vector<VertexArray>                m_vertexArrays;
108         std::vector<deUint16>                   m_indices;
109
110         TextureManager                                  m_texManager;
111         glu::Texture2D*                                 m_tex2D;
112         glu::TextureCube*                               m_texCube;
113 };
114
115 } // gls
116 } // deqp
117
118 #endif // _GLSRANDOMSHADERCASE_HPP