1*35238bceSAndroid Build Coastguard Worker #ifndef _SGLRREFERENCECONTEXT_HPP
2*35238bceSAndroid Build Coastguard Worker #define _SGLRREFERENCECONTEXT_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 Reference Rendering Context.
24*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker
26*35238bceSAndroid Build Coastguard Worker #include "tcuDefs.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "sglrContext.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "tcuPixelFormat.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "tcuSurface.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "tcuTexture.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "tcuVector.hpp"
32*35238bceSAndroid Build Coastguard Worker #include "rrFragmentOperations.hpp"
33*35238bceSAndroid Build Coastguard Worker #include "rrRenderState.hpp"
34*35238bceSAndroid Build Coastguard Worker #include "rrRenderer.hpp"
35*35238bceSAndroid Build Coastguard Worker #include "rrMultisamplePixelBufferAccess.hpp"
36*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
37*35238bceSAndroid Build Coastguard Worker #include "gluShaderUtil.hpp"
38*35238bceSAndroid Build Coastguard Worker #include "deArrayBuffer.hpp"
39*35238bceSAndroid Build Coastguard Worker
40*35238bceSAndroid Build Coastguard Worker #include <map>
41*35238bceSAndroid Build Coastguard Worker #include <vector>
42*35238bceSAndroid Build Coastguard Worker
43*35238bceSAndroid Build Coastguard Worker namespace sglr
44*35238bceSAndroid Build Coastguard Worker {
45*35238bceSAndroid Build Coastguard Worker namespace rc
46*35238bceSAndroid Build Coastguard Worker {
47*35238bceSAndroid Build Coastguard Worker
48*35238bceSAndroid Build Coastguard Worker enum
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker MAX_TEXTURE_SIZE_LOG2 = 14,
51*35238bceSAndroid Build Coastguard Worker MAX_TEXTURE_SIZE = 1 << MAX_TEXTURE_SIZE_LOG2
52*35238bceSAndroid Build Coastguard Worker };
53*35238bceSAndroid Build Coastguard Worker
54*35238bceSAndroid Build Coastguard Worker class NamedObject
55*35238bceSAndroid Build Coastguard Worker {
56*35238bceSAndroid Build Coastguard Worker public:
~NamedObject(void)57*35238bceSAndroid Build Coastguard Worker virtual ~NamedObject(void)
58*35238bceSAndroid Build Coastguard Worker {
59*35238bceSAndroid Build Coastguard Worker }
60*35238bceSAndroid Build Coastguard Worker
getName(void) const61*35238bceSAndroid Build Coastguard Worker uint32_t getName(void) const
62*35238bceSAndroid Build Coastguard Worker {
63*35238bceSAndroid Build Coastguard Worker return m_name;
64*35238bceSAndroid Build Coastguard Worker }
65*35238bceSAndroid Build Coastguard Worker
getRefCount(void) const66*35238bceSAndroid Build Coastguard Worker int getRefCount(void) const
67*35238bceSAndroid Build Coastguard Worker {
68*35238bceSAndroid Build Coastguard Worker return m_refCount;
69*35238bceSAndroid Build Coastguard Worker }
incRefCount(void)70*35238bceSAndroid Build Coastguard Worker void incRefCount(void)
71*35238bceSAndroid Build Coastguard Worker {
72*35238bceSAndroid Build Coastguard Worker m_refCount += 1;
73*35238bceSAndroid Build Coastguard Worker }
decRefCount(void)74*35238bceSAndroid Build Coastguard Worker void decRefCount(void)
75*35238bceSAndroid Build Coastguard Worker {
76*35238bceSAndroid Build Coastguard Worker DE_ASSERT(m_refCount > 0);
77*35238bceSAndroid Build Coastguard Worker m_refCount -= 1;
78*35238bceSAndroid Build Coastguard Worker }
79*35238bceSAndroid Build Coastguard Worker
80*35238bceSAndroid Build Coastguard Worker protected:
NamedObject(uint32_t name)81*35238bceSAndroid Build Coastguard Worker NamedObject(uint32_t name) : m_name(name), m_refCount(1)
82*35238bceSAndroid Build Coastguard Worker {
83*35238bceSAndroid Build Coastguard Worker }
84*35238bceSAndroid Build Coastguard Worker
85*35238bceSAndroid Build Coastguard Worker private:
86*35238bceSAndroid Build Coastguard Worker uint32_t m_name;
87*35238bceSAndroid Build Coastguard Worker int m_refCount;
88*35238bceSAndroid Build Coastguard Worker };
89*35238bceSAndroid Build Coastguard Worker
90*35238bceSAndroid Build Coastguard Worker class Texture : public NamedObject
91*35238bceSAndroid Build Coastguard Worker {
92*35238bceSAndroid Build Coastguard Worker public:
93*35238bceSAndroid Build Coastguard Worker enum Type
94*35238bceSAndroid Build Coastguard Worker {
95*35238bceSAndroid Build Coastguard Worker TYPE_1D,
96*35238bceSAndroid Build Coastguard Worker TYPE_2D,
97*35238bceSAndroid Build Coastguard Worker TYPE_CUBE_MAP,
98*35238bceSAndroid Build Coastguard Worker TYPE_2D_ARRAY,
99*35238bceSAndroid Build Coastguard Worker TYPE_3D,
100*35238bceSAndroid Build Coastguard Worker TYPE_CUBE_MAP_ARRAY,
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 Texture(uint32_t name, Type type, bool seamless = true);
~Texture(void)106*35238bceSAndroid Build Coastguard Worker virtual ~Texture(void)
107*35238bceSAndroid Build Coastguard Worker {
108*35238bceSAndroid Build Coastguard Worker }
109*35238bceSAndroid Build Coastguard Worker
getType(void) const110*35238bceSAndroid Build Coastguard Worker Type getType(void) const
111*35238bceSAndroid Build Coastguard Worker {
112*35238bceSAndroid Build Coastguard Worker return m_type;
113*35238bceSAndroid Build Coastguard Worker }
114*35238bceSAndroid Build Coastguard Worker
getBaseLevel(void) const115*35238bceSAndroid Build Coastguard Worker int getBaseLevel(void) const
116*35238bceSAndroid Build Coastguard Worker {
117*35238bceSAndroid Build Coastguard Worker return m_baseLevel;
118*35238bceSAndroid Build Coastguard Worker }
getMaxLevel(void) const119*35238bceSAndroid Build Coastguard Worker int getMaxLevel(void) const
120*35238bceSAndroid Build Coastguard Worker {
121*35238bceSAndroid Build Coastguard Worker return m_maxLevel;
122*35238bceSAndroid Build Coastguard Worker }
isImmutable(void) const123*35238bceSAndroid Build Coastguard Worker bool isImmutable(void) const
124*35238bceSAndroid Build Coastguard Worker {
125*35238bceSAndroid Build Coastguard Worker return m_immutable;
126*35238bceSAndroid Build Coastguard Worker }
127*35238bceSAndroid Build Coastguard Worker
setBaseLevel(int baseLevel)128*35238bceSAndroid Build Coastguard Worker void setBaseLevel(int baseLevel)
129*35238bceSAndroid Build Coastguard Worker {
130*35238bceSAndroid Build Coastguard Worker m_baseLevel = baseLevel;
131*35238bceSAndroid Build Coastguard Worker }
setMaxLevel(int maxLevel)132*35238bceSAndroid Build Coastguard Worker void setMaxLevel(int maxLevel)
133*35238bceSAndroid Build Coastguard Worker {
134*35238bceSAndroid Build Coastguard Worker m_maxLevel = maxLevel;
135*35238bceSAndroid Build Coastguard Worker }
setImmutable(void)136*35238bceSAndroid Build Coastguard Worker void setImmutable(void)
137*35238bceSAndroid Build Coastguard Worker {
138*35238bceSAndroid Build Coastguard Worker m_immutable = true;
139*35238bceSAndroid Build Coastguard Worker }
140*35238bceSAndroid Build Coastguard Worker
getSampler(void) const141*35238bceSAndroid Build Coastguard Worker const tcu::Sampler &getSampler(void) const
142*35238bceSAndroid Build Coastguard Worker {
143*35238bceSAndroid Build Coastguard Worker return m_sampler;
144*35238bceSAndroid Build Coastguard Worker }
getSampler(void)145*35238bceSAndroid Build Coastguard Worker tcu::Sampler &getSampler(void)
146*35238bceSAndroid Build Coastguard Worker {
147*35238bceSAndroid Build Coastguard Worker return m_sampler;
148*35238bceSAndroid Build Coastguard Worker }
149*35238bceSAndroid Build Coastguard Worker
150*35238bceSAndroid Build Coastguard Worker private:
151*35238bceSAndroid Build Coastguard Worker Type m_type;
152*35238bceSAndroid Build Coastguard Worker
153*35238bceSAndroid Build Coastguard Worker bool m_immutable;
154*35238bceSAndroid Build Coastguard Worker
155*35238bceSAndroid Build Coastguard Worker tcu::Sampler m_sampler;
156*35238bceSAndroid Build Coastguard Worker int m_baseLevel;
157*35238bceSAndroid Build Coastguard Worker int m_maxLevel;
158*35238bceSAndroid Build Coastguard Worker };
159*35238bceSAndroid Build Coastguard Worker
160*35238bceSAndroid Build Coastguard Worker //! Class for managing list of texture levels.
161*35238bceSAndroid Build Coastguard Worker class TextureLevelArray
162*35238bceSAndroid Build Coastguard Worker {
163*35238bceSAndroid Build Coastguard Worker public:
164*35238bceSAndroid Build Coastguard Worker TextureLevelArray(void);
165*35238bceSAndroid Build Coastguard Worker ~TextureLevelArray(void);
166*35238bceSAndroid Build Coastguard Worker
hasLevel(int level) const167*35238bceSAndroid Build Coastguard Worker bool hasLevel(int level) const
168*35238bceSAndroid Build Coastguard Worker {
169*35238bceSAndroid Build Coastguard Worker return deInBounds32(level, 0, DE_LENGTH_OF_ARRAY(m_data)) && !m_data[level].empty();
170*35238bceSAndroid Build Coastguard Worker }
getLevel(int level)171*35238bceSAndroid Build Coastguard Worker const tcu::PixelBufferAccess &getLevel(int level)
172*35238bceSAndroid Build Coastguard Worker {
173*35238bceSAndroid Build Coastguard Worker DE_ASSERT(hasLevel(level));
174*35238bceSAndroid Build Coastguard Worker return m_access[level];
175*35238bceSAndroid Build Coastguard Worker }
getLevel(int level) const176*35238bceSAndroid Build Coastguard Worker const tcu::ConstPixelBufferAccess &getLevel(int level) const
177*35238bceSAndroid Build Coastguard Worker {
178*35238bceSAndroid Build Coastguard Worker DE_ASSERT(hasLevel(level));
179*35238bceSAndroid Build Coastguard Worker return m_access[level];
180*35238bceSAndroid Build Coastguard Worker }
181*35238bceSAndroid Build Coastguard Worker
getLevels(void) const182*35238bceSAndroid Build Coastguard Worker const tcu::ConstPixelBufferAccess *getLevels(void) const
183*35238bceSAndroid Build Coastguard Worker {
184*35238bceSAndroid Build Coastguard Worker return &m_access[0];
185*35238bceSAndroid Build Coastguard Worker }
getEffectiveLevels(void) const186*35238bceSAndroid Build Coastguard Worker const tcu::ConstPixelBufferAccess *getEffectiveLevels(void) const
187*35238bceSAndroid Build Coastguard Worker {
188*35238bceSAndroid Build Coastguard Worker return &m_effectiveAccess[0];
189*35238bceSAndroid Build Coastguard Worker }
190*35238bceSAndroid Build Coastguard Worker
191*35238bceSAndroid Build Coastguard Worker void allocLevel(int level, const tcu::TextureFormat &format, int width, int height, int depth);
192*35238bceSAndroid Build Coastguard Worker void clearLevel(int level);
193*35238bceSAndroid Build Coastguard Worker
194*35238bceSAndroid Build Coastguard Worker void clear(void);
195*35238bceSAndroid Build Coastguard Worker
196*35238bceSAndroid Build Coastguard Worker void updateSamplerMode(tcu::Sampler::DepthStencilMode);
197*35238bceSAndroid Build Coastguard Worker
198*35238bceSAndroid Build Coastguard Worker private:
199*35238bceSAndroid Build Coastguard Worker de::ArrayBuffer<uint8_t> m_data[MAX_TEXTURE_SIZE_LOG2];
200*35238bceSAndroid Build Coastguard Worker tcu::PixelBufferAccess m_access[MAX_TEXTURE_SIZE_LOG2];
201*35238bceSAndroid Build Coastguard Worker tcu::ConstPixelBufferAccess m_effectiveAccess
202*35238bceSAndroid Build Coastguard Worker [MAX_TEXTURE_SIZE_LOG2]; //!< the currently effective sampling mode. For Depth-stencil texture always either Depth or stencil.
203*35238bceSAndroid Build Coastguard Worker };
204*35238bceSAndroid Build Coastguard Worker
205*35238bceSAndroid Build Coastguard Worker class Texture1D : public Texture
206*35238bceSAndroid Build Coastguard Worker {
207*35238bceSAndroid Build Coastguard Worker public:
208*35238bceSAndroid Build Coastguard Worker Texture1D(uint32_t name = 0);
209*35238bceSAndroid Build Coastguard Worker virtual ~Texture1D(void);
210*35238bceSAndroid Build Coastguard Worker
clearLevels(void)211*35238bceSAndroid Build Coastguard Worker void clearLevels(void)
212*35238bceSAndroid Build Coastguard Worker {
213*35238bceSAndroid Build Coastguard Worker m_levels.clear();
214*35238bceSAndroid Build Coastguard Worker }
215*35238bceSAndroid Build Coastguard Worker
hasLevel(int level) const216*35238bceSAndroid Build Coastguard Worker bool hasLevel(int level) const
217*35238bceSAndroid Build Coastguard Worker {
218*35238bceSAndroid Build Coastguard Worker return m_levels.hasLevel(level);
219*35238bceSAndroid Build Coastguard Worker }
getLevel(int level) const220*35238bceSAndroid Build Coastguard Worker const tcu::ConstPixelBufferAccess &getLevel(int level) const
221*35238bceSAndroid Build Coastguard Worker {
222*35238bceSAndroid Build Coastguard Worker return m_levels.getLevel(level);
223*35238bceSAndroid Build Coastguard Worker }
getLevel(int level)224*35238bceSAndroid Build Coastguard Worker const tcu::PixelBufferAccess &getLevel(int level)
225*35238bceSAndroid Build Coastguard Worker {
226*35238bceSAndroid Build Coastguard Worker return m_levels.getLevel(level);
227*35238bceSAndroid Build Coastguard Worker }
228*35238bceSAndroid Build Coastguard Worker
229*35238bceSAndroid Build Coastguard Worker void allocLevel(int level, const tcu::TextureFormat &format, int width);
230*35238bceSAndroid Build Coastguard Worker
231*35238bceSAndroid Build Coastguard Worker bool isComplete(void) const;
232*35238bceSAndroid Build Coastguard Worker
233*35238bceSAndroid Build Coastguard Worker void updateView(
234*35238bceSAndroid Build Coastguard Worker tcu::Sampler::DepthStencilMode
235*35238bceSAndroid Build Coastguard Worker mode); // \note View must be refreshed after texture parameter/size changes, before calling sample*()
236*35238bceSAndroid Build Coastguard Worker
237*35238bceSAndroid Build Coastguard Worker tcu::Vec4 sample(float s, float lod) const;
238*35238bceSAndroid Build Coastguard Worker void sample4(tcu::Vec4 output[4], const float packetTexcoords[4], float lodBias = 0.0f) const;
239*35238bceSAndroid Build Coastguard Worker
240*35238bceSAndroid Build Coastguard Worker private:
241*35238bceSAndroid Build Coastguard Worker TextureLevelArray m_levels;
242*35238bceSAndroid Build Coastguard Worker tcu::Texture2DView m_view;
243*35238bceSAndroid Build Coastguard Worker };
244*35238bceSAndroid Build Coastguard Worker
245*35238bceSAndroid Build Coastguard Worker class Texture2D : public Texture
246*35238bceSAndroid Build Coastguard Worker {
247*35238bceSAndroid Build Coastguard Worker public:
248*35238bceSAndroid Build Coastguard Worker Texture2D(uint32_t name = 0, bool es2 = false);
249*35238bceSAndroid Build Coastguard Worker virtual ~Texture2D(void);
250*35238bceSAndroid Build Coastguard Worker
clearLevels(void)251*35238bceSAndroid Build Coastguard Worker void clearLevels(void)
252*35238bceSAndroid Build Coastguard Worker {
253*35238bceSAndroid Build Coastguard Worker m_levels.clear();
254*35238bceSAndroid Build Coastguard Worker }
255*35238bceSAndroid Build Coastguard Worker
hasLevel(int level) const256*35238bceSAndroid Build Coastguard Worker bool hasLevel(int level) const
257*35238bceSAndroid Build Coastguard Worker {
258*35238bceSAndroid Build Coastguard Worker return m_levels.hasLevel(level);
259*35238bceSAndroid Build Coastguard Worker }
getLevel(int level) const260*35238bceSAndroid Build Coastguard Worker const tcu::ConstPixelBufferAccess &getLevel(int level) const
261*35238bceSAndroid Build Coastguard Worker {
262*35238bceSAndroid Build Coastguard Worker return m_levels.getLevel(level);
263*35238bceSAndroid Build Coastguard Worker }
getLevel(int level)264*35238bceSAndroid Build Coastguard Worker const tcu::PixelBufferAccess &getLevel(int level)
265*35238bceSAndroid Build Coastguard Worker {
266*35238bceSAndroid Build Coastguard Worker return m_levels.getLevel(level);
267*35238bceSAndroid Build Coastguard Worker }
268*35238bceSAndroid Build Coastguard Worker
269*35238bceSAndroid Build Coastguard Worker void allocLevel(int level, const tcu::TextureFormat &format, int width, int height);
270*35238bceSAndroid Build Coastguard Worker
271*35238bceSAndroid Build Coastguard Worker bool isComplete(void) const;
272*35238bceSAndroid Build Coastguard Worker
273*35238bceSAndroid Build Coastguard Worker void updateView(
274*35238bceSAndroid Build Coastguard Worker tcu::Sampler::DepthStencilMode
275*35238bceSAndroid Build Coastguard Worker mode); // \note View must be refreshed after texture parameter/size changes, before calling sample*()
276*35238bceSAndroid Build Coastguard Worker
277*35238bceSAndroid Build Coastguard Worker tcu::Vec4 sample(float s, float t, float lod) const;
278*35238bceSAndroid Build Coastguard Worker void sample4(tcu::Vec4 output[4], const tcu::Vec2 packetTexcoords[4], float lodBias = 0.0f) const;
279*35238bceSAndroid Build Coastguard Worker
280*35238bceSAndroid Build Coastguard Worker private:
281*35238bceSAndroid Build Coastguard Worker TextureLevelArray m_levels;
282*35238bceSAndroid Build Coastguard Worker tcu::Texture2DView m_view;
283*35238bceSAndroid Build Coastguard Worker };
284*35238bceSAndroid Build Coastguard Worker
285*35238bceSAndroid Build Coastguard Worker class TextureCube : public Texture
286*35238bceSAndroid Build Coastguard Worker {
287*35238bceSAndroid Build Coastguard Worker public:
288*35238bceSAndroid Build Coastguard Worker TextureCube(uint32_t name = 0, bool seamless = true);
289*35238bceSAndroid Build Coastguard Worker virtual ~TextureCube(void);
290*35238bceSAndroid Build Coastguard Worker
291*35238bceSAndroid Build Coastguard Worker void clearLevels(void);
292*35238bceSAndroid Build Coastguard Worker
hasFace(int level,tcu::CubeFace face) const293*35238bceSAndroid Build Coastguard Worker bool hasFace(int level, tcu::CubeFace face) const
294*35238bceSAndroid Build Coastguard Worker {
295*35238bceSAndroid Build Coastguard Worker return m_levels[face].hasLevel(level);
296*35238bceSAndroid Build Coastguard Worker }
getFace(int level,tcu::CubeFace face)297*35238bceSAndroid Build Coastguard Worker const tcu::PixelBufferAccess &getFace(int level, tcu::CubeFace face)
298*35238bceSAndroid Build Coastguard Worker {
299*35238bceSAndroid Build Coastguard Worker return m_levels[face].getLevel(level);
300*35238bceSAndroid Build Coastguard Worker }
getFace(int level,tcu::CubeFace face) const301*35238bceSAndroid Build Coastguard Worker const tcu::ConstPixelBufferAccess &getFace(int level, tcu::CubeFace face) const
302*35238bceSAndroid Build Coastguard Worker {
303*35238bceSAndroid Build Coastguard Worker return m_levels[face].getLevel(level);
304*35238bceSAndroid Build Coastguard Worker }
305*35238bceSAndroid Build Coastguard Worker
306*35238bceSAndroid Build Coastguard Worker void allocFace(int level, tcu::CubeFace face, const tcu::TextureFormat &format, int width, int height);
307*35238bceSAndroid Build Coastguard Worker
308*35238bceSAndroid Build Coastguard Worker bool isComplete(void) const;
309*35238bceSAndroid Build Coastguard Worker void updateView(
310*35238bceSAndroid Build Coastguard Worker tcu::Sampler::DepthStencilMode
311*35238bceSAndroid Build Coastguard Worker mode); // \note View must be refreshed after texture parameter/size changes, before calling sample*()
312*35238bceSAndroid Build Coastguard Worker
313*35238bceSAndroid Build Coastguard Worker tcu::Vec4 sample(float s, float t, float p, float lod) const;
314*35238bceSAndroid Build Coastguard Worker void sample4(tcu::Vec4 output[4], const tcu::Vec3 packetTexcoords[4], float lodBias = 0.0f) const;
315*35238bceSAndroid Build Coastguard Worker
316*35238bceSAndroid Build Coastguard Worker private:
317*35238bceSAndroid Build Coastguard Worker TextureLevelArray m_levels[tcu::CUBEFACE_LAST];
318*35238bceSAndroid Build Coastguard Worker tcu::TextureCubeView m_view;
319*35238bceSAndroid Build Coastguard Worker };
320*35238bceSAndroid Build Coastguard Worker
321*35238bceSAndroid Build Coastguard Worker class Texture2DArray : public Texture
322*35238bceSAndroid Build Coastguard Worker {
323*35238bceSAndroid Build Coastguard Worker public:
324*35238bceSAndroid Build Coastguard Worker Texture2DArray(uint32_t name = 0);
325*35238bceSAndroid Build Coastguard Worker virtual ~Texture2DArray(void);
326*35238bceSAndroid Build Coastguard Worker
clearLevels(void)327*35238bceSAndroid Build Coastguard Worker void clearLevels(void)
328*35238bceSAndroid Build Coastguard Worker {
329*35238bceSAndroid Build Coastguard Worker m_levels.clear();
330*35238bceSAndroid Build Coastguard Worker }
331*35238bceSAndroid Build Coastguard Worker
hasLevel(int level) const332*35238bceSAndroid Build Coastguard Worker bool hasLevel(int level) const
333*35238bceSAndroid Build Coastguard Worker {
334*35238bceSAndroid Build Coastguard Worker return m_levels.hasLevel(level);
335*35238bceSAndroid Build Coastguard Worker }
getLevel(int level) const336*35238bceSAndroid Build Coastguard Worker const tcu::ConstPixelBufferAccess &getLevel(int level) const
337*35238bceSAndroid Build Coastguard Worker {
338*35238bceSAndroid Build Coastguard Worker return m_levels.getLevel(level);
339*35238bceSAndroid Build Coastguard Worker }
getLevel(int level)340*35238bceSAndroid Build Coastguard Worker const tcu::PixelBufferAccess &getLevel(int level)
341*35238bceSAndroid Build Coastguard Worker {
342*35238bceSAndroid Build Coastguard Worker return m_levels.getLevel(level);
343*35238bceSAndroid Build Coastguard Worker }
344*35238bceSAndroid Build Coastguard Worker
345*35238bceSAndroid Build Coastguard Worker void allocLevel(int level, const tcu::TextureFormat &format, int width, int height, int numLayers);
346*35238bceSAndroid Build Coastguard Worker
347*35238bceSAndroid Build Coastguard Worker bool isComplete(void) const;
348*35238bceSAndroid Build Coastguard Worker
349*35238bceSAndroid Build Coastguard Worker void updateView(
350*35238bceSAndroid Build Coastguard Worker tcu::Sampler::DepthStencilMode
351*35238bceSAndroid Build Coastguard Worker mode); // \note View must be refreshed after texture parameter/size changes, before calling sample*()
352*35238bceSAndroid Build Coastguard Worker
353*35238bceSAndroid Build Coastguard Worker tcu::Vec4 sample(float s, float t, float r, float lod) const;
354*35238bceSAndroid Build Coastguard Worker void sample4(tcu::Vec4 output[4], const tcu::Vec3 packetTexcoords[4], float lodBias = 0.0f) const;
355*35238bceSAndroid Build Coastguard Worker
356*35238bceSAndroid Build Coastguard Worker private:
357*35238bceSAndroid Build Coastguard Worker TextureLevelArray m_levels;
358*35238bceSAndroid Build Coastguard Worker tcu::Texture2DArrayView m_view;
359*35238bceSAndroid Build Coastguard Worker };
360*35238bceSAndroid Build Coastguard Worker
361*35238bceSAndroid Build Coastguard Worker class Texture3D : public Texture
362*35238bceSAndroid Build Coastguard Worker {
363*35238bceSAndroid Build Coastguard Worker public:
364*35238bceSAndroid Build Coastguard Worker Texture3D(uint32_t name = 0);
365*35238bceSAndroid Build Coastguard Worker virtual ~Texture3D(void);
366*35238bceSAndroid Build Coastguard Worker
clearLevels(void)367*35238bceSAndroid Build Coastguard Worker void clearLevels(void)
368*35238bceSAndroid Build Coastguard Worker {
369*35238bceSAndroid Build Coastguard Worker m_levels.clear();
370*35238bceSAndroid Build Coastguard Worker }
371*35238bceSAndroid Build Coastguard Worker
hasLevel(int level) const372*35238bceSAndroid Build Coastguard Worker bool hasLevel(int level) const
373*35238bceSAndroid Build Coastguard Worker {
374*35238bceSAndroid Build Coastguard Worker return m_levels.hasLevel(level);
375*35238bceSAndroid Build Coastguard Worker }
getLevel(int level) const376*35238bceSAndroid Build Coastguard Worker const tcu::ConstPixelBufferAccess &getLevel(int level) const
377*35238bceSAndroid Build Coastguard Worker {
378*35238bceSAndroid Build Coastguard Worker return m_levels.getLevel(level);
379*35238bceSAndroid Build Coastguard Worker }
getLevel(int level)380*35238bceSAndroid Build Coastguard Worker const tcu::PixelBufferAccess &getLevel(int level)
381*35238bceSAndroid Build Coastguard Worker {
382*35238bceSAndroid Build Coastguard Worker return m_levels.getLevel(level);
383*35238bceSAndroid Build Coastguard Worker }
384*35238bceSAndroid Build Coastguard Worker
385*35238bceSAndroid Build Coastguard Worker void allocLevel(int level, const tcu::TextureFormat &format, int width, int height, int numLayers);
386*35238bceSAndroid Build Coastguard Worker
387*35238bceSAndroid Build Coastguard Worker bool isComplete(void) const;
388*35238bceSAndroid Build Coastguard Worker
389*35238bceSAndroid Build Coastguard Worker void updateView(
390*35238bceSAndroid Build Coastguard Worker tcu::Sampler::DepthStencilMode
391*35238bceSAndroid Build Coastguard Worker mode); // \note View must be refreshed after texture parameter/size changes, before calling sample*()
392*35238bceSAndroid Build Coastguard Worker
393*35238bceSAndroid Build Coastguard Worker tcu::Vec4 sample(float s, float t, float r, float lod) const;
394*35238bceSAndroid Build Coastguard Worker void sample4(tcu::Vec4 output[4], const tcu::Vec3 packetTexcoords[4], float lodBias = 0.0f) const;
395*35238bceSAndroid Build Coastguard Worker
396*35238bceSAndroid Build Coastguard Worker private:
397*35238bceSAndroid Build Coastguard Worker TextureLevelArray m_levels;
398*35238bceSAndroid Build Coastguard Worker tcu::Texture3DView m_view;
399*35238bceSAndroid Build Coastguard Worker };
400*35238bceSAndroid Build Coastguard Worker
401*35238bceSAndroid Build Coastguard Worker class TextureCubeArray : public Texture
402*35238bceSAndroid Build Coastguard Worker {
403*35238bceSAndroid Build Coastguard Worker public:
404*35238bceSAndroid Build Coastguard Worker TextureCubeArray(uint32_t name = 0);
405*35238bceSAndroid Build Coastguard Worker virtual ~TextureCubeArray(void);
406*35238bceSAndroid Build Coastguard Worker
clearLevels(void)407*35238bceSAndroid Build Coastguard Worker void clearLevels(void)
408*35238bceSAndroid Build Coastguard Worker {
409*35238bceSAndroid Build Coastguard Worker m_levels.clear();
410*35238bceSAndroid Build Coastguard Worker }
411*35238bceSAndroid Build Coastguard Worker
hasLevel(int level) const412*35238bceSAndroid Build Coastguard Worker bool hasLevel(int level) const
413*35238bceSAndroid Build Coastguard Worker {
414*35238bceSAndroid Build Coastguard Worker return m_levels.hasLevel(level);
415*35238bceSAndroid Build Coastguard Worker }
getLevel(int level) const416*35238bceSAndroid Build Coastguard Worker const tcu::ConstPixelBufferAccess &getLevel(int level) const
417*35238bceSAndroid Build Coastguard Worker {
418*35238bceSAndroid Build Coastguard Worker return m_levels.getLevel(level);
419*35238bceSAndroid Build Coastguard Worker }
getLevel(int level)420*35238bceSAndroid Build Coastguard Worker const tcu::PixelBufferAccess &getLevel(int level)
421*35238bceSAndroid Build Coastguard Worker {
422*35238bceSAndroid Build Coastguard Worker return m_levels.getLevel(level);
423*35238bceSAndroid Build Coastguard Worker }
424*35238bceSAndroid Build Coastguard Worker
425*35238bceSAndroid Build Coastguard Worker void allocLevel(int level, const tcu::TextureFormat &format, int width, int height, int numLayers);
426*35238bceSAndroid Build Coastguard Worker
427*35238bceSAndroid Build Coastguard Worker bool isComplete(void) const;
428*35238bceSAndroid Build Coastguard Worker
429*35238bceSAndroid Build Coastguard Worker void updateView(
430*35238bceSAndroid Build Coastguard Worker tcu::Sampler::DepthStencilMode
431*35238bceSAndroid Build Coastguard Worker mode); // \note View must be refreshed after texture parameter/size changes, before calling sample*()
432*35238bceSAndroid Build Coastguard Worker
433*35238bceSAndroid Build Coastguard Worker tcu::Vec4 sample(float s, float t, float r, float q, float lod) const;
434*35238bceSAndroid Build Coastguard Worker void sample4(tcu::Vec4 output[4], const tcu::Vec4 packetTexcoords[4], float lodBias = 0.0f) const;
435*35238bceSAndroid Build Coastguard Worker
436*35238bceSAndroid Build Coastguard Worker private:
437*35238bceSAndroid Build Coastguard Worker TextureLevelArray m_levels;
438*35238bceSAndroid Build Coastguard Worker tcu::TextureCubeArrayView m_view;
439*35238bceSAndroid Build Coastguard Worker };
440*35238bceSAndroid Build Coastguard Worker
441*35238bceSAndroid Build Coastguard Worker class Renderbuffer : public NamedObject
442*35238bceSAndroid Build Coastguard Worker {
443*35238bceSAndroid Build Coastguard Worker public:
444*35238bceSAndroid Build Coastguard Worker enum Format
445*35238bceSAndroid Build Coastguard Worker {
446*35238bceSAndroid Build Coastguard Worker FORMAT_DEPTH_COMPONENT16,
447*35238bceSAndroid Build Coastguard Worker FORMAT_RGBA4,
448*35238bceSAndroid Build Coastguard Worker FORMAT_RGB5_A1,
449*35238bceSAndroid Build Coastguard Worker FORMAT_RGB565,
450*35238bceSAndroid Build Coastguard Worker FORMAT_STENCIL_INDEX8,
451*35238bceSAndroid Build Coastguard Worker
452*35238bceSAndroid Build Coastguard Worker FORMAT_LAST
453*35238bceSAndroid Build Coastguard Worker };
454*35238bceSAndroid Build Coastguard Worker
455*35238bceSAndroid Build Coastguard Worker Renderbuffer(uint32_t name);
456*35238bceSAndroid Build Coastguard Worker virtual ~Renderbuffer(void);
457*35238bceSAndroid Build Coastguard Worker
458*35238bceSAndroid Build Coastguard Worker void setStorage(const tcu::TextureFormat &format, int width, int height);
459*35238bceSAndroid Build Coastguard Worker
getWidth(void) const460*35238bceSAndroid Build Coastguard Worker int getWidth(void) const
461*35238bceSAndroid Build Coastguard Worker {
462*35238bceSAndroid Build Coastguard Worker return m_data.getWidth();
463*35238bceSAndroid Build Coastguard Worker }
getHeight(void) const464*35238bceSAndroid Build Coastguard Worker int getHeight(void) const
465*35238bceSAndroid Build Coastguard Worker {
466*35238bceSAndroid Build Coastguard Worker return m_data.getHeight();
467*35238bceSAndroid Build Coastguard Worker }
getFormat(void) const468*35238bceSAndroid Build Coastguard Worker tcu::TextureFormat getFormat(void) const
469*35238bceSAndroid Build Coastguard Worker {
470*35238bceSAndroid Build Coastguard Worker return m_data.getFormat();
471*35238bceSAndroid Build Coastguard Worker }
472*35238bceSAndroid Build Coastguard Worker
getAccess(void)473*35238bceSAndroid Build Coastguard Worker tcu::PixelBufferAccess getAccess(void)
474*35238bceSAndroid Build Coastguard Worker {
475*35238bceSAndroid Build Coastguard Worker return m_data.getAccess();
476*35238bceSAndroid Build Coastguard Worker }
getAccess(void) const477*35238bceSAndroid Build Coastguard Worker tcu::ConstPixelBufferAccess getAccess(void) const
478*35238bceSAndroid Build Coastguard Worker {
479*35238bceSAndroid Build Coastguard Worker return m_data.getAccess();
480*35238bceSAndroid Build Coastguard Worker }
481*35238bceSAndroid Build Coastguard Worker
482*35238bceSAndroid Build Coastguard Worker private:
483*35238bceSAndroid Build Coastguard Worker tcu::TextureLevel m_data;
484*35238bceSAndroid Build Coastguard Worker };
485*35238bceSAndroid Build Coastguard Worker
486*35238bceSAndroid Build Coastguard Worker class Framebuffer : public NamedObject
487*35238bceSAndroid Build Coastguard Worker {
488*35238bceSAndroid Build Coastguard Worker public:
489*35238bceSAndroid Build Coastguard Worker enum AttachmentPoint
490*35238bceSAndroid Build Coastguard Worker {
491*35238bceSAndroid Build Coastguard Worker ATTACHMENTPOINT_COLOR0,
492*35238bceSAndroid Build Coastguard Worker ATTACHMENTPOINT_DEPTH,
493*35238bceSAndroid Build Coastguard Worker ATTACHMENTPOINT_STENCIL,
494*35238bceSAndroid Build Coastguard Worker
495*35238bceSAndroid Build Coastguard Worker ATTACHMENTPOINT_LAST
496*35238bceSAndroid Build Coastguard Worker };
497*35238bceSAndroid Build Coastguard Worker
498*35238bceSAndroid Build Coastguard Worker enum AttachmentType
499*35238bceSAndroid Build Coastguard Worker {
500*35238bceSAndroid Build Coastguard Worker ATTACHMENTTYPE_RENDERBUFFER,
501*35238bceSAndroid Build Coastguard Worker ATTACHMENTTYPE_TEXTURE,
502*35238bceSAndroid Build Coastguard Worker
503*35238bceSAndroid Build Coastguard Worker ATTACHMENTTYPE_LAST
504*35238bceSAndroid Build Coastguard Worker };
505*35238bceSAndroid Build Coastguard Worker
506*35238bceSAndroid Build Coastguard Worker enum TexTarget
507*35238bceSAndroid Build Coastguard Worker {
508*35238bceSAndroid Build Coastguard Worker TEXTARGET_2D,
509*35238bceSAndroid Build Coastguard Worker TEXTARGET_CUBE_MAP_POSITIVE_X,
510*35238bceSAndroid Build Coastguard Worker TEXTARGET_CUBE_MAP_POSITIVE_Y,
511*35238bceSAndroid Build Coastguard Worker TEXTARGET_CUBE_MAP_POSITIVE_Z,
512*35238bceSAndroid Build Coastguard Worker TEXTARGET_CUBE_MAP_NEGATIVE_X,
513*35238bceSAndroid Build Coastguard Worker TEXTARGET_CUBE_MAP_NEGATIVE_Y,
514*35238bceSAndroid Build Coastguard Worker TEXTARGET_CUBE_MAP_NEGATIVE_Z,
515*35238bceSAndroid Build Coastguard Worker TEXTARGET_2D_ARRAY,
516*35238bceSAndroid Build Coastguard Worker TEXTARGET_3D,
517*35238bceSAndroid Build Coastguard Worker TEXTARGET_CUBE_MAP_ARRAY,
518*35238bceSAndroid Build Coastguard Worker
519*35238bceSAndroid Build Coastguard Worker TEXTARGET_LAST
520*35238bceSAndroid Build Coastguard Worker };
521*35238bceSAndroid Build Coastguard Worker
522*35238bceSAndroid Build Coastguard Worker struct Attachment
523*35238bceSAndroid Build Coastguard Worker {
524*35238bceSAndroid Build Coastguard Worker AttachmentType type;
525*35238bceSAndroid Build Coastguard Worker uint32_t name;
526*35238bceSAndroid Build Coastguard Worker TexTarget texTarget;
527*35238bceSAndroid Build Coastguard Worker int level;
528*35238bceSAndroid Build Coastguard Worker int layer;
529*35238bceSAndroid Build Coastguard Worker
Attachmentsglr::rc::Framebuffer::Attachment530*35238bceSAndroid Build Coastguard Worker Attachment(void) : type(ATTACHMENTTYPE_LAST), name(0), texTarget(TEXTARGET_LAST), level(0), layer(0)
531*35238bceSAndroid Build Coastguard Worker {
532*35238bceSAndroid Build Coastguard Worker }
533*35238bceSAndroid Build Coastguard Worker };
534*35238bceSAndroid Build Coastguard Worker
535*35238bceSAndroid Build Coastguard Worker Framebuffer(uint32_t name);
536*35238bceSAndroid Build Coastguard Worker virtual ~Framebuffer(void);
537*35238bceSAndroid Build Coastguard Worker
getAttachment(AttachmentPoint point)538*35238bceSAndroid Build Coastguard Worker Attachment &getAttachment(AttachmentPoint point)
539*35238bceSAndroid Build Coastguard Worker {
540*35238bceSAndroid Build Coastguard Worker return m_attachments[point];
541*35238bceSAndroid Build Coastguard Worker }
getAttachment(AttachmentPoint point) const542*35238bceSAndroid Build Coastguard Worker const Attachment &getAttachment(AttachmentPoint point) const
543*35238bceSAndroid Build Coastguard Worker {
544*35238bceSAndroid Build Coastguard Worker return m_attachments[point];
545*35238bceSAndroid Build Coastguard Worker }
546*35238bceSAndroid Build Coastguard Worker
547*35238bceSAndroid Build Coastguard Worker private:
548*35238bceSAndroid Build Coastguard Worker Attachment m_attachments[ATTACHMENTPOINT_LAST];
549*35238bceSAndroid Build Coastguard Worker };
550*35238bceSAndroid Build Coastguard Worker
551*35238bceSAndroid Build Coastguard Worker class DataBuffer : public NamedObject
552*35238bceSAndroid Build Coastguard Worker {
553*35238bceSAndroid Build Coastguard Worker public:
DataBuffer(uint32_t name)554*35238bceSAndroid Build Coastguard Worker DataBuffer(uint32_t name) : NamedObject(name)
555*35238bceSAndroid Build Coastguard Worker {
556*35238bceSAndroid Build Coastguard Worker }
~DataBuffer(void)557*35238bceSAndroid Build Coastguard Worker ~DataBuffer(void)
558*35238bceSAndroid Build Coastguard Worker {
559*35238bceSAndroid Build Coastguard Worker }
560*35238bceSAndroid Build Coastguard Worker
setStorage(int size)561*35238bceSAndroid Build Coastguard Worker void setStorage(int size)
562*35238bceSAndroid Build Coastguard Worker {
563*35238bceSAndroid Build Coastguard Worker m_data.resize(size);
564*35238bceSAndroid Build Coastguard Worker }
565*35238bceSAndroid Build Coastguard Worker
getSize(void) const566*35238bceSAndroid Build Coastguard Worker int getSize(void) const
567*35238bceSAndroid Build Coastguard Worker {
568*35238bceSAndroid Build Coastguard Worker return (int)m_data.size();
569*35238bceSAndroid Build Coastguard Worker }
getData(void) const570*35238bceSAndroid Build Coastguard Worker const uint8_t *getData(void) const
571*35238bceSAndroid Build Coastguard Worker {
572*35238bceSAndroid Build Coastguard Worker return m_data.empty() ? DE_NULL : &m_data[0];
573*35238bceSAndroid Build Coastguard Worker }
getData(void)574*35238bceSAndroid Build Coastguard Worker uint8_t *getData(void)
575*35238bceSAndroid Build Coastguard Worker {
576*35238bceSAndroid Build Coastguard Worker return m_data.empty() ? DE_NULL : &m_data[0];
577*35238bceSAndroid Build Coastguard Worker }
578*35238bceSAndroid Build Coastguard Worker
579*35238bceSAndroid Build Coastguard Worker private:
580*35238bceSAndroid Build Coastguard Worker std::vector<uint8_t> m_data;
581*35238bceSAndroid Build Coastguard Worker };
582*35238bceSAndroid Build Coastguard Worker
583*35238bceSAndroid Build Coastguard Worker class VertexArray : public NamedObject
584*35238bceSAndroid Build Coastguard Worker {
585*35238bceSAndroid Build Coastguard Worker public:
586*35238bceSAndroid Build Coastguard Worker struct VertexAttribArray
587*35238bceSAndroid Build Coastguard Worker {
588*35238bceSAndroid Build Coastguard Worker bool enabled;
589*35238bceSAndroid Build Coastguard Worker int size;
590*35238bceSAndroid Build Coastguard Worker int stride;
591*35238bceSAndroid Build Coastguard Worker uint32_t type;
592*35238bceSAndroid Build Coastguard Worker
593*35238bceSAndroid Build Coastguard Worker bool normalized;
594*35238bceSAndroid Build Coastguard Worker bool integer;
595*35238bceSAndroid Build Coastguard Worker int divisor;
596*35238bceSAndroid Build Coastguard Worker
597*35238bceSAndroid Build Coastguard Worker /**
598*35238bceSAndroid Build Coastguard Worker ! These three variables define the state. bufferDeleted is needed to distinguish
599*35238bceSAndroid Build Coastguard Worker ! drawing from user pointer and offset to a deleted buffer from each other.
600*35238bceSAndroid Build Coastguard Worker !
601*35238bceSAndroid Build Coastguard Worker ! Only these three combinations are possible:
602*35238bceSAndroid Build Coastguard Worker ! 1) bufferDeleted = false, bufferBinding = NULL, pointer = user_ptr. < render from a user ptr
603*35238bceSAndroid Build Coastguard Worker ! 2) bufferDeleted = false, bufferBinding = ptr, pointer = offset. < render from a buffer with offset
604*35238bceSAndroid Build Coastguard Worker ! 3) bufferDeleted = true, bufferBinding = NULL, pointer = offset < render from a deleted buffer. Don't do anything
605*35238bceSAndroid Build Coastguard Worker !
606*35238bceSAndroid Build Coastguard Worker ! (bufferFreed = true) implies (bufferBinding = NULL)
607*35238bceSAndroid Build Coastguard Worker */
608*35238bceSAndroid Build Coastguard Worker bool bufferDeleted;
609*35238bceSAndroid Build Coastguard Worker rc::DataBuffer *bufferBinding;
610*35238bceSAndroid Build Coastguard Worker const void *pointer;
611*35238bceSAndroid Build Coastguard Worker };
612*35238bceSAndroid Build Coastguard Worker
613*35238bceSAndroid Build Coastguard Worker VertexArray(uint32_t name, int maxVertexAttribs);
~VertexArray(void)614*35238bceSAndroid Build Coastguard Worker ~VertexArray(void)
615*35238bceSAndroid Build Coastguard Worker {
616*35238bceSAndroid Build Coastguard Worker }
617*35238bceSAndroid Build Coastguard Worker
618*35238bceSAndroid Build Coastguard Worker rc::DataBuffer *m_elementArrayBufferBinding;
619*35238bceSAndroid Build Coastguard Worker std::vector<VertexAttribArray> m_arrays;
620*35238bceSAndroid Build Coastguard Worker };
621*35238bceSAndroid Build Coastguard Worker
622*35238bceSAndroid Build Coastguard Worker class ShaderProgramObjectContainer : public NamedObject
623*35238bceSAndroid Build Coastguard Worker {
624*35238bceSAndroid Build Coastguard Worker public:
625*35238bceSAndroid Build Coastguard Worker ShaderProgramObjectContainer(uint32_t name, ShaderProgram *program);
626*35238bceSAndroid Build Coastguard Worker ~ShaderProgramObjectContainer(void);
627*35238bceSAndroid Build Coastguard Worker
628*35238bceSAndroid Build Coastguard Worker ShaderProgram *m_program;
629*35238bceSAndroid Build Coastguard Worker bool m_deleteFlag;
630*35238bceSAndroid Build Coastguard Worker };
631*35238bceSAndroid Build Coastguard Worker
632*35238bceSAndroid Build Coastguard Worker template <typename T>
633*35238bceSAndroid Build Coastguard Worker class ObjectManager
634*35238bceSAndroid Build Coastguard Worker {
635*35238bceSAndroid Build Coastguard Worker public:
636*35238bceSAndroid Build Coastguard Worker ObjectManager(void);
637*35238bceSAndroid Build Coastguard Worker ~ObjectManager(void);
638*35238bceSAndroid Build Coastguard Worker
639*35238bceSAndroid Build Coastguard Worker uint32_t allocateName(void);
640*35238bceSAndroid Build Coastguard Worker void insert(T *object);
641*35238bceSAndroid Build Coastguard Worker T *find(uint32_t name);
642*35238bceSAndroid Build Coastguard Worker
643*35238bceSAndroid Build Coastguard Worker void acquireReference(T *object);
644*35238bceSAndroid Build Coastguard Worker void releaseReference(T *object);
645*35238bceSAndroid Build Coastguard Worker
getCount(void) const646*35238bceSAndroid Build Coastguard Worker int getCount(void) const
647*35238bceSAndroid Build Coastguard Worker {
648*35238bceSAndroid Build Coastguard Worker return (int)m_objects.size();
649*35238bceSAndroid Build Coastguard Worker }
650*35238bceSAndroid Build Coastguard Worker void getAll(typename std::vector<T *> &objects) const;
651*35238bceSAndroid Build Coastguard Worker
652*35238bceSAndroid Build Coastguard Worker private:
653*35238bceSAndroid Build Coastguard Worker ObjectManager(const ObjectManager<T> &other);
654*35238bceSAndroid Build Coastguard Worker ObjectManager &operator=(const ObjectManager<T> &other);
655*35238bceSAndroid Build Coastguard Worker
656*35238bceSAndroid Build Coastguard Worker uint32_t m_lastName;
657*35238bceSAndroid Build Coastguard Worker std::map<uint32_t, T *> m_objects;
658*35238bceSAndroid Build Coastguard Worker };
659*35238bceSAndroid Build Coastguard Worker
660*35238bceSAndroid Build Coastguard Worker template <typename T>
ObjectManager(void)661*35238bceSAndroid Build Coastguard Worker ObjectManager<T>::ObjectManager(void) : m_lastName(0)
662*35238bceSAndroid Build Coastguard Worker {
663*35238bceSAndroid Build Coastguard Worker }
664*35238bceSAndroid Build Coastguard Worker
665*35238bceSAndroid Build Coastguard Worker template <typename T>
~ObjectManager(void)666*35238bceSAndroid Build Coastguard Worker ObjectManager<T>::~ObjectManager(void)
667*35238bceSAndroid Build Coastguard Worker {
668*35238bceSAndroid Build Coastguard Worker DE_ASSERT(m_objects.size() == 0);
669*35238bceSAndroid Build Coastguard Worker }
670*35238bceSAndroid Build Coastguard Worker
671*35238bceSAndroid Build Coastguard Worker template <typename T>
allocateName(void)672*35238bceSAndroid Build Coastguard Worker uint32_t ObjectManager<T>::allocateName(void)
673*35238bceSAndroid Build Coastguard Worker {
674*35238bceSAndroid Build Coastguard Worker TCU_CHECK(m_lastName != 0xffffffff);
675*35238bceSAndroid Build Coastguard Worker return ++m_lastName;
676*35238bceSAndroid Build Coastguard Worker }
677*35238bceSAndroid Build Coastguard Worker
678*35238bceSAndroid Build Coastguard Worker template <typename T>
insert(T * object)679*35238bceSAndroid Build Coastguard Worker void ObjectManager<T>::insert(T *object)
680*35238bceSAndroid Build Coastguard Worker {
681*35238bceSAndroid Build Coastguard Worker uint32_t name = object->getName();
682*35238bceSAndroid Build Coastguard Worker DE_ASSERT(object->getName() != 0);
683*35238bceSAndroid Build Coastguard Worker
684*35238bceSAndroid Build Coastguard Worker if (name > m_lastName)
685*35238bceSAndroid Build Coastguard Worker m_lastName = name;
686*35238bceSAndroid Build Coastguard Worker
687*35238bceSAndroid Build Coastguard Worker m_objects.insert(std::pair<uint32_t, T *>(name, object));
688*35238bceSAndroid Build Coastguard Worker }
689*35238bceSAndroid Build Coastguard Worker
690*35238bceSAndroid Build Coastguard Worker template <typename T>
find(uint32_t name)691*35238bceSAndroid Build Coastguard Worker T *ObjectManager<T>::find(uint32_t name)
692*35238bceSAndroid Build Coastguard Worker {
693*35238bceSAndroid Build Coastguard Worker typename std::map<uint32_t, T *>::iterator it = m_objects.find(name);
694*35238bceSAndroid Build Coastguard Worker if (it != m_objects.end())
695*35238bceSAndroid Build Coastguard Worker return it->second;
696*35238bceSAndroid Build Coastguard Worker else
697*35238bceSAndroid Build Coastguard Worker return DE_NULL;
698*35238bceSAndroid Build Coastguard Worker }
699*35238bceSAndroid Build Coastguard Worker
700*35238bceSAndroid Build Coastguard Worker template <typename T>
acquireReference(T * object)701*35238bceSAndroid Build Coastguard Worker void ObjectManager<T>::acquireReference(T *object)
702*35238bceSAndroid Build Coastguard Worker {
703*35238bceSAndroid Build Coastguard Worker DE_ASSERT(find(object->getName()) == object);
704*35238bceSAndroid Build Coastguard Worker object->incRefCount();
705*35238bceSAndroid Build Coastguard Worker }
706*35238bceSAndroid Build Coastguard Worker
707*35238bceSAndroid Build Coastguard Worker template <typename T>
releaseReference(T * object)708*35238bceSAndroid Build Coastguard Worker void ObjectManager<T>::releaseReference(T *object)
709*35238bceSAndroid Build Coastguard Worker {
710*35238bceSAndroid Build Coastguard Worker DE_ASSERT(find(object->getName()) == object);
711*35238bceSAndroid Build Coastguard Worker object->decRefCount();
712*35238bceSAndroid Build Coastguard Worker
713*35238bceSAndroid Build Coastguard Worker if (object->getRefCount() == 0)
714*35238bceSAndroid Build Coastguard Worker {
715*35238bceSAndroid Build Coastguard Worker m_objects.erase(object->getName());
716*35238bceSAndroid Build Coastguard Worker delete object;
717*35238bceSAndroid Build Coastguard Worker }
718*35238bceSAndroid Build Coastguard Worker }
719*35238bceSAndroid Build Coastguard Worker
720*35238bceSAndroid Build Coastguard Worker template <typename T>
getAll(typename std::vector<T * > & objects) const721*35238bceSAndroid Build Coastguard Worker void ObjectManager<T>::getAll(typename std::vector<T *> &objects) const
722*35238bceSAndroid Build Coastguard Worker {
723*35238bceSAndroid Build Coastguard Worker objects.resize(m_objects.size());
724*35238bceSAndroid Build Coastguard Worker typename std::vector<T *>::iterator dst = objects.begin();
725*35238bceSAndroid Build Coastguard Worker
726*35238bceSAndroid Build Coastguard Worker for (typename std::map<uint32_t, T *>::const_iterator i = m_objects.begin(); i != m_objects.end(); i++)
727*35238bceSAndroid Build Coastguard Worker {
728*35238bceSAndroid Build Coastguard Worker *dst++ = i->second;
729*35238bceSAndroid Build Coastguard Worker }
730*35238bceSAndroid Build Coastguard Worker }
731*35238bceSAndroid Build Coastguard Worker
732*35238bceSAndroid Build Coastguard Worker } // namespace rc
733*35238bceSAndroid Build Coastguard Worker
734*35238bceSAndroid Build Coastguard Worker struct ReferenceContextLimits
735*35238bceSAndroid Build Coastguard Worker {
ReferenceContextLimitssglr::ReferenceContextLimits736*35238bceSAndroid Build Coastguard Worker ReferenceContextLimits(void)
737*35238bceSAndroid Build Coastguard Worker : contextType(glu::ApiType::es(3, 0))
738*35238bceSAndroid Build Coastguard Worker , maxTextureImageUnits(16)
739*35238bceSAndroid Build Coastguard Worker , maxTexture2DSize(2048)
740*35238bceSAndroid Build Coastguard Worker , maxTextureCubeSize(2048)
741*35238bceSAndroid Build Coastguard Worker , maxTexture2DArrayLayers(256)
742*35238bceSAndroid Build Coastguard Worker , maxTexture3DSize(256)
743*35238bceSAndroid Build Coastguard Worker , maxRenderbufferSize(2048)
744*35238bceSAndroid Build Coastguard Worker , maxVertexAttribs(16)
745*35238bceSAndroid Build Coastguard Worker , subpixelBits(rr::RenderState::DEFAULT_SUBPIXEL_BITS)
746*35238bceSAndroid Build Coastguard Worker {
747*35238bceSAndroid Build Coastguard Worker }
748*35238bceSAndroid Build Coastguard Worker
749*35238bceSAndroid Build Coastguard Worker ReferenceContextLimits(const glu::RenderContext &renderCtx);
750*35238bceSAndroid Build Coastguard Worker
751*35238bceSAndroid Build Coastguard Worker void addExtension(const char *extension);
752*35238bceSAndroid Build Coastguard Worker
753*35238bceSAndroid Build Coastguard Worker glu::ContextType contextType;
754*35238bceSAndroid Build Coastguard Worker
755*35238bceSAndroid Build Coastguard Worker int maxTextureImageUnits;
756*35238bceSAndroid Build Coastguard Worker int maxTexture2DSize;
757*35238bceSAndroid Build Coastguard Worker int maxTextureCubeSize;
758*35238bceSAndroid Build Coastguard Worker int maxTexture2DArrayLayers;
759*35238bceSAndroid Build Coastguard Worker int maxTexture3DSize;
760*35238bceSAndroid Build Coastguard Worker int maxRenderbufferSize;
761*35238bceSAndroid Build Coastguard Worker int maxVertexAttribs;
762*35238bceSAndroid Build Coastguard Worker int subpixelBits;
763*35238bceSAndroid Build Coastguard Worker
764*35238bceSAndroid Build Coastguard Worker // Both variants are needed since there are glGetString() and glGetStringi()
765*35238bceSAndroid Build Coastguard Worker std::vector<std::string> extensionList;
766*35238bceSAndroid Build Coastguard Worker std::string extensionStr;
767*35238bceSAndroid Build Coastguard Worker };
768*35238bceSAndroid Build Coastguard Worker
769*35238bceSAndroid Build Coastguard Worker class ReferenceContextBuffers
770*35238bceSAndroid Build Coastguard Worker {
771*35238bceSAndroid Build Coastguard Worker public:
772*35238bceSAndroid Build Coastguard Worker ReferenceContextBuffers(const tcu::PixelFormat &colorBits, int depthBits, int stencilBits, int width, int height,
773*35238bceSAndroid Build Coastguard Worker int samples = 1);
774*35238bceSAndroid Build Coastguard Worker
getColorbuffer(void)775*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess getColorbuffer(void)
776*35238bceSAndroid Build Coastguard Worker {
777*35238bceSAndroid Build Coastguard Worker return rr::MultisamplePixelBufferAccess::fromMultisampleAccess(m_colorbuffer.getAccess());
778*35238bceSAndroid Build Coastguard Worker }
getDepthbuffer(void)779*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess getDepthbuffer(void)
780*35238bceSAndroid Build Coastguard Worker {
781*35238bceSAndroid Build Coastguard Worker return rr::MultisamplePixelBufferAccess::fromMultisampleAccess(m_depthbuffer.getAccess());
782*35238bceSAndroid Build Coastguard Worker }
getStencilbuffer(void)783*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess getStencilbuffer(void)
784*35238bceSAndroid Build Coastguard Worker {
785*35238bceSAndroid Build Coastguard Worker return rr::MultisamplePixelBufferAccess::fromMultisampleAccess(m_stencilbuffer.getAccess());
786*35238bceSAndroid Build Coastguard Worker }
787*35238bceSAndroid Build Coastguard Worker
788*35238bceSAndroid Build Coastguard Worker private:
789*35238bceSAndroid Build Coastguard Worker tcu::TextureLevel m_colorbuffer;
790*35238bceSAndroid Build Coastguard Worker tcu::TextureLevel m_depthbuffer;
791*35238bceSAndroid Build Coastguard Worker tcu::TextureLevel m_stencilbuffer;
792*35238bceSAndroid Build Coastguard Worker };
793*35238bceSAndroid Build Coastguard Worker
794*35238bceSAndroid Build Coastguard Worker class ReferenceContext : public Context
795*35238bceSAndroid Build Coastguard Worker {
796*35238bceSAndroid Build Coastguard Worker public:
797*35238bceSAndroid Build Coastguard Worker ReferenceContext(const ReferenceContextLimits &limits, const rr::MultisamplePixelBufferAccess &colorbuffer,
798*35238bceSAndroid Build Coastguard Worker const rr::MultisamplePixelBufferAccess &depthbuffer,
799*35238bceSAndroid Build Coastguard Worker const rr::MultisamplePixelBufferAccess &stencilbuffer);
800*35238bceSAndroid Build Coastguard Worker virtual ~ReferenceContext(void);
801*35238bceSAndroid Build Coastguard Worker
getWidth(void) const802*35238bceSAndroid Build Coastguard Worker virtual int getWidth(void) const
803*35238bceSAndroid Build Coastguard Worker {
804*35238bceSAndroid Build Coastguard Worker return m_defaultColorbuffer.raw().getHeight();
805*35238bceSAndroid Build Coastguard Worker }
getHeight(void) const806*35238bceSAndroid Build Coastguard Worker virtual int getHeight(void) const
807*35238bceSAndroid Build Coastguard Worker {
808*35238bceSAndroid Build Coastguard Worker return m_defaultColorbuffer.raw().getDepth();
809*35238bceSAndroid Build Coastguard Worker }
810*35238bceSAndroid Build Coastguard Worker
viewport(int x,int y,int width,int height)811*35238bceSAndroid Build Coastguard Worker virtual void viewport(int x, int y, int width, int height)
812*35238bceSAndroid Build Coastguard Worker {
813*35238bceSAndroid Build Coastguard Worker m_viewport = tcu::IVec4(x, y, width, height);
814*35238bceSAndroid Build Coastguard Worker }
815*35238bceSAndroid Build Coastguard Worker virtual void activeTexture(uint32_t texture);
816*35238bceSAndroid Build Coastguard Worker
817*35238bceSAndroid Build Coastguard Worker virtual void bindTexture(uint32_t target, uint32_t texture);
818*35238bceSAndroid Build Coastguard Worker virtual void genTextures(int numTextures, uint32_t *textures);
819*35238bceSAndroid Build Coastguard Worker virtual void deleteTextures(int numTextures, const uint32_t *textures);
820*35238bceSAndroid Build Coastguard Worker
821*35238bceSAndroid Build Coastguard Worker virtual void bindFramebuffer(uint32_t target, uint32_t framebuffer);
822*35238bceSAndroid Build Coastguard Worker virtual void genFramebuffers(int numFramebuffers, uint32_t *framebuffers);
823*35238bceSAndroid Build Coastguard Worker virtual void deleteFramebuffers(int numFramebuffers, const uint32_t *framebuffers);
824*35238bceSAndroid Build Coastguard Worker
825*35238bceSAndroid Build Coastguard Worker virtual void bindRenderbuffer(uint32_t target, uint32_t renderbuffer);
826*35238bceSAndroid Build Coastguard Worker virtual void genRenderbuffers(int numRenderbuffers, uint32_t *renderbuffers);
827*35238bceSAndroid Build Coastguard Worker virtual void deleteRenderbuffers(int numRenderbuffers, const uint32_t *renderbuffers);
828*35238bceSAndroid Build Coastguard Worker
829*35238bceSAndroid Build Coastguard Worker virtual void pixelStorei(uint32_t pname, int param);
830*35238bceSAndroid Build Coastguard Worker virtual void texImage1D(uint32_t target, int level, uint32_t internalFormat, int width, int border, uint32_t format,
831*35238bceSAndroid Build Coastguard Worker uint32_t type, const void *data);
832*35238bceSAndroid Build Coastguard Worker virtual void texImage2D(uint32_t target, int level, uint32_t internalFormat, int width, int height, int border,
833*35238bceSAndroid Build Coastguard Worker uint32_t format, uint32_t type, const void *data);
834*35238bceSAndroid Build Coastguard Worker virtual void texImage3D(uint32_t target, int level, uint32_t internalFormat, int width, int height, int depth,
835*35238bceSAndroid Build Coastguard Worker int border, uint32_t format, uint32_t type, const void *data);
836*35238bceSAndroid Build Coastguard Worker virtual void texSubImage1D(uint32_t target, int level, int xoffset, int width, uint32_t format, uint32_t type,
837*35238bceSAndroid Build Coastguard Worker const void *data);
838*35238bceSAndroid Build Coastguard Worker virtual void texSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int width, int height,
839*35238bceSAndroid Build Coastguard Worker uint32_t format, uint32_t type, const void *data);
840*35238bceSAndroid Build Coastguard Worker virtual void texSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int width, int height,
841*35238bceSAndroid Build Coastguard Worker int depth, uint32_t format, uint32_t type, const void *data);
842*35238bceSAndroid Build Coastguard Worker virtual void copyTexImage1D(uint32_t target, int level, uint32_t internalFormat, int x, int y, int width,
843*35238bceSAndroid Build Coastguard Worker int border);
844*35238bceSAndroid Build Coastguard Worker virtual void copyTexImage2D(uint32_t target, int level, uint32_t internalFormat, int x, int y, int width,
845*35238bceSAndroid Build Coastguard Worker int height, int border);
846*35238bceSAndroid Build Coastguard Worker virtual void copyTexSubImage1D(uint32_t target, int level, int xoffset, int x, int y, int width);
847*35238bceSAndroid Build Coastguard Worker virtual void copyTexSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int x, int y, int width,
848*35238bceSAndroid Build Coastguard Worker int height);
849*35238bceSAndroid Build Coastguard Worker virtual void copyTexSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int x, int y,
850*35238bceSAndroid Build Coastguard Worker int width, int height);
851*35238bceSAndroid Build Coastguard Worker
852*35238bceSAndroid Build Coastguard Worker virtual void texStorage2D(uint32_t target, int levels, uint32_t internalFormat, int width, int height);
853*35238bceSAndroid Build Coastguard Worker virtual void texStorage3D(uint32_t target, int levels, uint32_t internalFormat, int width, int height, int depth);
854*35238bceSAndroid Build Coastguard Worker
855*35238bceSAndroid Build Coastguard Worker virtual void texParameteri(uint32_t target, uint32_t pname, int value);
856*35238bceSAndroid Build Coastguard Worker
857*35238bceSAndroid Build Coastguard Worker virtual void framebufferTexture2D(uint32_t target, uint32_t attachment, uint32_t textarget, uint32_t texture,
858*35238bceSAndroid Build Coastguard Worker int level);
859*35238bceSAndroid Build Coastguard Worker virtual void framebufferTextureLayer(uint32_t target, uint32_t attachment, uint32_t texture, int level, int layer);
860*35238bceSAndroid Build Coastguard Worker virtual void framebufferRenderbuffer(uint32_t target, uint32_t attachment, uint32_t renderbuffertarget,
861*35238bceSAndroid Build Coastguard Worker uint32_t renderbuffer);
862*35238bceSAndroid Build Coastguard Worker virtual uint32_t checkFramebufferStatus(uint32_t target);
863*35238bceSAndroid Build Coastguard Worker
864*35238bceSAndroid Build Coastguard Worker virtual void getFramebufferAttachmentParameteriv(uint32_t target, uint32_t attachment, uint32_t pname, int *params);
865*35238bceSAndroid Build Coastguard Worker
866*35238bceSAndroid Build Coastguard Worker virtual void renderbufferStorage(uint32_t target, uint32_t internalformat, int width, int height);
867*35238bceSAndroid Build Coastguard Worker virtual void renderbufferStorageMultisample(uint32_t target, int samples, uint32_t internalFormat, int width,
868*35238bceSAndroid Build Coastguard Worker int height);
869*35238bceSAndroid Build Coastguard Worker
870*35238bceSAndroid Build Coastguard Worker virtual void bindBuffer(uint32_t target, uint32_t buffer);
871*35238bceSAndroid Build Coastguard Worker virtual void genBuffers(int numBuffers, uint32_t *buffers);
872*35238bceSAndroid Build Coastguard Worker virtual void deleteBuffers(int numBuffers, const uint32_t *buffers);
873*35238bceSAndroid Build Coastguard Worker
874*35238bceSAndroid Build Coastguard Worker virtual void bufferData(uint32_t target, intptr_t size, const void *data, uint32_t usage);
875*35238bceSAndroid Build Coastguard Worker virtual void bufferSubData(uint32_t target, intptr_t offset, intptr_t size, const void *data);
876*35238bceSAndroid Build Coastguard Worker
877*35238bceSAndroid Build Coastguard Worker virtual void clearColor(float red, float green, float blue, float alpha);
878*35238bceSAndroid Build Coastguard Worker virtual void clearDepthf(float depth);
879*35238bceSAndroid Build Coastguard Worker virtual void clearStencil(int stencil);
880*35238bceSAndroid Build Coastguard Worker
881*35238bceSAndroid Build Coastguard Worker virtual void clear(uint32_t buffers);
882*35238bceSAndroid Build Coastguard Worker virtual void clearBufferiv(uint32_t buffer, int drawbuffer, const int *value);
883*35238bceSAndroid Build Coastguard Worker virtual void clearBufferfv(uint32_t buffer, int drawbuffer, const float *value);
884*35238bceSAndroid Build Coastguard Worker virtual void clearBufferuiv(uint32_t buffer, int drawbuffer, const uint32_t *value);
885*35238bceSAndroid Build Coastguard Worker virtual void clearBufferfi(uint32_t buffer, int drawbuffer, float depth, int stencil);
886*35238bceSAndroid Build Coastguard Worker virtual void scissor(int x, int y, int width, int height);
887*35238bceSAndroid Build Coastguard Worker
888*35238bceSAndroid Build Coastguard Worker virtual void enable(uint32_t cap);
889*35238bceSAndroid Build Coastguard Worker virtual void disable(uint32_t cap);
890*35238bceSAndroid Build Coastguard Worker
891*35238bceSAndroid Build Coastguard Worker virtual void stencilFunc(uint32_t func, int ref, uint32_t mask);
892*35238bceSAndroid Build Coastguard Worker virtual void stencilOp(uint32_t sfail, uint32_t dpfail, uint32_t dppass);
893*35238bceSAndroid Build Coastguard Worker virtual void stencilFuncSeparate(uint32_t face, uint32_t func, int ref, uint32_t mask);
894*35238bceSAndroid Build Coastguard Worker virtual void stencilOpSeparate(uint32_t face, uint32_t sfail, uint32_t dpfail, uint32_t dppass);
895*35238bceSAndroid Build Coastguard Worker
896*35238bceSAndroid Build Coastguard Worker virtual void depthFunc(uint32_t func);
897*35238bceSAndroid Build Coastguard Worker virtual void depthRangef(float n, float f);
898*35238bceSAndroid Build Coastguard Worker virtual void depthRange(double n, double f);
899*35238bceSAndroid Build Coastguard Worker
900*35238bceSAndroid Build Coastguard Worker virtual void polygonOffset(float factor, float units);
901*35238bceSAndroid Build Coastguard Worker virtual void provokingVertex(uint32_t convention);
902*35238bceSAndroid Build Coastguard Worker virtual void primitiveRestartIndex(uint32_t index);
903*35238bceSAndroid Build Coastguard Worker
904*35238bceSAndroid Build Coastguard Worker virtual void blendEquation(uint32_t mode);
905*35238bceSAndroid Build Coastguard Worker virtual void blendEquationSeparate(uint32_t modeRGB, uint32_t modeAlpha);
906*35238bceSAndroid Build Coastguard Worker virtual void blendFunc(uint32_t src, uint32_t dst);
907*35238bceSAndroid Build Coastguard Worker virtual void blendFuncSeparate(uint32_t srcRGB, uint32_t dstRGB, uint32_t srcAlpha, uint32_t dstAlpha);
908*35238bceSAndroid Build Coastguard Worker virtual void blendColor(float red, float green, float blue, float alpha);
909*35238bceSAndroid Build Coastguard Worker
910*35238bceSAndroid Build Coastguard Worker virtual void colorMask(bool r, bool g, bool b, bool a);
911*35238bceSAndroid Build Coastguard Worker virtual void depthMask(bool mask);
912*35238bceSAndroid Build Coastguard Worker virtual void stencilMask(uint32_t mask);
913*35238bceSAndroid Build Coastguard Worker virtual void stencilMaskSeparate(uint32_t face, uint32_t mask);
914*35238bceSAndroid Build Coastguard Worker
915*35238bceSAndroid Build Coastguard Worker virtual void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1,
916*35238bceSAndroid Build Coastguard Worker uint32_t mask, uint32_t filter);
917*35238bceSAndroid Build Coastguard Worker
918*35238bceSAndroid Build Coastguard Worker virtual void invalidateSubFramebuffer(uint32_t target, int numAttachments, const uint32_t *attachments, int x,
919*35238bceSAndroid Build Coastguard Worker int y, int width, int height);
920*35238bceSAndroid Build Coastguard Worker virtual void invalidateFramebuffer(uint32_t target, int numAttachments, const uint32_t *attachments);
921*35238bceSAndroid Build Coastguard Worker
922*35238bceSAndroid Build Coastguard Worker virtual void bindVertexArray(uint32_t array);
923*35238bceSAndroid Build Coastguard Worker virtual void genVertexArrays(int numArrays, uint32_t *vertexArrays);
924*35238bceSAndroid Build Coastguard Worker virtual void deleteVertexArrays(int numArrays, const uint32_t *vertexArrays);
925*35238bceSAndroid Build Coastguard Worker
926*35238bceSAndroid Build Coastguard Worker virtual void vertexAttribPointer(uint32_t index, int size, uint32_t type, bool normalized, int stride,
927*35238bceSAndroid Build Coastguard Worker const void *pointer);
928*35238bceSAndroid Build Coastguard Worker virtual void vertexAttribIPointer(uint32_t index, int size, uint32_t type, int stride, const void *pointer);
929*35238bceSAndroid Build Coastguard Worker virtual void enableVertexAttribArray(uint32_t index);
930*35238bceSAndroid Build Coastguard Worker virtual void disableVertexAttribArray(uint32_t index);
931*35238bceSAndroid Build Coastguard Worker virtual void vertexAttribDivisor(uint32_t index, uint32_t divisor);
932*35238bceSAndroid Build Coastguard Worker
933*35238bceSAndroid Build Coastguard Worker virtual void vertexAttrib1f(uint32_t index, float);
934*35238bceSAndroid Build Coastguard Worker virtual void vertexAttrib2f(uint32_t index, float, float);
935*35238bceSAndroid Build Coastguard Worker virtual void vertexAttrib3f(uint32_t index, float, float, float);
936*35238bceSAndroid Build Coastguard Worker virtual void vertexAttrib4f(uint32_t index, float, float, float, float);
937*35238bceSAndroid Build Coastguard Worker virtual void vertexAttribI4i(uint32_t index, int32_t, int32_t, int32_t, int32_t);
938*35238bceSAndroid Build Coastguard Worker virtual void vertexAttribI4ui(uint32_t index, uint32_t, uint32_t, uint32_t, uint32_t);
939*35238bceSAndroid Build Coastguard Worker
940*35238bceSAndroid Build Coastguard Worker virtual int32_t getAttribLocation(uint32_t program, const char *name);
941*35238bceSAndroid Build Coastguard Worker
942*35238bceSAndroid Build Coastguard Worker virtual void uniform1f(int32_t location, float);
943*35238bceSAndroid Build Coastguard Worker virtual void uniform1i(int32_t location, int32_t);
944*35238bceSAndroid Build Coastguard Worker virtual void uniform1fv(int32_t index, int32_t count, const float *);
945*35238bceSAndroid Build Coastguard Worker virtual void uniform2fv(int32_t index, int32_t count, const float *);
946*35238bceSAndroid Build Coastguard Worker virtual void uniform3fv(int32_t index, int32_t count, const float *);
947*35238bceSAndroid Build Coastguard Worker virtual void uniform4fv(int32_t index, int32_t count, const float *);
948*35238bceSAndroid Build Coastguard Worker virtual void uniform1iv(int32_t index, int32_t count, const int32_t *);
949*35238bceSAndroid Build Coastguard Worker virtual void uniform2iv(int32_t index, int32_t count, const int32_t *);
950*35238bceSAndroid Build Coastguard Worker virtual void uniform3iv(int32_t index, int32_t count, const int32_t *);
951*35238bceSAndroid Build Coastguard Worker virtual void uniform4iv(int32_t index, int32_t count, const int32_t *);
952*35238bceSAndroid Build Coastguard Worker virtual void uniformMatrix3fv(int32_t location, int32_t count, bool transpose, const float *value);
953*35238bceSAndroid Build Coastguard Worker virtual void uniformMatrix4fv(int32_t location, int32_t count, bool transpose, const float *value);
954*35238bceSAndroid Build Coastguard Worker virtual int32_t getUniformLocation(uint32_t program, const char *name);
955*35238bceSAndroid Build Coastguard Worker
956*35238bceSAndroid Build Coastguard Worker virtual void lineWidth(float);
957*35238bceSAndroid Build Coastguard Worker
958*35238bceSAndroid Build Coastguard Worker virtual void drawArrays(uint32_t mode, int first, int count);
959*35238bceSAndroid Build Coastguard Worker virtual void drawArraysInstanced(uint32_t mode, int first, int count, int instanceCount);
960*35238bceSAndroid Build Coastguard Worker virtual void drawElements(uint32_t mode, int count, uint32_t type, const void *indices);
961*35238bceSAndroid Build Coastguard Worker virtual void drawElementsBaseVertex(uint32_t mode, int count, uint32_t type, const void *indices, int baseVertex);
962*35238bceSAndroid Build Coastguard Worker virtual void drawElementsInstanced(uint32_t mode, int count, uint32_t type, const void *indices, int instanceCount);
963*35238bceSAndroid Build Coastguard Worker virtual void drawElementsInstancedBaseVertex(uint32_t mode, int count, uint32_t type, const void *indices,
964*35238bceSAndroid Build Coastguard Worker int instanceCount, int baseVertex);
965*35238bceSAndroid Build Coastguard Worker virtual void drawRangeElements(uint32_t mode, uint32_t start, uint32_t end, int count, uint32_t type,
966*35238bceSAndroid Build Coastguard Worker const void *indices);
967*35238bceSAndroid Build Coastguard Worker virtual void drawRangeElementsBaseVertex(uint32_t mode, uint32_t start, uint32_t end, int count, uint32_t type,
968*35238bceSAndroid Build Coastguard Worker const void *indices, int baseVertex);
969*35238bceSAndroid Build Coastguard Worker virtual void drawArraysIndirect(uint32_t mode, const void *indirect);
970*35238bceSAndroid Build Coastguard Worker virtual void drawElementsIndirect(uint32_t mode, uint32_t type, const void *indirect);
971*35238bceSAndroid Build Coastguard Worker
972*35238bceSAndroid Build Coastguard Worker virtual void multiDrawArrays(uint32_t mode, const int *first, const int *count, int primCount);
973*35238bceSAndroid Build Coastguard Worker virtual void multiDrawElements(uint32_t mode, const int *count, uint32_t type, const void **indices, int primCount);
974*35238bceSAndroid Build Coastguard Worker virtual void multiDrawElementsBaseVertex(uint32_t mode, const int *count, uint32_t type, const void **indices,
975*35238bceSAndroid Build Coastguard Worker int primCount, const int *baseVertex);
976*35238bceSAndroid Build Coastguard Worker
977*35238bceSAndroid Build Coastguard Worker virtual uint32_t createProgram(ShaderProgram *program);
978*35238bceSAndroid Build Coastguard Worker virtual void useProgram(uint32_t program);
979*35238bceSAndroid Build Coastguard Worker virtual void deleteProgram(uint32_t program);
980*35238bceSAndroid Build Coastguard Worker
981*35238bceSAndroid Build Coastguard Worker virtual void readPixels(int x, int y, int width, int height, uint32_t format, uint32_t type, void *data);
982*35238bceSAndroid Build Coastguard Worker virtual uint32_t getError(void);
983*35238bceSAndroid Build Coastguard Worker virtual void finish(void);
984*35238bceSAndroid Build Coastguard Worker
985*35238bceSAndroid Build Coastguard Worker virtual void getIntegerv(uint32_t pname, int *params);
986*35238bceSAndroid Build Coastguard Worker virtual const char *getString(uint32_t pname);
987*35238bceSAndroid Build Coastguard Worker
988*35238bceSAndroid Build Coastguard Worker // Expose helpers from Context.
989*35238bceSAndroid Build Coastguard Worker using Context::readPixels;
990*35238bceSAndroid Build Coastguard Worker using Context::texImage2D;
991*35238bceSAndroid Build Coastguard Worker using Context::texSubImage2D;
992*35238bceSAndroid Build Coastguard Worker
993*35238bceSAndroid Build Coastguard Worker private:
994*35238bceSAndroid Build Coastguard Worker ReferenceContext(const ReferenceContext &other); // Not allowed!
995*35238bceSAndroid Build Coastguard Worker ReferenceContext &operator=(const ReferenceContext &other); // Not allowed!
996*35238bceSAndroid Build Coastguard Worker
997*35238bceSAndroid Build Coastguard Worker void deleteTexture(rc::Texture *texture);
998*35238bceSAndroid Build Coastguard Worker void deleteFramebuffer(rc::Framebuffer *framebuffer);
999*35238bceSAndroid Build Coastguard Worker void deleteRenderbuffer(rc::Renderbuffer *renderbuffer);
1000*35238bceSAndroid Build Coastguard Worker void deleteBuffer(rc::DataBuffer *buffer);
1001*35238bceSAndroid Build Coastguard Worker void deleteVertexArray(rc::VertexArray *vertexArray);
1002*35238bceSAndroid Build Coastguard Worker void deleteProgramObject(rc::ShaderProgramObjectContainer *sp);
1003*35238bceSAndroid Build Coastguard Worker
1004*35238bceSAndroid Build Coastguard Worker void acquireFboAttachmentReference(const rc::Framebuffer::Attachment &attachment);
1005*35238bceSAndroid Build Coastguard Worker void releaseFboAttachmentReference(const rc::Framebuffer::Attachment &attachment);
1006*35238bceSAndroid Build Coastguard Worker tcu::PixelBufferAccess getFboAttachment(const rc::Framebuffer &framebuffer, rc::Framebuffer::AttachmentPoint point);
1007*35238bceSAndroid Build Coastguard Worker
1008*35238bceSAndroid Build Coastguard Worker uint32_t blitResolveMultisampleFramebuffer(uint32_t mask, const tcu::IVec4 &srcRect, const tcu::IVec4 &dstRect,
1009*35238bceSAndroid Build Coastguard Worker bool flipX, bool flipY);
1010*35238bceSAndroid Build Coastguard Worker
getDrawColorbuffer(void)1011*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess getDrawColorbuffer(void)
1012*35238bceSAndroid Build Coastguard Worker {
1013*35238bceSAndroid Build Coastguard Worker return (m_drawFramebufferBinding) ? (rr::MultisamplePixelBufferAccess::fromSinglesampleAccess(getFboAttachment(
1014*35238bceSAndroid Build Coastguard Worker *m_drawFramebufferBinding, rc::Framebuffer::ATTACHMENTPOINT_COLOR0))) :
1015*35238bceSAndroid Build Coastguard Worker (m_defaultColorbuffer);
1016*35238bceSAndroid Build Coastguard Worker }
getDrawDepthbuffer(void)1017*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess getDrawDepthbuffer(void)
1018*35238bceSAndroid Build Coastguard Worker {
1019*35238bceSAndroid Build Coastguard Worker return (m_drawFramebufferBinding) ? (rr::MultisamplePixelBufferAccess::fromSinglesampleAccess(getFboAttachment(
1020*35238bceSAndroid Build Coastguard Worker *m_drawFramebufferBinding, rc::Framebuffer::ATTACHMENTPOINT_DEPTH))) :
1021*35238bceSAndroid Build Coastguard Worker (m_defaultDepthbuffer);
1022*35238bceSAndroid Build Coastguard Worker }
getDrawStencilbuffer(void)1023*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess getDrawStencilbuffer(void)
1024*35238bceSAndroid Build Coastguard Worker {
1025*35238bceSAndroid Build Coastguard Worker return (m_drawFramebufferBinding) ? (rr::MultisamplePixelBufferAccess::fromSinglesampleAccess(getFboAttachment(
1026*35238bceSAndroid Build Coastguard Worker *m_drawFramebufferBinding, rc::Framebuffer::ATTACHMENTPOINT_STENCIL))) :
1027*35238bceSAndroid Build Coastguard Worker (m_defaultStencilbuffer);
1028*35238bceSAndroid Build Coastguard Worker }
getReadColorbuffer(void)1029*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess getReadColorbuffer(void)
1030*35238bceSAndroid Build Coastguard Worker {
1031*35238bceSAndroid Build Coastguard Worker return (m_readFramebufferBinding) ? (rr::MultisamplePixelBufferAccess::fromSinglesampleAccess(getFboAttachment(
1032*35238bceSAndroid Build Coastguard Worker *m_readFramebufferBinding, rc::Framebuffer::ATTACHMENTPOINT_COLOR0))) :
1033*35238bceSAndroid Build Coastguard Worker (m_defaultColorbuffer);
1034*35238bceSAndroid Build Coastguard Worker }
getReadDepthbuffer(void)1035*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess getReadDepthbuffer(void)
1036*35238bceSAndroid Build Coastguard Worker {
1037*35238bceSAndroid Build Coastguard Worker return (m_readFramebufferBinding) ? (rr::MultisamplePixelBufferAccess::fromSinglesampleAccess(getFboAttachment(
1038*35238bceSAndroid Build Coastguard Worker *m_readFramebufferBinding, rc::Framebuffer::ATTACHMENTPOINT_DEPTH))) :
1039*35238bceSAndroid Build Coastguard Worker (m_defaultDepthbuffer);
1040*35238bceSAndroid Build Coastguard Worker }
getReadStencilbuffer(void)1041*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess getReadStencilbuffer(void)
1042*35238bceSAndroid Build Coastguard Worker {
1043*35238bceSAndroid Build Coastguard Worker return (m_readFramebufferBinding) ? (rr::MultisamplePixelBufferAccess::fromSinglesampleAccess(getFboAttachment(
1044*35238bceSAndroid Build Coastguard Worker *m_readFramebufferBinding, rc::Framebuffer::ATTACHMENTPOINT_STENCIL))) :
1045*35238bceSAndroid Build Coastguard Worker (m_defaultStencilbuffer);
1046*35238bceSAndroid Build Coastguard Worker }
1047*35238bceSAndroid Build Coastguard Worker
1048*35238bceSAndroid Build Coastguard Worker const rc::Texture2D &getTexture2D(int unitNdx) const;
1049*35238bceSAndroid Build Coastguard Worker const rc::TextureCube &getTextureCube(int unitNdx) const;
getViewport(void) const1050*35238bceSAndroid Build Coastguard Worker const tcu::IVec4 &getViewport(void) const
1051*35238bceSAndroid Build Coastguard Worker {
1052*35238bceSAndroid Build Coastguard Worker return m_viewport;
1053*35238bceSAndroid Build Coastguard Worker }
1054*35238bceSAndroid Build Coastguard Worker
1055*35238bceSAndroid Build Coastguard Worker void setError(uint32_t error);
1056*35238bceSAndroid Build Coastguard Worker
1057*35238bceSAndroid Build Coastguard Worker void setTex1DBinding(int unit, rc::Texture1D *tex1D);
1058*35238bceSAndroid Build Coastguard Worker void setTex2DBinding(int unit, rc::Texture2D *tex2D);
1059*35238bceSAndroid Build Coastguard Worker void setTexCubeBinding(int unit, rc::TextureCube *texCube);
1060*35238bceSAndroid Build Coastguard Worker void setTex2DArrayBinding(int unit, rc::Texture2DArray *tex2DArray);
1061*35238bceSAndroid Build Coastguard Worker void setTex3DBinding(int unit, rc::Texture3D *tex3D);
1062*35238bceSAndroid Build Coastguard Worker void setTexCubeArrayBinding(int unit, rc::TextureCubeArray *texCubeArray);
1063*35238bceSAndroid Build Coastguard Worker
1064*35238bceSAndroid Build Coastguard Worker void setBufferBinding(uint32_t target, rc::DataBuffer *buffer);
1065*35238bceSAndroid Build Coastguard Worker rc::DataBuffer *getBufferBinding(uint32_t target) const;
1066*35238bceSAndroid Build Coastguard Worker
getPixelPackPtr(void * ptrOffset) const1067*35238bceSAndroid Build Coastguard Worker void *getPixelPackPtr(void *ptrOffset) const
1068*35238bceSAndroid Build Coastguard Worker {
1069*35238bceSAndroid Build Coastguard Worker return m_pixelPackBufferBinding ?
1070*35238bceSAndroid Build Coastguard Worker (void *)((uintptr_t)m_pixelPackBufferBinding->getData() + (uintptr_t)ptrOffset) :
1071*35238bceSAndroid Build Coastguard Worker ptrOffset;
1072*35238bceSAndroid Build Coastguard Worker }
getPixelUnpackPtr(const void * ptrOffset) const1073*35238bceSAndroid Build Coastguard Worker const void *getPixelUnpackPtr(const void *ptrOffset) const
1074*35238bceSAndroid Build Coastguard Worker {
1075*35238bceSAndroid Build Coastguard Worker return m_pixelUnpackBufferBinding ?
1076*35238bceSAndroid Build Coastguard Worker (const void *)((uintptr_t)m_pixelUnpackBufferBinding->getData() + (uintptr_t)ptrOffset) :
1077*35238bceSAndroid Build Coastguard Worker ptrOffset;
1078*35238bceSAndroid Build Coastguard Worker }
1079*35238bceSAndroid Build Coastguard Worker
1080*35238bceSAndroid Build Coastguard Worker bool predrawErrorChecks(uint32_t mode);
1081*35238bceSAndroid Build Coastguard Worker void drawWithReference(const rr::PrimitiveList &primitives, int instanceCount);
1082*35238bceSAndroid Build Coastguard Worker
1083*35238bceSAndroid Build Coastguard Worker // Helpers for getting valid access object based on current unpack state.
1084*35238bceSAndroid Build Coastguard Worker tcu::ConstPixelBufferAccess getUnpack2DAccess(const tcu::TextureFormat &format, int width, int height,
1085*35238bceSAndroid Build Coastguard Worker const void *data);
1086*35238bceSAndroid Build Coastguard Worker tcu::ConstPixelBufferAccess getUnpack3DAccess(const tcu::TextureFormat &format, int width, int height, int depth,
1087*35238bceSAndroid Build Coastguard Worker const void *data);
1088*35238bceSAndroid Build Coastguard Worker
1089*35238bceSAndroid Build Coastguard Worker void uniformv(int32_t index, glu::DataType type, int32_t count, const void *);
1090*35238bceSAndroid Build Coastguard Worker
1091*35238bceSAndroid Build Coastguard Worker struct TextureUnit
1092*35238bceSAndroid Build Coastguard Worker {
1093*35238bceSAndroid Build Coastguard Worker
1094*35238bceSAndroid Build Coastguard Worker rc::Texture1D *tex1DBinding;
1095*35238bceSAndroid Build Coastguard Worker rc::Texture2D *tex2DBinding;
1096*35238bceSAndroid Build Coastguard Worker rc::TextureCube *texCubeBinding;
1097*35238bceSAndroid Build Coastguard Worker rc::Texture2DArray *tex2DArrayBinding;
1098*35238bceSAndroid Build Coastguard Worker rc::Texture3D *tex3DBinding;
1099*35238bceSAndroid Build Coastguard Worker rc::TextureCubeArray *texCubeArrayBinding;
1100*35238bceSAndroid Build Coastguard Worker
1101*35238bceSAndroid Build Coastguard Worker rc::Texture1D default1DTex;
1102*35238bceSAndroid Build Coastguard Worker rc::Texture2D default2DTex;
1103*35238bceSAndroid Build Coastguard Worker rc::TextureCube defaultCubeTex;
1104*35238bceSAndroid Build Coastguard Worker rc::Texture2DArray default2DArrayTex;
1105*35238bceSAndroid Build Coastguard Worker rc::Texture3D default3DTex;
1106*35238bceSAndroid Build Coastguard Worker rc::TextureCubeArray defaultCubeArrayTex;
1107*35238bceSAndroid Build Coastguard Worker
TextureUnitsglr::ReferenceContext::TextureUnit1108*35238bceSAndroid Build Coastguard Worker TextureUnit(void)
1109*35238bceSAndroid Build Coastguard Worker : tex1DBinding(DE_NULL)
1110*35238bceSAndroid Build Coastguard Worker , tex2DBinding(DE_NULL)
1111*35238bceSAndroid Build Coastguard Worker , texCubeBinding(DE_NULL)
1112*35238bceSAndroid Build Coastguard Worker , tex2DArrayBinding(DE_NULL)
1113*35238bceSAndroid Build Coastguard Worker , tex3DBinding(DE_NULL)
1114*35238bceSAndroid Build Coastguard Worker , texCubeArrayBinding(DE_NULL)
1115*35238bceSAndroid Build Coastguard Worker , default1DTex(0)
1116*35238bceSAndroid Build Coastguard Worker , default2DTex(0)
1117*35238bceSAndroid Build Coastguard Worker , defaultCubeTex(0)
1118*35238bceSAndroid Build Coastguard Worker , default2DArrayTex(0)
1119*35238bceSAndroid Build Coastguard Worker , default3DTex(0)
1120*35238bceSAndroid Build Coastguard Worker , defaultCubeArrayTex(0)
1121*35238bceSAndroid Build Coastguard Worker {
1122*35238bceSAndroid Build Coastguard Worker }
1123*35238bceSAndroid Build Coastguard Worker };
1124*35238bceSAndroid Build Coastguard Worker
1125*35238bceSAndroid Build Coastguard Worker struct StencilState
1126*35238bceSAndroid Build Coastguard Worker {
1127*35238bceSAndroid Build Coastguard Worker uint32_t func;
1128*35238bceSAndroid Build Coastguard Worker int ref;
1129*35238bceSAndroid Build Coastguard Worker uint32_t opMask;
1130*35238bceSAndroid Build Coastguard Worker uint32_t opStencilFail;
1131*35238bceSAndroid Build Coastguard Worker uint32_t opDepthFail;
1132*35238bceSAndroid Build Coastguard Worker uint32_t opDepthPass;
1133*35238bceSAndroid Build Coastguard Worker uint32_t writeMask;
1134*35238bceSAndroid Build Coastguard Worker
1135*35238bceSAndroid Build Coastguard Worker StencilState(void);
1136*35238bceSAndroid Build Coastguard Worker };
1137*35238bceSAndroid Build Coastguard Worker
1138*35238bceSAndroid Build Coastguard Worker ReferenceContextLimits m_limits;
1139*35238bceSAndroid Build Coastguard Worker
1140*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess m_defaultColorbuffer;
1141*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess m_defaultDepthbuffer;
1142*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess m_defaultStencilbuffer;
1143*35238bceSAndroid Build Coastguard Worker rc::VertexArray m_clientVertexArray;
1144*35238bceSAndroid Build Coastguard Worker
1145*35238bceSAndroid Build Coastguard Worker tcu::IVec4 m_viewport;
1146*35238bceSAndroid Build Coastguard Worker
1147*35238bceSAndroid Build Coastguard Worker rc::ObjectManager<rc::Texture> m_textures;
1148*35238bceSAndroid Build Coastguard Worker rc::ObjectManager<rc::Framebuffer> m_framebuffers;
1149*35238bceSAndroid Build Coastguard Worker rc::ObjectManager<rc::Renderbuffer> m_renderbuffers;
1150*35238bceSAndroid Build Coastguard Worker rc::ObjectManager<rc::DataBuffer> m_buffers;
1151*35238bceSAndroid Build Coastguard Worker rc::ObjectManager<rc::VertexArray> m_vertexArrays;
1152*35238bceSAndroid Build Coastguard Worker rc::ObjectManager<rc::ShaderProgramObjectContainer> m_programs;
1153*35238bceSAndroid Build Coastguard Worker
1154*35238bceSAndroid Build Coastguard Worker int m_activeTexture;
1155*35238bceSAndroid Build Coastguard Worker std::vector<TextureUnit> m_textureUnits;
1156*35238bceSAndroid Build Coastguard Worker rc::Texture1D m_emptyTex1D;
1157*35238bceSAndroid Build Coastguard Worker rc::Texture2D m_emptyTex2D;
1158*35238bceSAndroid Build Coastguard Worker rc::TextureCube m_emptyTexCube;
1159*35238bceSAndroid Build Coastguard Worker rc::Texture2DArray m_emptyTex2DArray;
1160*35238bceSAndroid Build Coastguard Worker rc::Texture3D m_emptyTex3D;
1161*35238bceSAndroid Build Coastguard Worker rc::TextureCubeArray m_emptyTexCubeArray;
1162*35238bceSAndroid Build Coastguard Worker
1163*35238bceSAndroid Build Coastguard Worker int m_pixelUnpackRowLength;
1164*35238bceSAndroid Build Coastguard Worker int m_pixelUnpackSkipRows;
1165*35238bceSAndroid Build Coastguard Worker int m_pixelUnpackSkipPixels;
1166*35238bceSAndroid Build Coastguard Worker int m_pixelUnpackImageHeight;
1167*35238bceSAndroid Build Coastguard Worker int m_pixelUnpackSkipImages;
1168*35238bceSAndroid Build Coastguard Worker int m_pixelUnpackAlignment;
1169*35238bceSAndroid Build Coastguard Worker int m_pixelPackAlignment;
1170*35238bceSAndroid Build Coastguard Worker
1171*35238bceSAndroid Build Coastguard Worker rc::Framebuffer *m_readFramebufferBinding;
1172*35238bceSAndroid Build Coastguard Worker rc::Framebuffer *m_drawFramebufferBinding;
1173*35238bceSAndroid Build Coastguard Worker rc::Renderbuffer *m_renderbufferBinding;
1174*35238bceSAndroid Build Coastguard Worker rc::VertexArray *m_vertexArrayBinding;
1175*35238bceSAndroid Build Coastguard Worker rc::ShaderProgramObjectContainer *m_currentProgram;
1176*35238bceSAndroid Build Coastguard Worker
1177*35238bceSAndroid Build Coastguard Worker rc::DataBuffer *m_arrayBufferBinding;
1178*35238bceSAndroid Build Coastguard Worker rc::DataBuffer *m_pixelPackBufferBinding;
1179*35238bceSAndroid Build Coastguard Worker rc::DataBuffer *m_pixelUnpackBufferBinding;
1180*35238bceSAndroid Build Coastguard Worker rc::DataBuffer *m_transformFeedbackBufferBinding;
1181*35238bceSAndroid Build Coastguard Worker rc::DataBuffer *m_uniformBufferBinding;
1182*35238bceSAndroid Build Coastguard Worker rc::DataBuffer *m_copyReadBufferBinding;
1183*35238bceSAndroid Build Coastguard Worker rc::DataBuffer *m_copyWriteBufferBinding;
1184*35238bceSAndroid Build Coastguard Worker rc::DataBuffer *m_drawIndirectBufferBinding;
1185*35238bceSAndroid Build Coastguard Worker
1186*35238bceSAndroid Build Coastguard Worker tcu::Vec4 m_clearColor;
1187*35238bceSAndroid Build Coastguard Worker float m_clearDepth;
1188*35238bceSAndroid Build Coastguard Worker int m_clearStencil;
1189*35238bceSAndroid Build Coastguard Worker
1190*35238bceSAndroid Build Coastguard Worker bool m_scissorEnabled;
1191*35238bceSAndroid Build Coastguard Worker tcu::IVec4 m_scissorBox;
1192*35238bceSAndroid Build Coastguard Worker
1193*35238bceSAndroid Build Coastguard Worker bool m_stencilTestEnabled;
1194*35238bceSAndroid Build Coastguard Worker StencilState m_stencil[rr::FACETYPE_LAST];
1195*35238bceSAndroid Build Coastguard Worker
1196*35238bceSAndroid Build Coastguard Worker bool m_depthTestEnabled;
1197*35238bceSAndroid Build Coastguard Worker uint32_t m_depthFunc;
1198*35238bceSAndroid Build Coastguard Worker float m_depthRangeNear;
1199*35238bceSAndroid Build Coastguard Worker float m_depthRangeFar;
1200*35238bceSAndroid Build Coastguard Worker
1201*35238bceSAndroid Build Coastguard Worker float m_polygonOffsetFactor;
1202*35238bceSAndroid Build Coastguard Worker float m_polygonOffsetUnits;
1203*35238bceSAndroid Build Coastguard Worker bool m_polygonOffsetFillEnabled;
1204*35238bceSAndroid Build Coastguard Worker
1205*35238bceSAndroid Build Coastguard Worker bool m_provokingFirstVertexConvention;
1206*35238bceSAndroid Build Coastguard Worker
1207*35238bceSAndroid Build Coastguard Worker bool m_blendEnabled;
1208*35238bceSAndroid Build Coastguard Worker uint32_t m_blendModeRGB;
1209*35238bceSAndroid Build Coastguard Worker uint32_t m_blendModeAlpha;
1210*35238bceSAndroid Build Coastguard Worker uint32_t m_blendFactorSrcRGB;
1211*35238bceSAndroid Build Coastguard Worker uint32_t m_blendFactorDstRGB;
1212*35238bceSAndroid Build Coastguard Worker uint32_t m_blendFactorSrcAlpha;
1213*35238bceSAndroid Build Coastguard Worker uint32_t m_blendFactorDstAlpha;
1214*35238bceSAndroid Build Coastguard Worker tcu::Vec4 m_blendColor;
1215*35238bceSAndroid Build Coastguard Worker
1216*35238bceSAndroid Build Coastguard Worker bool m_sRGBUpdateEnabled;
1217*35238bceSAndroid Build Coastguard Worker
1218*35238bceSAndroid Build Coastguard Worker bool m_depthClampEnabled;
1219*35238bceSAndroid Build Coastguard Worker
1220*35238bceSAndroid Build Coastguard Worker tcu::BVec4 m_colorMask;
1221*35238bceSAndroid Build Coastguard Worker bool m_depthMask;
1222*35238bceSAndroid Build Coastguard Worker
1223*35238bceSAndroid Build Coastguard Worker std::vector<rr::GenericVec4> m_currentAttribs;
1224*35238bceSAndroid Build Coastguard Worker float m_lineWidth;
1225*35238bceSAndroid Build Coastguard Worker
1226*35238bceSAndroid Build Coastguard Worker bool m_primitiveRestartFixedIndex;
1227*35238bceSAndroid Build Coastguard Worker bool m_primitiveRestartSettableIndex;
1228*35238bceSAndroid Build Coastguard Worker uint32_t m_primitiveRestartIndex;
1229*35238bceSAndroid Build Coastguard Worker
1230*35238bceSAndroid Build Coastguard Worker uint32_t m_lastError;
1231*35238bceSAndroid Build Coastguard Worker
1232*35238bceSAndroid Build Coastguard Worker rr::FragmentProcessor m_fragmentProcessor;
1233*35238bceSAndroid Build Coastguard Worker std::vector<rr::Fragment> m_fragmentBuffer;
1234*35238bceSAndroid Build Coastguard Worker std::vector<float> m_fragmentDepths;
1235*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
1236*35238bceSAndroid Build Coastguard Worker
1237*35238bceSAndroid Build Coastguard Worker } // namespace sglr
1238*35238bceSAndroid Build Coastguard Worker
1239*35238bceSAndroid Build Coastguard Worker #endif // _SGLRREFERENCECONTEXT_HPP
1240