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