1*35238bceSAndroid Build Coastguard Worker #ifndef _GLUSHADERPROGRAM_HPP
2*35238bceSAndroid Build Coastguard Worker #define _GLUSHADERPROGRAM_HPP
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES Utilities
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 and Program helpers.
24*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker
26*35238bceSAndroid Build Coastguard Worker #include "gluDefs.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "gluShaderUtil.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "qpTestLog.h"
30*35238bceSAndroid Build Coastguard Worker
31*35238bceSAndroid Build Coastguard Worker #include <string>
32*35238bceSAndroid Build Coastguard Worker #include <vector>
33*35238bceSAndroid Build Coastguard Worker
34*35238bceSAndroid Build Coastguard Worker namespace tcu
35*35238bceSAndroid Build Coastguard Worker {
36*35238bceSAndroid Build Coastguard Worker class TestLog;
37*35238bceSAndroid Build Coastguard Worker }
38*35238bceSAndroid Build Coastguard Worker
39*35238bceSAndroid Build Coastguard Worker namespace glu
40*35238bceSAndroid Build Coastguard Worker {
41*35238bceSAndroid Build Coastguard Worker
42*35238bceSAndroid Build Coastguard Worker class RenderContext;
43*35238bceSAndroid Build Coastguard Worker
44*35238bceSAndroid Build Coastguard Worker typedef std::vector<uint32_t> ShaderBinaryDataType;
45*35238bceSAndroid Build Coastguard Worker
46*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
47*35238bceSAndroid Build Coastguard Worker * \brief Shader information (compile status, log, etc.).
48*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
49*35238bceSAndroid Build Coastguard Worker struct ShaderInfo
50*35238bceSAndroid Build Coastguard Worker {
51*35238bceSAndroid Build Coastguard Worker ShaderType type; //!< Shader type.
52*35238bceSAndroid Build Coastguard Worker std::string source; //!< Shader source.
53*35238bceSAndroid Build Coastguard Worker std::string infoLog; //!< Compile info log.
54*35238bceSAndroid Build Coastguard Worker bool compileOk; //!< Did compilation succeed?
55*35238bceSAndroid Build Coastguard Worker uint64_t compileTimeUs; //!< Compile time in microseconds (us).
56*35238bceSAndroid Build Coastguard Worker
ShaderInfoglu::ShaderInfo57*35238bceSAndroid Build Coastguard Worker ShaderInfo(void) : type(SHADERTYPE_LAST), compileOk(false), compileTimeUs(0)
58*35238bceSAndroid Build Coastguard Worker {
59*35238bceSAndroid Build Coastguard Worker }
60*35238bceSAndroid Build Coastguard Worker };
61*35238bceSAndroid Build Coastguard Worker
62*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
63*35238bceSAndroid Build Coastguard Worker * \brief Program information (link status, log).
64*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
65*35238bceSAndroid Build Coastguard Worker struct ProgramInfo
66*35238bceSAndroid Build Coastguard Worker {
67*35238bceSAndroid Build Coastguard Worker std::string infoLog; //!< Link info log.
68*35238bceSAndroid Build Coastguard Worker bool linkOk; //!< Did link succeed?
69*35238bceSAndroid Build Coastguard Worker uint64_t linkTimeUs; //!< Link time in microseconds (us).
70*35238bceSAndroid Build Coastguard Worker
ProgramInfoglu::ProgramInfo71*35238bceSAndroid Build Coastguard Worker ProgramInfo(void) : linkOk(false), linkTimeUs(0)
72*35238bceSAndroid Build Coastguard Worker {
73*35238bceSAndroid Build Coastguard Worker }
74*35238bceSAndroid Build Coastguard Worker };
75*35238bceSAndroid Build Coastguard Worker
76*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
77*35238bceSAndroid Build Coastguard Worker * \brief Combined shader compilation and program linking info.
78*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
79*35238bceSAndroid Build Coastguard Worker struct ShaderProgramInfo
80*35238bceSAndroid Build Coastguard Worker {
81*35238bceSAndroid Build Coastguard Worker glu::ProgramInfo program;
82*35238bceSAndroid Build Coastguard Worker std::vector<glu::ShaderInfo> shaders;
83*35238bceSAndroid Build Coastguard Worker };
84*35238bceSAndroid Build Coastguard Worker
85*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
86*35238bceSAndroid Build Coastguard Worker * \brief Shader object.
87*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
88*35238bceSAndroid Build Coastguard Worker class Shader
89*35238bceSAndroid Build Coastguard Worker {
90*35238bceSAndroid Build Coastguard Worker public:
91*35238bceSAndroid Build Coastguard Worker Shader(const glw::Functions &gl, ShaderType shaderType);
92*35238bceSAndroid Build Coastguard Worker Shader(const RenderContext &renderCtx, ShaderType shaderType);
93*35238bceSAndroid Build Coastguard Worker ~Shader(void);
94*35238bceSAndroid Build Coastguard Worker
95*35238bceSAndroid Build Coastguard Worker void setSources(int numSourceStrings, const char *const *sourceStrings, const int *lengths);
96*35238bceSAndroid Build Coastguard Worker void compile(void);
97*35238bceSAndroid Build Coastguard Worker void specialize(const char *entryPoint, glw::GLuint numSpecializationConstants, const glw::GLuint *constantIndex,
98*35238bceSAndroid Build Coastguard Worker const glw::GLuint *constantValue);
99*35238bceSAndroid Build Coastguard Worker
getShader(void) const100*35238bceSAndroid Build Coastguard Worker uint32_t getShader(void) const
101*35238bceSAndroid Build Coastguard Worker {
102*35238bceSAndroid Build Coastguard Worker return m_shader;
103*35238bceSAndroid Build Coastguard Worker }
getInfo(void) const104*35238bceSAndroid Build Coastguard Worker const ShaderInfo &getInfo(void) const
105*35238bceSAndroid Build Coastguard Worker {
106*35238bceSAndroid Build Coastguard Worker return m_info;
107*35238bceSAndroid Build Coastguard Worker }
108*35238bceSAndroid Build Coastguard Worker
getType(void) const109*35238bceSAndroid Build Coastguard Worker glu::ShaderType getType(void) const
110*35238bceSAndroid Build Coastguard Worker {
111*35238bceSAndroid Build Coastguard Worker return getInfo().type;
112*35238bceSAndroid Build Coastguard Worker }
getCompileStatus(void) const113*35238bceSAndroid Build Coastguard Worker bool getCompileStatus(void) const
114*35238bceSAndroid Build Coastguard Worker {
115*35238bceSAndroid Build Coastguard Worker return getInfo().compileOk;
116*35238bceSAndroid Build Coastguard Worker }
getSource(void) const117*35238bceSAndroid Build Coastguard Worker const std::string &getSource(void) const
118*35238bceSAndroid Build Coastguard Worker {
119*35238bceSAndroid Build Coastguard Worker return getInfo().source;
120*35238bceSAndroid Build Coastguard Worker }
getInfoLog(void) const121*35238bceSAndroid Build Coastguard Worker const std::string &getInfoLog(void) const
122*35238bceSAndroid Build Coastguard Worker {
123*35238bceSAndroid Build Coastguard Worker return getInfo().infoLog;
124*35238bceSAndroid Build Coastguard Worker }
125*35238bceSAndroid Build Coastguard Worker
operator *(void) const126*35238bceSAndroid Build Coastguard Worker uint32_t operator*(void) const
127*35238bceSAndroid Build Coastguard Worker {
128*35238bceSAndroid Build Coastguard Worker return getShader();
129*35238bceSAndroid Build Coastguard Worker }
130*35238bceSAndroid Build Coastguard Worker
131*35238bceSAndroid Build Coastguard Worker private:
132*35238bceSAndroid Build Coastguard Worker Shader(const Shader &other);
133*35238bceSAndroid Build Coastguard Worker Shader &operator=(const Shader &other);
134*35238bceSAndroid Build Coastguard Worker
135*35238bceSAndroid Build Coastguard Worker const glw::Functions &m_gl;
136*35238bceSAndroid Build Coastguard Worker uint32_t m_shader; //!< Shader handle.
137*35238bceSAndroid Build Coastguard Worker ShaderInfo m_info; //!< Client-side clone of state for debug / perf reasons.
138*35238bceSAndroid Build Coastguard Worker };
139*35238bceSAndroid Build Coastguard Worker
140*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
141*35238bceSAndroid Build Coastguard Worker * \brief Program object.
142*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
143*35238bceSAndroid Build Coastguard Worker class Program
144*35238bceSAndroid Build Coastguard Worker {
145*35238bceSAndroid Build Coastguard Worker public:
146*35238bceSAndroid Build Coastguard Worker Program(const glw::Functions &gl);
147*35238bceSAndroid Build Coastguard Worker Program(const RenderContext &renderCtx);
148*35238bceSAndroid Build Coastguard Worker Program(const RenderContext &renderCtx, uint32_t program);
149*35238bceSAndroid Build Coastguard Worker ~Program(void);
150*35238bceSAndroid Build Coastguard Worker
151*35238bceSAndroid Build Coastguard Worker void attachShader(uint32_t shader);
152*35238bceSAndroid Build Coastguard Worker void detachShader(uint32_t shader);
153*35238bceSAndroid Build Coastguard Worker
154*35238bceSAndroid Build Coastguard Worker void bindAttribLocation(uint32_t location, const char *name);
155*35238bceSAndroid Build Coastguard Worker void transformFeedbackVaryings(int count, const char *const *varyings, uint32_t bufferMode);
156*35238bceSAndroid Build Coastguard Worker
157*35238bceSAndroid Build Coastguard Worker void link(void);
158*35238bceSAndroid Build Coastguard Worker
getProgram(void) const159*35238bceSAndroid Build Coastguard Worker uint32_t getProgram(void) const
160*35238bceSAndroid Build Coastguard Worker {
161*35238bceSAndroid Build Coastguard Worker return m_program;
162*35238bceSAndroid Build Coastguard Worker }
getInfo(void) const163*35238bceSAndroid Build Coastguard Worker const ProgramInfo &getInfo(void) const
164*35238bceSAndroid Build Coastguard Worker {
165*35238bceSAndroid Build Coastguard Worker return m_info;
166*35238bceSAndroid Build Coastguard Worker }
167*35238bceSAndroid Build Coastguard Worker
getLinkStatus(void) const168*35238bceSAndroid Build Coastguard Worker bool getLinkStatus(void) const
169*35238bceSAndroid Build Coastguard Worker {
170*35238bceSAndroid Build Coastguard Worker return getInfo().linkOk;
171*35238bceSAndroid Build Coastguard Worker }
getInfoLog(void) const172*35238bceSAndroid Build Coastguard Worker const std::string &getInfoLog(void) const
173*35238bceSAndroid Build Coastguard Worker {
174*35238bceSAndroid Build Coastguard Worker return getInfo().infoLog;
175*35238bceSAndroid Build Coastguard Worker }
176*35238bceSAndroid Build Coastguard Worker
177*35238bceSAndroid Build Coastguard Worker bool isSeparable(void) const;
178*35238bceSAndroid Build Coastguard Worker void setSeparable(bool separable);
179*35238bceSAndroid Build Coastguard Worker
180*35238bceSAndroid Build Coastguard Worker int getUniformLocation(const std::string &name);
181*35238bceSAndroid Build Coastguard Worker
operator *(void) const182*35238bceSAndroid Build Coastguard Worker uint32_t operator*(void) const
183*35238bceSAndroid Build Coastguard Worker {
184*35238bceSAndroid Build Coastguard Worker return getProgram();
185*35238bceSAndroid Build Coastguard Worker }
186*35238bceSAndroid Build Coastguard Worker
187*35238bceSAndroid Build Coastguard Worker private:
188*35238bceSAndroid Build Coastguard Worker Program(const Program &other);
189*35238bceSAndroid Build Coastguard Worker Program &operator=(const Program &other);
190*35238bceSAndroid Build Coastguard Worker
191*35238bceSAndroid Build Coastguard Worker const glw::Functions &m_gl;
192*35238bceSAndroid Build Coastguard Worker uint32_t m_program;
193*35238bceSAndroid Build Coastguard Worker ProgramInfo m_info;
194*35238bceSAndroid Build Coastguard Worker };
195*35238bceSAndroid Build Coastguard Worker
196*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
197*35238bceSAndroid Build Coastguard Worker * \brief Program pipeline object.
198*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
199*35238bceSAndroid Build Coastguard Worker class ProgramPipeline
200*35238bceSAndroid Build Coastguard Worker {
201*35238bceSAndroid Build Coastguard Worker public:
202*35238bceSAndroid Build Coastguard Worker ProgramPipeline(const RenderContext &renderCtx);
203*35238bceSAndroid Build Coastguard Worker ProgramPipeline(const glw::Functions &gl);
204*35238bceSAndroid Build Coastguard Worker ~ProgramPipeline(void);
205*35238bceSAndroid Build Coastguard Worker
getPipeline(void) const206*35238bceSAndroid Build Coastguard Worker uint32_t getPipeline(void) const
207*35238bceSAndroid Build Coastguard Worker {
208*35238bceSAndroid Build Coastguard Worker return m_pipeline;
209*35238bceSAndroid Build Coastguard Worker }
210*35238bceSAndroid Build Coastguard Worker void useProgramStages(uint32_t stages, uint32_t program);
211*35238bceSAndroid Build Coastguard Worker void activeShaderProgram(uint32_t program);
212*35238bceSAndroid Build Coastguard Worker bool isValid(void);
213*35238bceSAndroid Build Coastguard Worker
214*35238bceSAndroid Build Coastguard Worker private:
215*35238bceSAndroid Build Coastguard Worker ProgramPipeline(const ProgramPipeline &other);
216*35238bceSAndroid Build Coastguard Worker ProgramPipeline &operator=(const ProgramPipeline &other);
217*35238bceSAndroid Build Coastguard Worker
218*35238bceSAndroid Build Coastguard Worker const glw::Functions &m_gl;
219*35238bceSAndroid Build Coastguard Worker uint32_t m_pipeline;
220*35238bceSAndroid Build Coastguard Worker };
221*35238bceSAndroid Build Coastguard Worker
222*35238bceSAndroid Build Coastguard Worker struct ProgramSources;
223*35238bceSAndroid Build Coastguard Worker struct ProgramBinaries;
224*35238bceSAndroid Build Coastguard Worker
225*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
226*35238bceSAndroid Build Coastguard Worker * \brief Shader program manager.
227*35238bceSAndroid Build Coastguard Worker *
228*35238bceSAndroid Build Coastguard Worker * ShaderProgram manages both Shader and Program objects, and provides
229*35238bceSAndroid Build Coastguard Worker * convenient API for constructing such programs.
230*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
231*35238bceSAndroid Build Coastguard Worker class ShaderProgram
232*35238bceSAndroid Build Coastguard Worker {
233*35238bceSAndroid Build Coastguard Worker public:
234*35238bceSAndroid Build Coastguard Worker ShaderProgram(const glw::Functions &gl, const ProgramSources &sources);
235*35238bceSAndroid Build Coastguard Worker ShaderProgram(const glw::Functions &gl, const ProgramBinaries &binaries);
236*35238bceSAndroid Build Coastguard Worker ShaderProgram(const RenderContext &renderCtx, const ProgramSources &sources);
237*35238bceSAndroid Build Coastguard Worker ShaderProgram(const RenderContext &renderCtx, const ProgramBinaries &binaries);
238*35238bceSAndroid Build Coastguard Worker ~ShaderProgram(void);
239*35238bceSAndroid Build Coastguard Worker
isOk(void) const240*35238bceSAndroid Build Coastguard Worker bool isOk(void) const
241*35238bceSAndroid Build Coastguard Worker {
242*35238bceSAndroid Build Coastguard Worker return m_program.getLinkStatus();
243*35238bceSAndroid Build Coastguard Worker }
getProgram(void) const244*35238bceSAndroid Build Coastguard Worker uint32_t getProgram(void) const
245*35238bceSAndroid Build Coastguard Worker {
246*35238bceSAndroid Build Coastguard Worker return m_program.getProgram();
247*35238bceSAndroid Build Coastguard Worker }
248*35238bceSAndroid Build Coastguard Worker
hasShader(glu::ShaderType shaderType) const249*35238bceSAndroid Build Coastguard Worker bool hasShader(glu::ShaderType shaderType) const
250*35238bceSAndroid Build Coastguard Worker {
251*35238bceSAndroid Build Coastguard Worker return !m_shaders[shaderType].empty();
252*35238bceSAndroid Build Coastguard Worker }
getShader(glu::ShaderType shaderType,int shaderNdx=0) const253*35238bceSAndroid Build Coastguard Worker Shader *getShader(glu::ShaderType shaderType, int shaderNdx = 0) const
254*35238bceSAndroid Build Coastguard Worker {
255*35238bceSAndroid Build Coastguard Worker return m_shaders[shaderType][shaderNdx];
256*35238bceSAndroid Build Coastguard Worker }
getNumShaders(glu::ShaderType shaderType) const257*35238bceSAndroid Build Coastguard Worker int getNumShaders(glu::ShaderType shaderType) const
258*35238bceSAndroid Build Coastguard Worker {
259*35238bceSAndroid Build Coastguard Worker return (int)m_shaders[shaderType].size();
260*35238bceSAndroid Build Coastguard Worker }
getShaderInfo(glu::ShaderType shaderType,int shaderNdx=0) const261*35238bceSAndroid Build Coastguard Worker const ShaderInfo &getShaderInfo(glu::ShaderType shaderType, int shaderNdx = 0) const
262*35238bceSAndroid Build Coastguard Worker {
263*35238bceSAndroid Build Coastguard Worker return m_shaders[shaderType][shaderNdx]->getInfo();
264*35238bceSAndroid Build Coastguard Worker }
getProgramInfo(void) const265*35238bceSAndroid Build Coastguard Worker const ProgramInfo &getProgramInfo(void) const
266*35238bceSAndroid Build Coastguard Worker {
267*35238bceSAndroid Build Coastguard Worker return m_program.getInfo();
268*35238bceSAndroid Build Coastguard Worker }
269*35238bceSAndroid Build Coastguard Worker
270*35238bceSAndroid Build Coastguard Worker private:
271*35238bceSAndroid Build Coastguard Worker ShaderProgram(const ShaderProgram &other);
272*35238bceSAndroid Build Coastguard Worker ShaderProgram &operator=(const ShaderProgram &other);
273*35238bceSAndroid Build Coastguard Worker void init(const glw::Functions &gl, const ProgramSources &sources);
274*35238bceSAndroid Build Coastguard Worker void init(const glw::Functions &gl, const ProgramBinaries &binaries);
275*35238bceSAndroid Build Coastguard Worker void setBinary(const glw::Functions &gl, std::vector<Shader *> &shaders, glw::GLenum binaryFormat,
276*35238bceSAndroid Build Coastguard Worker const void *binaryData, const int length);
277*35238bceSAndroid Build Coastguard Worker
278*35238bceSAndroid Build Coastguard Worker std::vector<Shader *> m_shaders[SHADERTYPE_LAST];
279*35238bceSAndroid Build Coastguard Worker Program m_program;
280*35238bceSAndroid Build Coastguard Worker };
281*35238bceSAndroid Build Coastguard Worker
282*35238bceSAndroid Build Coastguard Worker // Utilities.
283*35238bceSAndroid Build Coastguard Worker
284*35238bceSAndroid Build Coastguard Worker uint32_t getGLShaderType(ShaderType shaderType);
285*35238bceSAndroid Build Coastguard Worker uint32_t getGLShaderTypeBit(ShaderType shaderType);
286*35238bceSAndroid Build Coastguard Worker qpShaderType getLogShaderType(ShaderType shaderType);
287*35238bceSAndroid Build Coastguard Worker
288*35238bceSAndroid Build Coastguard Worker tcu::TestLog &operator<<(tcu::TestLog &log, const ShaderInfo &shaderInfo);
289*35238bceSAndroid Build Coastguard Worker tcu::TestLog &operator<<(tcu::TestLog &log, const ShaderProgramInfo &shaderProgramInfo);
290*35238bceSAndroid Build Coastguard Worker tcu::TestLog &operator<<(tcu::TestLog &log, const ProgramSources &sources);
291*35238bceSAndroid Build Coastguard Worker tcu::TestLog &operator<<(tcu::TestLog &log, const Shader &shader);
292*35238bceSAndroid Build Coastguard Worker tcu::TestLog &operator<<(tcu::TestLog &log, const ShaderProgram &program);
293*35238bceSAndroid Build Coastguard Worker
294*35238bceSAndroid Build Coastguard Worker // ProgramSources utilities and implementation.
295*35238bceSAndroid Build Coastguard Worker
296*35238bceSAndroid Build Coastguard Worker struct AttribLocationBinding
297*35238bceSAndroid Build Coastguard Worker {
298*35238bceSAndroid Build Coastguard Worker std::string name;
299*35238bceSAndroid Build Coastguard Worker uint32_t location;
300*35238bceSAndroid Build Coastguard Worker
AttribLocationBindingglu::AttribLocationBinding301*35238bceSAndroid Build Coastguard Worker AttribLocationBinding(void) : location(0)
302*35238bceSAndroid Build Coastguard Worker {
303*35238bceSAndroid Build Coastguard Worker }
AttribLocationBindingglu::AttribLocationBinding304*35238bceSAndroid Build Coastguard Worker AttribLocationBinding(const std::string &name_, uint32_t location_) : name(name_), location(location_)
305*35238bceSAndroid Build Coastguard Worker {
306*35238bceSAndroid Build Coastguard Worker }
307*35238bceSAndroid Build Coastguard Worker };
308*35238bceSAndroid Build Coastguard Worker
309*35238bceSAndroid Build Coastguard Worker struct TransformFeedbackMode
310*35238bceSAndroid Build Coastguard Worker {
311*35238bceSAndroid Build Coastguard Worker uint32_t mode;
312*35238bceSAndroid Build Coastguard Worker
TransformFeedbackModeglu::TransformFeedbackMode313*35238bceSAndroid Build Coastguard Worker TransformFeedbackMode(void) : mode(0)
314*35238bceSAndroid Build Coastguard Worker {
315*35238bceSAndroid Build Coastguard Worker }
TransformFeedbackModeglu::TransformFeedbackMode316*35238bceSAndroid Build Coastguard Worker TransformFeedbackMode(uint32_t mode_) : mode(mode_)
317*35238bceSAndroid Build Coastguard Worker {
318*35238bceSAndroid Build Coastguard Worker }
319*35238bceSAndroid Build Coastguard Worker };
320*35238bceSAndroid Build Coastguard Worker
321*35238bceSAndroid Build Coastguard Worker struct TransformFeedbackVarying
322*35238bceSAndroid Build Coastguard Worker {
323*35238bceSAndroid Build Coastguard Worker std::string name;
324*35238bceSAndroid Build Coastguard Worker
TransformFeedbackVaryingglu::TransformFeedbackVarying325*35238bceSAndroid Build Coastguard Worker explicit TransformFeedbackVarying(const std::string &name_) : name(name_)
326*35238bceSAndroid Build Coastguard Worker {
327*35238bceSAndroid Build Coastguard Worker }
328*35238bceSAndroid Build Coastguard Worker };
329*35238bceSAndroid Build Coastguard Worker
330*35238bceSAndroid Build Coastguard Worker struct ProgramSeparable
331*35238bceSAndroid Build Coastguard Worker {
332*35238bceSAndroid Build Coastguard Worker bool separable;
ProgramSeparableglu::ProgramSeparable333*35238bceSAndroid Build Coastguard Worker explicit ProgramSeparable(bool separable_) : separable(separable_)
334*35238bceSAndroid Build Coastguard Worker {
335*35238bceSAndroid Build Coastguard Worker }
336*35238bceSAndroid Build Coastguard Worker };
337*35238bceSAndroid Build Coastguard Worker
338*35238bceSAndroid Build Coastguard Worker template <typename Iterator>
339*35238bceSAndroid Build Coastguard Worker struct TransformFeedbackVaryings
340*35238bceSAndroid Build Coastguard Worker {
341*35238bceSAndroid Build Coastguard Worker Iterator begin;
342*35238bceSAndroid Build Coastguard Worker Iterator end;
343*35238bceSAndroid Build Coastguard Worker
TransformFeedbackVaryingsglu::TransformFeedbackVaryings344*35238bceSAndroid Build Coastguard Worker TransformFeedbackVaryings(Iterator begin_, Iterator end_) : begin(begin_), end(end_)
345*35238bceSAndroid Build Coastguard Worker {
346*35238bceSAndroid Build Coastguard Worker }
347*35238bceSAndroid Build Coastguard Worker };
348*35238bceSAndroid Build Coastguard Worker
349*35238bceSAndroid Build Coastguard Worker struct ShaderSource
350*35238bceSAndroid Build Coastguard Worker {
351*35238bceSAndroid Build Coastguard Worker ShaderType shaderType;
352*35238bceSAndroid Build Coastguard Worker std::string source;
353*35238bceSAndroid Build Coastguard Worker
ShaderSourceglu::ShaderSource354*35238bceSAndroid Build Coastguard Worker ShaderSource(void) : shaderType(SHADERTYPE_LAST)
355*35238bceSAndroid Build Coastguard Worker {
356*35238bceSAndroid Build Coastguard Worker }
ShaderSourceglu::ShaderSource357*35238bceSAndroid Build Coastguard Worker ShaderSource(glu::ShaderType shaderType_, const std::string &source_) : shaderType(shaderType_), source(source_)
358*35238bceSAndroid Build Coastguard Worker {
359*35238bceSAndroid Build Coastguard Worker DE_ASSERT(!source_.empty());
360*35238bceSAndroid Build Coastguard Worker }
361*35238bceSAndroid Build Coastguard Worker };
362*35238bceSAndroid Build Coastguard Worker
363*35238bceSAndroid Build Coastguard Worker struct VertexSource : public ShaderSource
364*35238bceSAndroid Build Coastguard Worker {
VertexSourceglu::VertexSource365*35238bceSAndroid Build Coastguard Worker VertexSource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_VERTEX, source_)
366*35238bceSAndroid Build Coastguard Worker {
367*35238bceSAndroid Build Coastguard Worker }
368*35238bceSAndroid Build Coastguard Worker };
369*35238bceSAndroid Build Coastguard Worker
370*35238bceSAndroid Build Coastguard Worker struct FragmentSource : public ShaderSource
371*35238bceSAndroid Build Coastguard Worker {
FragmentSourceglu::FragmentSource372*35238bceSAndroid Build Coastguard Worker FragmentSource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_FRAGMENT, source_)
373*35238bceSAndroid Build Coastguard Worker {
374*35238bceSAndroid Build Coastguard Worker }
375*35238bceSAndroid Build Coastguard Worker };
376*35238bceSAndroid Build Coastguard Worker
377*35238bceSAndroid Build Coastguard Worker struct GeometrySource : public ShaderSource
378*35238bceSAndroid Build Coastguard Worker {
GeometrySourceglu::GeometrySource379*35238bceSAndroid Build Coastguard Worker GeometrySource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_GEOMETRY, source_)
380*35238bceSAndroid Build Coastguard Worker {
381*35238bceSAndroid Build Coastguard Worker }
382*35238bceSAndroid Build Coastguard Worker };
383*35238bceSAndroid Build Coastguard Worker
384*35238bceSAndroid Build Coastguard Worker struct ComputeSource : public ShaderSource
385*35238bceSAndroid Build Coastguard Worker {
ComputeSourceglu::ComputeSource386*35238bceSAndroid Build Coastguard Worker ComputeSource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_COMPUTE, source_)
387*35238bceSAndroid Build Coastguard Worker {
388*35238bceSAndroid Build Coastguard Worker }
389*35238bceSAndroid Build Coastguard Worker };
390*35238bceSAndroid Build Coastguard Worker
391*35238bceSAndroid Build Coastguard Worker struct TessellationControlSource : public ShaderSource
392*35238bceSAndroid Build Coastguard Worker {
TessellationControlSourceglu::TessellationControlSource393*35238bceSAndroid Build Coastguard Worker TessellationControlSource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_TESSELLATION_CONTROL, source_)
394*35238bceSAndroid Build Coastguard Worker {
395*35238bceSAndroid Build Coastguard Worker }
396*35238bceSAndroid Build Coastguard Worker };
397*35238bceSAndroid Build Coastguard Worker
398*35238bceSAndroid Build Coastguard Worker struct TessellationEvaluationSource : public ShaderSource
399*35238bceSAndroid Build Coastguard Worker {
TessellationEvaluationSourceglu::TessellationEvaluationSource400*35238bceSAndroid Build Coastguard Worker TessellationEvaluationSource(const std::string &source_)
401*35238bceSAndroid Build Coastguard Worker : ShaderSource(glu::SHADERTYPE_TESSELLATION_EVALUATION, source_)
402*35238bceSAndroid Build Coastguard Worker {
403*35238bceSAndroid Build Coastguard Worker }
404*35238bceSAndroid Build Coastguard Worker };
405*35238bceSAndroid Build Coastguard Worker
406*35238bceSAndroid Build Coastguard Worker struct RaygenSource : public ShaderSource
407*35238bceSAndroid Build Coastguard Worker {
RaygenSourceglu::RaygenSource408*35238bceSAndroid Build Coastguard Worker RaygenSource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_RAYGEN, source_)
409*35238bceSAndroid Build Coastguard Worker {
410*35238bceSAndroid Build Coastguard Worker }
411*35238bceSAndroid Build Coastguard Worker };
412*35238bceSAndroid Build Coastguard Worker
413*35238bceSAndroid Build Coastguard Worker struct AnyHitSource : public ShaderSource
414*35238bceSAndroid Build Coastguard Worker {
AnyHitSourceglu::AnyHitSource415*35238bceSAndroid Build Coastguard Worker AnyHitSource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_ANY_HIT, source_)
416*35238bceSAndroid Build Coastguard Worker {
417*35238bceSAndroid Build Coastguard Worker }
418*35238bceSAndroid Build Coastguard Worker };
419*35238bceSAndroid Build Coastguard Worker
420*35238bceSAndroid Build Coastguard Worker struct ClosestHitSource : public ShaderSource
421*35238bceSAndroid Build Coastguard Worker {
ClosestHitSourceglu::ClosestHitSource422*35238bceSAndroid Build Coastguard Worker ClosestHitSource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_CLOSEST_HIT, source_)
423*35238bceSAndroid Build Coastguard Worker {
424*35238bceSAndroid Build Coastguard Worker }
425*35238bceSAndroid Build Coastguard Worker };
426*35238bceSAndroid Build Coastguard Worker
427*35238bceSAndroid Build Coastguard Worker struct MissSource : public ShaderSource
428*35238bceSAndroid Build Coastguard Worker {
MissSourceglu::MissSource429*35238bceSAndroid Build Coastguard Worker MissSource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_MISS, source_)
430*35238bceSAndroid Build Coastguard Worker {
431*35238bceSAndroid Build Coastguard Worker }
432*35238bceSAndroid Build Coastguard Worker };
433*35238bceSAndroid Build Coastguard Worker
434*35238bceSAndroid Build Coastguard Worker struct IntersectionSource : public ShaderSource
435*35238bceSAndroid Build Coastguard Worker {
IntersectionSourceglu::IntersectionSource436*35238bceSAndroid Build Coastguard Worker IntersectionSource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_INTERSECTION, source_)
437*35238bceSAndroid Build Coastguard Worker {
438*35238bceSAndroid Build Coastguard Worker }
439*35238bceSAndroid Build Coastguard Worker };
440*35238bceSAndroid Build Coastguard Worker
441*35238bceSAndroid Build Coastguard Worker struct CallableSource : public ShaderSource
442*35238bceSAndroid Build Coastguard Worker {
CallableSourceglu::CallableSource443*35238bceSAndroid Build Coastguard Worker CallableSource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_CALLABLE, source_)
444*35238bceSAndroid Build Coastguard Worker {
445*35238bceSAndroid Build Coastguard Worker }
446*35238bceSAndroid Build Coastguard Worker };
447*35238bceSAndroid Build Coastguard Worker
448*35238bceSAndroid Build Coastguard Worker struct TaskSource : public ShaderSource
449*35238bceSAndroid Build Coastguard Worker {
TaskSourceglu::TaskSource450*35238bceSAndroid Build Coastguard Worker TaskSource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_TASK, source_)
451*35238bceSAndroid Build Coastguard Worker {
452*35238bceSAndroid Build Coastguard Worker }
453*35238bceSAndroid Build Coastguard Worker };
454*35238bceSAndroid Build Coastguard Worker
455*35238bceSAndroid Build Coastguard Worker struct MeshSource : public ShaderSource
456*35238bceSAndroid Build Coastguard Worker {
MeshSourceglu::MeshSource457*35238bceSAndroid Build Coastguard Worker MeshSource(const std::string &source_) : ShaderSource(glu::SHADERTYPE_MESH, source_)
458*35238bceSAndroid Build Coastguard Worker {
459*35238bceSAndroid Build Coastguard Worker }
460*35238bceSAndroid Build Coastguard Worker };
461*35238bceSAndroid Build Coastguard Worker
462*35238bceSAndroid Build Coastguard Worker struct ProgramSources
463*35238bceSAndroid Build Coastguard Worker {
464*35238bceSAndroid Build Coastguard Worker std::vector<std::string> sources[SHADERTYPE_LAST];
465*35238bceSAndroid Build Coastguard Worker std::vector<AttribLocationBinding> attribLocationBindings;
466*35238bceSAndroid Build Coastguard Worker
467*35238bceSAndroid Build Coastguard Worker uint32_t transformFeedbackBufferMode; //!< TF buffer mode, or GL_NONE.
468*35238bceSAndroid Build Coastguard Worker std::vector<std::string> transformFeedbackVaryings;
469*35238bceSAndroid Build Coastguard Worker bool separable;
470*35238bceSAndroid Build Coastguard Worker
ProgramSourcesglu::ProgramSources471*35238bceSAndroid Build Coastguard Worker ProgramSources(void) : transformFeedbackBufferMode(0), separable(false)
472*35238bceSAndroid Build Coastguard Worker {
473*35238bceSAndroid Build Coastguard Worker }
474*35238bceSAndroid Build Coastguard Worker
operator <<glu::ProgramSources475*35238bceSAndroid Build Coastguard Worker ProgramSources &operator<<(const AttribLocationBinding &binding)
476*35238bceSAndroid Build Coastguard Worker {
477*35238bceSAndroid Build Coastguard Worker attribLocationBindings.push_back(binding);
478*35238bceSAndroid Build Coastguard Worker return *this;
479*35238bceSAndroid Build Coastguard Worker }
operator <<glu::ProgramSources480*35238bceSAndroid Build Coastguard Worker ProgramSources &operator<<(const TransformFeedbackMode &mode)
481*35238bceSAndroid Build Coastguard Worker {
482*35238bceSAndroid Build Coastguard Worker transformFeedbackBufferMode = mode.mode;
483*35238bceSAndroid Build Coastguard Worker return *this;
484*35238bceSAndroid Build Coastguard Worker }
operator <<glu::ProgramSources485*35238bceSAndroid Build Coastguard Worker ProgramSources &operator<<(const TransformFeedbackVarying &varying)
486*35238bceSAndroid Build Coastguard Worker {
487*35238bceSAndroid Build Coastguard Worker transformFeedbackVaryings.push_back(varying.name);
488*35238bceSAndroid Build Coastguard Worker return *this;
489*35238bceSAndroid Build Coastguard Worker }
operator <<glu::ProgramSources490*35238bceSAndroid Build Coastguard Worker ProgramSources &operator<<(const ShaderSource &shaderSource)
491*35238bceSAndroid Build Coastguard Worker {
492*35238bceSAndroid Build Coastguard Worker sources[shaderSource.shaderType].push_back(shaderSource.source);
493*35238bceSAndroid Build Coastguard Worker return *this;
494*35238bceSAndroid Build Coastguard Worker }
operator <<glu::ProgramSources495*35238bceSAndroid Build Coastguard Worker ProgramSources &operator<<(const ProgramSeparable &progSeparable)
496*35238bceSAndroid Build Coastguard Worker {
497*35238bceSAndroid Build Coastguard Worker separable = progSeparable.separable;
498*35238bceSAndroid Build Coastguard Worker return *this;
499*35238bceSAndroid Build Coastguard Worker }
500*35238bceSAndroid Build Coastguard Worker
501*35238bceSAndroid Build Coastguard Worker template <typename Iterator>
502*35238bceSAndroid Build Coastguard Worker ProgramSources &operator<<(const TransformFeedbackVaryings<Iterator> &varyings);
503*35238bceSAndroid Build Coastguard Worker };
504*35238bceSAndroid Build Coastguard Worker
505*35238bceSAndroid Build Coastguard Worker struct SpecializationData
506*35238bceSAndroid Build Coastguard Worker {
507*35238bceSAndroid Build Coastguard Worker uint32_t index;
508*35238bceSAndroid Build Coastguard Worker uint32_t value;
509*35238bceSAndroid Build Coastguard Worker
SpecializationDataglu::SpecializationData510*35238bceSAndroid Build Coastguard Worker SpecializationData(void) : index(0), value(0)
511*35238bceSAndroid Build Coastguard Worker {
512*35238bceSAndroid Build Coastguard Worker }
SpecializationDataglu::SpecializationData513*35238bceSAndroid Build Coastguard Worker SpecializationData(const uint32_t index_, const uint32_t value_) : index(index_), value(value_)
514*35238bceSAndroid Build Coastguard Worker {
515*35238bceSAndroid Build Coastguard Worker }
516*35238bceSAndroid Build Coastguard Worker };
517*35238bceSAndroid Build Coastguard Worker
518*35238bceSAndroid Build Coastguard Worker struct ShaderBinary
519*35238bceSAndroid Build Coastguard Worker {
520*35238bceSAndroid Build Coastguard Worker ShaderBinaryDataType binary;
521*35238bceSAndroid Build Coastguard Worker std::vector<ShaderType> shaderTypes;
522*35238bceSAndroid Build Coastguard Worker std::vector<std::string> shaderEntryPoints;
523*35238bceSAndroid Build Coastguard Worker std::vector<uint32_t> specializationIndices;
524*35238bceSAndroid Build Coastguard Worker std::vector<uint32_t> specializationValues;
525*35238bceSAndroid Build Coastguard Worker
ShaderBinaryglu::ShaderBinary526*35238bceSAndroid Build Coastguard Worker ShaderBinary(void)
527*35238bceSAndroid Build Coastguard Worker {
528*35238bceSAndroid Build Coastguard Worker }
ShaderBinaryglu::ShaderBinary529*35238bceSAndroid Build Coastguard Worker ShaderBinary(const ShaderBinaryDataType binary_) : binary(binary_)
530*35238bceSAndroid Build Coastguard Worker {
531*35238bceSAndroid Build Coastguard Worker DE_ASSERT(!binary_.empty());
532*35238bceSAndroid Build Coastguard Worker }
ShaderBinaryglu::ShaderBinary533*35238bceSAndroid Build Coastguard Worker ShaderBinary(const ShaderBinaryDataType binary_, glu::ShaderType shaderType_) : binary(binary_)
534*35238bceSAndroid Build Coastguard Worker {
535*35238bceSAndroid Build Coastguard Worker DE_ASSERT(!binary_.empty());
536*35238bceSAndroid Build Coastguard Worker shaderTypes.push_back(shaderType_);
537*35238bceSAndroid Build Coastguard Worker shaderEntryPoints.push_back("main");
538*35238bceSAndroid Build Coastguard Worker }
539*35238bceSAndroid Build Coastguard Worker
operator <<glu::ShaderBinary540*35238bceSAndroid Build Coastguard Worker ShaderBinary &operator<<(const ShaderType &shaderType)
541*35238bceSAndroid Build Coastguard Worker {
542*35238bceSAndroid Build Coastguard Worker shaderTypes.push_back(shaderType);
543*35238bceSAndroid Build Coastguard Worker return *this;
544*35238bceSAndroid Build Coastguard Worker }
545*35238bceSAndroid Build Coastguard Worker
operator <<glu::ShaderBinary546*35238bceSAndroid Build Coastguard Worker ShaderBinary &operator<<(const std::string &entryPoint)
547*35238bceSAndroid Build Coastguard Worker {
548*35238bceSAndroid Build Coastguard Worker shaderEntryPoints.push_back(entryPoint);
549*35238bceSAndroid Build Coastguard Worker return *this;
550*35238bceSAndroid Build Coastguard Worker }
551*35238bceSAndroid Build Coastguard Worker
operator <<glu::ShaderBinary552*35238bceSAndroid Build Coastguard Worker ShaderBinary &operator<<(const SpecializationData &specData)
553*35238bceSAndroid Build Coastguard Worker {
554*35238bceSAndroid Build Coastguard Worker specializationIndices.push_back(specData.index);
555*35238bceSAndroid Build Coastguard Worker specializationValues.push_back(specData.value);
556*35238bceSAndroid Build Coastguard Worker return *this;
557*35238bceSAndroid Build Coastguard Worker }
558*35238bceSAndroid Build Coastguard Worker };
559*35238bceSAndroid Build Coastguard Worker
560*35238bceSAndroid Build Coastguard Worker struct VertexBinary : public ShaderBinary
561*35238bceSAndroid Build Coastguard Worker {
VertexBinaryglu::VertexBinary562*35238bceSAndroid Build Coastguard Worker VertexBinary(const ShaderBinaryDataType binary_) : ShaderBinary(binary_, glu::SHADERTYPE_VERTEX)
563*35238bceSAndroid Build Coastguard Worker {
564*35238bceSAndroid Build Coastguard Worker }
565*35238bceSAndroid Build Coastguard Worker };
566*35238bceSAndroid Build Coastguard Worker
567*35238bceSAndroid Build Coastguard Worker struct FragmentBinary : public ShaderBinary
568*35238bceSAndroid Build Coastguard Worker {
FragmentBinaryglu::FragmentBinary569*35238bceSAndroid Build Coastguard Worker FragmentBinary(const ShaderBinaryDataType binary_) : ShaderBinary(binary_, glu::SHADERTYPE_FRAGMENT)
570*35238bceSAndroid Build Coastguard Worker {
571*35238bceSAndroid Build Coastguard Worker }
572*35238bceSAndroid Build Coastguard Worker };
573*35238bceSAndroid Build Coastguard Worker
574*35238bceSAndroid Build Coastguard Worker struct GeometryBinary : public ShaderBinary
575*35238bceSAndroid Build Coastguard Worker {
GeometryBinaryglu::GeometryBinary576*35238bceSAndroid Build Coastguard Worker GeometryBinary(const ShaderBinaryDataType binary_) : ShaderBinary(binary_, glu::SHADERTYPE_GEOMETRY)
577*35238bceSAndroid Build Coastguard Worker {
578*35238bceSAndroid Build Coastguard Worker }
579*35238bceSAndroid Build Coastguard Worker };
580*35238bceSAndroid Build Coastguard Worker
581*35238bceSAndroid Build Coastguard Worker struct ComputeBinary : public ShaderBinary
582*35238bceSAndroid Build Coastguard Worker {
ComputeBinaryglu::ComputeBinary583*35238bceSAndroid Build Coastguard Worker ComputeBinary(const ShaderBinaryDataType binary_) : ShaderBinary(binary_, glu::SHADERTYPE_COMPUTE)
584*35238bceSAndroid Build Coastguard Worker {
585*35238bceSAndroid Build Coastguard Worker }
586*35238bceSAndroid Build Coastguard Worker };
587*35238bceSAndroid Build Coastguard Worker
588*35238bceSAndroid Build Coastguard Worker struct TessellationControlBinary : public ShaderBinary
589*35238bceSAndroid Build Coastguard Worker {
TessellationControlBinaryglu::TessellationControlBinary590*35238bceSAndroid Build Coastguard Worker TessellationControlBinary(const ShaderBinaryDataType binary_)
591*35238bceSAndroid Build Coastguard Worker : ShaderBinary(binary_, glu::SHADERTYPE_TESSELLATION_CONTROL)
592*35238bceSAndroid Build Coastguard Worker {
593*35238bceSAndroid Build Coastguard Worker }
594*35238bceSAndroid Build Coastguard Worker };
595*35238bceSAndroid Build Coastguard Worker
596*35238bceSAndroid Build Coastguard Worker struct TessellationEvaluationBinary : public ShaderBinary
597*35238bceSAndroid Build Coastguard Worker {
TessellationEvaluationBinaryglu::TessellationEvaluationBinary598*35238bceSAndroid Build Coastguard Worker TessellationEvaluationBinary(const ShaderBinaryDataType binary_)
599*35238bceSAndroid Build Coastguard Worker : ShaderBinary(binary_, glu::SHADERTYPE_TESSELLATION_EVALUATION)
600*35238bceSAndroid Build Coastguard Worker {
601*35238bceSAndroid Build Coastguard Worker }
602*35238bceSAndroid Build Coastguard Worker };
603*35238bceSAndroid Build Coastguard Worker
604*35238bceSAndroid Build Coastguard Worker struct ProgramBinaries
605*35238bceSAndroid Build Coastguard Worker {
606*35238bceSAndroid Build Coastguard Worker std::vector<ShaderBinary> binaries;
607*35238bceSAndroid Build Coastguard Worker
608*35238bceSAndroid Build Coastguard Worker glw::GLenum binaryFormat;
609*35238bceSAndroid Build Coastguard Worker
ProgramBinariesglu::ProgramBinaries610*35238bceSAndroid Build Coastguard Worker ProgramBinaries(void) : binaryFormat(GL_SHADER_BINARY_FORMAT_SPIR_V_ARB)
611*35238bceSAndroid Build Coastguard Worker {
612*35238bceSAndroid Build Coastguard Worker }
ProgramBinariesglu::ProgramBinaries613*35238bceSAndroid Build Coastguard Worker ProgramBinaries(glw::GLenum binaryFormat_) : binaryFormat(binaryFormat_)
614*35238bceSAndroid Build Coastguard Worker {
615*35238bceSAndroid Build Coastguard Worker }
616*35238bceSAndroid Build Coastguard Worker
operator <<glu::ProgramBinaries617*35238bceSAndroid Build Coastguard Worker ProgramBinaries &operator<<(const ShaderBinary &shaderBinary)
618*35238bceSAndroid Build Coastguard Worker {
619*35238bceSAndroid Build Coastguard Worker binaries.push_back(shaderBinary);
620*35238bceSAndroid Build Coastguard Worker return *this;
621*35238bceSAndroid Build Coastguard Worker }
622*35238bceSAndroid Build Coastguard Worker };
623*35238bceSAndroid Build Coastguard Worker
624*35238bceSAndroid Build Coastguard Worker template <typename Iterator>
operator <<(const TransformFeedbackVaryings<Iterator> & varyings)625*35238bceSAndroid Build Coastguard Worker inline ProgramSources &ProgramSources::operator<<(const TransformFeedbackVaryings<Iterator> &varyings)
626*35238bceSAndroid Build Coastguard Worker {
627*35238bceSAndroid Build Coastguard Worker for (Iterator cur = varyings.begin; cur != varyings.end; ++cur)
628*35238bceSAndroid Build Coastguard Worker transformFeedbackVaryings.push_back(*cur);
629*35238bceSAndroid Build Coastguard Worker return *this;
630*35238bceSAndroid Build Coastguard Worker }
631*35238bceSAndroid Build Coastguard Worker
632*35238bceSAndroid Build Coastguard Worker //! Helper for constructing vertex-fragment source pair.
makeVtxFragSources(const std::string & vertexSrc,const std::string & fragmentSrc)633*35238bceSAndroid Build Coastguard Worker inline ProgramSources makeVtxFragSources(const std::string &vertexSrc, const std::string &fragmentSrc)
634*35238bceSAndroid Build Coastguard Worker {
635*35238bceSAndroid Build Coastguard Worker ProgramSources sources;
636*35238bceSAndroid Build Coastguard Worker sources.sources[SHADERTYPE_VERTEX].push_back(vertexSrc);
637*35238bceSAndroid Build Coastguard Worker sources.sources[SHADERTYPE_FRAGMENT].push_back(fragmentSrc);
638*35238bceSAndroid Build Coastguard Worker return sources;
639*35238bceSAndroid Build Coastguard Worker }
640*35238bceSAndroid Build Coastguard Worker
641*35238bceSAndroid Build Coastguard Worker } // namespace glu
642*35238bceSAndroid Build Coastguard Worker
643*35238bceSAndroid Build Coastguard Worker #endif // _GLUSHADERPROGRAM_HPP
644