xref: /aosp_15_r20/external/deqp/framework/opengl/simplereference/sglrShaderProgram.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _SGLRSHADERPROGRAM_HPP
2*35238bceSAndroid Build Coastguard Worker #define _SGLRSHADERPROGRAM_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 SGLR shader program.
24*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker 
26*35238bceSAndroid Build Coastguard Worker #include "tcuDefs.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "rrShaders.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "gluShaderUtil.hpp"
29*35238bceSAndroid Build Coastguard Worker 
30*35238bceSAndroid Build Coastguard Worker #include <vector>
31*35238bceSAndroid Build Coastguard Worker #include <string>
32*35238bceSAndroid Build Coastguard Worker 
33*35238bceSAndroid Build Coastguard Worker namespace sglr
34*35238bceSAndroid Build Coastguard Worker {
35*35238bceSAndroid Build Coastguard Worker 
36*35238bceSAndroid Build Coastguard Worker namespace rc
37*35238bceSAndroid Build Coastguard Worker {
38*35238bceSAndroid Build Coastguard Worker class Texture1D;
39*35238bceSAndroid Build Coastguard Worker class Texture2D;
40*35238bceSAndroid Build Coastguard Worker class TextureCube;
41*35238bceSAndroid Build Coastguard Worker class Texture2DArray;
42*35238bceSAndroid Build Coastguard Worker class Texture3D;
43*35238bceSAndroid Build Coastguard Worker class TextureCubeArray;
44*35238bceSAndroid Build Coastguard Worker } // namespace rc
45*35238bceSAndroid Build Coastguard Worker 
46*35238bceSAndroid Build Coastguard Worker class ShaderProgram;
47*35238bceSAndroid Build Coastguard Worker 
48*35238bceSAndroid Build Coastguard Worker namespace pdec
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker 
51*35238bceSAndroid Build Coastguard Worker enum VaryingFlags
52*35238bceSAndroid Build Coastguard Worker {
53*35238bceSAndroid Build Coastguard Worker     VARYINGFLAG_NONE      = 0,
54*35238bceSAndroid Build Coastguard Worker     VARYINGFLAG_FLATSHADE = (1 << 0),
55*35238bceSAndroid Build Coastguard Worker };
56*35238bceSAndroid Build Coastguard Worker 
57*35238bceSAndroid Build Coastguard Worker struct VertexAttribute
58*35238bceSAndroid Build Coastguard Worker {
VertexAttributesglr::pdec::VertexAttribute59*35238bceSAndroid Build Coastguard Worker     VertexAttribute(const std::string &name_, rr::GenericVecType type_) : name(name_), type(type_)
60*35238bceSAndroid Build Coastguard Worker     {
61*35238bceSAndroid Build Coastguard Worker     }
62*35238bceSAndroid Build Coastguard Worker 
63*35238bceSAndroid Build Coastguard Worker     std::string name;
64*35238bceSAndroid Build Coastguard Worker     rr::GenericVecType type;
65*35238bceSAndroid Build Coastguard Worker };
66*35238bceSAndroid Build Coastguard Worker 
67*35238bceSAndroid Build Coastguard Worker struct VertexToFragmentVarying
68*35238bceSAndroid Build Coastguard Worker {
VertexToFragmentVaryingsglr::pdec::VertexToFragmentVarying69*35238bceSAndroid Build Coastguard Worker     VertexToFragmentVarying(rr::GenericVecType type_, int flags = VARYINGFLAG_NONE)
70*35238bceSAndroid Build Coastguard Worker         : type(type_)
71*35238bceSAndroid Build Coastguard Worker         , flatshade((flags & VARYINGFLAG_FLATSHADE) != 0)
72*35238bceSAndroid Build Coastguard Worker     {
73*35238bceSAndroid Build Coastguard Worker     }
74*35238bceSAndroid Build Coastguard Worker 
75*35238bceSAndroid Build Coastguard Worker     rr::GenericVecType type;
76*35238bceSAndroid Build Coastguard Worker     bool flatshade;
77*35238bceSAndroid Build Coastguard Worker };
78*35238bceSAndroid Build Coastguard Worker 
79*35238bceSAndroid Build Coastguard Worker struct VertexToGeometryVarying
80*35238bceSAndroid Build Coastguard Worker {
VertexToGeometryVaryingsglr::pdec::VertexToGeometryVarying81*35238bceSAndroid Build Coastguard Worker     VertexToGeometryVarying(rr::GenericVecType type_, int flags = VARYINGFLAG_NONE)
82*35238bceSAndroid Build Coastguard Worker         : type(type_)
83*35238bceSAndroid Build Coastguard Worker         , flatshade((flags & VARYINGFLAG_FLATSHADE) != 0)
84*35238bceSAndroid Build Coastguard Worker     {
85*35238bceSAndroid Build Coastguard Worker     }
86*35238bceSAndroid Build Coastguard Worker 
87*35238bceSAndroid Build Coastguard Worker     rr::GenericVecType type;
88*35238bceSAndroid Build Coastguard Worker     bool flatshade;
89*35238bceSAndroid Build Coastguard Worker };
90*35238bceSAndroid Build Coastguard Worker 
91*35238bceSAndroid Build Coastguard Worker struct GeometryToFragmentVarying
92*35238bceSAndroid Build Coastguard Worker {
GeometryToFragmentVaryingsglr::pdec::GeometryToFragmentVarying93*35238bceSAndroid Build Coastguard Worker     GeometryToFragmentVarying(rr::GenericVecType type_, int flags = VARYINGFLAG_NONE)
94*35238bceSAndroid Build Coastguard Worker         : type(type_)
95*35238bceSAndroid Build Coastguard Worker         , flatshade((flags & VARYINGFLAG_FLATSHADE) != 0)
96*35238bceSAndroid Build Coastguard Worker     {
97*35238bceSAndroid Build Coastguard Worker     }
98*35238bceSAndroid Build Coastguard Worker 
99*35238bceSAndroid Build Coastguard Worker     rr::GenericVecType type;
100*35238bceSAndroid Build Coastguard Worker     bool flatshade;
101*35238bceSAndroid Build Coastguard Worker };
102*35238bceSAndroid Build Coastguard Worker 
103*35238bceSAndroid Build Coastguard Worker struct FragmentOutput
104*35238bceSAndroid Build Coastguard Worker {
FragmentOutputsglr::pdec::FragmentOutput105*35238bceSAndroid Build Coastguard Worker     FragmentOutput(rr::GenericVecType type_) : type(type_)
106*35238bceSAndroid Build Coastguard Worker     {
107*35238bceSAndroid Build Coastguard Worker     }
108*35238bceSAndroid Build Coastguard Worker 
109*35238bceSAndroid Build Coastguard Worker     rr::GenericVecType type;
110*35238bceSAndroid Build Coastguard Worker };
111*35238bceSAndroid Build Coastguard Worker 
112*35238bceSAndroid Build Coastguard Worker struct Uniform
113*35238bceSAndroid Build Coastguard Worker {
Uniformsglr::pdec::Uniform114*35238bceSAndroid Build Coastguard Worker     Uniform(const std::string &name_, glu::DataType type_) : name(name_), type(type_)
115*35238bceSAndroid Build Coastguard Worker     {
116*35238bceSAndroid Build Coastguard Worker     }
117*35238bceSAndroid Build Coastguard Worker 
118*35238bceSAndroid Build Coastguard Worker     std::string name;
119*35238bceSAndroid Build Coastguard Worker     glu::DataType type;
120*35238bceSAndroid Build Coastguard Worker };
121*35238bceSAndroid Build Coastguard Worker 
122*35238bceSAndroid Build Coastguard Worker struct VertexSource
123*35238bceSAndroid Build Coastguard Worker {
VertexSourcesglr::pdec::VertexSource124*35238bceSAndroid Build Coastguard Worker     VertexSource(const std::string &str) : source(str)
125*35238bceSAndroid Build Coastguard Worker     {
126*35238bceSAndroid Build Coastguard Worker     }
127*35238bceSAndroid Build Coastguard Worker 
128*35238bceSAndroid Build Coastguard Worker     std::string source;
129*35238bceSAndroid Build Coastguard Worker };
130*35238bceSAndroid Build Coastguard Worker 
131*35238bceSAndroid Build Coastguard Worker struct FragmentSource
132*35238bceSAndroid Build Coastguard Worker {
FragmentSourcesglr::pdec::FragmentSource133*35238bceSAndroid Build Coastguard Worker     FragmentSource(const std::string &str) : source(str)
134*35238bceSAndroid Build Coastguard Worker     {
135*35238bceSAndroid Build Coastguard Worker     }
136*35238bceSAndroid Build Coastguard Worker 
137*35238bceSAndroid Build Coastguard Worker     std::string source;
138*35238bceSAndroid Build Coastguard Worker };
139*35238bceSAndroid Build Coastguard Worker 
140*35238bceSAndroid Build Coastguard Worker struct GeometrySource
141*35238bceSAndroid Build Coastguard Worker {
GeometrySourcesglr::pdec::GeometrySource142*35238bceSAndroid Build Coastguard Worker     GeometrySource(const std::string &str) : source(str)
143*35238bceSAndroid Build Coastguard Worker     {
144*35238bceSAndroid Build Coastguard Worker     }
145*35238bceSAndroid Build Coastguard Worker 
146*35238bceSAndroid Build Coastguard Worker     std::string source;
147*35238bceSAndroid Build Coastguard Worker };
148*35238bceSAndroid Build Coastguard Worker 
149*35238bceSAndroid Build Coastguard Worker struct GeometryShaderDeclaration
150*35238bceSAndroid Build Coastguard Worker {
GeometryShaderDeclarationsglr::pdec::GeometryShaderDeclaration151*35238bceSAndroid Build Coastguard Worker     GeometryShaderDeclaration(rr::GeometryShaderInputType inputType_, rr::GeometryShaderOutputType outputType_,
152*35238bceSAndroid Build Coastguard Worker                               size_t numOutputVertices_, size_t numInvocations_ = 1)
153*35238bceSAndroid Build Coastguard Worker         : inputType(inputType_)
154*35238bceSAndroid Build Coastguard Worker         , outputType(outputType_)
155*35238bceSAndroid Build Coastguard Worker         , numOutputVertices(numOutputVertices_)
156*35238bceSAndroid Build Coastguard Worker         , numInvocations(numInvocations_)
157*35238bceSAndroid Build Coastguard Worker     {
158*35238bceSAndroid Build Coastguard Worker     }
159*35238bceSAndroid Build Coastguard Worker 
160*35238bceSAndroid Build Coastguard Worker     rr::GeometryShaderInputType inputType;
161*35238bceSAndroid Build Coastguard Worker     rr::GeometryShaderOutputType outputType;
162*35238bceSAndroid Build Coastguard Worker     size_t numOutputVertices;
163*35238bceSAndroid Build Coastguard Worker     size_t numInvocations;
164*35238bceSAndroid Build Coastguard Worker };
165*35238bceSAndroid Build Coastguard Worker 
166*35238bceSAndroid Build Coastguard Worker class ShaderProgramDeclaration
167*35238bceSAndroid Build Coastguard Worker {
168*35238bceSAndroid Build Coastguard Worker public:
169*35238bceSAndroid Build Coastguard Worker     ShaderProgramDeclaration(void);
170*35238bceSAndroid Build Coastguard Worker 
171*35238bceSAndroid Build Coastguard Worker     ShaderProgramDeclaration &operator<<(const VertexAttribute &);
172*35238bceSAndroid Build Coastguard Worker     ShaderProgramDeclaration &operator<<(const VertexToFragmentVarying &);
173*35238bceSAndroid Build Coastguard Worker     ShaderProgramDeclaration &operator<<(const VertexToGeometryVarying &);
174*35238bceSAndroid Build Coastguard Worker     ShaderProgramDeclaration &operator<<(const GeometryToFragmentVarying &);
175*35238bceSAndroid Build Coastguard Worker     ShaderProgramDeclaration &operator<<(const FragmentOutput &);
176*35238bceSAndroid Build Coastguard Worker     ShaderProgramDeclaration &operator<<(const Uniform &);
177*35238bceSAndroid Build Coastguard Worker     ShaderProgramDeclaration &operator<<(const VertexSource &);
178*35238bceSAndroid Build Coastguard Worker     ShaderProgramDeclaration &operator<<(const FragmentSource &);
179*35238bceSAndroid Build Coastguard Worker     ShaderProgramDeclaration &operator<<(const GeometrySource &);
180*35238bceSAndroid Build Coastguard Worker     ShaderProgramDeclaration &operator<<(const GeometryShaderDeclaration &);
181*35238bceSAndroid Build Coastguard Worker 
182*35238bceSAndroid Build Coastguard Worker private:
hasGeometryShader(void) const183*35238bceSAndroid Build Coastguard Worker     inline bool hasGeometryShader(void) const
184*35238bceSAndroid Build Coastguard Worker     {
185*35238bceSAndroid Build Coastguard Worker         return m_geometryShaderSet;
186*35238bceSAndroid Build Coastguard Worker     }
getVertexInputCount(void) const187*35238bceSAndroid Build Coastguard Worker     inline size_t getVertexInputCount(void) const
188*35238bceSAndroid Build Coastguard Worker     {
189*35238bceSAndroid Build Coastguard Worker         return m_vertexAttributes.size();
190*35238bceSAndroid Build Coastguard Worker     }
getVertexOutputCount(void) const191*35238bceSAndroid Build Coastguard Worker     inline size_t getVertexOutputCount(void) const
192*35238bceSAndroid Build Coastguard Worker     {
193*35238bceSAndroid Build Coastguard Worker         return hasGeometryShader() ? m_vertexToGeometryVaryings.size() : m_vertexToFragmentVaryings.size();
194*35238bceSAndroid Build Coastguard Worker     }
getFragmentInputCount(void) const195*35238bceSAndroid Build Coastguard Worker     inline size_t getFragmentInputCount(void) const
196*35238bceSAndroid Build Coastguard Worker     {
197*35238bceSAndroid Build Coastguard Worker         return hasGeometryShader() ? m_geometryToFragmentVaryings.size() : m_vertexToFragmentVaryings.size();
198*35238bceSAndroid Build Coastguard Worker     }
getFragmentOutputCount(void) const199*35238bceSAndroid Build Coastguard Worker     inline size_t getFragmentOutputCount(void) const
200*35238bceSAndroid Build Coastguard Worker     {
201*35238bceSAndroid Build Coastguard Worker         return m_fragmentOutputs.size();
202*35238bceSAndroid Build Coastguard Worker     }
getGeometryInputCount(void) const203*35238bceSAndroid Build Coastguard Worker     inline size_t getGeometryInputCount(void) const
204*35238bceSAndroid Build Coastguard Worker     {
205*35238bceSAndroid Build Coastguard Worker         return hasGeometryShader() ? m_vertexToGeometryVaryings.size() : 0;
206*35238bceSAndroid Build Coastguard Worker     }
getGeometryOutputCount(void) const207*35238bceSAndroid Build Coastguard Worker     inline size_t getGeometryOutputCount(void) const
208*35238bceSAndroid Build Coastguard Worker     {
209*35238bceSAndroid Build Coastguard Worker         return hasGeometryShader() ? m_geometryToFragmentVaryings.size() : 0;
210*35238bceSAndroid Build Coastguard Worker     }
211*35238bceSAndroid Build Coastguard Worker 
212*35238bceSAndroid Build Coastguard Worker     bool valid(void) const;
213*35238bceSAndroid Build Coastguard Worker 
214*35238bceSAndroid Build Coastguard Worker     std::vector<VertexAttribute> m_vertexAttributes;
215*35238bceSAndroid Build Coastguard Worker     std::vector<VertexToFragmentVarying> m_vertexToFragmentVaryings;
216*35238bceSAndroid Build Coastguard Worker     std::vector<VertexToGeometryVarying> m_vertexToGeometryVaryings;
217*35238bceSAndroid Build Coastguard Worker     std::vector<GeometryToFragmentVarying> m_geometryToFragmentVaryings;
218*35238bceSAndroid Build Coastguard Worker     std::vector<FragmentOutput> m_fragmentOutputs;
219*35238bceSAndroid Build Coastguard Worker     std::vector<Uniform> m_uniforms;
220*35238bceSAndroid Build Coastguard Worker     std::string m_vertexSource;
221*35238bceSAndroid Build Coastguard Worker     std::string m_fragmentSource;
222*35238bceSAndroid Build Coastguard Worker     std::string m_geometrySource;
223*35238bceSAndroid Build Coastguard Worker     GeometryShaderDeclaration m_geometryDecl;
224*35238bceSAndroid Build Coastguard Worker 
225*35238bceSAndroid Build Coastguard Worker     bool m_vertexShaderSet;
226*35238bceSAndroid Build Coastguard Worker     bool m_fragmentShaderSet;
227*35238bceSAndroid Build Coastguard Worker     bool m_geometryShaderSet;
228*35238bceSAndroid Build Coastguard Worker 
229*35238bceSAndroid Build Coastguard Worker     friend class ::sglr::ShaderProgram;
230*35238bceSAndroid Build Coastguard Worker };
231*35238bceSAndroid Build Coastguard Worker 
232*35238bceSAndroid Build Coastguard Worker } // namespace pdec
233*35238bceSAndroid Build Coastguard Worker 
234*35238bceSAndroid Build Coastguard Worker struct UniformSlot
235*35238bceSAndroid Build Coastguard Worker {
236*35238bceSAndroid Build Coastguard Worker     std::string name;
237*35238bceSAndroid Build Coastguard Worker     glu::DataType type;
238*35238bceSAndroid Build Coastguard Worker 
239*35238bceSAndroid Build Coastguard Worker     union
240*35238bceSAndroid Build Coastguard Worker     {
241*35238bceSAndroid Build Coastguard Worker         int32_t i;
242*35238bceSAndroid Build Coastguard Worker         int32_t i4[4];
243*35238bceSAndroid Build Coastguard Worker         float f;
244*35238bceSAndroid Build Coastguard Worker         float f4[4];
245*35238bceSAndroid Build Coastguard Worker         float m3[3 * 3]; //!< row major, can be fed directly to tcu::Matrix constructor
246*35238bceSAndroid Build Coastguard Worker         float m4[4 * 4]; //!< row major, can be fed directly to tcu::Matrix constructor
247*35238bceSAndroid Build Coastguard Worker     } value;
248*35238bceSAndroid Build Coastguard Worker 
249*35238bceSAndroid Build Coastguard Worker     union
250*35238bceSAndroid Build Coastguard Worker     {
251*35238bceSAndroid Build Coastguard Worker         const void *ptr;
252*35238bceSAndroid Build Coastguard Worker 
253*35238bceSAndroid Build Coastguard Worker         const rc::Texture1D *tex1D;
254*35238bceSAndroid Build Coastguard Worker         const rc::Texture2D *tex2D;
255*35238bceSAndroid Build Coastguard Worker         const rc::TextureCube *texCube;
256*35238bceSAndroid Build Coastguard Worker         const rc::Texture2DArray *tex2DArray;
257*35238bceSAndroid Build Coastguard Worker         const rc::Texture3D *tex3D;
258*35238bceSAndroid Build Coastguard Worker         const rc::TextureCubeArray *texCubeArray;
259*35238bceSAndroid Build Coastguard Worker     } sampler;
260*35238bceSAndroid Build Coastguard Worker 
UniformSlotsglr::UniformSlot261*35238bceSAndroid Build Coastguard Worker     inline UniformSlot(void) : type(glu::TYPE_LAST)
262*35238bceSAndroid Build Coastguard Worker     {
263*35238bceSAndroid Build Coastguard Worker         value.i     = 0;
264*35238bceSAndroid Build Coastguard Worker         sampler.ptr = DE_NULL;
265*35238bceSAndroid Build Coastguard Worker     }
266*35238bceSAndroid Build Coastguard Worker };
267*35238bceSAndroid Build Coastguard Worker 
268*35238bceSAndroid Build Coastguard Worker class ShaderProgram : private rr::VertexShader, private rr::GeometryShader, private rr::FragmentShader
269*35238bceSAndroid Build Coastguard Worker {
270*35238bceSAndroid Build Coastguard Worker public:
271*35238bceSAndroid Build Coastguard Worker     ShaderProgram(const pdec::ShaderProgramDeclaration &);
272*35238bceSAndroid Build Coastguard Worker     virtual ~ShaderProgram(void);
273*35238bceSAndroid Build Coastguard Worker 
274*35238bceSAndroid Build Coastguard Worker     const UniformSlot &getUniformByName(const char *name) const;
275*35238bceSAndroid Build Coastguard Worker 
getVertexShader(void) const276*35238bceSAndroid Build Coastguard Worker     inline const rr::VertexShader *getVertexShader(void) const
277*35238bceSAndroid Build Coastguard Worker     {
278*35238bceSAndroid Build Coastguard Worker         return static_cast<const rr::VertexShader *>(this);
279*35238bceSAndroid Build Coastguard Worker     }
getFragmentShader(void) const280*35238bceSAndroid Build Coastguard Worker     inline const rr::FragmentShader *getFragmentShader(void) const
281*35238bceSAndroid Build Coastguard Worker     {
282*35238bceSAndroid Build Coastguard Worker         return static_cast<const rr::FragmentShader *>(this);
283*35238bceSAndroid Build Coastguard Worker     }
getGeometryShader(void) const284*35238bceSAndroid Build Coastguard Worker     inline const rr::GeometryShader *getGeometryShader(void) const
285*35238bceSAndroid Build Coastguard Worker     {
286*35238bceSAndroid Build Coastguard Worker         return static_cast<const rr::GeometryShader *>(this);
287*35238bceSAndroid Build Coastguard Worker     }
288*35238bceSAndroid Build Coastguard Worker 
289*35238bceSAndroid Build Coastguard Worker private:
290*35238bceSAndroid Build Coastguard Worker     virtual void shadeVertices(const rr::VertexAttrib *inputs, rr::VertexPacket *const *packets,
291*35238bceSAndroid Build Coastguard Worker                                const int numPackets) const                       = 0;
292*35238bceSAndroid Build Coastguard Worker     virtual void shadeFragments(rr::FragmentPacket *packets, const int numPackets,
293*35238bceSAndroid Build Coastguard Worker                                 const rr::FragmentShadingContext &context) const = 0;
294*35238bceSAndroid Build Coastguard Worker     virtual void shadePrimitives(rr::GeometryEmitter &output, int verticesIn, const rr::PrimitivePacket *packets,
295*35238bceSAndroid Build Coastguard Worker                                  const int numPackets, int invocationID) const;
296*35238bceSAndroid Build Coastguard Worker 
297*35238bceSAndroid Build Coastguard Worker     std::vector<std::string> m_attributeNames;
298*35238bceSAndroid Build Coastguard Worker 
299*35238bceSAndroid Build Coastguard Worker protected:
300*35238bceSAndroid Build Coastguard Worker     std::vector<UniformSlot> m_uniforms;
301*35238bceSAndroid Build Coastguard Worker 
302*35238bceSAndroid Build Coastguard Worker private:
303*35238bceSAndroid Build Coastguard Worker     const std::string m_vertSrc;
304*35238bceSAndroid Build Coastguard Worker     const std::string m_fragSrc;
305*35238bceSAndroid Build Coastguard Worker     const std::string m_geomSrc;
306*35238bceSAndroid Build Coastguard Worker     const bool m_hasGeometryShader;
307*35238bceSAndroid Build Coastguard Worker 
308*35238bceSAndroid Build Coastguard Worker     friend class ReferenceContext; // for uniform access
309*35238bceSAndroid Build Coastguard Worker     friend class GLContext;        // for source string access
310*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
311*35238bceSAndroid Build Coastguard Worker 
312*35238bceSAndroid Build Coastguard Worker } // namespace sglr
313*35238bceSAndroid Build Coastguard Worker 
314*35238bceSAndroid Build Coastguard Worker #endif // _SGLRSHADERPROGRAM_HPP
315