xref: /aosp_15_r20/external/deqp/modules/glshared/glsShaderRenderCase.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _GLSSHADERRENDERCASE_HPP
2*35238bceSAndroid Build Coastguard Worker #define _GLSSHADERRENDERCASE_HPP
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL (ES) Module
5*35238bceSAndroid Build Coastguard Worker  * -----------------------------------------------
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
8*35238bceSAndroid Build Coastguard Worker  *
9*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker  *
15*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
20*35238bceSAndroid Build Coastguard Worker  *
21*35238bceSAndroid Build Coastguard Worker  *//*!
22*35238bceSAndroid Build Coastguard Worker  * \file
23*35238bceSAndroid Build Coastguard Worker  * \brief Shader execute test.
24*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker 
26*35238bceSAndroid Build Coastguard Worker #include "tcuDefs.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "tcuTestCase.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "tcuVector.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "tcuMatrix.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "tcuTexture.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "tcuSurface.hpp"
32*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
33*35238bceSAndroid Build Coastguard Worker #include "gluContextInfo.hpp"
34*35238bceSAndroid Build Coastguard Worker #include "gluShaderProgram.hpp"
35*35238bceSAndroid Build Coastguard Worker 
36*35238bceSAndroid Build Coastguard Worker #include <sstream>
37*35238bceSAndroid Build Coastguard Worker #include <string>
38*35238bceSAndroid Build Coastguard Worker 
39*35238bceSAndroid Build Coastguard Worker namespace glu
40*35238bceSAndroid Build Coastguard Worker {
41*35238bceSAndroid Build Coastguard Worker class RenderContext;
42*35238bceSAndroid Build Coastguard Worker class Texture2D;
43*35238bceSAndroid Build Coastguard Worker class TextureCube;
44*35238bceSAndroid Build Coastguard Worker class Texture2DArray;
45*35238bceSAndroid Build Coastguard Worker class Texture3D;
46*35238bceSAndroid Build Coastguard Worker } // namespace glu
47*35238bceSAndroid Build Coastguard Worker 
48*35238bceSAndroid Build Coastguard Worker namespace deqp
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker namespace gls
51*35238bceSAndroid Build Coastguard Worker {
52*35238bceSAndroid Build Coastguard Worker 
53*35238bceSAndroid Build Coastguard Worker // LineStream \todo [2011-10-17 pyry] Move to proper place!
54*35238bceSAndroid Build Coastguard Worker 
55*35238bceSAndroid Build Coastguard Worker class LineStream
56*35238bceSAndroid Build Coastguard Worker {
57*35238bceSAndroid Build Coastguard Worker public:
LineStream(int indent=0)58*35238bceSAndroid Build Coastguard Worker     LineStream(int indent = 0)
59*35238bceSAndroid Build Coastguard Worker     {
60*35238bceSAndroid Build Coastguard Worker         m_indent = indent;
61*35238bceSAndroid Build Coastguard Worker     }
~LineStream(void)62*35238bceSAndroid Build Coastguard Worker     ~LineStream(void)
63*35238bceSAndroid Build Coastguard Worker     {
64*35238bceSAndroid Build Coastguard Worker     }
65*35238bceSAndroid Build Coastguard Worker 
str(void) const66*35238bceSAndroid Build Coastguard Worker     const char *str(void) const
67*35238bceSAndroid Build Coastguard Worker     {
68*35238bceSAndroid Build Coastguard Worker         m_string = m_stream.str();
69*35238bceSAndroid Build Coastguard Worker         return m_string.c_str();
70*35238bceSAndroid Build Coastguard Worker     }
operator <<(const char * line)71*35238bceSAndroid Build Coastguard Worker     LineStream &operator<<(const char *line)
72*35238bceSAndroid Build Coastguard Worker     {
73*35238bceSAndroid Build Coastguard Worker         for (int i = 0; i < m_indent; i++)
74*35238bceSAndroid Build Coastguard Worker         {
75*35238bceSAndroid Build Coastguard Worker             m_stream << "\t";
76*35238bceSAndroid Build Coastguard Worker         }
77*35238bceSAndroid Build Coastguard Worker         m_stream << line << "\n";
78*35238bceSAndroid Build Coastguard Worker         return *this;
79*35238bceSAndroid Build Coastguard Worker     }
80*35238bceSAndroid Build Coastguard Worker 
81*35238bceSAndroid Build Coastguard Worker private:
82*35238bceSAndroid Build Coastguard Worker     int m_indent;
83*35238bceSAndroid Build Coastguard Worker     std::ostringstream m_stream;
84*35238bceSAndroid Build Coastguard Worker     mutable std::string m_string;
85*35238bceSAndroid Build Coastguard Worker };
86*35238bceSAndroid Build Coastguard Worker 
87*35238bceSAndroid Build Coastguard Worker class QuadGrid;
88*35238bceSAndroid Build Coastguard Worker 
89*35238bceSAndroid Build Coastguard Worker // TextureBinding
90*35238bceSAndroid Build Coastguard Worker 
91*35238bceSAndroid Build Coastguard Worker class TextureBinding
92*35238bceSAndroid Build Coastguard Worker {
93*35238bceSAndroid Build Coastguard Worker public:
94*35238bceSAndroid Build Coastguard Worker     enum Type
95*35238bceSAndroid Build Coastguard Worker     {
96*35238bceSAndroid Build Coastguard Worker         TYPE_NONE = 0,
97*35238bceSAndroid Build Coastguard Worker         TYPE_2D,
98*35238bceSAndroid Build Coastguard Worker         TYPE_CUBE_MAP,
99*35238bceSAndroid Build Coastguard Worker         TYPE_2D_ARRAY,
100*35238bceSAndroid Build Coastguard Worker         TYPE_3D,
101*35238bceSAndroid Build Coastguard Worker 
102*35238bceSAndroid Build Coastguard Worker         TYPE_LAST
103*35238bceSAndroid Build Coastguard Worker     };
104*35238bceSAndroid Build Coastguard Worker 
105*35238bceSAndroid Build Coastguard Worker     TextureBinding(const glu::Texture2D *tex2D, const tcu::Sampler &sampler);
106*35238bceSAndroid Build Coastguard Worker     TextureBinding(const glu::TextureCube *texCube, const tcu::Sampler &sampler);
107*35238bceSAndroid Build Coastguard Worker     TextureBinding(const glu::Texture2DArray *tex2DArray, const tcu::Sampler &sampler);
108*35238bceSAndroid Build Coastguard Worker     TextureBinding(const glu::Texture3D *tex3D, const tcu::Sampler &sampler);
109*35238bceSAndroid Build Coastguard Worker     TextureBinding(void);
110*35238bceSAndroid Build Coastguard Worker 
111*35238bceSAndroid Build Coastguard Worker     void setSampler(const tcu::Sampler &sampler);
112*35238bceSAndroid Build Coastguard Worker     void setTexture(const glu::Texture2D *tex2D);
113*35238bceSAndroid Build Coastguard Worker     void setTexture(const glu::TextureCube *texCube);
114*35238bceSAndroid Build Coastguard Worker     void setTexture(const glu::Texture2DArray *tex2DArray);
115*35238bceSAndroid Build Coastguard Worker     void setTexture(const glu::Texture3D *tex3D);
116*35238bceSAndroid Build Coastguard Worker 
getType(void) const117*35238bceSAndroid Build Coastguard Worker     Type getType(void) const
118*35238bceSAndroid Build Coastguard Worker     {
119*35238bceSAndroid Build Coastguard Worker         return m_type;
120*35238bceSAndroid Build Coastguard Worker     }
getSampler(void) const121*35238bceSAndroid Build Coastguard Worker     const tcu::Sampler &getSampler(void) const
122*35238bceSAndroid Build Coastguard Worker     {
123*35238bceSAndroid Build Coastguard Worker         return m_sampler;
124*35238bceSAndroid Build Coastguard Worker     }
get2D(void) const125*35238bceSAndroid Build Coastguard Worker     const glu::Texture2D *get2D(void) const
126*35238bceSAndroid Build Coastguard Worker     {
127*35238bceSAndroid Build Coastguard Worker         DE_ASSERT(getType() == TYPE_2D);
128*35238bceSAndroid Build Coastguard Worker         return m_binding.tex2D;
129*35238bceSAndroid Build Coastguard Worker     }
getCube(void) const130*35238bceSAndroid Build Coastguard Worker     const glu::TextureCube *getCube(void) const
131*35238bceSAndroid Build Coastguard Worker     {
132*35238bceSAndroid Build Coastguard Worker         DE_ASSERT(getType() == TYPE_CUBE_MAP);
133*35238bceSAndroid Build Coastguard Worker         return m_binding.texCube;
134*35238bceSAndroid Build Coastguard Worker     }
get2DArray(void) const135*35238bceSAndroid Build Coastguard Worker     const glu::Texture2DArray *get2DArray(void) const
136*35238bceSAndroid Build Coastguard Worker     {
137*35238bceSAndroid Build Coastguard Worker         DE_ASSERT(getType() == TYPE_2D_ARRAY);
138*35238bceSAndroid Build Coastguard Worker         return m_binding.tex2DArray;
139*35238bceSAndroid Build Coastguard Worker     }
get3D(void) const140*35238bceSAndroid Build Coastguard Worker     const glu::Texture3D *get3D(void) const
141*35238bceSAndroid Build Coastguard Worker     {
142*35238bceSAndroid Build Coastguard Worker         DE_ASSERT(getType() == TYPE_3D);
143*35238bceSAndroid Build Coastguard Worker         return m_binding.tex3D;
144*35238bceSAndroid Build Coastguard Worker     }
145*35238bceSAndroid Build Coastguard Worker 
146*35238bceSAndroid Build Coastguard Worker private:
147*35238bceSAndroid Build Coastguard Worker     Type m_type;
148*35238bceSAndroid Build Coastguard Worker     tcu::Sampler m_sampler;
149*35238bceSAndroid Build Coastguard Worker     union
150*35238bceSAndroid Build Coastguard Worker     {
151*35238bceSAndroid Build Coastguard Worker         const glu::Texture2D *tex2D;
152*35238bceSAndroid Build Coastguard Worker         const glu::TextureCube *texCube;
153*35238bceSAndroid Build Coastguard Worker         const glu::Texture2DArray *tex2DArray;
154*35238bceSAndroid Build Coastguard Worker         const glu::Texture3D *tex3D;
155*35238bceSAndroid Build Coastguard Worker     } m_binding;
156*35238bceSAndroid Build Coastguard Worker };
157*35238bceSAndroid Build Coastguard Worker 
158*35238bceSAndroid Build Coastguard Worker // ShaderEvalContext.
159*35238bceSAndroid Build Coastguard Worker 
160*35238bceSAndroid Build Coastguard Worker class ShaderEvalContext
161*35238bceSAndroid Build Coastguard Worker {
162*35238bceSAndroid Build Coastguard Worker public:
163*35238bceSAndroid Build Coastguard Worker     // Limits.
164*35238bceSAndroid Build Coastguard Worker     enum
165*35238bceSAndroid Build Coastguard Worker     {
166*35238bceSAndroid Build Coastguard Worker         MAX_USER_ATTRIBS = 4,
167*35238bceSAndroid Build Coastguard Worker         MAX_TEXTURES     = 4,
168*35238bceSAndroid Build Coastguard Worker     };
169*35238bceSAndroid Build Coastguard Worker 
170*35238bceSAndroid Build Coastguard Worker     struct ShaderSampler
171*35238bceSAndroid Build Coastguard Worker     {
172*35238bceSAndroid Build Coastguard Worker         tcu::Sampler sampler;
173*35238bceSAndroid Build Coastguard Worker         const tcu::Texture2D *tex2D;
174*35238bceSAndroid Build Coastguard Worker         const tcu::TextureCube *texCube;
175*35238bceSAndroid Build Coastguard Worker         const tcu::Texture2DArray *tex2DArray;
176*35238bceSAndroid Build Coastguard Worker         const tcu::Texture3D *tex3D;
177*35238bceSAndroid Build Coastguard Worker 
ShaderSamplerdeqp::gls::ShaderEvalContext::ShaderSampler178*35238bceSAndroid Build Coastguard Worker         inline ShaderSampler(void) : tex2D(DE_NULL), texCube(DE_NULL), tex2DArray(DE_NULL), tex3D(DE_NULL)
179*35238bceSAndroid Build Coastguard Worker         {
180*35238bceSAndroid Build Coastguard Worker         }
181*35238bceSAndroid Build Coastguard Worker     };
182*35238bceSAndroid Build Coastguard Worker 
183*35238bceSAndroid Build Coastguard Worker     ShaderEvalContext(const QuadGrid &quadGrid);
184*35238bceSAndroid Build Coastguard Worker     ~ShaderEvalContext(void);
185*35238bceSAndroid Build Coastguard Worker 
186*35238bceSAndroid Build Coastguard Worker     void reset(float sx, float sy);
187*35238bceSAndroid Build Coastguard Worker 
188*35238bceSAndroid Build Coastguard Worker     // Inputs.
189*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 coords;
190*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 unitCoords;
191*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 constCoords;
192*35238bceSAndroid Build Coastguard Worker 
193*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 in[MAX_USER_ATTRIBS];
194*35238bceSAndroid Build Coastguard Worker     ShaderSampler textures[MAX_TEXTURES];
195*35238bceSAndroid Build Coastguard Worker 
196*35238bceSAndroid Build Coastguard Worker     // Output.
197*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 color;
198*35238bceSAndroid Build Coastguard Worker     bool isDiscarded;
199*35238bceSAndroid Build Coastguard Worker 
200*35238bceSAndroid Build Coastguard Worker     // Functions.
discard(void)201*35238bceSAndroid Build Coastguard Worker     inline void discard(void)
202*35238bceSAndroid Build Coastguard Worker     {
203*35238bceSAndroid Build Coastguard Worker         isDiscarded = true;
204*35238bceSAndroid Build Coastguard Worker     }
205*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 texture2D(int unitNdx, const tcu::Vec2 &coords);
206*35238bceSAndroid Build Coastguard Worker 
207*35238bceSAndroid Build Coastguard Worker private:
208*35238bceSAndroid Build Coastguard Worker     const QuadGrid &quadGrid;
209*35238bceSAndroid Build Coastguard Worker };
210*35238bceSAndroid Build Coastguard Worker 
211*35238bceSAndroid Build Coastguard Worker // ShaderEvalFunc.
212*35238bceSAndroid Build Coastguard Worker 
213*35238bceSAndroid Build Coastguard Worker typedef void (*ShaderEvalFunc)(ShaderEvalContext &c);
214*35238bceSAndroid Build Coastguard Worker 
evalCoordsPassthroughX(ShaderEvalContext & c)215*35238bceSAndroid Build Coastguard Worker inline void evalCoordsPassthroughX(ShaderEvalContext &c)
216*35238bceSAndroid Build Coastguard Worker {
217*35238bceSAndroid Build Coastguard Worker     c.color.x() = c.coords.x();
218*35238bceSAndroid Build Coastguard Worker }
evalCoordsPassthroughXY(ShaderEvalContext & c)219*35238bceSAndroid Build Coastguard Worker inline void evalCoordsPassthroughXY(ShaderEvalContext &c)
220*35238bceSAndroid Build Coastguard Worker {
221*35238bceSAndroid Build Coastguard Worker     c.color.xy() = c.coords.swizzle(0, 1);
222*35238bceSAndroid Build Coastguard Worker }
evalCoordsPassthroughXYZ(ShaderEvalContext & c)223*35238bceSAndroid Build Coastguard Worker inline void evalCoordsPassthroughXYZ(ShaderEvalContext &c)
224*35238bceSAndroid Build Coastguard Worker {
225*35238bceSAndroid Build Coastguard Worker     c.color.xyz() = c.coords.swizzle(0, 1, 2);
226*35238bceSAndroid Build Coastguard Worker }
evalCoordsPassthrough(ShaderEvalContext & c)227*35238bceSAndroid Build Coastguard Worker inline void evalCoordsPassthrough(ShaderEvalContext &c)
228*35238bceSAndroid Build Coastguard Worker {
229*35238bceSAndroid Build Coastguard Worker     c.color = c.coords;
230*35238bceSAndroid Build Coastguard Worker }
evalCoordsSwizzleWZYX(ShaderEvalContext & c)231*35238bceSAndroid Build Coastguard Worker inline void evalCoordsSwizzleWZYX(ShaderEvalContext &c)
232*35238bceSAndroid Build Coastguard Worker {
233*35238bceSAndroid Build Coastguard Worker     c.color = c.coords.swizzle(3, 2, 1, 0);
234*35238bceSAndroid Build Coastguard Worker }
235*35238bceSAndroid Build Coastguard Worker 
236*35238bceSAndroid Build Coastguard Worker // ShaderEvaluator
237*35238bceSAndroid Build Coastguard Worker // Either inherit a class with overridden evaluate() or just pass in an evalFunc.
238*35238bceSAndroid Build Coastguard Worker 
239*35238bceSAndroid Build Coastguard Worker class ShaderEvaluator
240*35238bceSAndroid Build Coastguard Worker {
241*35238bceSAndroid Build Coastguard Worker public:
242*35238bceSAndroid Build Coastguard Worker     ShaderEvaluator(void);
243*35238bceSAndroid Build Coastguard Worker     ShaderEvaluator(ShaderEvalFunc evalFunc);
244*35238bceSAndroid Build Coastguard Worker     virtual ~ShaderEvaluator(void);
245*35238bceSAndroid Build Coastguard Worker 
246*35238bceSAndroid Build Coastguard Worker     virtual void evaluate(ShaderEvalContext &ctx);
247*35238bceSAndroid Build Coastguard Worker 
248*35238bceSAndroid Build Coastguard Worker private:
249*35238bceSAndroid Build Coastguard Worker     ShaderEvaluator(const ShaderEvaluator &);            // not allowed!
250*35238bceSAndroid Build Coastguard Worker     ShaderEvaluator &operator=(const ShaderEvaluator &); // not allowed!
251*35238bceSAndroid Build Coastguard Worker 
252*35238bceSAndroid Build Coastguard Worker     ShaderEvalFunc m_evalFunc;
253*35238bceSAndroid Build Coastguard Worker };
254*35238bceSAndroid Build Coastguard Worker 
255*35238bceSAndroid Build Coastguard Worker // ShaderRenderCase.
256*35238bceSAndroid Build Coastguard Worker 
257*35238bceSAndroid Build Coastguard Worker class ShaderRenderCase : public tcu::TestCase
258*35238bceSAndroid Build Coastguard Worker {
259*35238bceSAndroid Build Coastguard Worker public:
260*35238bceSAndroid Build Coastguard Worker     ShaderRenderCase(tcu::TestContext &testCtx, glu::RenderContext &renderCtx, const glu::ContextInfo &ctxInfo,
261*35238bceSAndroid Build Coastguard Worker                      const char *name, const char *description, bool isVertexCase, ShaderEvalFunc evalFunc);
262*35238bceSAndroid Build Coastguard Worker     ShaderRenderCase(tcu::TestContext &testCtx, glu::RenderContext &renderCtx, const glu::ContextInfo &ctxInfo,
263*35238bceSAndroid Build Coastguard Worker                      const char *name, const char *description, bool isVertexCase, ShaderEvaluator &evaluator);
264*35238bceSAndroid Build Coastguard Worker     virtual ~ShaderRenderCase(void);
265*35238bceSAndroid Build Coastguard Worker 
266*35238bceSAndroid Build Coastguard Worker     void init(void);
267*35238bceSAndroid Build Coastguard Worker     void deinit(void);
268*35238bceSAndroid Build Coastguard Worker 
269*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
270*35238bceSAndroid Build Coastguard Worker 
271*35238bceSAndroid Build Coastguard Worker protected:
272*35238bceSAndroid Build Coastguard Worker     virtual void setupShaderData(void);
273*35238bceSAndroid Build Coastguard Worker     virtual void setup(int programID);
274*35238bceSAndroid Build Coastguard Worker     virtual void setupUniforms(int programID, const tcu::Vec4 &constCoords);
275*35238bceSAndroid Build Coastguard Worker 
276*35238bceSAndroid Build Coastguard Worker     tcu::IVec2 getViewportSize(void) const;
277*35238bceSAndroid Build Coastguard Worker 
278*35238bceSAndroid Build Coastguard Worker     class CompileFailed : public tcu::TestError
279*35238bceSAndroid Build Coastguard Worker     {
280*35238bceSAndroid Build Coastguard Worker     public:
CompileFailed(const char * file,int line)281*35238bceSAndroid Build Coastguard Worker         inline CompileFailed(const char *file, int line)
282*35238bceSAndroid Build Coastguard Worker             : tcu::TestError("Failed to compile shader program", DE_NULL, file, line)
283*35238bceSAndroid Build Coastguard Worker         {
284*35238bceSAndroid Build Coastguard Worker         }
285*35238bceSAndroid Build Coastguard Worker     };
286*35238bceSAndroid Build Coastguard Worker 
287*35238bceSAndroid Build Coastguard Worker private:
288*35238bceSAndroid Build Coastguard Worker     ShaderRenderCase(const ShaderRenderCase &);            // not allowed!
289*35238bceSAndroid Build Coastguard Worker     ShaderRenderCase &operator=(const ShaderRenderCase &); // not allowed!
290*35238bceSAndroid Build Coastguard Worker 
291*35238bceSAndroid Build Coastguard Worker     void setupDefaultInputs(int programID);
292*35238bceSAndroid Build Coastguard Worker 
293*35238bceSAndroid Build Coastguard Worker     void render(tcu::Surface &result, int programID, const QuadGrid &quadGrid);
294*35238bceSAndroid Build Coastguard Worker     void computeVertexReference(tcu::Surface &result, const QuadGrid &quadGrid);
295*35238bceSAndroid Build Coastguard Worker     void computeFragmentReference(tcu::Surface &result, const QuadGrid &quadGrid);
296*35238bceSAndroid Build Coastguard Worker     bool compareImages(const tcu::Surface &resImage, const tcu::Surface &refImage, float errorThreshold);
297*35238bceSAndroid Build Coastguard Worker 
298*35238bceSAndroid Build Coastguard Worker protected:
299*35238bceSAndroid Build Coastguard Worker     glu::RenderContext &m_renderCtx;
300*35238bceSAndroid Build Coastguard Worker     const glu::ContextInfo &m_ctxInfo;
301*35238bceSAndroid Build Coastguard Worker 
302*35238bceSAndroid Build Coastguard Worker     bool m_isVertexCase;
303*35238bceSAndroid Build Coastguard Worker     ShaderEvaluator m_defaultEvaluator;
304*35238bceSAndroid Build Coastguard Worker     ShaderEvaluator &m_evaluator;
305*35238bceSAndroid Build Coastguard Worker     std::string m_vertShaderSource;
306*35238bceSAndroid Build Coastguard Worker     std::string m_fragShaderSource;
307*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 m_clearColor;
308*35238bceSAndroid Build Coastguard Worker 
309*35238bceSAndroid Build Coastguard Worker     std::vector<tcu::Mat4> m_userAttribTransforms;
310*35238bceSAndroid Build Coastguard Worker     std::vector<TextureBinding> m_textures;
311*35238bceSAndroid Build Coastguard Worker 
312*35238bceSAndroid Build Coastguard Worker     glu::ShaderProgram *m_program;
313*35238bceSAndroid Build Coastguard Worker     int m_gridSize;
314*35238bceSAndroid Build Coastguard Worker };
315*35238bceSAndroid Build Coastguard Worker 
316*35238bceSAndroid Build Coastguard Worker // Helpers.
317*35238bceSAndroid Build Coastguard Worker // \todo [2012-04-10 pyry] Move these to separate utility?
318*35238bceSAndroid Build Coastguard Worker 
319*35238bceSAndroid Build Coastguard Worker const char *getIntUniformName(int number);
320*35238bceSAndroid Build Coastguard Worker const char *getFloatUniformName(int number);
321*35238bceSAndroid Build Coastguard Worker const char *getFloatFractionUniformName(int number);
322*35238bceSAndroid Build Coastguard Worker 
323*35238bceSAndroid Build Coastguard Worker void setupDefaultUniforms(const glu::RenderContext &context, uint32_t programID);
324*35238bceSAndroid Build Coastguard Worker 
325*35238bceSAndroid Build Coastguard Worker } // namespace gls
326*35238bceSAndroid Build Coastguard Worker } // namespace deqp
327*35238bceSAndroid Build Coastguard Worker 
328*35238bceSAndroid Build Coastguard Worker #endif // _GLSSHADERRENDERCASE_HPP
329