1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 3.0 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 Sampler object testcases.
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "glsSamplerObjectTest.hpp"
25*35238bceSAndroid Build Coastguard Worker
26*35238bceSAndroid Build Coastguard Worker #include "tcuTexture.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "tcuSurface.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "tcuTextureUtil.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "tcuImageCompare.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "tcuTestLog.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "tcuRGBA.hpp"
32*35238bceSAndroid Build Coastguard Worker #include "tcuRenderTarget.hpp"
33*35238bceSAndroid Build Coastguard Worker #include "tcuStringTemplate.hpp"
34*35238bceSAndroid Build Coastguard Worker
35*35238bceSAndroid Build Coastguard Worker #include "gluShaderProgram.hpp"
36*35238bceSAndroid Build Coastguard Worker #include "gluPixelTransfer.hpp"
37*35238bceSAndroid Build Coastguard Worker #include "gluDrawUtil.hpp"
38*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
39*35238bceSAndroid Build Coastguard Worker #include "gluTextureUtil.hpp"
40*35238bceSAndroid Build Coastguard Worker
41*35238bceSAndroid Build Coastguard Worker #include "glwFunctions.hpp"
42*35238bceSAndroid Build Coastguard Worker
43*35238bceSAndroid Build Coastguard Worker #include "deRandom.hpp"
44*35238bceSAndroid Build Coastguard Worker #include "deString.h"
45*35238bceSAndroid Build Coastguard Worker
46*35238bceSAndroid Build Coastguard Worker #include "deString.h"
47*35238bceSAndroid Build Coastguard Worker
48*35238bceSAndroid Build Coastguard Worker #include <map>
49*35238bceSAndroid Build Coastguard Worker
50*35238bceSAndroid Build Coastguard Worker namespace deqp
51*35238bceSAndroid Build Coastguard Worker {
52*35238bceSAndroid Build Coastguard Worker namespace gls
53*35238bceSAndroid Build Coastguard Worker {
54*35238bceSAndroid Build Coastguard Worker
55*35238bceSAndroid Build Coastguard Worker namespace
56*35238bceSAndroid Build Coastguard Worker {
57*35238bceSAndroid Build Coastguard Worker const int VIEWPORT_WIDTH = 128;
58*35238bceSAndroid Build Coastguard Worker const int VIEWPORT_HEIGHT = 128;
59*35238bceSAndroid Build Coastguard Worker
60*35238bceSAndroid Build Coastguard Worker const int TEXTURE2D_WIDTH = 32;
61*35238bceSAndroid Build Coastguard Worker const int TEXTURE2D_HEIGHT = 32;
62*35238bceSAndroid Build Coastguard Worker
63*35238bceSAndroid Build Coastguard Worker const int TEXTURE3D_WIDTH = 32;
64*35238bceSAndroid Build Coastguard Worker const int TEXTURE3D_HEIGHT = 32;
65*35238bceSAndroid Build Coastguard Worker const int TEXTURE3D_DEPTH = 32;
66*35238bceSAndroid Build Coastguard Worker
67*35238bceSAndroid Build Coastguard Worker const int CUBEMAP_SIZE = 32;
68*35238bceSAndroid Build Coastguard Worker
69*35238bceSAndroid Build Coastguard Worker } // namespace
70*35238bceSAndroid Build Coastguard Worker
TextureSamplerTest(tcu::TestContext & testCtx,glu::RenderContext & renderCtx,const TestSpec & spec)71*35238bceSAndroid Build Coastguard Worker TextureSamplerTest::TextureSamplerTest(tcu::TestContext &testCtx, glu::RenderContext &renderCtx, const TestSpec &spec)
72*35238bceSAndroid Build Coastguard Worker : tcu::TestCase(testCtx, spec.name, spec.desc)
73*35238bceSAndroid Build Coastguard Worker , m_renderCtx(renderCtx)
74*35238bceSAndroid Build Coastguard Worker , m_program(NULL)
75*35238bceSAndroid Build Coastguard Worker , m_target(spec.target)
76*35238bceSAndroid Build Coastguard Worker , m_textureState(spec.textureState)
77*35238bceSAndroid Build Coastguard Worker , m_samplerState(spec.samplerState)
78*35238bceSAndroid Build Coastguard Worker , m_random(deStringHash(spec.name))
79*35238bceSAndroid Build Coastguard Worker {
80*35238bceSAndroid Build Coastguard Worker }
81*35238bceSAndroid Build Coastguard Worker
setTextureState(const glw::Functions & gl,GLenum target,SamplingState state)82*35238bceSAndroid Build Coastguard Worker void TextureSamplerTest::setTextureState(const glw::Functions &gl, GLenum target, SamplingState state)
83*35238bceSAndroid Build Coastguard Worker {
84*35238bceSAndroid Build Coastguard Worker gl.texParameteri(target, GL_TEXTURE_MIN_FILTER, state.minFilter);
85*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameteri(target, GL_TEXTURE_MIN_FILTER, state.minFilter)");
86*35238bceSAndroid Build Coastguard Worker gl.texParameteri(target, GL_TEXTURE_MAG_FILTER, state.magFilter);
87*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameteri(target, GL_TEXTURE_MAG_FILTER, state.magFilter)");
88*35238bceSAndroid Build Coastguard Worker gl.texParameteri(target, GL_TEXTURE_WRAP_S, state.wrapS);
89*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameteri(target, GL_TEXTURE_WRAP_S, state.wrapS)");
90*35238bceSAndroid Build Coastguard Worker gl.texParameteri(target, GL_TEXTURE_WRAP_T, state.wrapT);
91*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameteri(target, GL_TEXTURE_WRAP_T, state.wrapT)");
92*35238bceSAndroid Build Coastguard Worker gl.texParameteri(target, GL_TEXTURE_WRAP_R, state.wrapR);
93*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameteri(target, GL_TEXTURE_WRAP_R, state.wrapR)");
94*35238bceSAndroid Build Coastguard Worker gl.texParameterf(target, GL_TEXTURE_MAX_LOD, state.maxLod);
95*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameterf(target, GL_TEXTURE_MAX_LOD, state.maxLod)");
96*35238bceSAndroid Build Coastguard Worker gl.texParameterf(target, GL_TEXTURE_MIN_LOD, state.minLod);
97*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameterf(target, GL_TEXTURE_MIN_LOD, state.minLod)");
98*35238bceSAndroid Build Coastguard Worker }
99*35238bceSAndroid Build Coastguard Worker
setSamplerState(const glw::Functions & gl,SamplingState state,GLuint sampler)100*35238bceSAndroid Build Coastguard Worker void TextureSamplerTest::setSamplerState(const glw::Functions &gl, SamplingState state, GLuint sampler)
101*35238bceSAndroid Build Coastguard Worker {
102*35238bceSAndroid Build Coastguard Worker gl.samplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, state.minFilter);
103*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, state.minFilter)");
104*35238bceSAndroid Build Coastguard Worker gl.samplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, state.magFilter);
105*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, state.magFilter)");
106*35238bceSAndroid Build Coastguard Worker gl.samplerParameteri(sampler, GL_TEXTURE_WRAP_S, state.wrapS);
107*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameteri(sampler, GL_TEXTURE_WRAP_S, state.wrapS)");
108*35238bceSAndroid Build Coastguard Worker gl.samplerParameteri(sampler, GL_TEXTURE_WRAP_T, state.wrapT);
109*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameteri(sampler, GL_TEXTURE_WRAP_T, state.wrapT)");
110*35238bceSAndroid Build Coastguard Worker gl.samplerParameteri(sampler, GL_TEXTURE_WRAP_R, state.wrapR);
111*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameteri(sampler, GL_TEXTURE_WRAP_R, state.wrapR)");
112*35238bceSAndroid Build Coastguard Worker gl.samplerParameterf(sampler, GL_TEXTURE_MAX_LOD, state.maxLod);
113*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameterf(sampler, GL_TEXTURE_MAX_LOD, state.maxLod)");
114*35238bceSAndroid Build Coastguard Worker gl.samplerParameterf(sampler, GL_TEXTURE_MIN_LOD, state.minLod);
115*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameterf(sampler, GL_TEXTURE_MIN_LOD, state.minLod)");
116*35238bceSAndroid Build Coastguard Worker }
117*35238bceSAndroid Build Coastguard Worker
selectVertexShader(GLenum target)118*35238bceSAndroid Build Coastguard Worker const char *TextureSamplerTest::selectVertexShader(GLenum target)
119*35238bceSAndroid Build Coastguard Worker {
120*35238bceSAndroid Build Coastguard Worker switch (target)
121*35238bceSAndroid Build Coastguard Worker {
122*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_2D:
123*35238bceSAndroid Build Coastguard Worker return "${VTX_HDR}"
124*35238bceSAndroid Build Coastguard Worker "${VTX_IN} ${HIGHP} vec2 a_position;\n"
125*35238bceSAndroid Build Coastguard Worker "uniform ${HIGHP} float u_posScale;\n"
126*35238bceSAndroid Build Coastguard Worker "${VTX_OUT} ${MEDIUMP} vec2 v_texCoord;\n"
127*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
128*35238bceSAndroid Build Coastguard Worker "{\n"
129*35238bceSAndroid Build Coastguard Worker "\tv_texCoord = a_position;\n"
130*35238bceSAndroid Build Coastguard Worker "\tgl_Position = vec4(u_posScale * a_position, 0.0, 1.0);\n"
131*35238bceSAndroid Build Coastguard Worker "}";
132*35238bceSAndroid Build Coastguard Worker
133*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_3D:
134*35238bceSAndroid Build Coastguard Worker return "${VTX_HDR}"
135*35238bceSAndroid Build Coastguard Worker "${VTX_IN} ${HIGHP} vec3 a_position;\n"
136*35238bceSAndroid Build Coastguard Worker "uniform ${HIGHP} float u_posScale;\n"
137*35238bceSAndroid Build Coastguard Worker "${VTX_OUT} ${MEDIUMP} vec3 v_texCoord;\n"
138*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
139*35238bceSAndroid Build Coastguard Worker "{\n"
140*35238bceSAndroid Build Coastguard Worker "\tv_texCoord = a_position;\n"
141*35238bceSAndroid Build Coastguard Worker "\tgl_Position = vec4(u_posScale * a_position.xy, 0.0, 1.0);\n"
142*35238bceSAndroid Build Coastguard Worker "}";
143*35238bceSAndroid Build Coastguard Worker
144*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP:
145*35238bceSAndroid Build Coastguard Worker return "${VTX_HDR}"
146*35238bceSAndroid Build Coastguard Worker "${VTX_IN} ${HIGHP} vec4 a_position;\n"
147*35238bceSAndroid Build Coastguard Worker "uniform ${HIGHP} float u_posScale;\n"
148*35238bceSAndroid Build Coastguard Worker "${VTX_OUT} ${MEDIUMP} vec2 v_texCoord;\n"
149*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
150*35238bceSAndroid Build Coastguard Worker "{\n"
151*35238bceSAndroid Build Coastguard Worker "\tv_texCoord = a_position.zw;\n"
152*35238bceSAndroid Build Coastguard Worker "\tgl_Position = vec4(u_posScale * a_position.xy, 0.0, 1.0);\n"
153*35238bceSAndroid Build Coastguard Worker "}";
154*35238bceSAndroid Build Coastguard Worker
155*35238bceSAndroid Build Coastguard Worker default:
156*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
157*35238bceSAndroid Build Coastguard Worker return NULL;
158*35238bceSAndroid Build Coastguard Worker }
159*35238bceSAndroid Build Coastguard Worker }
160*35238bceSAndroid Build Coastguard Worker
selectFragmentShader(GLenum target)161*35238bceSAndroid Build Coastguard Worker const char *TextureSamplerTest::selectFragmentShader(GLenum target)
162*35238bceSAndroid Build Coastguard Worker {
163*35238bceSAndroid Build Coastguard Worker switch (target)
164*35238bceSAndroid Build Coastguard Worker {
165*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_2D:
166*35238bceSAndroid Build Coastguard Worker return "${FRAG_HDR}"
167*35238bceSAndroid Build Coastguard Worker "uniform ${LOWP} sampler2D u_sampler;\n"
168*35238bceSAndroid Build Coastguard Worker "${FRAG_IN} ${MEDIUMP} vec2 v_texCoord;\n"
169*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
170*35238bceSAndroid Build Coastguard Worker "{\n"
171*35238bceSAndroid Build Coastguard Worker "\t${FRAG_COLOR} = texture(u_sampler, v_texCoord);\n"
172*35238bceSAndroid Build Coastguard Worker "}";
173*35238bceSAndroid Build Coastguard Worker
174*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_3D:
175*35238bceSAndroid Build Coastguard Worker return "${FRAG_HDR}"
176*35238bceSAndroid Build Coastguard Worker "uniform ${LOWP} sampler3D u_sampler;\n"
177*35238bceSAndroid Build Coastguard Worker "${FRAG_IN} ${MEDIUMP} vec3 v_texCoord;\n"
178*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
179*35238bceSAndroid Build Coastguard Worker "{\n"
180*35238bceSAndroid Build Coastguard Worker "\t${FRAG_COLOR} = texture(u_sampler, v_texCoord);\n"
181*35238bceSAndroid Build Coastguard Worker "}";
182*35238bceSAndroid Build Coastguard Worker
183*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP:
184*35238bceSAndroid Build Coastguard Worker return "${FRAG_HDR}"
185*35238bceSAndroid Build Coastguard Worker "uniform ${LOWP} samplerCube u_sampler;\n"
186*35238bceSAndroid Build Coastguard Worker "${FRAG_IN} ${MEDIUMP} vec2 v_texCoord;\n"
187*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
188*35238bceSAndroid Build Coastguard Worker "{\n"
189*35238bceSAndroid Build Coastguard Worker "\t${FRAG_COLOR} = texture(u_sampler, vec3(cos(3.14 * v_texCoord.y) * sin(3.14 * v_texCoord.x), "
190*35238bceSAndroid Build Coastguard Worker "sin(3.14 * v_texCoord.y), cos(3.14 * v_texCoord.y) * cos(3.14 * v_texCoord.x)));\n"
191*35238bceSAndroid Build Coastguard Worker "}";
192*35238bceSAndroid Build Coastguard Worker
193*35238bceSAndroid Build Coastguard Worker default:
194*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
195*35238bceSAndroid Build Coastguard Worker return NULL;
196*35238bceSAndroid Build Coastguard Worker }
197*35238bceSAndroid Build Coastguard Worker }
198*35238bceSAndroid Build Coastguard Worker
init(void)199*35238bceSAndroid Build Coastguard Worker void TextureSamplerTest::init(void)
200*35238bceSAndroid Build Coastguard Worker {
201*35238bceSAndroid Build Coastguard Worker const char *vertexShaderTemplate = selectVertexShader(m_target);
202*35238bceSAndroid Build Coastguard Worker const char *fragmentShaderTemplate = selectFragmentShader(m_target);
203*35238bceSAndroid Build Coastguard Worker
204*35238bceSAndroid Build Coastguard Worker std::map<std::string, std::string> params;
205*35238bceSAndroid Build Coastguard Worker
206*35238bceSAndroid Build Coastguard Worker if (glu::isGLSLVersionSupported(m_renderCtx.getType(), glu::GLSL_VERSION_300_ES))
207*35238bceSAndroid Build Coastguard Worker {
208*35238bceSAndroid Build Coastguard Worker params["VTX_HDR"] = "#version 300 es\n";
209*35238bceSAndroid Build Coastguard Worker params["FRAG_HDR"] = "#version 300 es\nlayout(location = 0) out mediump vec4 o_color;\n";
210*35238bceSAndroid Build Coastguard Worker params["VTX_IN"] = "in";
211*35238bceSAndroid Build Coastguard Worker params["VTX_OUT"] = "out";
212*35238bceSAndroid Build Coastguard Worker params["FRAG_IN"] = "in";
213*35238bceSAndroid Build Coastguard Worker params["FRAG_COLOR"] = "o_color";
214*35238bceSAndroid Build Coastguard Worker params["HIGHP"] = "highp";
215*35238bceSAndroid Build Coastguard Worker params["LOWP"] = "lowp";
216*35238bceSAndroid Build Coastguard Worker params["MEDIUMP"] = "mediump";
217*35238bceSAndroid Build Coastguard Worker }
218*35238bceSAndroid Build Coastguard Worker else if (glu::isGLSLVersionSupported(m_renderCtx.getType(), glu::GLSL_VERSION_330))
219*35238bceSAndroid Build Coastguard Worker {
220*35238bceSAndroid Build Coastguard Worker params["VTX_HDR"] = "#version 330\n";
221*35238bceSAndroid Build Coastguard Worker params["FRAG_HDR"] = "#version 330\nlayout(location = 0) out mediump vec4 o_color;\n";
222*35238bceSAndroid Build Coastguard Worker params["VTX_IN"] = "in";
223*35238bceSAndroid Build Coastguard Worker params["VTX_OUT"] = "out";
224*35238bceSAndroid Build Coastguard Worker params["FRAG_IN"] = "in";
225*35238bceSAndroid Build Coastguard Worker params["FRAG_COLOR"] = "o_color";
226*35238bceSAndroid Build Coastguard Worker params["HIGHP"] = "highp";
227*35238bceSAndroid Build Coastguard Worker params["LOWP"] = "lowp";
228*35238bceSAndroid Build Coastguard Worker params["MEDIUMP"] = "mediump";
229*35238bceSAndroid Build Coastguard Worker }
230*35238bceSAndroid Build Coastguard Worker else
231*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
232*35238bceSAndroid Build Coastguard Worker
233*35238bceSAndroid Build Coastguard Worker DE_ASSERT(!m_program);
234*35238bceSAndroid Build Coastguard Worker m_program = new glu::ShaderProgram(
235*35238bceSAndroid Build Coastguard Worker m_renderCtx, glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderTemplate).specialize(params),
236*35238bceSAndroid Build Coastguard Worker tcu::StringTemplate(fragmentShaderTemplate).specialize(params)));
237*35238bceSAndroid Build Coastguard Worker
238*35238bceSAndroid Build Coastguard Worker if (!m_program->isOk())
239*35238bceSAndroid Build Coastguard Worker {
240*35238bceSAndroid Build Coastguard Worker tcu::TestLog &log = m_testCtx.getLog();
241*35238bceSAndroid Build Coastguard Worker log << *m_program;
242*35238bceSAndroid Build Coastguard Worker TCU_FAIL("Failed to compile shaders");
243*35238bceSAndroid Build Coastguard Worker }
244*35238bceSAndroid Build Coastguard Worker }
245*35238bceSAndroid Build Coastguard Worker
deinit(void)246*35238bceSAndroid Build Coastguard Worker void TextureSamplerTest::deinit(void)
247*35238bceSAndroid Build Coastguard Worker {
248*35238bceSAndroid Build Coastguard Worker delete m_program;
249*35238bceSAndroid Build Coastguard Worker m_program = NULL;
250*35238bceSAndroid Build Coastguard Worker }
251*35238bceSAndroid Build Coastguard Worker
~TextureSamplerTest(void)252*35238bceSAndroid Build Coastguard Worker TextureSamplerTest::~TextureSamplerTest(void)
253*35238bceSAndroid Build Coastguard Worker {
254*35238bceSAndroid Build Coastguard Worker deinit();
255*35238bceSAndroid Build Coastguard Worker }
256*35238bceSAndroid Build Coastguard Worker
257*35238bceSAndroid Build Coastguard Worker const float s_positions[] = {-1.0, -1.0, 1.0, -1.0, 1.0, 1.0,
258*35238bceSAndroid Build Coastguard Worker
259*35238bceSAndroid Build Coastguard Worker 1.0, 1.0, -1.0, 1.0, -1.0, -1.0};
260*35238bceSAndroid Build Coastguard Worker
261*35238bceSAndroid Build Coastguard Worker const float s_positions3D[] = {-1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f,
262*35238bceSAndroid Build Coastguard Worker
263*35238bceSAndroid Build Coastguard Worker 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f};
264*35238bceSAndroid Build Coastguard Worker
265*35238bceSAndroid Build Coastguard Worker const float s_positionsCube[] = {-1.0f, -1.0f, -1.0f, -0.5f, 1.0f, -1.0f, 1.0f, -0.5f, 1.0f, 1.0f, 1.0f, 0.5f,
266*35238bceSAndroid Build Coastguard Worker
267*35238bceSAndroid Build Coastguard Worker 1.0f, 1.0f, 1.0f, 0.5f, -1.0f, 1.0f, -1.0f, 0.5f, -1.0f, -1.0f, -1.0f, -0.5f};
268*35238bceSAndroid Build Coastguard Worker
render(void)269*35238bceSAndroid Build Coastguard Worker void TextureSamplerTest::render(void)
270*35238bceSAndroid Build Coastguard Worker {
271*35238bceSAndroid Build Coastguard Worker const glw::Functions &gl = m_renderCtx.getFunctions();
272*35238bceSAndroid Build Coastguard Worker
273*35238bceSAndroid Build Coastguard Worker GLuint samplerLoc = (GLuint)-1;
274*35238bceSAndroid Build Coastguard Worker GLuint scaleLoc = (GLuint)-1;
275*35238bceSAndroid Build Coastguard Worker
276*35238bceSAndroid Build Coastguard Worker gl.useProgram(m_program->getProgram());
277*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram(m_program->getProgram())");
278*35238bceSAndroid Build Coastguard Worker
279*35238bceSAndroid Build Coastguard Worker samplerLoc = gl.getUniformLocation(m_program->getProgram(), "u_sampler");
280*35238bceSAndroid Build Coastguard Worker TCU_CHECK(samplerLoc != (GLuint)-1);
281*35238bceSAndroid Build Coastguard Worker
282*35238bceSAndroid Build Coastguard Worker scaleLoc = gl.getUniformLocation(m_program->getProgram(), "u_posScale");
283*35238bceSAndroid Build Coastguard Worker TCU_CHECK(scaleLoc != (GLuint)-1);
284*35238bceSAndroid Build Coastguard Worker
285*35238bceSAndroid Build Coastguard Worker gl.clearColor(0.5f, 0.5f, 0.5f, 1.0f);
286*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glClearColor(0.5f, 0.5f, 0.5f, 1.0f)");
287*35238bceSAndroid Build Coastguard Worker
288*35238bceSAndroid Build Coastguard Worker gl.clear(GL_COLOR_BUFFER_BIT);
289*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glClear(GL_COLOR_BUFFER_BIT)");
290*35238bceSAndroid Build Coastguard Worker
291*35238bceSAndroid Build Coastguard Worker gl.uniform1i(samplerLoc, 0);
292*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i(samplerLoc, 0)");
293*35238bceSAndroid Build Coastguard Worker
294*35238bceSAndroid Build Coastguard Worker gl.uniform1f(scaleLoc, 1.0f);
295*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1f(scaleLoc, 1.0f)");
296*35238bceSAndroid Build Coastguard Worker
297*35238bceSAndroid Build Coastguard Worker switch (m_target)
298*35238bceSAndroid Build Coastguard Worker {
299*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_2D:
300*35238bceSAndroid Build Coastguard Worker {
301*35238bceSAndroid Build Coastguard Worker glu::VertexArrayBinding vertexArrays[] = {glu::VertexArrayBinding(
302*35238bceSAndroid Build Coastguard Worker glu::BindingPoint("a_position"),
303*35238bceSAndroid Build Coastguard Worker glu::VertexArrayPointer(glu::VTX_COMP_FLOAT, glu::VTX_COMP_CONVERT_NONE, 2, 6, 0, s_positions))};
304*35238bceSAndroid Build Coastguard Worker
305*35238bceSAndroid Build Coastguard Worker glu::draw(m_renderCtx, m_program->getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays,
306*35238bceSAndroid Build Coastguard Worker glu::PrimitiveList(glu::PRIMITIVETYPE_TRIANGLES, 6));
307*35238bceSAndroid Build Coastguard Worker
308*35238bceSAndroid Build Coastguard Worker gl.uniform1f(scaleLoc, 0.25f);
309*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1f(scaleLoc, 0.25f)");
310*35238bceSAndroid Build Coastguard Worker
311*35238bceSAndroid Build Coastguard Worker glu::draw(m_renderCtx, m_program->getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays,
312*35238bceSAndroid Build Coastguard Worker glu::PrimitiveList(glu::PRIMITIVETYPE_TRIANGLES, 6));
313*35238bceSAndroid Build Coastguard Worker
314*35238bceSAndroid Build Coastguard Worker break;
315*35238bceSAndroid Build Coastguard Worker }
316*35238bceSAndroid Build Coastguard Worker
317*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_3D:
318*35238bceSAndroid Build Coastguard Worker {
319*35238bceSAndroid Build Coastguard Worker glu::VertexArrayBinding vertexArrays[] = {glu::VertexArrayBinding(
320*35238bceSAndroid Build Coastguard Worker glu::BindingPoint("a_position"),
321*35238bceSAndroid Build Coastguard Worker glu::VertexArrayPointer(glu::VTX_COMP_FLOAT, glu::VTX_COMP_CONVERT_NONE, 3, 6, 0, s_positions3D))};
322*35238bceSAndroid Build Coastguard Worker
323*35238bceSAndroid Build Coastguard Worker glu::draw(m_renderCtx, m_program->getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays,
324*35238bceSAndroid Build Coastguard Worker glu::PrimitiveList(glu::PRIMITIVETYPE_TRIANGLES, 6));
325*35238bceSAndroid Build Coastguard Worker
326*35238bceSAndroid Build Coastguard Worker gl.uniform1f(scaleLoc, 0.25f);
327*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1f(scaleLoc, 0.25f)");
328*35238bceSAndroid Build Coastguard Worker
329*35238bceSAndroid Build Coastguard Worker glu::draw(m_renderCtx, m_program->getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays,
330*35238bceSAndroid Build Coastguard Worker glu::PrimitiveList(glu::PRIMITIVETYPE_TRIANGLES, 6));
331*35238bceSAndroid Build Coastguard Worker
332*35238bceSAndroid Build Coastguard Worker break;
333*35238bceSAndroid Build Coastguard Worker }
334*35238bceSAndroid Build Coastguard Worker
335*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP:
336*35238bceSAndroid Build Coastguard Worker {
337*35238bceSAndroid Build Coastguard Worker glu::VertexArrayBinding vertexArrays[] = {glu::VertexArrayBinding(
338*35238bceSAndroid Build Coastguard Worker glu::BindingPoint("a_position"),
339*35238bceSAndroid Build Coastguard Worker glu::VertexArrayPointer(glu::VTX_COMP_FLOAT, glu::VTX_COMP_CONVERT_NONE, 4, 6, 0, s_positionsCube))};
340*35238bceSAndroid Build Coastguard Worker
341*35238bceSAndroid Build Coastguard Worker glu::draw(m_renderCtx, m_program->getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays,
342*35238bceSAndroid Build Coastguard Worker glu::PrimitiveList(glu::PRIMITIVETYPE_TRIANGLES, 6));
343*35238bceSAndroid Build Coastguard Worker
344*35238bceSAndroid Build Coastguard Worker gl.uniform1f(scaleLoc, 0.25f);
345*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1f(scaleLoc, 0.25f)");
346*35238bceSAndroid Build Coastguard Worker
347*35238bceSAndroid Build Coastguard Worker glu::draw(m_renderCtx, m_program->getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays,
348*35238bceSAndroid Build Coastguard Worker glu::PrimitiveList(glu::PRIMITIVETYPE_TRIANGLES, 6));
349*35238bceSAndroid Build Coastguard Worker
350*35238bceSAndroid Build Coastguard Worker break;
351*35238bceSAndroid Build Coastguard Worker }
352*35238bceSAndroid Build Coastguard Worker
353*35238bceSAndroid Build Coastguard Worker default:
354*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
355*35238bceSAndroid Build Coastguard Worker }
356*35238bceSAndroid Build Coastguard Worker }
357*35238bceSAndroid Build Coastguard Worker
createTexture2D(const glw::Functions & gl)358*35238bceSAndroid Build Coastguard Worker GLuint TextureSamplerTest::createTexture2D(const glw::Functions &gl)
359*35238bceSAndroid Build Coastguard Worker {
360*35238bceSAndroid Build Coastguard Worker GLuint texture = (GLuint)-1;
361*35238bceSAndroid Build Coastguard Worker tcu::Texture2D refTexture(tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8),
362*35238bceSAndroid Build Coastguard Worker TEXTURE2D_WIDTH, TEXTURE2D_HEIGHT);
363*35238bceSAndroid Build Coastguard Worker
364*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(0);
365*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevel(0), tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f),
366*35238bceSAndroid Build Coastguard Worker tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
367*35238bceSAndroid Build Coastguard Worker
368*35238bceSAndroid Build Coastguard Worker gl.genTextures(1, &texture);
369*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenTextures(1, &texture)");
370*35238bceSAndroid Build Coastguard Worker
371*35238bceSAndroid Build Coastguard Worker gl.bindTexture(GL_TEXTURE_2D, texture);
372*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(GL_TEXTURE_2D, texture)");
373*35238bceSAndroid Build Coastguard Worker
374*35238bceSAndroid Build Coastguard Worker gl.texImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, refTexture.getWidth(), refTexture.getHeight(), 0, GL_RGBA,
375*35238bceSAndroid Build Coastguard Worker GL_UNSIGNED_BYTE, refTexture.getLevel(0).getDataPtr());
376*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(),
377*35238bceSAndroid Build Coastguard Worker "glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, refTexture.getWidth(), refTexture.getHeight(), 0, "
378*35238bceSAndroid Build Coastguard Worker "GL_RGBA, GL_UNSIGNED_BYTE, refTexture.getLevel(0).getDataPtr())");
379*35238bceSAndroid Build Coastguard Worker
380*35238bceSAndroid Build Coastguard Worker gl.generateMipmap(GL_TEXTURE_2D);
381*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenerateMipmap(GL_TEXTURE_2D)");
382*35238bceSAndroid Build Coastguard Worker
383*35238bceSAndroid Build Coastguard Worker gl.bindTexture(GL_TEXTURE_2D, 0);
384*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(GL_TEXTURE_2D, texture)");
385*35238bceSAndroid Build Coastguard Worker
386*35238bceSAndroid Build Coastguard Worker return texture;
387*35238bceSAndroid Build Coastguard Worker }
388*35238bceSAndroid Build Coastguard Worker
createTexture3D(const glw::Functions & gl)389*35238bceSAndroid Build Coastguard Worker GLuint TextureSamplerTest::createTexture3D(const glw::Functions &gl)
390*35238bceSAndroid Build Coastguard Worker {
391*35238bceSAndroid Build Coastguard Worker GLuint texture = (GLuint)-1;
392*35238bceSAndroid Build Coastguard Worker tcu::Texture3D refTexture(tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8),
393*35238bceSAndroid Build Coastguard Worker TEXTURE3D_WIDTH, TEXTURE3D_HEIGHT, TEXTURE3D_DEPTH);
394*35238bceSAndroid Build Coastguard Worker
395*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(0);
396*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevel(0), tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f),
397*35238bceSAndroid Build Coastguard Worker tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
398*35238bceSAndroid Build Coastguard Worker
399*35238bceSAndroid Build Coastguard Worker gl.genTextures(1, &texture);
400*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenTextures(1, &texture)");
401*35238bceSAndroid Build Coastguard Worker
402*35238bceSAndroid Build Coastguard Worker gl.bindTexture(GL_TEXTURE_3D, texture);
403*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(GL_TEXTURE_3D, texture)");
404*35238bceSAndroid Build Coastguard Worker
405*35238bceSAndroid Build Coastguard Worker gl.texImage3D(GL_TEXTURE_3D, 0, GL_RGBA8, refTexture.getWidth(), refTexture.getHeight(), refTexture.getDepth(), 0,
406*35238bceSAndroid Build Coastguard Worker GL_RGBA, GL_UNSIGNED_BYTE, refTexture.getLevel(0).getDataPtr());
407*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(),
408*35238bceSAndroid Build Coastguard Worker "glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA8, refTexture.getWidth(), refTexture.getHeight(), "
409*35238bceSAndroid Build Coastguard Worker "refTexture.getDepth(), 0, GL_RGBA, GL_UNSIGNED_BYTE, refTexture.getLevel(0).getDataPtr())");
410*35238bceSAndroid Build Coastguard Worker
411*35238bceSAndroid Build Coastguard Worker gl.generateMipmap(GL_TEXTURE_3D);
412*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenerateMipmap(GL_TEXTURE_3D)");
413*35238bceSAndroid Build Coastguard Worker
414*35238bceSAndroid Build Coastguard Worker gl.bindTexture(GL_TEXTURE_3D, 0);
415*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(GL_TEXTURE_3D, 0)");
416*35238bceSAndroid Build Coastguard Worker
417*35238bceSAndroid Build Coastguard Worker return texture;
418*35238bceSAndroid Build Coastguard Worker }
419*35238bceSAndroid Build Coastguard Worker
createTextureCube(const glw::Functions & gl)420*35238bceSAndroid Build Coastguard Worker GLuint TextureSamplerTest::createTextureCube(const glw::Functions &gl)
421*35238bceSAndroid Build Coastguard Worker {
422*35238bceSAndroid Build Coastguard Worker GLuint texture = (GLuint)-1;
423*35238bceSAndroid Build Coastguard Worker tcu::TextureCube refTexture(tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8),
424*35238bceSAndroid Build Coastguard Worker CUBEMAP_SIZE);
425*35238bceSAndroid Build Coastguard Worker
426*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(tcu::CUBEFACE_POSITIVE_X, 0);
427*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(tcu::CUBEFACE_POSITIVE_Y, 0);
428*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(tcu::CUBEFACE_POSITIVE_Z, 0);
429*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(tcu::CUBEFACE_NEGATIVE_X, 0);
430*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(tcu::CUBEFACE_NEGATIVE_Y, 0);
431*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(tcu::CUBEFACE_NEGATIVE_Z, 0);
432*35238bceSAndroid Build Coastguard Worker
433*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_POSITIVE_X),
434*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
435*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_POSITIVE_Y),
436*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
437*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_POSITIVE_Z),
438*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
439*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_NEGATIVE_X),
440*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
441*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_NEGATIVE_Y),
442*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
443*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_NEGATIVE_Z),
444*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
445*35238bceSAndroid Build Coastguard Worker
446*35238bceSAndroid Build Coastguard Worker gl.bindTexture(GL_TEXTURE_CUBE_MAP, texture);
447*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(GL_TEXTURE_CUBE_MAP, texture)");
448*35238bceSAndroid Build Coastguard Worker
449*35238bceSAndroid Build Coastguard Worker for (int face = 0; face < tcu::CUBEFACE_LAST; face++)
450*35238bceSAndroid Build Coastguard Worker {
451*35238bceSAndroid Build Coastguard Worker const uint32_t target = glu::getGLCubeFace((tcu::CubeFace)face);
452*35238bceSAndroid Build Coastguard Worker gl.texImage2D(target, 0, GL_RGBA8, refTexture.getSize(), refTexture.getSize(), 0, GL_RGBA, GL_UNSIGNED_BYTE,
453*35238bceSAndroid Build Coastguard Worker refTexture.getLevelFace(0, (tcu::CubeFace)face).getDataPtr());
454*35238bceSAndroid Build Coastguard Worker }
455*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage2D(GL_TEXTURE_CUBE_MAP_...) failed");
456*35238bceSAndroid Build Coastguard Worker
457*35238bceSAndroid Build Coastguard Worker gl.generateMipmap(GL_TEXTURE_CUBE_MAP);
458*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenerateMipmap(GL_TEXTURE_CUBE_MAP)");
459*35238bceSAndroid Build Coastguard Worker gl.bindTexture(GL_TEXTURE_CUBE_MAP, 0);
460*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(GL_TEXTURE_CUBE_MAP, texture)");
461*35238bceSAndroid Build Coastguard Worker
462*35238bceSAndroid Build Coastguard Worker return texture;
463*35238bceSAndroid Build Coastguard Worker }
464*35238bceSAndroid Build Coastguard Worker
createTexture(const glw::Functions & gl,GLenum target)465*35238bceSAndroid Build Coastguard Worker GLuint TextureSamplerTest::createTexture(const glw::Functions &gl, GLenum target)
466*35238bceSAndroid Build Coastguard Worker {
467*35238bceSAndroid Build Coastguard Worker switch (target)
468*35238bceSAndroid Build Coastguard Worker {
469*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_2D:
470*35238bceSAndroid Build Coastguard Worker return createTexture2D(gl);
471*35238bceSAndroid Build Coastguard Worker
472*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_3D:
473*35238bceSAndroid Build Coastguard Worker return createTexture3D(gl);
474*35238bceSAndroid Build Coastguard Worker
475*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP:
476*35238bceSAndroid Build Coastguard Worker return createTextureCube(gl);
477*35238bceSAndroid Build Coastguard Worker
478*35238bceSAndroid Build Coastguard Worker default:
479*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
480*35238bceSAndroid Build Coastguard Worker return (GLuint)-1;
481*35238bceSAndroid Build Coastguard Worker }
482*35238bceSAndroid Build Coastguard Worker }
483*35238bceSAndroid Build Coastguard Worker
renderReferences(tcu::Surface & textureRef,tcu::Surface & samplerRef,int x,int y)484*35238bceSAndroid Build Coastguard Worker void TextureSamplerTest::renderReferences(tcu::Surface &textureRef, tcu::Surface &samplerRef, int x, int y)
485*35238bceSAndroid Build Coastguard Worker {
486*35238bceSAndroid Build Coastguard Worker const glw::Functions &gl = m_renderCtx.getFunctions();
487*35238bceSAndroid Build Coastguard Worker GLuint texture = createTexture(gl, m_target);
488*35238bceSAndroid Build Coastguard Worker
489*35238bceSAndroid Build Coastguard Worker gl.viewport(x, y, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
490*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport(x, y, VIEWPORT_WIDTH, VIEWPORT_HEIGHT)");
491*35238bceSAndroid Build Coastguard Worker
492*35238bceSAndroid Build Coastguard Worker gl.bindTexture(m_target, texture);
493*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(m_target, texture)");
494*35238bceSAndroid Build Coastguard Worker
495*35238bceSAndroid Build Coastguard Worker setTextureState(gl, m_target, m_textureState);
496*35238bceSAndroid Build Coastguard Worker render();
497*35238bceSAndroid Build Coastguard Worker glu::readPixels(m_renderCtx, x, y, textureRef.getAccess());
498*35238bceSAndroid Build Coastguard Worker
499*35238bceSAndroid Build Coastguard Worker setTextureState(gl, m_target, m_samplerState);
500*35238bceSAndroid Build Coastguard Worker render();
501*35238bceSAndroid Build Coastguard Worker glu::readPixels(m_renderCtx, x, y, samplerRef.getAccess());
502*35238bceSAndroid Build Coastguard Worker
503*35238bceSAndroid Build Coastguard Worker gl.deleteTextures(1, &texture);
504*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glDeleteTextures(1, &texture)");
505*35238bceSAndroid Build Coastguard Worker }
506*35238bceSAndroid Build Coastguard Worker
renderResults(tcu::Surface & textureResult,tcu::Surface & samplerResult,int x,int y)507*35238bceSAndroid Build Coastguard Worker void TextureSamplerTest::renderResults(tcu::Surface &textureResult, tcu::Surface &samplerResult, int x, int y)
508*35238bceSAndroid Build Coastguard Worker {
509*35238bceSAndroid Build Coastguard Worker const glw::Functions &gl = m_renderCtx.getFunctions();
510*35238bceSAndroid Build Coastguard Worker GLuint texture = createTexture(gl, m_target);
511*35238bceSAndroid Build Coastguard Worker GLuint sampler = -1;
512*35238bceSAndroid Build Coastguard Worker
513*35238bceSAndroid Build Coastguard Worker gl.viewport(x, y, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
514*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport(x, y, VIEWPORT_WIDTH, VIEWPORT_HEIGHT)");
515*35238bceSAndroid Build Coastguard Worker
516*35238bceSAndroid Build Coastguard Worker gl.genSamplers(1, &sampler);
517*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenSamplers(1, &sampler)");
518*35238bceSAndroid Build Coastguard Worker TCU_CHECK(sampler != (GLuint)-1);
519*35238bceSAndroid Build Coastguard Worker
520*35238bceSAndroid Build Coastguard Worker gl.bindSampler(0, sampler);
521*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindSampler(0, sampler)");
522*35238bceSAndroid Build Coastguard Worker
523*35238bceSAndroid Build Coastguard Worker // First set sampler state
524*35238bceSAndroid Build Coastguard Worker setSamplerState(gl, m_samplerState, sampler);
525*35238bceSAndroid Build Coastguard Worker
526*35238bceSAndroid Build Coastguard Worker // Set texture state
527*35238bceSAndroid Build Coastguard Worker gl.bindTexture(m_target, texture);
528*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(m_target, texture)");
529*35238bceSAndroid Build Coastguard Worker
530*35238bceSAndroid Build Coastguard Worker setTextureState(gl, m_target, m_textureState);
531*35238bceSAndroid Build Coastguard Worker
532*35238bceSAndroid Build Coastguard Worker // Render using sampler
533*35238bceSAndroid Build Coastguard Worker render();
534*35238bceSAndroid Build Coastguard Worker glu::readPixels(m_renderCtx, x, y, samplerResult.getAccess());
535*35238bceSAndroid Build Coastguard Worker
536*35238bceSAndroid Build Coastguard Worker // Render without sampler
537*35238bceSAndroid Build Coastguard Worker gl.bindSampler(0, 0);
538*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindSampler(0, 0)");
539*35238bceSAndroid Build Coastguard Worker
540*35238bceSAndroid Build Coastguard Worker render();
541*35238bceSAndroid Build Coastguard Worker glu::readPixels(m_renderCtx, x, y, textureResult.getAccess());
542*35238bceSAndroid Build Coastguard Worker
543*35238bceSAndroid Build Coastguard Worker gl.deleteSamplers(1, &sampler);
544*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glDeleteSamplers(1, &sampler)");
545*35238bceSAndroid Build Coastguard Worker gl.deleteTextures(1, &texture);
546*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glDeleteTextures(1, &texture)");
547*35238bceSAndroid Build Coastguard Worker }
548*35238bceSAndroid Build Coastguard Worker
iterate(void)549*35238bceSAndroid Build Coastguard Worker tcu::TestCase::IterateResult TextureSamplerTest::iterate(void)
550*35238bceSAndroid Build Coastguard Worker {
551*35238bceSAndroid Build Coastguard Worker tcu::TestLog &log = m_testCtx.getLog();
552*35238bceSAndroid Build Coastguard Worker
553*35238bceSAndroid Build Coastguard Worker tcu::Surface textureRef(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
554*35238bceSAndroid Build Coastguard Worker tcu::Surface samplerRef(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
555*35238bceSAndroid Build Coastguard Worker
556*35238bceSAndroid Build Coastguard Worker tcu::Surface textureResult(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
557*35238bceSAndroid Build Coastguard Worker tcu::Surface samplerResult(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
558*35238bceSAndroid Build Coastguard Worker
559*35238bceSAndroid Build Coastguard Worker int x = m_random.getInt(0, m_renderCtx.getRenderTarget().getWidth() - VIEWPORT_WIDTH);
560*35238bceSAndroid Build Coastguard Worker int y = m_random.getInt(0, m_renderCtx.getRenderTarget().getHeight() - VIEWPORT_HEIGHT);
561*35238bceSAndroid Build Coastguard Worker
562*35238bceSAndroid Build Coastguard Worker renderReferences(textureRef, samplerRef, x, y);
563*35238bceSAndroid Build Coastguard Worker renderResults(textureResult, samplerResult, x, y);
564*35238bceSAndroid Build Coastguard Worker
565*35238bceSAndroid Build Coastguard Worker bool isOk = pixelThresholdCompare(log, "Sampler render result", "Result from rendering with sampler", samplerRef,
566*35238bceSAndroid Build Coastguard Worker samplerResult, tcu::RGBA(0, 0, 0, 0), tcu::COMPARE_LOG_RESULT);
567*35238bceSAndroid Build Coastguard Worker
568*35238bceSAndroid Build Coastguard Worker if (!pixelThresholdCompare(log, "Texture render result", "Result from rendering with texture state", textureRef,
569*35238bceSAndroid Build Coastguard Worker textureResult, tcu::RGBA(0, 0, 0, 0), tcu::COMPARE_LOG_RESULT))
570*35238bceSAndroid Build Coastguard Worker isOk = false;
571*35238bceSAndroid Build Coastguard Worker
572*35238bceSAndroid Build Coastguard Worker if (!isOk)
573*35238bceSAndroid Build Coastguard Worker {
574*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
575*35238bceSAndroid Build Coastguard Worker return STOP;
576*35238bceSAndroid Build Coastguard Worker }
577*35238bceSAndroid Build Coastguard Worker
578*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
579*35238bceSAndroid Build Coastguard Worker return STOP;
580*35238bceSAndroid Build Coastguard Worker }
581*35238bceSAndroid Build Coastguard Worker
MultiTextureSamplerTest(tcu::TestContext & testCtx,glu::RenderContext & renderCtx,const TestSpec & spec)582*35238bceSAndroid Build Coastguard Worker MultiTextureSamplerTest::MultiTextureSamplerTest(tcu::TestContext &testCtx, glu::RenderContext &renderCtx,
583*35238bceSAndroid Build Coastguard Worker const TestSpec &spec)
584*35238bceSAndroid Build Coastguard Worker : TestCase(testCtx, spec.name, spec.desc)
585*35238bceSAndroid Build Coastguard Worker , m_renderCtx(renderCtx)
586*35238bceSAndroid Build Coastguard Worker , m_program(NULL)
587*35238bceSAndroid Build Coastguard Worker , m_target(spec.target)
588*35238bceSAndroid Build Coastguard Worker , m_textureState1(spec.textureState1)
589*35238bceSAndroid Build Coastguard Worker , m_textureState2(spec.textureState2)
590*35238bceSAndroid Build Coastguard Worker , m_samplerState(spec.samplerState)
591*35238bceSAndroid Build Coastguard Worker , m_random(deStringHash(spec.name))
592*35238bceSAndroid Build Coastguard Worker {
593*35238bceSAndroid Build Coastguard Worker }
594*35238bceSAndroid Build Coastguard Worker
setTextureState(const glw::Functions & gl,GLenum target,SamplingState state)595*35238bceSAndroid Build Coastguard Worker void MultiTextureSamplerTest::setTextureState(const glw::Functions &gl, GLenum target, SamplingState state)
596*35238bceSAndroid Build Coastguard Worker {
597*35238bceSAndroid Build Coastguard Worker gl.texParameteri(target, GL_TEXTURE_MIN_FILTER, state.minFilter);
598*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameteri(target, GL_TEXTURE_MIN_FILTER, state.minFilter)");
599*35238bceSAndroid Build Coastguard Worker gl.texParameteri(target, GL_TEXTURE_MAG_FILTER, state.magFilter);
600*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameteri(target, GL_TEXTURE_MAG_FILTER, state.magFilter)");
601*35238bceSAndroid Build Coastguard Worker gl.texParameteri(target, GL_TEXTURE_WRAP_S, state.wrapS);
602*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameteri(target, GL_TEXTURE_WRAP_S, state.wrapS)");
603*35238bceSAndroid Build Coastguard Worker gl.texParameteri(target, GL_TEXTURE_WRAP_T, state.wrapT);
604*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameteri(target, GL_TEXTURE_WRAP_T, state.wrapT)");
605*35238bceSAndroid Build Coastguard Worker gl.texParameteri(target, GL_TEXTURE_WRAP_R, state.wrapR);
606*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameteri(target, GL_TEXTURE_WRAP_R, state.wrapR)");
607*35238bceSAndroid Build Coastguard Worker gl.texParameterf(target, GL_TEXTURE_MAX_LOD, state.maxLod);
608*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameterf(target, GL_TEXTURE_MAX_LOD, state.maxLod)");
609*35238bceSAndroid Build Coastguard Worker gl.texParameterf(target, GL_TEXTURE_MIN_LOD, state.minLod);
610*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameterf(target, GL_TEXTURE_MIN_LOD, state.minLod)");
611*35238bceSAndroid Build Coastguard Worker }
612*35238bceSAndroid Build Coastguard Worker
setSamplerState(const glw::Functions & gl,SamplingState state,GLuint sampler)613*35238bceSAndroid Build Coastguard Worker void MultiTextureSamplerTest::setSamplerState(const glw::Functions &gl, SamplingState state, GLuint sampler)
614*35238bceSAndroid Build Coastguard Worker {
615*35238bceSAndroid Build Coastguard Worker gl.samplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, state.minFilter);
616*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, state.minFilter)");
617*35238bceSAndroid Build Coastguard Worker gl.samplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, state.magFilter);
618*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, state.magFilter)");
619*35238bceSAndroid Build Coastguard Worker gl.samplerParameteri(sampler, GL_TEXTURE_WRAP_S, state.wrapS);
620*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameteri(sampler, GL_TEXTURE_WRAP_S, state.wrapS)");
621*35238bceSAndroid Build Coastguard Worker gl.samplerParameteri(sampler, GL_TEXTURE_WRAP_T, state.wrapT);
622*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameteri(sampler, GL_TEXTURE_WRAP_T, state.wrapT)");
623*35238bceSAndroid Build Coastguard Worker gl.samplerParameteri(sampler, GL_TEXTURE_WRAP_R, state.wrapR);
624*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameteri(sampler, GL_TEXTURE_WRAP_R, state.wrapR)");
625*35238bceSAndroid Build Coastguard Worker gl.samplerParameterf(sampler, GL_TEXTURE_MAX_LOD, state.maxLod);
626*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameterf(sampler, GL_TEXTURE_MAX_LOD, state.maxLod)");
627*35238bceSAndroid Build Coastguard Worker gl.samplerParameterf(sampler, GL_TEXTURE_MIN_LOD, state.minLod);
628*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glSamplerParameterf(sampler, GL_TEXTURE_MIN_LOD, state.minLod)");
629*35238bceSAndroid Build Coastguard Worker }
630*35238bceSAndroid Build Coastguard Worker
selectVertexShader(GLenum target)631*35238bceSAndroid Build Coastguard Worker const char *MultiTextureSamplerTest::selectVertexShader(GLenum target)
632*35238bceSAndroid Build Coastguard Worker {
633*35238bceSAndroid Build Coastguard Worker switch (target)
634*35238bceSAndroid Build Coastguard Worker {
635*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_2D:
636*35238bceSAndroid Build Coastguard Worker return "${VTX_HDR}"
637*35238bceSAndroid Build Coastguard Worker "${VTX_IN} ${HIGHP} vec2 a_position;\n"
638*35238bceSAndroid Build Coastguard Worker "uniform ${HIGHP} float u_posScale;\n"
639*35238bceSAndroid Build Coastguard Worker "${VTX_OUT} ${MEDIUMP} vec2 v_texCoord;\n"
640*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
641*35238bceSAndroid Build Coastguard Worker "{\n"
642*35238bceSAndroid Build Coastguard Worker "\tv_texCoord = a_position;\n"
643*35238bceSAndroid Build Coastguard Worker "\tgl_Position = vec4(u_posScale * a_position, 0.0, 1.0);\n"
644*35238bceSAndroid Build Coastguard Worker "}";
645*35238bceSAndroid Build Coastguard Worker
646*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_3D:
647*35238bceSAndroid Build Coastguard Worker return "${VTX_HDR}"
648*35238bceSAndroid Build Coastguard Worker "${VTX_IN} ${HIGHP} vec3 a_position;\n"
649*35238bceSAndroid Build Coastguard Worker "uniform ${HIGHP} float u_posScale;\n"
650*35238bceSAndroid Build Coastguard Worker "${VTX_OUT} ${MEDIUMP} vec3 v_texCoord;\n"
651*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
652*35238bceSAndroid Build Coastguard Worker "{\n"
653*35238bceSAndroid Build Coastguard Worker "\tv_texCoord = a_position;\n"
654*35238bceSAndroid Build Coastguard Worker "\tgl_Position = vec4(u_posScale * a_position.xy, 0.0, 1.0);\n"
655*35238bceSAndroid Build Coastguard Worker "}";
656*35238bceSAndroid Build Coastguard Worker
657*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP:
658*35238bceSAndroid Build Coastguard Worker return "${VTX_HDR}"
659*35238bceSAndroid Build Coastguard Worker "${VTX_IN} ${HIGHP} vec4 a_position;\n"
660*35238bceSAndroid Build Coastguard Worker "uniform ${HIGHP} float u_posScale;\n"
661*35238bceSAndroid Build Coastguard Worker "${VTX_OUT} ${MEDIUMP} vec2 v_texCoord;\n"
662*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
663*35238bceSAndroid Build Coastguard Worker "{\n"
664*35238bceSAndroid Build Coastguard Worker "\tv_texCoord = a_position.zw;\n"
665*35238bceSAndroid Build Coastguard Worker "\tgl_Position = vec4(u_posScale * a_position.xy, 0.0, 1.0);\n"
666*35238bceSAndroid Build Coastguard Worker "}";
667*35238bceSAndroid Build Coastguard Worker
668*35238bceSAndroid Build Coastguard Worker default:
669*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
670*35238bceSAndroid Build Coastguard Worker return NULL;
671*35238bceSAndroid Build Coastguard Worker }
672*35238bceSAndroid Build Coastguard Worker }
673*35238bceSAndroid Build Coastguard Worker
selectFragmentShader(GLenum target)674*35238bceSAndroid Build Coastguard Worker const char *MultiTextureSamplerTest::selectFragmentShader(GLenum target)
675*35238bceSAndroid Build Coastguard Worker {
676*35238bceSAndroid Build Coastguard Worker switch (target)
677*35238bceSAndroid Build Coastguard Worker {
678*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_2D:
679*35238bceSAndroid Build Coastguard Worker return "${FRAG_HDR}"
680*35238bceSAndroid Build Coastguard Worker "uniform ${LOWP} sampler2D u_sampler1;\n"
681*35238bceSAndroid Build Coastguard Worker "uniform ${LOWP} sampler2D u_sampler2;\n"
682*35238bceSAndroid Build Coastguard Worker "${FRAG_IN} ${MEDIUMP} vec2 v_texCoord;\n"
683*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
684*35238bceSAndroid Build Coastguard Worker "{\n"
685*35238bceSAndroid Build Coastguard Worker "\t${FRAG_COLOR} = vec4(0.75, 0.75, 0.75, 1.0) * (texture(u_sampler1, v_texCoord) + texture(u_sampler2, "
686*35238bceSAndroid Build Coastguard Worker "v_texCoord));\n"
687*35238bceSAndroid Build Coastguard Worker "}";
688*35238bceSAndroid Build Coastguard Worker
689*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_3D:
690*35238bceSAndroid Build Coastguard Worker return "${FRAG_HDR}"
691*35238bceSAndroid Build Coastguard Worker "uniform ${LOWP} sampler3D u_sampler1;\n"
692*35238bceSAndroid Build Coastguard Worker "uniform ${LOWP} sampler3D u_sampler2;\n"
693*35238bceSAndroid Build Coastguard Worker "${FRAG_IN} ${MEDIUMP} vec3 v_texCoord;\n"
694*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
695*35238bceSAndroid Build Coastguard Worker "{\n"
696*35238bceSAndroid Build Coastguard Worker "\t${FRAG_COLOR} = vec4(0.75, 0.75, 0.75, 1.0) * (texture(u_sampler1, v_texCoord) + texture(u_sampler2, "
697*35238bceSAndroid Build Coastguard Worker "v_texCoord));\n"
698*35238bceSAndroid Build Coastguard Worker "}";
699*35238bceSAndroid Build Coastguard Worker
700*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP:
701*35238bceSAndroid Build Coastguard Worker return "${FRAG_HDR}"
702*35238bceSAndroid Build Coastguard Worker "uniform ${LOWP} samplerCube u_sampler1;\n"
703*35238bceSAndroid Build Coastguard Worker "uniform ${LOWP} samplerCube u_sampler2;\n"
704*35238bceSAndroid Build Coastguard Worker "${FRAG_IN} ${MEDIUMP} vec2 v_texCoord;\n"
705*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
706*35238bceSAndroid Build Coastguard Worker "{\n"
707*35238bceSAndroid Build Coastguard Worker "\t${FRAG_COLOR} = vec4(0.5, 0.5, 0.5, 1.0) * (texture(u_sampler1, vec3(cos(3.14 * v_texCoord.y) * "
708*35238bceSAndroid Build Coastguard Worker "sin(3.14 * v_texCoord.x), sin(3.14 * v_texCoord.y), cos(3.14 * v_texCoord.y) * cos(3.14 * "
709*35238bceSAndroid Build Coastguard Worker "v_texCoord.x)))"
710*35238bceSAndroid Build Coastguard Worker "+ texture(u_sampler2, vec3(cos(3.14 * v_texCoord.y) * sin(3.14 * v_texCoord.x), sin(3.14 * "
711*35238bceSAndroid Build Coastguard Worker "v_texCoord.y), cos(3.14 * v_texCoord.y) * cos(3.14 * v_texCoord.x))));\n"
712*35238bceSAndroid Build Coastguard Worker "}";
713*35238bceSAndroid Build Coastguard Worker
714*35238bceSAndroid Build Coastguard Worker default:
715*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
716*35238bceSAndroid Build Coastguard Worker return NULL;
717*35238bceSAndroid Build Coastguard Worker }
718*35238bceSAndroid Build Coastguard Worker }
719*35238bceSAndroid Build Coastguard Worker
init(void)720*35238bceSAndroid Build Coastguard Worker void MultiTextureSamplerTest::init(void)
721*35238bceSAndroid Build Coastguard Worker {
722*35238bceSAndroid Build Coastguard Worker const char *vertexShaderTemplate = selectVertexShader(m_target);
723*35238bceSAndroid Build Coastguard Worker const char *fragmentShaderTemplate = selectFragmentShader(m_target);
724*35238bceSAndroid Build Coastguard Worker
725*35238bceSAndroid Build Coastguard Worker std::map<std::string, std::string> params;
726*35238bceSAndroid Build Coastguard Worker
727*35238bceSAndroid Build Coastguard Worker if (glu::isGLSLVersionSupported(m_renderCtx.getType(), glu::GLSL_VERSION_300_ES))
728*35238bceSAndroid Build Coastguard Worker {
729*35238bceSAndroid Build Coastguard Worker params["VTX_HDR"] = "#version 300 es\n";
730*35238bceSAndroid Build Coastguard Worker params["FRAG_HDR"] = "#version 300 es\nlayout(location = 0) out mediump vec4 o_color;\n";
731*35238bceSAndroid Build Coastguard Worker params["VTX_IN"] = "in";
732*35238bceSAndroid Build Coastguard Worker params["VTX_OUT"] = "out";
733*35238bceSAndroid Build Coastguard Worker params["FRAG_IN"] = "in";
734*35238bceSAndroid Build Coastguard Worker params["FRAG_COLOR"] = "o_color";
735*35238bceSAndroid Build Coastguard Worker params["HIGHP"] = "highp";
736*35238bceSAndroid Build Coastguard Worker params["LOWP"] = "lowp";
737*35238bceSAndroid Build Coastguard Worker params["MEDIUMP"] = "mediump";
738*35238bceSAndroid Build Coastguard Worker }
739*35238bceSAndroid Build Coastguard Worker else if (glu::isGLSLVersionSupported(m_renderCtx.getType(), glu::GLSL_VERSION_330))
740*35238bceSAndroid Build Coastguard Worker {
741*35238bceSAndroid Build Coastguard Worker params["VTX_HDR"] = "#version 330\n";
742*35238bceSAndroid Build Coastguard Worker params["FRAG_HDR"] = "#version 330\nlayout(location = 0) out mediump vec4 o_color;\n";
743*35238bceSAndroid Build Coastguard Worker params["VTX_IN"] = "in";
744*35238bceSAndroid Build Coastguard Worker params["VTX_OUT"] = "out";
745*35238bceSAndroid Build Coastguard Worker params["FRAG_IN"] = "in";
746*35238bceSAndroid Build Coastguard Worker params["FRAG_COLOR"] = "o_color";
747*35238bceSAndroid Build Coastguard Worker params["HIGHP"] = "highp";
748*35238bceSAndroid Build Coastguard Worker params["LOWP"] = "lowp";
749*35238bceSAndroid Build Coastguard Worker params["MEDIUMP"] = "mediump";
750*35238bceSAndroid Build Coastguard Worker }
751*35238bceSAndroid Build Coastguard Worker else
752*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
753*35238bceSAndroid Build Coastguard Worker
754*35238bceSAndroid Build Coastguard Worker DE_ASSERT(!m_program);
755*35238bceSAndroid Build Coastguard Worker m_program = new glu::ShaderProgram(
756*35238bceSAndroid Build Coastguard Worker m_renderCtx, glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderTemplate).specialize(params),
757*35238bceSAndroid Build Coastguard Worker tcu::StringTemplate(fragmentShaderTemplate).specialize(params)));
758*35238bceSAndroid Build Coastguard Worker if (!m_program->isOk())
759*35238bceSAndroid Build Coastguard Worker {
760*35238bceSAndroid Build Coastguard Worker tcu::TestLog &log = m_testCtx.getLog();
761*35238bceSAndroid Build Coastguard Worker
762*35238bceSAndroid Build Coastguard Worker log << *m_program;
763*35238bceSAndroid Build Coastguard Worker TCU_FAIL("Failed to compile shaders");
764*35238bceSAndroid Build Coastguard Worker }
765*35238bceSAndroid Build Coastguard Worker }
766*35238bceSAndroid Build Coastguard Worker
deinit(void)767*35238bceSAndroid Build Coastguard Worker void MultiTextureSamplerTest::deinit(void)
768*35238bceSAndroid Build Coastguard Worker {
769*35238bceSAndroid Build Coastguard Worker delete m_program;
770*35238bceSAndroid Build Coastguard Worker m_program = NULL;
771*35238bceSAndroid Build Coastguard Worker }
772*35238bceSAndroid Build Coastguard Worker
~MultiTextureSamplerTest(void)773*35238bceSAndroid Build Coastguard Worker MultiTextureSamplerTest::~MultiTextureSamplerTest(void)
774*35238bceSAndroid Build Coastguard Worker {
775*35238bceSAndroid Build Coastguard Worker deinit();
776*35238bceSAndroid Build Coastguard Worker }
777*35238bceSAndroid Build Coastguard Worker
render(void)778*35238bceSAndroid Build Coastguard Worker void MultiTextureSamplerTest::render(void)
779*35238bceSAndroid Build Coastguard Worker {
780*35238bceSAndroid Build Coastguard Worker const glw::Functions &gl = m_renderCtx.getFunctions();
781*35238bceSAndroid Build Coastguard Worker
782*35238bceSAndroid Build Coastguard Worker GLuint samplerLoc1 = (GLuint)-1;
783*35238bceSAndroid Build Coastguard Worker GLuint samplerLoc2 = (GLuint)-1;
784*35238bceSAndroid Build Coastguard Worker GLuint scaleLoc = (GLuint)-1;
785*35238bceSAndroid Build Coastguard Worker
786*35238bceSAndroid Build Coastguard Worker gl.useProgram(m_program->getProgram());
787*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram(m_program->getProgram())");
788*35238bceSAndroid Build Coastguard Worker
789*35238bceSAndroid Build Coastguard Worker samplerLoc1 = glGetUniformLocation(m_program->getProgram(), "u_sampler1");
790*35238bceSAndroid Build Coastguard Worker TCU_CHECK(samplerLoc1 != (GLuint)-1);
791*35238bceSAndroid Build Coastguard Worker
792*35238bceSAndroid Build Coastguard Worker samplerLoc2 = glGetUniformLocation(m_program->getProgram(), "u_sampler2");
793*35238bceSAndroid Build Coastguard Worker TCU_CHECK(samplerLoc2 != (GLuint)-1);
794*35238bceSAndroid Build Coastguard Worker
795*35238bceSAndroid Build Coastguard Worker scaleLoc = glGetUniformLocation(m_program->getProgram(), "u_posScale");
796*35238bceSAndroid Build Coastguard Worker TCU_CHECK(scaleLoc != (GLuint)-1);
797*35238bceSAndroid Build Coastguard Worker
798*35238bceSAndroid Build Coastguard Worker gl.clearColor(0.5f, 0.5f, 0.5f, 1.0f);
799*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glClearColor(0.5f, 0.5f, 0.5f, 1.0f)");
800*35238bceSAndroid Build Coastguard Worker
801*35238bceSAndroid Build Coastguard Worker gl.clear(GL_COLOR_BUFFER_BIT);
802*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glClear(GL_COLOR_BUFFER_BIT)");
803*35238bceSAndroid Build Coastguard Worker
804*35238bceSAndroid Build Coastguard Worker gl.uniform1i(samplerLoc1, 0);
805*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i(samplerLoc1, 0)");
806*35238bceSAndroid Build Coastguard Worker
807*35238bceSAndroid Build Coastguard Worker gl.uniform1i(samplerLoc2, 1);
808*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i(samplerLoc2, 1)");
809*35238bceSAndroid Build Coastguard Worker
810*35238bceSAndroid Build Coastguard Worker gl.uniform1f(scaleLoc, 1.0f);
811*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1f(scaleLoc, 1.0f)");
812*35238bceSAndroid Build Coastguard Worker
813*35238bceSAndroid Build Coastguard Worker switch (m_target)
814*35238bceSAndroid Build Coastguard Worker {
815*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_2D:
816*35238bceSAndroid Build Coastguard Worker {
817*35238bceSAndroid Build Coastguard Worker glu::VertexArrayBinding vertexArrays[] = {glu::VertexArrayBinding(
818*35238bceSAndroid Build Coastguard Worker glu::BindingPoint("a_position"),
819*35238bceSAndroid Build Coastguard Worker glu::VertexArrayPointer(glu::VTX_COMP_FLOAT, glu::VTX_COMP_CONVERT_NONE, 2, 6, 0, s_positions))};
820*35238bceSAndroid Build Coastguard Worker
821*35238bceSAndroid Build Coastguard Worker glu::draw(m_renderCtx, m_program->getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays,
822*35238bceSAndroid Build Coastguard Worker glu::PrimitiveList(glu::PRIMITIVETYPE_TRIANGLES, 6));
823*35238bceSAndroid Build Coastguard Worker
824*35238bceSAndroid Build Coastguard Worker gl.uniform1f(scaleLoc, 0.25f);
825*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1f(scaleLoc, 0.25f)");
826*35238bceSAndroid Build Coastguard Worker
827*35238bceSAndroid Build Coastguard Worker glu::draw(m_renderCtx, m_program->getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays,
828*35238bceSAndroid Build Coastguard Worker glu::PrimitiveList(glu::PRIMITIVETYPE_TRIANGLES, 6));
829*35238bceSAndroid Build Coastguard Worker
830*35238bceSAndroid Build Coastguard Worker break;
831*35238bceSAndroid Build Coastguard Worker }
832*35238bceSAndroid Build Coastguard Worker
833*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_3D:
834*35238bceSAndroid Build Coastguard Worker {
835*35238bceSAndroid Build Coastguard Worker glu::VertexArrayBinding vertexArrays[] = {glu::VertexArrayBinding(
836*35238bceSAndroid Build Coastguard Worker glu::BindingPoint("a_position"),
837*35238bceSAndroid Build Coastguard Worker glu::VertexArrayPointer(glu::VTX_COMP_FLOAT, glu::VTX_COMP_CONVERT_NONE, 3, 6, 0, s_positions3D))};
838*35238bceSAndroid Build Coastguard Worker
839*35238bceSAndroid Build Coastguard Worker glu::draw(m_renderCtx, m_program->getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays,
840*35238bceSAndroid Build Coastguard Worker glu::PrimitiveList(glu::PRIMITIVETYPE_TRIANGLES, 6));
841*35238bceSAndroid Build Coastguard Worker
842*35238bceSAndroid Build Coastguard Worker gl.uniform1f(scaleLoc, 0.25f);
843*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1f(scaleLoc, 0.25f)");
844*35238bceSAndroid Build Coastguard Worker
845*35238bceSAndroid Build Coastguard Worker glu::draw(m_renderCtx, m_program->getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays,
846*35238bceSAndroid Build Coastguard Worker glu::PrimitiveList(glu::PRIMITIVETYPE_TRIANGLES, 6));
847*35238bceSAndroid Build Coastguard Worker
848*35238bceSAndroid Build Coastguard Worker break;
849*35238bceSAndroid Build Coastguard Worker }
850*35238bceSAndroid Build Coastguard Worker
851*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP:
852*35238bceSAndroid Build Coastguard Worker {
853*35238bceSAndroid Build Coastguard Worker glu::VertexArrayBinding vertexArrays[] = {glu::VertexArrayBinding(
854*35238bceSAndroid Build Coastguard Worker glu::BindingPoint("a_position"),
855*35238bceSAndroid Build Coastguard Worker glu::VertexArrayPointer(glu::VTX_COMP_FLOAT, glu::VTX_COMP_CONVERT_NONE, 4, 6, 0, s_positionsCube))};
856*35238bceSAndroid Build Coastguard Worker
857*35238bceSAndroid Build Coastguard Worker glu::draw(m_renderCtx, m_program->getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays,
858*35238bceSAndroid Build Coastguard Worker glu::PrimitiveList(glu::PRIMITIVETYPE_TRIANGLES, 6));
859*35238bceSAndroid Build Coastguard Worker
860*35238bceSAndroid Build Coastguard Worker gl.uniform1f(scaleLoc, 0.25f);
861*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1f(scaleLoc, 0.25f)");
862*35238bceSAndroid Build Coastguard Worker
863*35238bceSAndroid Build Coastguard Worker glu::draw(m_renderCtx, m_program->getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays,
864*35238bceSAndroid Build Coastguard Worker glu::PrimitiveList(glu::PRIMITIVETYPE_TRIANGLES, 6));
865*35238bceSAndroid Build Coastguard Worker
866*35238bceSAndroid Build Coastguard Worker break;
867*35238bceSAndroid Build Coastguard Worker }
868*35238bceSAndroid Build Coastguard Worker
869*35238bceSAndroid Build Coastguard Worker default:
870*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
871*35238bceSAndroid Build Coastguard Worker }
872*35238bceSAndroid Build Coastguard Worker }
873*35238bceSAndroid Build Coastguard Worker
createTexture2D(const glw::Functions & gl,int id)874*35238bceSAndroid Build Coastguard Worker GLuint MultiTextureSamplerTest::createTexture2D(const glw::Functions &gl, int id)
875*35238bceSAndroid Build Coastguard Worker {
876*35238bceSAndroid Build Coastguard Worker GLuint texture = (GLuint)-1;
877*35238bceSAndroid Build Coastguard Worker tcu::Texture2D refTexture(tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8),
878*35238bceSAndroid Build Coastguard Worker TEXTURE2D_WIDTH, TEXTURE2D_HEIGHT);
879*35238bceSAndroid Build Coastguard Worker
880*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(0);
881*35238bceSAndroid Build Coastguard Worker
882*35238bceSAndroid Build Coastguard Worker gl.genTextures(1, &texture);
883*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenTextures(1, &texture)");
884*35238bceSAndroid Build Coastguard Worker
885*35238bceSAndroid Build Coastguard Worker switch (id)
886*35238bceSAndroid Build Coastguard Worker {
887*35238bceSAndroid Build Coastguard Worker case 0:
888*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevel(0), tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f),
889*35238bceSAndroid Build Coastguard Worker tcu::Vec4(1.0f, 1.0f, 0.5f, 0.5f));
890*35238bceSAndroid Build Coastguard Worker break;
891*35238bceSAndroid Build Coastguard Worker
892*35238bceSAndroid Build Coastguard Worker case 1:
893*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevel(0), tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f),
894*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.5f, 0.5f, 1.0f, 1.0f));
895*35238bceSAndroid Build Coastguard Worker break;
896*35238bceSAndroid Build Coastguard Worker
897*35238bceSAndroid Build Coastguard Worker default:
898*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
899*35238bceSAndroid Build Coastguard Worker }
900*35238bceSAndroid Build Coastguard Worker
901*35238bceSAndroid Build Coastguard Worker gl.bindTexture(GL_TEXTURE_2D, texture);
902*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(GL_TEXTURE_2D, texture)");
903*35238bceSAndroid Build Coastguard Worker
904*35238bceSAndroid Build Coastguard Worker gl.texImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, refTexture.getWidth(), refTexture.getHeight(), 0, GL_RGBA,
905*35238bceSAndroid Build Coastguard Worker GL_UNSIGNED_BYTE, refTexture.getLevel(0).getDataPtr());
906*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(),
907*35238bceSAndroid Build Coastguard Worker "glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, refTexture.getWidth(), refTexture.getHeight(), 0, "
908*35238bceSAndroid Build Coastguard Worker "GL_RGBA, GL_UNSIGNED_BYTE, refTexture.getLevel(0).getDataPtr())");
909*35238bceSAndroid Build Coastguard Worker
910*35238bceSAndroid Build Coastguard Worker gl.generateMipmap(GL_TEXTURE_2D);
911*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenerateMipmap(GL_TEXTURE_2D)");
912*35238bceSAndroid Build Coastguard Worker
913*35238bceSAndroid Build Coastguard Worker gl.bindTexture(GL_TEXTURE_2D, 0);
914*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(GL_TEXTURE_2D, 0)");
915*35238bceSAndroid Build Coastguard Worker
916*35238bceSAndroid Build Coastguard Worker return texture;
917*35238bceSAndroid Build Coastguard Worker }
918*35238bceSAndroid Build Coastguard Worker
createTexture3D(const glw::Functions & gl,int id)919*35238bceSAndroid Build Coastguard Worker GLuint MultiTextureSamplerTest::createTexture3D(const glw::Functions &gl, int id)
920*35238bceSAndroid Build Coastguard Worker {
921*35238bceSAndroid Build Coastguard Worker GLuint texture = (GLuint)-1;
922*35238bceSAndroid Build Coastguard Worker tcu::Texture3D refTexture(tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8),
923*35238bceSAndroid Build Coastguard Worker TEXTURE3D_WIDTH, TEXTURE3D_HEIGHT, TEXTURE3D_DEPTH);
924*35238bceSAndroid Build Coastguard Worker
925*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(0);
926*35238bceSAndroid Build Coastguard Worker
927*35238bceSAndroid Build Coastguard Worker gl.genTextures(1, &texture);
928*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenTextures(1, &texture)");
929*35238bceSAndroid Build Coastguard Worker
930*35238bceSAndroid Build Coastguard Worker switch (id)
931*35238bceSAndroid Build Coastguard Worker {
932*35238bceSAndroid Build Coastguard Worker case 0:
933*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevel(0), tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f),
934*35238bceSAndroid Build Coastguard Worker tcu::Vec4(1.0f, 1.0f, 0.5f, 0.5f));
935*35238bceSAndroid Build Coastguard Worker break;
936*35238bceSAndroid Build Coastguard Worker
937*35238bceSAndroid Build Coastguard Worker case 1:
938*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevel(0), tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f),
939*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.5f, 0.5f, 1.0f, 1.0f));
940*35238bceSAndroid Build Coastguard Worker break;
941*35238bceSAndroid Build Coastguard Worker
942*35238bceSAndroid Build Coastguard Worker default:
943*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
944*35238bceSAndroid Build Coastguard Worker }
945*35238bceSAndroid Build Coastguard Worker
946*35238bceSAndroid Build Coastguard Worker gl.bindTexture(GL_TEXTURE_3D, texture);
947*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(GL_TEXTURE_3D, texture)");
948*35238bceSAndroid Build Coastguard Worker
949*35238bceSAndroid Build Coastguard Worker gl.texImage3D(GL_TEXTURE_3D, 0, GL_RGBA8, refTexture.getWidth(), refTexture.getHeight(), refTexture.getDepth(), 0,
950*35238bceSAndroid Build Coastguard Worker GL_RGBA, GL_UNSIGNED_BYTE, refTexture.getLevel(0).getDataPtr());
951*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(),
952*35238bceSAndroid Build Coastguard Worker "glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA8, refTexture.getWidth(), refTexture.getHeight(), "
953*35238bceSAndroid Build Coastguard Worker "refTexture.getDepth(), 0, GL_RGBA, GL_UNSIGNED_BYTE, refTexture.getLevel(0).getDataPtr())");
954*35238bceSAndroid Build Coastguard Worker
955*35238bceSAndroid Build Coastguard Worker gl.generateMipmap(GL_TEXTURE_3D);
956*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenerateMipmap(GL_TEXTURE_3D)");
957*35238bceSAndroid Build Coastguard Worker
958*35238bceSAndroid Build Coastguard Worker gl.bindTexture(GL_TEXTURE_3D, 0);
959*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(GL_TEXTURE_3D, 0)");
960*35238bceSAndroid Build Coastguard Worker
961*35238bceSAndroid Build Coastguard Worker return texture;
962*35238bceSAndroid Build Coastguard Worker }
963*35238bceSAndroid Build Coastguard Worker
createTextureCube(const glw::Functions & gl,int id)964*35238bceSAndroid Build Coastguard Worker GLuint MultiTextureSamplerTest::createTextureCube(const glw::Functions &gl, int id)
965*35238bceSAndroid Build Coastguard Worker {
966*35238bceSAndroid Build Coastguard Worker GLuint texture = (GLuint)-1;
967*35238bceSAndroid Build Coastguard Worker tcu::TextureCube refTexture(tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8),
968*35238bceSAndroid Build Coastguard Worker CUBEMAP_SIZE);
969*35238bceSAndroid Build Coastguard Worker
970*35238bceSAndroid Build Coastguard Worker gl.genTextures(1, &texture);
971*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenTextures(1, &texture)");
972*35238bceSAndroid Build Coastguard Worker
973*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(tcu::CUBEFACE_POSITIVE_X, 0);
974*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(tcu::CUBEFACE_POSITIVE_Y, 0);
975*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(tcu::CUBEFACE_POSITIVE_Z, 0);
976*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(tcu::CUBEFACE_NEGATIVE_X, 0);
977*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(tcu::CUBEFACE_NEGATIVE_Y, 0);
978*35238bceSAndroid Build Coastguard Worker refTexture.allocLevel(tcu::CUBEFACE_NEGATIVE_Z, 0);
979*35238bceSAndroid Build Coastguard Worker
980*35238bceSAndroid Build Coastguard Worker switch (id)
981*35238bceSAndroid Build Coastguard Worker {
982*35238bceSAndroid Build Coastguard Worker case 0:
983*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_POSITIVE_X),
984*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f), tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f));
985*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_POSITIVE_Y),
986*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f), tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f));
987*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_POSITIVE_Z),
988*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f), tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f));
989*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_NEGATIVE_X),
990*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f), tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f));
991*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_NEGATIVE_Y),
992*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f), tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f));
993*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_NEGATIVE_Z),
994*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f), tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f));
995*35238bceSAndroid Build Coastguard Worker break;
996*35238bceSAndroid Build Coastguard Worker
997*35238bceSAndroid Build Coastguard Worker case 1:
998*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_POSITIVE_X),
999*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
1000*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_POSITIVE_Y),
1001*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
1002*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_POSITIVE_Z),
1003*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
1004*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_NEGATIVE_X),
1005*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
1006*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_NEGATIVE_Y),
1007*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
1008*35238bceSAndroid Build Coastguard Worker tcu::fillWithComponentGradients(refTexture.getLevelFace(0, tcu::CUBEFACE_NEGATIVE_Z),
1009*35238bceSAndroid Build Coastguard Worker tcu::Vec4(0.5f, 0.5f, 0.5f, 0.5f), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
1010*35238bceSAndroid Build Coastguard Worker break;
1011*35238bceSAndroid Build Coastguard Worker
1012*35238bceSAndroid Build Coastguard Worker default:
1013*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
1014*35238bceSAndroid Build Coastguard Worker }
1015*35238bceSAndroid Build Coastguard Worker
1016*35238bceSAndroid Build Coastguard Worker gl.bindTexture(GL_TEXTURE_CUBE_MAP, texture);
1017*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(GL_TEXTURE_CUBE_MAP, texture)");
1018*35238bceSAndroid Build Coastguard Worker
1019*35238bceSAndroid Build Coastguard Worker for (int face = 0; face < tcu::CUBEFACE_LAST; face++)
1020*35238bceSAndroid Build Coastguard Worker {
1021*35238bceSAndroid Build Coastguard Worker const uint32_t target = glu::getGLCubeFace((tcu::CubeFace)face);
1022*35238bceSAndroid Build Coastguard Worker gl.texImage2D(target, 0, GL_RGBA8, refTexture.getSize(), refTexture.getSize(), 0, GL_RGBA, GL_UNSIGNED_BYTE,
1023*35238bceSAndroid Build Coastguard Worker refTexture.getLevelFace(0, (tcu::CubeFace)face).getDataPtr());
1024*35238bceSAndroid Build Coastguard Worker }
1025*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage2D(GL_TEXTURE_CUBE_MAP_...) failed");
1026*35238bceSAndroid Build Coastguard Worker
1027*35238bceSAndroid Build Coastguard Worker gl.generateMipmap(GL_TEXTURE_CUBE_MAP);
1028*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenerateMipmap(GL_TEXTURE_CUBE_MAP)");
1029*35238bceSAndroid Build Coastguard Worker gl.bindTexture(GL_TEXTURE_CUBE_MAP, 0);
1030*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(GL_TEXTURE_CUBE_MAP, 0)");
1031*35238bceSAndroid Build Coastguard Worker
1032*35238bceSAndroid Build Coastguard Worker return texture;
1033*35238bceSAndroid Build Coastguard Worker }
1034*35238bceSAndroid Build Coastguard Worker
createTexture(const glw::Functions & gl,GLenum target,int id)1035*35238bceSAndroid Build Coastguard Worker GLuint MultiTextureSamplerTest::createTexture(const glw::Functions &gl, GLenum target, int id)
1036*35238bceSAndroid Build Coastguard Worker {
1037*35238bceSAndroid Build Coastguard Worker switch (target)
1038*35238bceSAndroid Build Coastguard Worker {
1039*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_2D:
1040*35238bceSAndroid Build Coastguard Worker return createTexture2D(gl, id);
1041*35238bceSAndroid Build Coastguard Worker
1042*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_3D:
1043*35238bceSAndroid Build Coastguard Worker return createTexture3D(gl, id);
1044*35238bceSAndroid Build Coastguard Worker
1045*35238bceSAndroid Build Coastguard Worker case GL_TEXTURE_CUBE_MAP:
1046*35238bceSAndroid Build Coastguard Worker return createTextureCube(gl, id);
1047*35238bceSAndroid Build Coastguard Worker
1048*35238bceSAndroid Build Coastguard Worker default:
1049*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
1050*35238bceSAndroid Build Coastguard Worker return (GLuint)-1;
1051*35238bceSAndroid Build Coastguard Worker }
1052*35238bceSAndroid Build Coastguard Worker }
1053*35238bceSAndroid Build Coastguard Worker
renderReferences(tcu::Surface & textureRef,tcu::Surface & samplerRef,int x,int y)1054*35238bceSAndroid Build Coastguard Worker void MultiTextureSamplerTest::renderReferences(tcu::Surface &textureRef, tcu::Surface &samplerRef, int x, int y)
1055*35238bceSAndroid Build Coastguard Worker {
1056*35238bceSAndroid Build Coastguard Worker const glw::Functions &gl = m_renderCtx.getFunctions();
1057*35238bceSAndroid Build Coastguard Worker GLuint texture1 = createTexture(gl, m_target, 0);
1058*35238bceSAndroid Build Coastguard Worker GLuint texture2 = createTexture(gl, m_target, 1);
1059*35238bceSAndroid Build Coastguard Worker
1060*35238bceSAndroid Build Coastguard Worker gl.viewport(x, y, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1061*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport(x, y, VIEWPORT_WIDTH, VIEWPORT_HEIGHT)");
1062*35238bceSAndroid Build Coastguard Worker
1063*35238bceSAndroid Build Coastguard Worker // Generate texture rendering reference
1064*35238bceSAndroid Build Coastguard Worker gl.activeTexture(GL_TEXTURE0);
1065*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glActiveTexture(GL_TEXTURE0)");
1066*35238bceSAndroid Build Coastguard Worker gl.bindTexture(m_target, texture1);
1067*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(m_target, texture1)");
1068*35238bceSAndroid Build Coastguard Worker setTextureState(gl, m_target, m_textureState1);
1069*35238bceSAndroid Build Coastguard Worker
1070*35238bceSAndroid Build Coastguard Worker gl.activeTexture(GL_TEXTURE1);
1071*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glActiveTexture(GL_TEXTURE1)");
1072*35238bceSAndroid Build Coastguard Worker gl.bindTexture(m_target, texture2);
1073*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(m_target, texture2)");
1074*35238bceSAndroid Build Coastguard Worker setTextureState(gl, m_target, m_textureState2);
1075*35238bceSAndroid Build Coastguard Worker
1076*35238bceSAndroid Build Coastguard Worker render();
1077*35238bceSAndroid Build Coastguard Worker glu::readPixels(m_renderCtx, x, y, textureRef.getAccess());
1078*35238bceSAndroid Build Coastguard Worker
1079*35238bceSAndroid Build Coastguard Worker // Generate sampler rendering reference
1080*35238bceSAndroid Build Coastguard Worker gl.activeTexture(GL_TEXTURE0);
1081*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glActiveTexture(GL_TEXTURE0)");
1082*35238bceSAndroid Build Coastguard Worker gl.bindTexture(m_target, texture1);
1083*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(m_target, texture1)");
1084*35238bceSAndroid Build Coastguard Worker setTextureState(gl, m_target, m_samplerState);
1085*35238bceSAndroid Build Coastguard Worker
1086*35238bceSAndroid Build Coastguard Worker gl.activeTexture(GL_TEXTURE1);
1087*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glActiveTexture(GL_TEXTURE1)");
1088*35238bceSAndroid Build Coastguard Worker gl.bindTexture(m_target, texture2);
1089*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(m_target, texture2)");
1090*35238bceSAndroid Build Coastguard Worker setTextureState(gl, m_target, m_samplerState);
1091*35238bceSAndroid Build Coastguard Worker
1092*35238bceSAndroid Build Coastguard Worker render();
1093*35238bceSAndroid Build Coastguard Worker glu::readPixels(m_renderCtx, x, y, samplerRef.getAccess());
1094*35238bceSAndroid Build Coastguard Worker }
1095*35238bceSAndroid Build Coastguard Worker
renderResults(tcu::Surface & textureResult,tcu::Surface & samplerResult,int x,int y)1096*35238bceSAndroid Build Coastguard Worker void MultiTextureSamplerTest::renderResults(tcu::Surface &textureResult, tcu::Surface &samplerResult, int x, int y)
1097*35238bceSAndroid Build Coastguard Worker {
1098*35238bceSAndroid Build Coastguard Worker const glw::Functions &gl = m_renderCtx.getFunctions();
1099*35238bceSAndroid Build Coastguard Worker GLuint texture1 = createTexture(gl, m_target, 0);
1100*35238bceSAndroid Build Coastguard Worker GLuint texture2 = createTexture(gl, m_target, 1);
1101*35238bceSAndroid Build Coastguard Worker GLuint sampler = -1;
1102*35238bceSAndroid Build Coastguard Worker
1103*35238bceSAndroid Build Coastguard Worker gl.viewport(x, y, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1104*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport(x, y, VIEWPORT_WIDTH, VIEWPORT_HEIGHT)");
1105*35238bceSAndroid Build Coastguard Worker
1106*35238bceSAndroid Build Coastguard Worker gl.genSamplers(1, &sampler);
1107*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glGenSamplers(1, &sampler)");
1108*35238bceSAndroid Build Coastguard Worker TCU_CHECK(sampler != (GLuint)-1);
1109*35238bceSAndroid Build Coastguard Worker
1110*35238bceSAndroid Build Coastguard Worker gl.bindSampler(0, sampler);
1111*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindSampler(0, sampler)");
1112*35238bceSAndroid Build Coastguard Worker gl.bindSampler(1, sampler);
1113*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindSampler(1, sampler)");
1114*35238bceSAndroid Build Coastguard Worker
1115*35238bceSAndroid Build Coastguard Worker // First set sampler state
1116*35238bceSAndroid Build Coastguard Worker setSamplerState(gl, m_samplerState, sampler);
1117*35238bceSAndroid Build Coastguard Worker
1118*35238bceSAndroid Build Coastguard Worker // Set texture state
1119*35238bceSAndroid Build Coastguard Worker gl.bindTexture(m_target, texture1);
1120*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(m_target, texture1)");
1121*35238bceSAndroid Build Coastguard Worker setTextureState(gl, m_target, m_textureState1);
1122*35238bceSAndroid Build Coastguard Worker
1123*35238bceSAndroid Build Coastguard Worker gl.bindTexture(m_target, texture2);
1124*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(m_target, texture2)");
1125*35238bceSAndroid Build Coastguard Worker setTextureState(gl, m_target, m_textureState2);
1126*35238bceSAndroid Build Coastguard Worker
1127*35238bceSAndroid Build Coastguard Worker gl.activeTexture(GL_TEXTURE0);
1128*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glActiveTexture(GL_TEXTURE0)");
1129*35238bceSAndroid Build Coastguard Worker gl.bindTexture(m_target, texture1);
1130*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(m_target, texture1)");
1131*35238bceSAndroid Build Coastguard Worker
1132*35238bceSAndroid Build Coastguard Worker gl.activeTexture(GL_TEXTURE1);
1133*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glActiveTexture(GL_TEXTURE1)");
1134*35238bceSAndroid Build Coastguard Worker gl.bindTexture(m_target, texture2);
1135*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(m_target, texture2)");
1136*35238bceSAndroid Build Coastguard Worker
1137*35238bceSAndroid Build Coastguard Worker // Render using sampler
1138*35238bceSAndroid Build Coastguard Worker render();
1139*35238bceSAndroid Build Coastguard Worker glu::readPixels(m_renderCtx, x, y, samplerResult.getAccess());
1140*35238bceSAndroid Build Coastguard Worker
1141*35238bceSAndroid Build Coastguard Worker gl.bindSampler(0, 0);
1142*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindSampler(0, 0)");
1143*35238bceSAndroid Build Coastguard Worker gl.bindSampler(1, 0);
1144*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindSampler(1, 0)");
1145*35238bceSAndroid Build Coastguard Worker
1146*35238bceSAndroid Build Coastguard Worker render();
1147*35238bceSAndroid Build Coastguard Worker glu::readPixels(m_renderCtx, x, y, textureResult.getAccess());
1148*35238bceSAndroid Build Coastguard Worker
1149*35238bceSAndroid Build Coastguard Worker gl.activeTexture(GL_TEXTURE0);
1150*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glActiveTexture(GL_TEXTURE0)");
1151*35238bceSAndroid Build Coastguard Worker gl.bindTexture(m_target, 0);
1152*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(m_target, 0)");
1153*35238bceSAndroid Build Coastguard Worker
1154*35238bceSAndroid Build Coastguard Worker gl.activeTexture(GL_TEXTURE1);
1155*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glActiveTexture(GL_TEXTURE1)");
1156*35238bceSAndroid Build Coastguard Worker gl.bindTexture(m_target, 0);
1157*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture(m_target, 0)");
1158*35238bceSAndroid Build Coastguard Worker
1159*35238bceSAndroid Build Coastguard Worker gl.deleteSamplers(1, &sampler);
1160*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glDeleteSamplers(1, &sampler)");
1161*35238bceSAndroid Build Coastguard Worker gl.deleteTextures(1, &texture1);
1162*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glDeleteTextures(1, &texture1)");
1163*35238bceSAndroid Build Coastguard Worker gl.deleteTextures(1, &texture2);
1164*35238bceSAndroid Build Coastguard Worker GLU_EXPECT_NO_ERROR(gl.getError(), "glDeleteTextures(1, &texture2)");
1165*35238bceSAndroid Build Coastguard Worker }
1166*35238bceSAndroid Build Coastguard Worker
iterate(void)1167*35238bceSAndroid Build Coastguard Worker tcu::TestCase::IterateResult MultiTextureSamplerTest::iterate(void)
1168*35238bceSAndroid Build Coastguard Worker {
1169*35238bceSAndroid Build Coastguard Worker tcu::TestLog &log = m_testCtx.getLog();
1170*35238bceSAndroid Build Coastguard Worker
1171*35238bceSAndroid Build Coastguard Worker tcu::Surface textureRef(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1172*35238bceSAndroid Build Coastguard Worker tcu::Surface samplerRef(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1173*35238bceSAndroid Build Coastguard Worker
1174*35238bceSAndroid Build Coastguard Worker tcu::Surface textureResult(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1175*35238bceSAndroid Build Coastguard Worker tcu::Surface samplerResult(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1176*35238bceSAndroid Build Coastguard Worker
1177*35238bceSAndroid Build Coastguard Worker int x = m_random.getInt(0, m_renderCtx.getRenderTarget().getWidth() - VIEWPORT_WIDTH);
1178*35238bceSAndroid Build Coastguard Worker int y = m_random.getInt(0, m_renderCtx.getRenderTarget().getHeight() - VIEWPORT_HEIGHT);
1179*35238bceSAndroid Build Coastguard Worker
1180*35238bceSAndroid Build Coastguard Worker renderReferences(textureRef, samplerRef, x, y);
1181*35238bceSAndroid Build Coastguard Worker renderResults(textureResult, samplerResult, x, y);
1182*35238bceSAndroid Build Coastguard Worker
1183*35238bceSAndroid Build Coastguard Worker bool isOk = pixelThresholdCompare(log, "Sampler render result", "Result from rendering with sampler", samplerRef,
1184*35238bceSAndroid Build Coastguard Worker samplerResult, tcu::RGBA(0, 0, 0, 0), tcu::COMPARE_LOG_RESULT);
1185*35238bceSAndroid Build Coastguard Worker
1186*35238bceSAndroid Build Coastguard Worker if (!pixelThresholdCompare(log, "Texture render result", "Result from rendering with texture state", textureRef,
1187*35238bceSAndroid Build Coastguard Worker textureResult, tcu::RGBA(0, 0, 0, 0), tcu::COMPARE_LOG_RESULT))
1188*35238bceSAndroid Build Coastguard Worker isOk = false;
1189*35238bceSAndroid Build Coastguard Worker
1190*35238bceSAndroid Build Coastguard Worker if (!isOk)
1191*35238bceSAndroid Build Coastguard Worker {
1192*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
1193*35238bceSAndroid Build Coastguard Worker return STOP;
1194*35238bceSAndroid Build Coastguard Worker }
1195*35238bceSAndroid Build Coastguard Worker
1196*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
1197*35238bceSAndroid Build Coastguard Worker return STOP;
1198*35238bceSAndroid Build Coastguard Worker }
1199*35238bceSAndroid Build Coastguard Worker
1200*35238bceSAndroid Build Coastguard Worker } // namespace gls
1201*35238bceSAndroid Build Coastguard Worker } // namespace deqp
1202