1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL (ES) Module
3*35238bceSAndroid Build Coastguard Worker * -----------------------------------------------
4*35238bceSAndroid Build Coastguard Worker *
5*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker *
7*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker *
11*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker *
13*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker *
19*35238bceSAndroid Build Coastguard Worker *//*!
20*35238bceSAndroid Build Coastguard Worker * \file
21*35238bceSAndroid Build Coastguard Worker * \brief Fragment operation test utilities.
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "glsFragmentOpUtil.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "gluShaderProgram.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "gluDrawUtil.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "glwFunctions.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
30*35238bceSAndroid Build Coastguard Worker
31*35238bceSAndroid Build Coastguard Worker namespace deqp
32*35238bceSAndroid Build Coastguard Worker {
33*35238bceSAndroid Build Coastguard Worker namespace gls
34*35238bceSAndroid Build Coastguard Worker {
35*35238bceSAndroid Build Coastguard Worker namespace FragmentOpUtil
36*35238bceSAndroid Build Coastguard Worker {
37*35238bceSAndroid Build Coastguard Worker
38*35238bceSAndroid Build Coastguard Worker template <typename T>
triQuadInterpolate(const T values[4],float xFactor,float yFactor)39*35238bceSAndroid Build Coastguard Worker inline T triQuadInterpolate(const T values[4], float xFactor, float yFactor)
40*35238bceSAndroid Build Coastguard Worker {
41*35238bceSAndroid Build Coastguard Worker if (xFactor + yFactor < 1.0f)
42*35238bceSAndroid Build Coastguard Worker return values[0] + (values[2] - values[0]) * xFactor + (values[1] - values[0]) * yFactor;
43*35238bceSAndroid Build Coastguard Worker else
44*35238bceSAndroid Build Coastguard Worker return values[3] + (values[1] - values[3]) * (1.0f - xFactor) + (values[2] - values[3]) * (1.0f - yFactor);
45*35238bceSAndroid Build Coastguard Worker }
46*35238bceSAndroid Build Coastguard Worker
47*35238bceSAndroid Build Coastguard Worker // GLSL ES 1.0 shaders
48*35238bceSAndroid Build Coastguard Worker static const char *s_glsl1VertSrc = "attribute highp vec4 a_position;\n"
49*35238bceSAndroid Build Coastguard Worker "attribute mediump vec4 a_color;\n"
50*35238bceSAndroid Build Coastguard Worker "varying mediump vec4 v_color;\n"
51*35238bceSAndroid Build Coastguard Worker "void main()\n"
52*35238bceSAndroid Build Coastguard Worker "{\n"
53*35238bceSAndroid Build Coastguard Worker " gl_Position = a_position;\n"
54*35238bceSAndroid Build Coastguard Worker " v_color = a_color;\n"
55*35238bceSAndroid Build Coastguard Worker "}\n";
56*35238bceSAndroid Build Coastguard Worker static const char *s_glsl1FragSrc = "varying mediump vec4 v_color;\n"
57*35238bceSAndroid Build Coastguard Worker "void main()\n"
58*35238bceSAndroid Build Coastguard Worker "{\n"
59*35238bceSAndroid Build Coastguard Worker " gl_FragColor = v_color;\n"
60*35238bceSAndroid Build Coastguard Worker "}\n";
61*35238bceSAndroid Build Coastguard Worker
62*35238bceSAndroid Build Coastguard Worker // GLSL ES 3.0 shaders
63*35238bceSAndroid Build Coastguard Worker static const char *s_glsl3VertSrc = "#version 300 es\n"
64*35238bceSAndroid Build Coastguard Worker "in highp vec4 a_position;\n"
65*35238bceSAndroid Build Coastguard Worker "in mediump vec4 a_color;\n"
66*35238bceSAndroid Build Coastguard Worker "out mediump vec4 v_color;\n"
67*35238bceSAndroid Build Coastguard Worker "void main()\n"
68*35238bceSAndroid Build Coastguard Worker "{\n"
69*35238bceSAndroid Build Coastguard Worker " gl_Position = a_position;\n"
70*35238bceSAndroid Build Coastguard Worker " v_color = a_color;\n"
71*35238bceSAndroid Build Coastguard Worker "}\n";
72*35238bceSAndroid Build Coastguard Worker static const char *s_glsl3FragSrc = "#version 300 es\n"
73*35238bceSAndroid Build Coastguard Worker "in mediump vec4 v_color;\n"
74*35238bceSAndroid Build Coastguard Worker "layout(location = 0) out mediump vec4 o_color;\n"
75*35238bceSAndroid Build Coastguard Worker "void main()\n"
76*35238bceSAndroid Build Coastguard Worker "{\n"
77*35238bceSAndroid Build Coastguard Worker " o_color = v_color;\n"
78*35238bceSAndroid Build Coastguard Worker "}\n";
79*35238bceSAndroid Build Coastguard Worker
80*35238bceSAndroid Build Coastguard Worker // GLSL 3.3 shaders
81*35238bceSAndroid Build Coastguard Worker static const char *s_glsl33VertSrc = "#version 330 core\n"
82*35238bceSAndroid Build Coastguard Worker "in vec4 a_position;\n"
83*35238bceSAndroid Build Coastguard Worker "in vec4 a_color;\n"
84*35238bceSAndroid Build Coastguard Worker "in vec4 a_color1;\n"
85*35238bceSAndroid Build Coastguard Worker "out vec4 v_color;\n"
86*35238bceSAndroid Build Coastguard Worker "out vec4 v_color1;\n"
87*35238bceSAndroid Build Coastguard Worker "void main()\n"
88*35238bceSAndroid Build Coastguard Worker "{\n"
89*35238bceSAndroid Build Coastguard Worker " gl_Position = a_position;\n"
90*35238bceSAndroid Build Coastguard Worker " v_color = a_color;\n"
91*35238bceSAndroid Build Coastguard Worker " v_color1 = a_color1;\n"
92*35238bceSAndroid Build Coastguard Worker "}\n";
93*35238bceSAndroid Build Coastguard Worker static const char *s_glsl33FragSrc = "#version 330 core\n"
94*35238bceSAndroid Build Coastguard Worker "in vec4 v_color;\n"
95*35238bceSAndroid Build Coastguard Worker "in vec4 v_color1;\n"
96*35238bceSAndroid Build Coastguard Worker "layout(location = 0, index = 0) out vec4 o_color;\n"
97*35238bceSAndroid Build Coastguard Worker "layout(location = 0, index = 1) out vec4 o_color1;\n"
98*35238bceSAndroid Build Coastguard Worker "void main()\n"
99*35238bceSAndroid Build Coastguard Worker "{\n"
100*35238bceSAndroid Build Coastguard Worker " o_color = v_color;\n"
101*35238bceSAndroid Build Coastguard Worker " o_color1 = v_color1;\n"
102*35238bceSAndroid Build Coastguard Worker "}\n";
103*35238bceSAndroid Build Coastguard Worker
getVertSrc(glu::GLSLVersion glslVersion)104*35238bceSAndroid Build Coastguard Worker static const char *getVertSrc(glu::GLSLVersion glslVersion)
105*35238bceSAndroid Build Coastguard Worker {
106*35238bceSAndroid Build Coastguard Worker if (glslVersion == glu::GLSL_VERSION_100_ES)
107*35238bceSAndroid Build Coastguard Worker return s_glsl1VertSrc;
108*35238bceSAndroid Build Coastguard Worker else if (glslVersion == glu::GLSL_VERSION_300_ES)
109*35238bceSAndroid Build Coastguard Worker return s_glsl3VertSrc;
110*35238bceSAndroid Build Coastguard Worker else if (glslVersion == glu::GLSL_VERSION_330)
111*35238bceSAndroid Build Coastguard Worker return s_glsl33VertSrc;
112*35238bceSAndroid Build Coastguard Worker
113*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
114*35238bceSAndroid Build Coastguard Worker return 0;
115*35238bceSAndroid Build Coastguard Worker }
116*35238bceSAndroid Build Coastguard Worker
getFragSrc(glu::GLSLVersion glslVersion)117*35238bceSAndroid Build Coastguard Worker static const char *getFragSrc(glu::GLSLVersion glslVersion)
118*35238bceSAndroid Build Coastguard Worker {
119*35238bceSAndroid Build Coastguard Worker if (glslVersion == glu::GLSL_VERSION_100_ES)
120*35238bceSAndroid Build Coastguard Worker return s_glsl1FragSrc;
121*35238bceSAndroid Build Coastguard Worker else if (glslVersion == glu::GLSL_VERSION_300_ES)
122*35238bceSAndroid Build Coastguard Worker return s_glsl3FragSrc;
123*35238bceSAndroid Build Coastguard Worker else if (glslVersion == glu::GLSL_VERSION_330)
124*35238bceSAndroid Build Coastguard Worker return s_glsl33FragSrc;
125*35238bceSAndroid Build Coastguard Worker
126*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
127*35238bceSAndroid Build Coastguard Worker return 0;
128*35238bceSAndroid Build Coastguard Worker }
129*35238bceSAndroid Build Coastguard Worker
QuadRenderer(const glu::RenderContext & context,glu::GLSLVersion glslVersion)130*35238bceSAndroid Build Coastguard Worker QuadRenderer::QuadRenderer(const glu::RenderContext &context, glu::GLSLVersion glslVersion)
131*35238bceSAndroid Build Coastguard Worker : m_context(context)
132*35238bceSAndroid Build Coastguard Worker , m_program(DE_NULL)
133*35238bceSAndroid Build Coastguard Worker , m_positionLoc(0)
134*35238bceSAndroid Build Coastguard Worker , m_colorLoc(-1)
135*35238bceSAndroid Build Coastguard Worker , m_color1Loc(-1)
136*35238bceSAndroid Build Coastguard Worker , m_blendFuncExt(!glu::glslVersionIsES(glslVersion) && (glslVersion >= glu::GLSL_VERSION_330))
137*35238bceSAndroid Build Coastguard Worker {
138*35238bceSAndroid Build Coastguard Worker DE_ASSERT(glslVersion == glu::GLSL_VERSION_100_ES || glslVersion == glu::GLSL_VERSION_300_ES ||
139*35238bceSAndroid Build Coastguard Worker glslVersion == glu::GLSL_VERSION_330);
140*35238bceSAndroid Build Coastguard Worker
141*35238bceSAndroid Build Coastguard Worker const glw::Functions &gl = context.getFunctions();
142*35238bceSAndroid Build Coastguard Worker const char *vertSrc = getVertSrc(glslVersion);
143*35238bceSAndroid Build Coastguard Worker const char *fragSrc = getFragSrc(glslVersion);
144*35238bceSAndroid Build Coastguard Worker
145*35238bceSAndroid Build Coastguard Worker m_program = new glu::ShaderProgram(m_context, glu::makeVtxFragSources(vertSrc, fragSrc));
146*35238bceSAndroid Build Coastguard Worker if (!m_program->isOk())
147*35238bceSAndroid Build Coastguard Worker {
148*35238bceSAndroid Build Coastguard Worker delete m_program;
149*35238bceSAndroid Build Coastguard Worker throw tcu::TestError("Failed to compile program", DE_NULL, __FILE__, __LINE__);
150*35238bceSAndroid Build Coastguard Worker }
151*35238bceSAndroid Build Coastguard Worker
152*35238bceSAndroid Build Coastguard Worker m_positionLoc = gl.getAttribLocation(m_program->getProgram(), "a_position");
153*35238bceSAndroid Build Coastguard Worker m_colorLoc = gl.getAttribLocation(m_program->getProgram(), "a_color");
154*35238bceSAndroid Build Coastguard Worker
155*35238bceSAndroid Build Coastguard Worker if (m_blendFuncExt)
156*35238bceSAndroid Build Coastguard Worker m_color1Loc = gl.getAttribLocation(m_program->getProgram(), "a_color1");
157*35238bceSAndroid Build Coastguard Worker
158*35238bceSAndroid Build Coastguard Worker if (m_positionLoc < 0 || m_colorLoc < 0 || (m_blendFuncExt && m_color1Loc < 0))
159*35238bceSAndroid Build Coastguard Worker {
160*35238bceSAndroid Build Coastguard Worker delete m_program;
161*35238bceSAndroid Build Coastguard Worker throw tcu::TestError("Invalid attribute locations", DE_NULL, __FILE__, __LINE__);
162*35238bceSAndroid Build Coastguard Worker }
163*35238bceSAndroid Build Coastguard Worker }
164*35238bceSAndroid Build Coastguard Worker
~QuadRenderer(void)165*35238bceSAndroid Build Coastguard Worker QuadRenderer::~QuadRenderer(void)
166*35238bceSAndroid Build Coastguard Worker {
167*35238bceSAndroid Build Coastguard Worker delete m_program;
168*35238bceSAndroid Build Coastguard Worker }
169*35238bceSAndroid Build Coastguard Worker
render(const Quad & quad) const170*35238bceSAndroid Build Coastguard Worker void QuadRenderer::render(const Quad &quad) const
171*35238bceSAndroid Build Coastguard Worker {
172*35238bceSAndroid Build Coastguard Worker const float position[] = {quad.posA.x(), quad.posA.y(), quad.depth[0], 1.0f, quad.posA.x(), quad.posB.y(),
173*35238bceSAndroid Build Coastguard Worker quad.depth[1], 1.0f, quad.posB.x(), quad.posA.y(), quad.depth[2], 1.0f,
174*35238bceSAndroid Build Coastguard Worker quad.posB.x(), quad.posB.y(), quad.depth[3], 1.0f};
175*35238bceSAndroid Build Coastguard Worker const uint8_t indices[] = {0, 2, 1, 1, 2, 3};
176*35238bceSAndroid Build Coastguard Worker
177*35238bceSAndroid Build Coastguard Worker DE_STATIC_ASSERT(sizeof(tcu::Vec4) == sizeof(float) * 4);
178*35238bceSAndroid Build Coastguard Worker DE_STATIC_ASSERT(sizeof(quad.color) == sizeof(float) * 4 * 4);
179*35238bceSAndroid Build Coastguard Worker DE_STATIC_ASSERT(sizeof(quad.color1) == sizeof(float) * 4 * 4);
180*35238bceSAndroid Build Coastguard Worker
181*35238bceSAndroid Build Coastguard Worker std::vector<glu::VertexArrayBinding> vertexArrays;
182*35238bceSAndroid Build Coastguard Worker
183*35238bceSAndroid Build Coastguard Worker vertexArrays.push_back(glu::va::Float(m_positionLoc, 4, 4, 0, &position[0]));
184*35238bceSAndroid Build Coastguard Worker vertexArrays.push_back(glu::va::Float(m_colorLoc, 4, 4, 0, (const float *)&quad.color[0]));
185*35238bceSAndroid Build Coastguard Worker
186*35238bceSAndroid Build Coastguard Worker if (m_blendFuncExt)
187*35238bceSAndroid Build Coastguard Worker vertexArrays.push_back(glu::va::Float(m_color1Loc, 4, 4, 0, (const float *)&quad.color1[0]));
188*35238bceSAndroid Build Coastguard Worker
189*35238bceSAndroid Build Coastguard Worker m_context.getFunctions().useProgram(m_program->getProgram());
190*35238bceSAndroid Build Coastguard Worker glu::draw(m_context, m_program->getProgram(), (int)vertexArrays.size(), &vertexArrays[0],
191*35238bceSAndroid Build Coastguard Worker glu::pr::Triangles(DE_LENGTH_OF_ARRAY(indices), &indices[0]));
192*35238bceSAndroid Build Coastguard Worker }
193*35238bceSAndroid Build Coastguard Worker
ReferenceQuadRenderer(void)194*35238bceSAndroid Build Coastguard Worker ReferenceQuadRenderer::ReferenceQuadRenderer(void) : m_fragmentBufferSize(0)
195*35238bceSAndroid Build Coastguard Worker {
196*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < DE_LENGTH_OF_ARRAY(m_fragmentDepths); i++)
197*35238bceSAndroid Build Coastguard Worker m_fragmentDepths[i] = 0.0f;
198*35238bceSAndroid Build Coastguard Worker }
199*35238bceSAndroid Build Coastguard Worker
flushFragmentBuffer(const rr::MultisamplePixelBufferAccess & colorBuffer,const rr::MultisamplePixelBufferAccess & depthBuffer,const rr::MultisamplePixelBufferAccess & stencilBuffer,rr::FaceType faceType,const rr::FragmentOperationState & state)200*35238bceSAndroid Build Coastguard Worker void ReferenceQuadRenderer::flushFragmentBuffer(const rr::MultisamplePixelBufferAccess &colorBuffer,
201*35238bceSAndroid Build Coastguard Worker const rr::MultisamplePixelBufferAccess &depthBuffer,
202*35238bceSAndroid Build Coastguard Worker const rr::MultisamplePixelBufferAccess &stencilBuffer,
203*35238bceSAndroid Build Coastguard Worker rr::FaceType faceType, const rr::FragmentOperationState &state)
204*35238bceSAndroid Build Coastguard Worker {
205*35238bceSAndroid Build Coastguard Worker m_fragmentProcessor.render(colorBuffer, depthBuffer, stencilBuffer, &m_fragmentBuffer[0], m_fragmentBufferSize,
206*35238bceSAndroid Build Coastguard Worker faceType, state);
207*35238bceSAndroid Build Coastguard Worker m_fragmentBufferSize = 0;
208*35238bceSAndroid Build Coastguard Worker }
209*35238bceSAndroid Build Coastguard Worker
render(const tcu::PixelBufferAccess & colorBuffer,const tcu::PixelBufferAccess & depthBuffer,const tcu::PixelBufferAccess & stencilBuffer,const IntegerQuad & quad,const rr::FragmentOperationState & state)210*35238bceSAndroid Build Coastguard Worker void ReferenceQuadRenderer::render(const tcu::PixelBufferAccess &colorBuffer, const tcu::PixelBufferAccess &depthBuffer,
211*35238bceSAndroid Build Coastguard Worker const tcu::PixelBufferAccess &stencilBuffer, const IntegerQuad &quad,
212*35238bceSAndroid Build Coastguard Worker const rr::FragmentOperationState &state)
213*35238bceSAndroid Build Coastguard Worker {
214*35238bceSAndroid Build Coastguard Worker bool flipX = quad.posA.x() > quad.posB.x();
215*35238bceSAndroid Build Coastguard Worker bool flipY = quad.posA.y() > quad.posB.y();
216*35238bceSAndroid Build Coastguard Worker rr::FaceType faceType = flipX == flipY ? rr::FACETYPE_FRONT : rr::FACETYPE_BACK;
217*35238bceSAndroid Build Coastguard Worker int xFirst = flipX ? quad.posB.x() : quad.posA.x();
218*35238bceSAndroid Build Coastguard Worker int xLast = flipX ? quad.posA.x() : quad.posB.x();
219*35238bceSAndroid Build Coastguard Worker int yFirst = flipY ? quad.posB.y() : quad.posA.y();
220*35238bceSAndroid Build Coastguard Worker int yLast = flipY ? quad.posA.y() : quad.posB.y();
221*35238bceSAndroid Build Coastguard Worker float width = (float)(xLast - xFirst + 1);
222*35238bceSAndroid Build Coastguard Worker float height = (float)(yLast - yFirst + 1);
223*35238bceSAndroid Build Coastguard Worker
224*35238bceSAndroid Build Coastguard Worker for (int y = yFirst; y <= yLast; y++)
225*35238bceSAndroid Build Coastguard Worker {
226*35238bceSAndroid Build Coastguard Worker // Interpolation factor for y.
227*35238bceSAndroid Build Coastguard Worker float yRatio = (0.5f + (float)(y - yFirst)) / height;
228*35238bceSAndroid Build Coastguard Worker if (flipY)
229*35238bceSAndroid Build Coastguard Worker yRatio = 1.0f - yRatio;
230*35238bceSAndroid Build Coastguard Worker
231*35238bceSAndroid Build Coastguard Worker for (int x = xFirst; x <= xLast; x++)
232*35238bceSAndroid Build Coastguard Worker {
233*35238bceSAndroid Build Coastguard Worker // Interpolation factor for x.
234*35238bceSAndroid Build Coastguard Worker float xRatio = (0.5f + (float)(x - xFirst)) / width;
235*35238bceSAndroid Build Coastguard Worker if (flipX)
236*35238bceSAndroid Build Coastguard Worker xRatio = 1.0f - xRatio;
237*35238bceSAndroid Build Coastguard Worker
238*35238bceSAndroid Build Coastguard Worker tcu::Vec4 color = triQuadInterpolate(quad.color, xRatio, yRatio);
239*35238bceSAndroid Build Coastguard Worker tcu::Vec4 color1 = triQuadInterpolate(quad.color1, xRatio, yRatio);
240*35238bceSAndroid Build Coastguard Worker float depth = triQuadInterpolate(quad.depth, xRatio, yRatio);
241*35238bceSAndroid Build Coastguard Worker
242*35238bceSAndroid Build Coastguard Worker // Interpolated color and depth.
243*35238bceSAndroid Build Coastguard Worker
244*35238bceSAndroid Build Coastguard Worker DE_STATIC_ASSERT(MAX_FRAGMENT_BUFFER_SIZE == DE_LENGTH_OF_ARRAY(m_fragmentBuffer));
245*35238bceSAndroid Build Coastguard Worker
246*35238bceSAndroid Build Coastguard Worker if (m_fragmentBufferSize >= MAX_FRAGMENT_BUFFER_SIZE)
247*35238bceSAndroid Build Coastguard Worker flushFragmentBuffer(rr::MultisamplePixelBufferAccess::fromMultisampleAccess(colorBuffer),
248*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess::fromMultisampleAccess(depthBuffer),
249*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess::fromMultisampleAccess(stencilBuffer), faceType,
250*35238bceSAndroid Build Coastguard Worker state);
251*35238bceSAndroid Build Coastguard Worker
252*35238bceSAndroid Build Coastguard Worker m_fragmentDepths[m_fragmentBufferSize] = depth;
253*35238bceSAndroid Build Coastguard Worker m_fragmentBuffer[m_fragmentBufferSize] =
254*35238bceSAndroid Build Coastguard Worker rr::Fragment(tcu::IVec2(x, y), rr::GenericVec4(color), rr::GenericVec4(color1), 1u /* coverage mask */,
255*35238bceSAndroid Build Coastguard Worker &m_fragmentDepths[m_fragmentBufferSize]);
256*35238bceSAndroid Build Coastguard Worker m_fragmentBufferSize++;
257*35238bceSAndroid Build Coastguard Worker }
258*35238bceSAndroid Build Coastguard Worker }
259*35238bceSAndroid Build Coastguard Worker
260*35238bceSAndroid Build Coastguard Worker flushFragmentBuffer(rr::MultisamplePixelBufferAccess::fromMultisampleAccess(colorBuffer),
261*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess::fromMultisampleAccess(depthBuffer),
262*35238bceSAndroid Build Coastguard Worker rr::MultisamplePixelBufferAccess::fromMultisampleAccess(stencilBuffer), faceType, state);
263*35238bceSAndroid Build Coastguard Worker }
264*35238bceSAndroid Build Coastguard Worker
getMultisampleAccess(const tcu::PixelBufferAccess & original)265*35238bceSAndroid Build Coastguard Worker tcu::PixelBufferAccess getMultisampleAccess(const tcu::PixelBufferAccess &original)
266*35238bceSAndroid Build Coastguard Worker {
267*35238bceSAndroid Build Coastguard Worker return tcu::PixelBufferAccess(original.getFormat(), 1, original.getWidth(), original.getHeight(),
268*35238bceSAndroid Build Coastguard Worker original.getFormat().getPixelSize(), original.getRowPitch(), original.getDataPtr());
269*35238bceSAndroid Build Coastguard Worker }
270*35238bceSAndroid Build Coastguard Worker
getMultisampleAccess(const tcu::ConstPixelBufferAccess & original)271*35238bceSAndroid Build Coastguard Worker tcu::ConstPixelBufferAccess getMultisampleAccess(const tcu::ConstPixelBufferAccess &original)
272*35238bceSAndroid Build Coastguard Worker {
273*35238bceSAndroid Build Coastguard Worker return tcu::ConstPixelBufferAccess(original.getFormat(), 1, original.getWidth(), original.getHeight(),
274*35238bceSAndroid Build Coastguard Worker original.getFormat().getPixelSize(), original.getRowPitch(),
275*35238bceSAndroid Build Coastguard Worker original.getDataPtr());
276*35238bceSAndroid Build Coastguard Worker }
277*35238bceSAndroid Build Coastguard Worker
278*35238bceSAndroid Build Coastguard Worker } // namespace FragmentOpUtil
279*35238bceSAndroid Build Coastguard Worker } // namespace gls
280*35238bceSAndroid Build Coastguard Worker } // namespace deqp
281