1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 3.1 Module
3*35238bceSAndroid Build Coastguard Worker * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker *
5*35238bceSAndroid Build Coastguard Worker * Copyright 2016 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 Negative Shader Function Tests
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es31fNegativeShaderFunctionTests.hpp"
25*35238bceSAndroid Build Coastguard Worker
26*35238bceSAndroid Build Coastguard Worker #include "gluShaderProgram.hpp"
27*35238bceSAndroid Build Coastguard Worker
28*35238bceSAndroid Build Coastguard Worker namespace deqp
29*35238bceSAndroid Build Coastguard Worker {
30*35238bceSAndroid Build Coastguard Worker namespace gles31
31*35238bceSAndroid Build Coastguard Worker {
32*35238bceSAndroid Build Coastguard Worker namespace Functional
33*35238bceSAndroid Build Coastguard Worker {
34*35238bceSAndroid Build Coastguard Worker namespace NegativeTestShared
35*35238bceSAndroid Build Coastguard Worker {
36*35238bceSAndroid Build Coastguard Worker namespace
37*35238bceSAndroid Build Coastguard Worker {
38*35238bceSAndroid Build Coastguard Worker
39*35238bceSAndroid Build Coastguard Worker enum ShaderFunction
40*35238bceSAndroid Build Coastguard Worker {
41*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_BITFIELD_REVERSE = 0,
42*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_BIT_COUNT,
43*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_FIND_MSB,
44*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_FIND_LSB,
45*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_UADD_CARRY,
46*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_USUB_BORROW,
47*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_UMUL_EXTENDED,
48*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_IMUL_EXTENDED,
49*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_FREXP,
50*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_LDEXP,
51*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_PACK_UNORM_4X8,
52*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_PACK_SNORM_4X8,
53*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_UNPACK_SNORM_4X8,
54*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_UNPACK_UNORM_4X8,
55*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_EMIT_VERTEX,
56*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_END_PRIMITIVE,
57*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_ATOMIC_ADD,
58*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_ATOMIC_MIN,
59*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_ATOMIC_MAX,
60*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_ATOMIC_AND,
61*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_ATOMIC_OR,
62*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_ATOMIC_XOR,
63*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_ATOMIC_EXCHANGE,
64*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_ATOMIC_COMP_SWAP,
65*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_CENTROID,
66*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_SAMPLE,
67*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_OFFSET,
68*35238bceSAndroid Build Coastguard Worker
69*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_LAST
70*35238bceSAndroid Build Coastguard Worker };
71*35238bceSAndroid Build Coastguard Worker
72*35238bceSAndroid Build Coastguard Worker enum FunctionTextureModes
73*35238bceSAndroid Build Coastguard Worker {
74*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_MODE_NO_BIAS_NO_COMPARE = 0,
75*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_MODE_BIAS_OR_COMPARE,
76*35238bceSAndroid Build Coastguard Worker
77*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_MODE_LAST
78*35238bceSAndroid Build Coastguard Worker };
79*35238bceSAndroid Build Coastguard Worker
80*35238bceSAndroid Build Coastguard Worker enum FunctionTextureGatherOffsetModes
81*35238bceSAndroid Build Coastguard Worker {
82*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP = 0,
83*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
84*35238bceSAndroid Build Coastguard Worker
85*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_LAST
86*35238bceSAndroid Build Coastguard Worker };
87*35238bceSAndroid Build Coastguard Worker
88*35238bceSAndroid Build Coastguard Worker struct TextureGatherOffsetsTestSpec
89*35238bceSAndroid Build Coastguard Worker {
90*35238bceSAndroid Build Coastguard Worker FunctionTextureGatherOffsetModes mode;
91*35238bceSAndroid Build Coastguard Worker glu::DataType samplerDataType;
92*35238bceSAndroid Build Coastguard Worker glu::DataType pDataType;
93*35238bceSAndroid Build Coastguard Worker glu::DataType offsetsDataType;
94*35238bceSAndroid Build Coastguard Worker glu::DataType fourthArgument;
95*35238bceSAndroid Build Coastguard Worker bool offsetIsConst;
96*35238bceSAndroid Build Coastguard Worker int offsetArraySize;
97*35238bceSAndroid Build Coastguard Worker };
98*35238bceSAndroid Build Coastguard Worker
99*35238bceSAndroid Build Coastguard Worker static const glu::DataType s_floatTypes[] = {glu::TYPE_FLOAT, glu::TYPE_FLOAT_VEC2, glu::TYPE_FLOAT_VEC3,
100*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4};
101*35238bceSAndroid Build Coastguard Worker
102*35238bceSAndroid Build Coastguard Worker static const glu::DataType s_intTypes[] = {glu::TYPE_INT, glu::TYPE_INT_VEC2, glu::TYPE_INT_VEC3, glu::TYPE_INT_VEC4};
103*35238bceSAndroid Build Coastguard Worker
104*35238bceSAndroid Build Coastguard Worker static const glu::DataType s_uintTypes[] = {glu::TYPE_UINT, glu::TYPE_UINT_VEC2, glu::TYPE_UINT_VEC3,
105*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_VEC4};
106*35238bceSAndroid Build Coastguard Worker
107*35238bceSAndroid Build Coastguard Worker static const glu::DataType s_nonScalarIntTypes[] = {glu::TYPE_FLOAT, glu::TYPE_FLOAT_VEC2, glu::TYPE_FLOAT_VEC3,
108*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_INT_VEC2, glu::TYPE_INT_VEC3,
109*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC4, glu::TYPE_UINT, glu::TYPE_UINT_VEC2,
110*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_VEC3, glu::TYPE_UINT_VEC4};
111*35238bceSAndroid Build Coastguard Worker
112*35238bceSAndroid Build Coastguard Worker static const glu::ShaderType s_shaders[] = {glu::SHADERTYPE_VERTEX,
113*35238bceSAndroid Build Coastguard Worker glu::SHADERTYPE_FRAGMENT,
114*35238bceSAndroid Build Coastguard Worker glu::SHADERTYPE_GEOMETRY,
115*35238bceSAndroid Build Coastguard Worker glu::SHADERTYPE_TESSELLATION_CONTROL,
116*35238bceSAndroid Build Coastguard Worker glu::SHADERTYPE_TESSELLATION_EVALUATION,
117*35238bceSAndroid Build Coastguard Worker glu::SHADERTYPE_COMPUTE};
118*35238bceSAndroid Build Coastguard Worker
119*35238bceSAndroid Build Coastguard Worker static const glu::DataType s_samplerTypes[] = {
120*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D,
121*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_2D,
122*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_2D,
123*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_3D,
124*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_3D,
125*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_3D,
126*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE,
127*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_CUBE,
128*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_CUBE,
129*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY,
130*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_2D_ARRAY,
131*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_2D_ARRAY,
132*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE_SHADOW,
133*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_SHADOW,
134*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY_SHADOW,
135*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE_ARRAY,
136*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
137*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
138*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW,
139*35238bceSAndroid Build Coastguard Worker
140*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_MULTISAMPLE,
141*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE,
142*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE,
143*35238bceSAndroid Build Coastguard Worker
144*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_BUFFER,
145*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_BUFFER,
146*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_BUFFER,
147*35238bceSAndroid Build Coastguard Worker
148*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY,
149*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY,
150*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY,
151*35238bceSAndroid Build Coastguard Worker };
152*35238bceSAndroid Build Coastguard Worker
verifyShader(NegativeTestContext & ctx,glu::ShaderType shaderType,std::string shaderSource)153*35238bceSAndroid Build Coastguard Worker void verifyShader(NegativeTestContext &ctx, glu::ShaderType shaderType, std::string shaderSource)
154*35238bceSAndroid Build Coastguard Worker {
155*35238bceSAndroid Build Coastguard Worker tcu::TestLog &log = ctx.getLog();
156*35238bceSAndroid Build Coastguard Worker const char *source = shaderSource.c_str();
157*35238bceSAndroid Build Coastguard Worker const int length = (int)shaderSource.size();
158*35238bceSAndroid Build Coastguard Worker glu::Shader shader(ctx.getRenderContext(), shaderType);
159*35238bceSAndroid Build Coastguard Worker
160*35238bceSAndroid Build Coastguard Worker shader.setSources(1, &source, &length);
161*35238bceSAndroid Build Coastguard Worker shader.compile();
162*35238bceSAndroid Build Coastguard Worker
163*35238bceSAndroid Build Coastguard Worker log << shader;
164*35238bceSAndroid Build Coastguard Worker if (shader.getCompileStatus())
165*35238bceSAndroid Build Coastguard Worker {
166*35238bceSAndroid Build Coastguard Worker log << tcu::TestLog::Message << "Expected shader to fail, but compilation passed." << tcu::TestLog::EndMessage;
167*35238bceSAndroid Build Coastguard Worker ctx.fail("Shader was not expected to compile.\n");
168*35238bceSAndroid Build Coastguard Worker }
169*35238bceSAndroid Build Coastguard Worker }
170*35238bceSAndroid Build Coastguard Worker
declareAndInitializeShaderVariable(glu::DataType dataType,std::string varName)171*35238bceSAndroid Build Coastguard Worker std::string declareAndInitializeShaderVariable(glu::DataType dataType, std::string varName)
172*35238bceSAndroid Build Coastguard Worker {
173*35238bceSAndroid Build Coastguard Worker std::ostringstream variable;
174*35238bceSAndroid Build Coastguard Worker variable << getDataTypeName(dataType) << " " << varName << " = " << getDataTypeName(dataType);
175*35238bceSAndroid Build Coastguard Worker switch (dataType)
176*35238bceSAndroid Build Coastguard Worker {
177*35238bceSAndroid Build Coastguard Worker case glu::TYPE_FLOAT:
178*35238bceSAndroid Build Coastguard Worker variable << "(1.0);\n";
179*35238bceSAndroid Build Coastguard Worker break;
180*35238bceSAndroid Build Coastguard Worker case glu::TYPE_FLOAT_VEC2:
181*35238bceSAndroid Build Coastguard Worker variable << "(1.0, 1.0);\n";
182*35238bceSAndroid Build Coastguard Worker break;
183*35238bceSAndroid Build Coastguard Worker case glu::TYPE_FLOAT_VEC3:
184*35238bceSAndroid Build Coastguard Worker variable << "(1.0, 1.0, 1.0);\n";
185*35238bceSAndroid Build Coastguard Worker break;
186*35238bceSAndroid Build Coastguard Worker case glu::TYPE_FLOAT_VEC4:
187*35238bceSAndroid Build Coastguard Worker variable << "(1.0, 1.0, 1.0, 1.0);\n";
188*35238bceSAndroid Build Coastguard Worker break;
189*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT:
190*35238bceSAndroid Build Coastguard Worker variable << "(1);\n";
191*35238bceSAndroid Build Coastguard Worker break;
192*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_VEC2:
193*35238bceSAndroid Build Coastguard Worker variable << "(1, 1);\n";
194*35238bceSAndroid Build Coastguard Worker break;
195*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_VEC3:
196*35238bceSAndroid Build Coastguard Worker variable << "(1, 1, 1);\n";
197*35238bceSAndroid Build Coastguard Worker break;
198*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_VEC4:
199*35238bceSAndroid Build Coastguard Worker variable << "(1, 1, 1, 1);\n";
200*35238bceSAndroid Build Coastguard Worker break;
201*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT:
202*35238bceSAndroid Build Coastguard Worker variable << "(1u);\n";
203*35238bceSAndroid Build Coastguard Worker break;
204*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_VEC2:
205*35238bceSAndroid Build Coastguard Worker variable << "(1u, 1u);\n";
206*35238bceSAndroid Build Coastguard Worker break;
207*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_VEC3:
208*35238bceSAndroid Build Coastguard Worker variable << "(1u, 1u, 1u);\n";
209*35238bceSAndroid Build Coastguard Worker break;
210*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_VEC4:
211*35238bceSAndroid Build Coastguard Worker variable << "(1u, 1u, 1u, 1u);\n";
212*35238bceSAndroid Build Coastguard Worker break;
213*35238bceSAndroid Build Coastguard Worker default:
214*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported data type.");
215*35238bceSAndroid Build Coastguard Worker }
216*35238bceSAndroid Build Coastguard Worker return variable.str();
217*35238bceSAndroid Build Coastguard Worker }
218*35238bceSAndroid Build Coastguard Worker
declareShaderUniform(glu::DataType dataType,std::string varName)219*35238bceSAndroid Build Coastguard Worker std::string declareShaderUniform(glu::DataType dataType, std::string varName)
220*35238bceSAndroid Build Coastguard Worker {
221*35238bceSAndroid Build Coastguard Worker std::ostringstream variable;
222*35238bceSAndroid Build Coastguard Worker variable << getPrecisionName(glu::PRECISION_HIGHP) << " uniform " << getDataTypeName(dataType) << " " << varName
223*35238bceSAndroid Build Coastguard Worker << ";\n";
224*35238bceSAndroid Build Coastguard Worker return variable.str();
225*35238bceSAndroid Build Coastguard Worker }
226*35238bceSAndroid Build Coastguard Worker
declareShaderInput(glu::DataType dataType,std::string varName)227*35238bceSAndroid Build Coastguard Worker std::string declareShaderInput(glu::DataType dataType, std::string varName)
228*35238bceSAndroid Build Coastguard Worker {
229*35238bceSAndroid Build Coastguard Worker std::ostringstream variable;
230*35238bceSAndroid Build Coastguard Worker variable << "in " << getPrecisionName(glu::PRECISION_HIGHP) << " " << getDataTypeName(dataType) << " " << varName
231*35238bceSAndroid Build Coastguard Worker << ";\n";
232*35238bceSAndroid Build Coastguard Worker return variable.str();
233*35238bceSAndroid Build Coastguard Worker }
234*35238bceSAndroid Build Coastguard Worker
declareBuffer(glu::DataType dataType,std::string varName)235*35238bceSAndroid Build Coastguard Worker std::string declareBuffer(glu::DataType dataType, std::string varName)
236*35238bceSAndroid Build Coastguard Worker {
237*35238bceSAndroid Build Coastguard Worker std::ostringstream variable;
238*35238bceSAndroid Build Coastguard Worker variable << "buffer SSBO {\n"
239*35238bceSAndroid Build Coastguard Worker << " " << getDataTypeName(dataType) << " " << varName << ";\n"
240*35238bceSAndroid Build Coastguard Worker << "};\n";
241*35238bceSAndroid Build Coastguard Worker return variable.str();
242*35238bceSAndroid Build Coastguard Worker }
243*35238bceSAndroid Build Coastguard Worker
declareShaderArrayVariable(glu::DataType dataType,std::string varName,const int arraySize)244*35238bceSAndroid Build Coastguard Worker std::string declareShaderArrayVariable(glu::DataType dataType, std::string varName, const int arraySize)
245*35238bceSAndroid Build Coastguard Worker {
246*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
247*35238bceSAndroid Build Coastguard Worker source << getDataTypeName(dataType) << " " << varName << "[" << arraySize << "]"
248*35238bceSAndroid Build Coastguard Worker << " = " << getDataTypeName(dataType) << "[](";
249*35238bceSAndroid Build Coastguard Worker
250*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < arraySize; ++ndx)
251*35238bceSAndroid Build Coastguard Worker source << getDataTypeName(dataType) << "(" << 0 << ", " << 0 << ")" << ((ndx < arraySize - 1) ? ", " : "");
252*35238bceSAndroid Build Coastguard Worker
253*35238bceSAndroid Build Coastguard Worker source << ");";
254*35238bceSAndroid Build Coastguard Worker return source.str();
255*35238bceSAndroid Build Coastguard Worker }
256*35238bceSAndroid Build Coastguard Worker
getShaderExtensionDeclaration(std::string extension)257*35238bceSAndroid Build Coastguard Worker std::string getShaderExtensionDeclaration(std::string extension)
258*35238bceSAndroid Build Coastguard Worker {
259*35238bceSAndroid Build Coastguard Worker if (extension.empty())
260*35238bceSAndroid Build Coastguard Worker return std::string("");
261*35238bceSAndroid Build Coastguard Worker else
262*35238bceSAndroid Build Coastguard Worker {
263*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
264*35238bceSAndroid Build Coastguard Worker source << "#extension " << extension << " : enable\n";
265*35238bceSAndroid Build Coastguard Worker return source.str();
266*35238bceSAndroid Build Coastguard Worker }
267*35238bceSAndroid Build Coastguard Worker }
268*35238bceSAndroid Build Coastguard Worker
getDataTypeExtension(glu::DataType dataType)269*35238bceSAndroid Build Coastguard Worker std::string getDataTypeExtension(glu::DataType dataType)
270*35238bceSAndroid Build Coastguard Worker {
271*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
272*35238bceSAndroid Build Coastguard Worker switch (dataType)
273*35238bceSAndroid Build Coastguard Worker {
274*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_CUBE_ARRAY:
275*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW:
276*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_CUBE_ARRAY:
277*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_CUBE_ARRAY:
278*35238bceSAndroid Build Coastguard Worker source << "GL_EXT_texture_cube_map_array";
279*35238bceSAndroid Build Coastguard Worker break;
280*35238bceSAndroid Build Coastguard Worker
281*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_BUFFER:
282*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_BUFFER:
283*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_BUFFER:
284*35238bceSAndroid Build Coastguard Worker source << "GL_EXT_texture_buffer";
285*35238bceSAndroid Build Coastguard Worker break;
286*35238bceSAndroid Build Coastguard Worker
287*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY:
288*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
289*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY:
290*35238bceSAndroid Build Coastguard Worker source << "GL_OES_texture_storage_multisample_2d_array";
291*35238bceSAndroid Build Coastguard Worker break;
292*35238bceSAndroid Build Coastguard Worker
293*35238bceSAndroid Build Coastguard Worker default:
294*35238bceSAndroid Build Coastguard Worker break;
295*35238bceSAndroid Build Coastguard Worker }
296*35238bceSAndroid Build Coastguard Worker
297*35238bceSAndroid Build Coastguard Worker return source.str();
298*35238bceSAndroid Build Coastguard Worker }
299*35238bceSAndroid Build Coastguard Worker
getShaderInitialization(NegativeTestContext & ctx,glu::ShaderType shaderType)300*35238bceSAndroid Build Coastguard Worker std::string getShaderInitialization(NegativeTestContext &ctx, glu::ShaderType shaderType)
301*35238bceSAndroid Build Coastguard Worker {
302*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
303*35238bceSAndroid Build Coastguard Worker
304*35238bceSAndroid Build Coastguard Worker if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
305*35238bceSAndroid Build Coastguard Worker {
306*35238bceSAndroid Build Coastguard Worker switch (shaderType)
307*35238bceSAndroid Build Coastguard Worker {
308*35238bceSAndroid Build Coastguard Worker case glu::SHADERTYPE_GEOMETRY:
309*35238bceSAndroid Build Coastguard Worker source << "#extension GL_EXT_geometry_shader : enable\n";
310*35238bceSAndroid Build Coastguard Worker break;
311*35238bceSAndroid Build Coastguard Worker
312*35238bceSAndroid Build Coastguard Worker case glu::SHADERTYPE_TESSELLATION_CONTROL:
313*35238bceSAndroid Build Coastguard Worker source << "#extension GL_EXT_tessellation_shader : enable\n";
314*35238bceSAndroid Build Coastguard Worker break;
315*35238bceSAndroid Build Coastguard Worker
316*35238bceSAndroid Build Coastguard Worker case glu::SHADERTYPE_TESSELLATION_EVALUATION:
317*35238bceSAndroid Build Coastguard Worker source << "#extension GL_EXT_tessellation_shader : enable\n";
318*35238bceSAndroid Build Coastguard Worker break;
319*35238bceSAndroid Build Coastguard Worker
320*35238bceSAndroid Build Coastguard Worker default:
321*35238bceSAndroid Build Coastguard Worker break;
322*35238bceSAndroid Build Coastguard Worker }
323*35238bceSAndroid Build Coastguard Worker }
324*35238bceSAndroid Build Coastguard Worker
325*35238bceSAndroid Build Coastguard Worker switch (shaderType)
326*35238bceSAndroid Build Coastguard Worker {
327*35238bceSAndroid Build Coastguard Worker case glu::SHADERTYPE_GEOMETRY:
328*35238bceSAndroid Build Coastguard Worker source << "layout(max_vertices = 5) out;\n";
329*35238bceSAndroid Build Coastguard Worker break;
330*35238bceSAndroid Build Coastguard Worker
331*35238bceSAndroid Build Coastguard Worker case glu::SHADERTYPE_TESSELLATION_CONTROL:
332*35238bceSAndroid Build Coastguard Worker source << "layout(vertices = 3) out;\n";
333*35238bceSAndroid Build Coastguard Worker break;
334*35238bceSAndroid Build Coastguard Worker
335*35238bceSAndroid Build Coastguard Worker case glu::SHADERTYPE_TESSELLATION_EVALUATION:
336*35238bceSAndroid Build Coastguard Worker source << "layout(triangles, equal_spacing, cw) in;\n";
337*35238bceSAndroid Build Coastguard Worker break;
338*35238bceSAndroid Build Coastguard Worker
339*35238bceSAndroid Build Coastguard Worker default:
340*35238bceSAndroid Build Coastguard Worker break;
341*35238bceSAndroid Build Coastguard Worker }
342*35238bceSAndroid Build Coastguard Worker
343*35238bceSAndroid Build Coastguard Worker return source.str();
344*35238bceSAndroid Build Coastguard Worker }
345*35238bceSAndroid Build Coastguard Worker
genShaderSourceBitfieldExtract(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType valueDataType,glu::DataType offsetDataType,glu::DataType bitsDataType)346*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceBitfieldExtract(NegativeTestContext &ctx, glu::ShaderType shaderType,
347*35238bceSAndroid Build Coastguard Worker glu::DataType valueDataType, glu::DataType offsetDataType,
348*35238bceSAndroid Build Coastguard Worker glu::DataType bitsDataType)
349*35238bceSAndroid Build Coastguard Worker {
350*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
351*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
352*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
353*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
354*35238bceSAndroid Build Coastguard Worker << "\n"
355*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << "void main(void)\n"
356*35238bceSAndroid Build Coastguard Worker << "{\n"
357*35238bceSAndroid Build Coastguard Worker << " " << declareAndInitializeShaderVariable(valueDataType, "value") << " "
358*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(offsetDataType, "offset") << " "
359*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(bitsDataType, "bits") << " bitfieldExtract(value, offset, bits);\n"
360*35238bceSAndroid Build Coastguard Worker << "}\n";
361*35238bceSAndroid Build Coastguard Worker
362*35238bceSAndroid Build Coastguard Worker return source.str();
363*35238bceSAndroid Build Coastguard Worker }
364*35238bceSAndroid Build Coastguard Worker
bitfield_extract_invalid_value_type(NegativeTestContext & ctx)365*35238bceSAndroid Build Coastguard Worker void bitfield_extract_invalid_value_type(NegativeTestContext &ctx)
366*35238bceSAndroid Build Coastguard Worker {
367*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_intTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
368*35238bceSAndroid Build Coastguard Worker
369*35238bceSAndroid Build Coastguard Worker ctx.beginSection("bitfieldExtract: Invalid value type.");
370*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
371*35238bceSAndroid Build Coastguard Worker {
372*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
373*35238bceSAndroid Build Coastguard Worker {
374*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
375*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
376*35238bceSAndroid Build Coastguard Worker {
377*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceBitfieldExtract(
378*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], s_floatTypes[dataTypeNdx], glu::TYPE_INT, glu::TYPE_INT));
379*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
380*35238bceSAndroid Build Coastguard Worker }
381*35238bceSAndroid Build Coastguard Worker ctx.endSection();
382*35238bceSAndroid Build Coastguard Worker }
383*35238bceSAndroid Build Coastguard Worker }
384*35238bceSAndroid Build Coastguard Worker ctx.endSection();
385*35238bceSAndroid Build Coastguard Worker }
386*35238bceSAndroid Build Coastguard Worker
bitfield_extract_invalid_offset_type(NegativeTestContext & ctx)387*35238bceSAndroid Build Coastguard Worker void bitfield_extract_invalid_offset_type(NegativeTestContext &ctx)
388*35238bceSAndroid Build Coastguard Worker {
389*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_intTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
390*35238bceSAndroid Build Coastguard Worker
391*35238bceSAndroid Build Coastguard Worker ctx.beginSection("bitfieldExtract: Invalid offset type.");
392*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
393*35238bceSAndroid Build Coastguard Worker {
394*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
395*35238bceSAndroid Build Coastguard Worker {
396*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
397*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
398*35238bceSAndroid Build Coastguard Worker {
399*35238bceSAndroid Build Coastguard Worker for (int nonIntNdx = 0; nonIntNdx < DE_LENGTH_OF_ARRAY(s_nonScalarIntTypes); ++nonIntNdx)
400*35238bceSAndroid Build Coastguard Worker {
401*35238bceSAndroid Build Coastguard Worker {
402*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
403*35238bceSAndroid Build Coastguard Worker genShaderSourceBitfieldExtract(ctx, s_shaders[shaderNdx], s_intTypes[dataTypeNdx],
404*35238bceSAndroid Build Coastguard Worker s_nonScalarIntTypes[nonIntNdx], glu::TYPE_INT));
405*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
406*35238bceSAndroid Build Coastguard Worker }
407*35238bceSAndroid Build Coastguard Worker {
408*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
409*35238bceSAndroid Build Coastguard Worker genShaderSourceBitfieldExtract(ctx, s_shaders[shaderNdx], s_uintTypes[dataTypeNdx],
410*35238bceSAndroid Build Coastguard Worker s_nonScalarIntTypes[nonIntNdx], glu::TYPE_INT));
411*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
412*35238bceSAndroid Build Coastguard Worker }
413*35238bceSAndroid Build Coastguard Worker }
414*35238bceSAndroid Build Coastguard Worker }
415*35238bceSAndroid Build Coastguard Worker ctx.endSection();
416*35238bceSAndroid Build Coastguard Worker }
417*35238bceSAndroid Build Coastguard Worker }
418*35238bceSAndroid Build Coastguard Worker ctx.endSection();
419*35238bceSAndroid Build Coastguard Worker }
420*35238bceSAndroid Build Coastguard Worker
bitfield_extract_invalid_bits_type(NegativeTestContext & ctx)421*35238bceSAndroid Build Coastguard Worker void bitfield_extract_invalid_bits_type(NegativeTestContext &ctx)
422*35238bceSAndroid Build Coastguard Worker {
423*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_intTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
424*35238bceSAndroid Build Coastguard Worker
425*35238bceSAndroid Build Coastguard Worker ctx.beginSection("bitfieldExtract: Invalid bits type.");
426*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
427*35238bceSAndroid Build Coastguard Worker {
428*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
429*35238bceSAndroid Build Coastguard Worker {
430*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
431*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
432*35238bceSAndroid Build Coastguard Worker {
433*35238bceSAndroid Build Coastguard Worker for (int nonIntNdx = 0; nonIntNdx < DE_LENGTH_OF_ARRAY(s_nonScalarIntTypes); ++nonIntNdx)
434*35238bceSAndroid Build Coastguard Worker {
435*35238bceSAndroid Build Coastguard Worker {
436*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
437*35238bceSAndroid Build Coastguard Worker genShaderSourceBitfieldExtract(ctx, s_shaders[shaderNdx], s_intTypes[dataTypeNdx],
438*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT, s_nonScalarIntTypes[nonIntNdx]));
439*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
440*35238bceSAndroid Build Coastguard Worker }
441*35238bceSAndroid Build Coastguard Worker {
442*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
443*35238bceSAndroid Build Coastguard Worker genShaderSourceBitfieldExtract(ctx, s_shaders[shaderNdx], s_uintTypes[dataTypeNdx],
444*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT, s_nonScalarIntTypes[nonIntNdx]));
445*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
446*35238bceSAndroid Build Coastguard Worker }
447*35238bceSAndroid Build Coastguard Worker }
448*35238bceSAndroid Build Coastguard Worker }
449*35238bceSAndroid Build Coastguard Worker ctx.endSection();
450*35238bceSAndroid Build Coastguard Worker }
451*35238bceSAndroid Build Coastguard Worker }
452*35238bceSAndroid Build Coastguard Worker ctx.endSection();
453*35238bceSAndroid Build Coastguard Worker }
454*35238bceSAndroid Build Coastguard Worker
genShaderSourceBitfieldInsert(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType baseDataType,glu::DataType insertDataType,glu::DataType offsetDataType,glu::DataType bitsDataType)455*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceBitfieldInsert(NegativeTestContext &ctx, glu::ShaderType shaderType,
456*35238bceSAndroid Build Coastguard Worker glu::DataType baseDataType, glu::DataType insertDataType,
457*35238bceSAndroid Build Coastguard Worker glu::DataType offsetDataType, glu::DataType bitsDataType)
458*35238bceSAndroid Build Coastguard Worker {
459*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
460*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
461*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
462*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
463*35238bceSAndroid Build Coastguard Worker << "\n"
464*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << "void main(void)\n"
465*35238bceSAndroid Build Coastguard Worker << "{\n"
466*35238bceSAndroid Build Coastguard Worker << " " << declareAndInitializeShaderVariable(baseDataType, "base") << " "
467*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(insertDataType, "insert") << " "
468*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(offsetDataType, "offset") << " "
469*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(bitsDataType, "bits")
470*35238bceSAndroid Build Coastguard Worker << " bitfieldInsert(base, insert, offset, bits);\n"
471*35238bceSAndroid Build Coastguard Worker << "}\n";
472*35238bceSAndroid Build Coastguard Worker
473*35238bceSAndroid Build Coastguard Worker return source.str();
474*35238bceSAndroid Build Coastguard Worker }
475*35238bceSAndroid Build Coastguard Worker
bitfield_insert_invalid_base_type(NegativeTestContext & ctx)476*35238bceSAndroid Build Coastguard Worker void bitfield_insert_invalid_base_type(NegativeTestContext &ctx)
477*35238bceSAndroid Build Coastguard Worker {
478*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_intTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
479*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_intTypes) == DE_LENGTH_OF_ARRAY(s_floatTypes));
480*35238bceSAndroid Build Coastguard Worker
481*35238bceSAndroid Build Coastguard Worker ctx.beginSection("bitfieldInsert: Invalid base type.");
482*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
483*35238bceSAndroid Build Coastguard Worker {
484*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
485*35238bceSAndroid Build Coastguard Worker {
486*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
487*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
488*35238bceSAndroid Build Coastguard Worker {
489*35238bceSAndroid Build Coastguard Worker {
490*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
491*35238bceSAndroid Build Coastguard Worker genShaderSourceBitfieldInsert(ctx, s_shaders[shaderNdx], s_floatTypes[dataTypeNdx],
492*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_INT, glu::TYPE_INT));
493*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
494*35238bceSAndroid Build Coastguard Worker }
495*35238bceSAndroid Build Coastguard Worker {
496*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
497*35238bceSAndroid Build Coastguard Worker genShaderSourceBitfieldInsert(ctx, s_shaders[shaderNdx], s_floatTypes[dataTypeNdx],
498*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_INT, glu::TYPE_INT));
499*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
500*35238bceSAndroid Build Coastguard Worker }
501*35238bceSAndroid Build Coastguard Worker }
502*35238bceSAndroid Build Coastguard Worker ctx.endSection();
503*35238bceSAndroid Build Coastguard Worker }
504*35238bceSAndroid Build Coastguard Worker }
505*35238bceSAndroid Build Coastguard Worker ctx.endSection();
506*35238bceSAndroid Build Coastguard Worker }
507*35238bceSAndroid Build Coastguard Worker
bitfield_insert_invalid_insert_type(NegativeTestContext & ctx)508*35238bceSAndroid Build Coastguard Worker void bitfield_insert_invalid_insert_type(NegativeTestContext &ctx)
509*35238bceSAndroid Build Coastguard Worker {
510*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_intTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
511*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_intTypes) == DE_LENGTH_OF_ARRAY(s_floatTypes));
512*35238bceSAndroid Build Coastguard Worker
513*35238bceSAndroid Build Coastguard Worker ctx.beginSection("bitfieldInsert: Invalid insert type.");
514*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
515*35238bceSAndroid Build Coastguard Worker {
516*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
517*35238bceSAndroid Build Coastguard Worker {
518*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
519*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
520*35238bceSAndroid Build Coastguard Worker {
521*35238bceSAndroid Build Coastguard Worker {
522*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
523*35238bceSAndroid Build Coastguard Worker genShaderSourceBitfieldInsert(ctx, s_shaders[shaderNdx], s_intTypes[dataTypeNdx],
524*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_INT, glu::TYPE_INT));
525*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
526*35238bceSAndroid Build Coastguard Worker }
527*35238bceSAndroid Build Coastguard Worker {
528*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
529*35238bceSAndroid Build Coastguard Worker genShaderSourceBitfieldInsert(ctx, s_shaders[shaderNdx], s_uintTypes[dataTypeNdx],
530*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_INT, glu::TYPE_INT));
531*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
532*35238bceSAndroid Build Coastguard Worker }
533*35238bceSAndroid Build Coastguard Worker
534*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx2)
535*35238bceSAndroid Build Coastguard Worker {
536*35238bceSAndroid Build Coastguard Worker if (s_intTypes[dataTypeNdx] == s_intTypes[dataTypeNdx2])
537*35238bceSAndroid Build Coastguard Worker continue;
538*35238bceSAndroid Build Coastguard Worker
539*35238bceSAndroid Build Coastguard Worker {
540*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
541*35238bceSAndroid Build Coastguard Worker genShaderSourceBitfieldInsert(ctx, s_shaders[shaderNdx], s_intTypes[dataTypeNdx],
542*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx2], glu::TYPE_INT, glu::TYPE_INT));
543*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
544*35238bceSAndroid Build Coastguard Worker }
545*35238bceSAndroid Build Coastguard Worker {
546*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
547*35238bceSAndroid Build Coastguard Worker genShaderSourceBitfieldInsert(ctx, s_shaders[shaderNdx], s_uintTypes[dataTypeNdx],
548*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx2], glu::TYPE_INT, glu::TYPE_INT));
549*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
550*35238bceSAndroid Build Coastguard Worker }
551*35238bceSAndroid Build Coastguard Worker }
552*35238bceSAndroid Build Coastguard Worker }
553*35238bceSAndroid Build Coastguard Worker ctx.endSection();
554*35238bceSAndroid Build Coastguard Worker }
555*35238bceSAndroid Build Coastguard Worker }
556*35238bceSAndroid Build Coastguard Worker ctx.endSection();
557*35238bceSAndroid Build Coastguard Worker }
558*35238bceSAndroid Build Coastguard Worker
bitfield_insert_invalid_offset_type(NegativeTestContext & ctx)559*35238bceSAndroid Build Coastguard Worker void bitfield_insert_invalid_offset_type(NegativeTestContext &ctx)
560*35238bceSAndroid Build Coastguard Worker {
561*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_intTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
562*35238bceSAndroid Build Coastguard Worker
563*35238bceSAndroid Build Coastguard Worker ctx.beginSection("bitfieldInsert: Invalid offset type.");
564*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
565*35238bceSAndroid Build Coastguard Worker {
566*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
567*35238bceSAndroid Build Coastguard Worker {
568*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
569*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
570*35238bceSAndroid Build Coastguard Worker {
571*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_nonScalarIntTypes); ++dataTypeNdx2)
572*35238bceSAndroid Build Coastguard Worker {
573*35238bceSAndroid Build Coastguard Worker {
574*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceBitfieldInsert(
575*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx],
576*35238bceSAndroid Build Coastguard Worker s_nonScalarIntTypes[dataTypeNdx2], glu::TYPE_INT));
577*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
578*35238bceSAndroid Build Coastguard Worker }
579*35238bceSAndroid Build Coastguard Worker {
580*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceBitfieldInsert(
581*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx],
582*35238bceSAndroid Build Coastguard Worker s_nonScalarIntTypes[dataTypeNdx2], glu::TYPE_INT));
583*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
584*35238bceSAndroid Build Coastguard Worker }
585*35238bceSAndroid Build Coastguard Worker }
586*35238bceSAndroid Build Coastguard Worker }
587*35238bceSAndroid Build Coastguard Worker ctx.endSection();
588*35238bceSAndroid Build Coastguard Worker }
589*35238bceSAndroid Build Coastguard Worker }
590*35238bceSAndroid Build Coastguard Worker ctx.endSection();
591*35238bceSAndroid Build Coastguard Worker }
592*35238bceSAndroid Build Coastguard Worker
bitfield_insert_invalid_bits_type(NegativeTestContext & ctx)593*35238bceSAndroid Build Coastguard Worker void bitfield_insert_invalid_bits_type(NegativeTestContext &ctx)
594*35238bceSAndroid Build Coastguard Worker {
595*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_intTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
596*35238bceSAndroid Build Coastguard Worker
597*35238bceSAndroid Build Coastguard Worker ctx.beginSection("bitfieldInsert: Invalid bits type.");
598*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
599*35238bceSAndroid Build Coastguard Worker {
600*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
601*35238bceSAndroid Build Coastguard Worker {
602*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
603*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
604*35238bceSAndroid Build Coastguard Worker {
605*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_nonScalarIntTypes); ++dataTypeNdx2)
606*35238bceSAndroid Build Coastguard Worker {
607*35238bceSAndroid Build Coastguard Worker {
608*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceBitfieldInsert(
609*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx], glu::TYPE_INT,
610*35238bceSAndroid Build Coastguard Worker s_nonScalarIntTypes[dataTypeNdx2]));
611*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
612*35238bceSAndroid Build Coastguard Worker }
613*35238bceSAndroid Build Coastguard Worker {
614*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceBitfieldInsert(
615*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx],
616*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT, s_nonScalarIntTypes[dataTypeNdx2]));
617*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
618*35238bceSAndroid Build Coastguard Worker }
619*35238bceSAndroid Build Coastguard Worker }
620*35238bceSAndroid Build Coastguard Worker }
621*35238bceSAndroid Build Coastguard Worker ctx.endSection();
622*35238bceSAndroid Build Coastguard Worker }
623*35238bceSAndroid Build Coastguard Worker }
624*35238bceSAndroid Build Coastguard Worker ctx.endSection();
625*35238bceSAndroid Build Coastguard Worker }
626*35238bceSAndroid Build Coastguard Worker
627*35238bceSAndroid Build Coastguard Worker // bitfieldReverse, bitCount, findMSB, findLSB
genShaderSourceReverseCountFind(NegativeTestContext & ctx,glu::ShaderType shaderType,ShaderFunction function,glu::DataType baseDataType)628*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceReverseCountFind(NegativeTestContext &ctx, glu::ShaderType shaderType,
629*35238bceSAndroid Build Coastguard Worker ShaderFunction function, glu::DataType baseDataType)
630*35238bceSAndroid Build Coastguard Worker {
631*35238bceSAndroid Build Coastguard Worker DE_ASSERT(function == SHADER_FUNCTION_BITFIELD_REVERSE || function == SHADER_FUNCTION_BIT_COUNT ||
632*35238bceSAndroid Build Coastguard Worker function == SHADER_FUNCTION_FIND_MSB || function == SHADER_FUNCTION_FIND_LSB);
633*35238bceSAndroid Build Coastguard Worker
634*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
635*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
636*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
637*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
638*35238bceSAndroid Build Coastguard Worker << "\n"
639*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << "void main(void)\n"
640*35238bceSAndroid Build Coastguard Worker << "{\n"
641*35238bceSAndroid Build Coastguard Worker << " " << declareAndInitializeShaderVariable(baseDataType, "value");
642*35238bceSAndroid Build Coastguard Worker
643*35238bceSAndroid Build Coastguard Worker switch (function)
644*35238bceSAndroid Build Coastguard Worker {
645*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_BITFIELD_REVERSE:
646*35238bceSAndroid Build Coastguard Worker source << " bitfieldReverse(value);\n";
647*35238bceSAndroid Build Coastguard Worker break;
648*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_BIT_COUNT:
649*35238bceSAndroid Build Coastguard Worker source << " bitCount(value);\n";
650*35238bceSAndroid Build Coastguard Worker break;
651*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_FIND_MSB:
652*35238bceSAndroid Build Coastguard Worker source << " findMSB(value);\n";
653*35238bceSAndroid Build Coastguard Worker break;
654*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_FIND_LSB:
655*35238bceSAndroid Build Coastguard Worker source << " findLSB(value);\n";
656*35238bceSAndroid Build Coastguard Worker break;
657*35238bceSAndroid Build Coastguard Worker default:
658*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported shader function.");
659*35238bceSAndroid Build Coastguard Worker }
660*35238bceSAndroid Build Coastguard Worker
661*35238bceSAndroid Build Coastguard Worker source << "}\n";
662*35238bceSAndroid Build Coastguard Worker
663*35238bceSAndroid Build Coastguard Worker return source.str();
664*35238bceSAndroid Build Coastguard Worker }
665*35238bceSAndroid Build Coastguard Worker
bitfield_reverse(NegativeTestContext & ctx)666*35238bceSAndroid Build Coastguard Worker void bitfield_reverse(NegativeTestContext &ctx)
667*35238bceSAndroid Build Coastguard Worker {
668*35238bceSAndroid Build Coastguard Worker ctx.beginSection("bitfieldReverse: Invalid value type.");
669*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
670*35238bceSAndroid Build Coastguard Worker {
671*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
672*35238bceSAndroid Build Coastguard Worker {
673*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
674*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
675*35238bceSAndroid Build Coastguard Worker {
676*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceReverseCountFind(
677*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_BITFIELD_REVERSE, s_floatTypes[dataTypeNdx]));
678*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
679*35238bceSAndroid Build Coastguard Worker }
680*35238bceSAndroid Build Coastguard Worker ctx.endSection();
681*35238bceSAndroid Build Coastguard Worker }
682*35238bceSAndroid Build Coastguard Worker }
683*35238bceSAndroid Build Coastguard Worker ctx.endSection();
684*35238bceSAndroid Build Coastguard Worker }
685*35238bceSAndroid Build Coastguard Worker
bit_count(NegativeTestContext & ctx)686*35238bceSAndroid Build Coastguard Worker void bit_count(NegativeTestContext &ctx)
687*35238bceSAndroid Build Coastguard Worker {
688*35238bceSAndroid Build Coastguard Worker ctx.beginSection("bitCount: Invalid value type.");
689*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
690*35238bceSAndroid Build Coastguard Worker {
691*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
692*35238bceSAndroid Build Coastguard Worker {
693*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
694*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
695*35238bceSAndroid Build Coastguard Worker {
696*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceReverseCountFind(
697*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_BIT_COUNT, s_floatTypes[dataTypeNdx]));
698*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
699*35238bceSAndroid Build Coastguard Worker }
700*35238bceSAndroid Build Coastguard Worker ctx.endSection();
701*35238bceSAndroid Build Coastguard Worker }
702*35238bceSAndroid Build Coastguard Worker }
703*35238bceSAndroid Build Coastguard Worker ctx.endSection();
704*35238bceSAndroid Build Coastguard Worker }
705*35238bceSAndroid Build Coastguard Worker
find_msb(NegativeTestContext & ctx)706*35238bceSAndroid Build Coastguard Worker void find_msb(NegativeTestContext &ctx)
707*35238bceSAndroid Build Coastguard Worker {
708*35238bceSAndroid Build Coastguard Worker ctx.beginSection("findMSB: Invalid value type.");
709*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
710*35238bceSAndroid Build Coastguard Worker {
711*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
712*35238bceSAndroid Build Coastguard Worker {
713*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
714*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
715*35238bceSAndroid Build Coastguard Worker {
716*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceReverseCountFind(
717*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_FIND_MSB, s_floatTypes[dataTypeNdx]));
718*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
719*35238bceSAndroid Build Coastguard Worker }
720*35238bceSAndroid Build Coastguard Worker ctx.endSection();
721*35238bceSAndroid Build Coastguard Worker }
722*35238bceSAndroid Build Coastguard Worker }
723*35238bceSAndroid Build Coastguard Worker ctx.endSection();
724*35238bceSAndroid Build Coastguard Worker }
725*35238bceSAndroid Build Coastguard Worker
find_lsb(NegativeTestContext & ctx)726*35238bceSAndroid Build Coastguard Worker void find_lsb(NegativeTestContext &ctx)
727*35238bceSAndroid Build Coastguard Worker {
728*35238bceSAndroid Build Coastguard Worker ctx.beginSection("findLSB: Invalid value type.");
729*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
730*35238bceSAndroid Build Coastguard Worker {
731*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
732*35238bceSAndroid Build Coastguard Worker {
733*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
734*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
735*35238bceSAndroid Build Coastguard Worker {
736*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceReverseCountFind(
737*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_FIND_LSB, s_floatTypes[dataTypeNdx]));
738*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
739*35238bceSAndroid Build Coastguard Worker }
740*35238bceSAndroid Build Coastguard Worker ctx.endSection();
741*35238bceSAndroid Build Coastguard Worker }
742*35238bceSAndroid Build Coastguard Worker }
743*35238bceSAndroid Build Coastguard Worker ctx.endSection();
744*35238bceSAndroid Build Coastguard Worker }
745*35238bceSAndroid Build Coastguard Worker
746*35238bceSAndroid Build Coastguard Worker // uaddCarry, usubBorrow
genShaderSourceAddCarrySubBorrow(NegativeTestContext & ctx,glu::ShaderType shaderType,ShaderFunction function,glu::DataType xDataType,glu::DataType yDataType,glu::DataType carryBorrowDataType)747*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceAddCarrySubBorrow(NegativeTestContext &ctx, glu::ShaderType shaderType,
748*35238bceSAndroid Build Coastguard Worker ShaderFunction function, glu::DataType xDataType, glu::DataType yDataType,
749*35238bceSAndroid Build Coastguard Worker glu::DataType carryBorrowDataType)
750*35238bceSAndroid Build Coastguard Worker {
751*35238bceSAndroid Build Coastguard Worker DE_ASSERT(function == SHADER_FUNCTION_UADD_CARRY || function == SHADER_FUNCTION_USUB_BORROW);
752*35238bceSAndroid Build Coastguard Worker
753*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
754*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
755*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
756*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
757*35238bceSAndroid Build Coastguard Worker << "\n"
758*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << "void main(void)\n"
759*35238bceSAndroid Build Coastguard Worker << "{\n"
760*35238bceSAndroid Build Coastguard Worker << " " << declareAndInitializeShaderVariable(xDataType, "x") << " "
761*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(yDataType, "y");
762*35238bceSAndroid Build Coastguard Worker
763*35238bceSAndroid Build Coastguard Worker switch (function)
764*35238bceSAndroid Build Coastguard Worker {
765*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_UADD_CARRY:
766*35238bceSAndroid Build Coastguard Worker source << " " << declareAndInitializeShaderVariable(carryBorrowDataType, "carry")
767*35238bceSAndroid Build Coastguard Worker << " uaddCarry(x, y, carry);\n";
768*35238bceSAndroid Build Coastguard Worker break;
769*35238bceSAndroid Build Coastguard Worker
770*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_USUB_BORROW:
771*35238bceSAndroid Build Coastguard Worker source << " " << declareAndInitializeShaderVariable(carryBorrowDataType, "borrow")
772*35238bceSAndroid Build Coastguard Worker << " usubBorrow(x, y, borrow);\n";
773*35238bceSAndroid Build Coastguard Worker break;
774*35238bceSAndroid Build Coastguard Worker
775*35238bceSAndroid Build Coastguard Worker default:
776*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported shader function.");
777*35238bceSAndroid Build Coastguard Worker }
778*35238bceSAndroid Build Coastguard Worker
779*35238bceSAndroid Build Coastguard Worker source << "}\n";
780*35238bceSAndroid Build Coastguard Worker
781*35238bceSAndroid Build Coastguard Worker return source.str();
782*35238bceSAndroid Build Coastguard Worker }
783*35238bceSAndroid Build Coastguard Worker
uadd_carry_invalid_x(NegativeTestContext & ctx)784*35238bceSAndroid Build Coastguard Worker void uadd_carry_invalid_x(NegativeTestContext &ctx)
785*35238bceSAndroid Build Coastguard Worker {
786*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
787*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
788*35238bceSAndroid Build Coastguard Worker
789*35238bceSAndroid Build Coastguard Worker ctx.beginSection("uaddCarry: Invalid x type.");
790*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
791*35238bceSAndroid Build Coastguard Worker {
792*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
793*35238bceSAndroid Build Coastguard Worker {
794*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
795*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
796*35238bceSAndroid Build Coastguard Worker {
797*35238bceSAndroid Build Coastguard Worker {
798*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
799*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UADD_CARRY, s_floatTypes[dataTypeNdx],
800*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
801*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
802*35238bceSAndroid Build Coastguard Worker }
803*35238bceSAndroid Build Coastguard Worker {
804*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
805*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UADD_CARRY, s_intTypes[dataTypeNdx],
806*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
807*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
808*35238bceSAndroid Build Coastguard Worker }
809*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx2)
810*35238bceSAndroid Build Coastguard Worker {
811*35238bceSAndroid Build Coastguard Worker if (s_uintTypes[dataTypeNdx2] == s_uintTypes[dataTypeNdx])
812*35238bceSAndroid Build Coastguard Worker continue;
813*35238bceSAndroid Build Coastguard Worker
814*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
815*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UADD_CARRY, s_uintTypes[dataTypeNdx2],
816*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
817*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
818*35238bceSAndroid Build Coastguard Worker }
819*35238bceSAndroid Build Coastguard Worker }
820*35238bceSAndroid Build Coastguard Worker ctx.endSection();
821*35238bceSAndroid Build Coastguard Worker }
822*35238bceSAndroid Build Coastguard Worker }
823*35238bceSAndroid Build Coastguard Worker ctx.endSection();
824*35238bceSAndroid Build Coastguard Worker }
825*35238bceSAndroid Build Coastguard Worker
uadd_carry_invalid_y(NegativeTestContext & ctx)826*35238bceSAndroid Build Coastguard Worker void uadd_carry_invalid_y(NegativeTestContext &ctx)
827*35238bceSAndroid Build Coastguard Worker {
828*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
829*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
830*35238bceSAndroid Build Coastguard Worker
831*35238bceSAndroid Build Coastguard Worker ctx.beginSection("uaddCarry: Invalid y type.");
832*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
833*35238bceSAndroid Build Coastguard Worker {
834*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
835*35238bceSAndroid Build Coastguard Worker {
836*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
837*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
838*35238bceSAndroid Build Coastguard Worker {
839*35238bceSAndroid Build Coastguard Worker {
840*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
841*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UADD_CARRY, s_uintTypes[dataTypeNdx],
842*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
843*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
844*35238bceSAndroid Build Coastguard Worker }
845*35238bceSAndroid Build Coastguard Worker {
846*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
847*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UADD_CARRY, s_uintTypes[dataTypeNdx],
848*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
849*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
850*35238bceSAndroid Build Coastguard Worker }
851*35238bceSAndroid Build Coastguard Worker
852*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx2)
853*35238bceSAndroid Build Coastguard Worker {
854*35238bceSAndroid Build Coastguard Worker if (s_uintTypes[dataTypeNdx2] == s_uintTypes[dataTypeNdx])
855*35238bceSAndroid Build Coastguard Worker continue;
856*35238bceSAndroid Build Coastguard Worker
857*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
858*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UADD_CARRY, s_uintTypes[dataTypeNdx],
859*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx2], s_uintTypes[dataTypeNdx]));
860*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
861*35238bceSAndroid Build Coastguard Worker }
862*35238bceSAndroid Build Coastguard Worker }
863*35238bceSAndroid Build Coastguard Worker ctx.endSection();
864*35238bceSAndroid Build Coastguard Worker }
865*35238bceSAndroid Build Coastguard Worker }
866*35238bceSAndroid Build Coastguard Worker ctx.endSection();
867*35238bceSAndroid Build Coastguard Worker }
868*35238bceSAndroid Build Coastguard Worker
uadd_carry_invalid_carry(NegativeTestContext & ctx)869*35238bceSAndroid Build Coastguard Worker void uadd_carry_invalid_carry(NegativeTestContext &ctx)
870*35238bceSAndroid Build Coastguard Worker {
871*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
872*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
873*35238bceSAndroid Build Coastguard Worker
874*35238bceSAndroid Build Coastguard Worker ctx.beginSection("uaddCarry: Invalid carry type.");
875*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
876*35238bceSAndroid Build Coastguard Worker {
877*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
878*35238bceSAndroid Build Coastguard Worker {
879*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
880*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
881*35238bceSAndroid Build Coastguard Worker {
882*35238bceSAndroid Build Coastguard Worker {
883*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
884*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UADD_CARRY, s_uintTypes[dataTypeNdx],
885*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_floatTypes[dataTypeNdx]));
886*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
887*35238bceSAndroid Build Coastguard Worker }
888*35238bceSAndroid Build Coastguard Worker {
889*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
890*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UADD_CARRY, s_uintTypes[dataTypeNdx],
891*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
892*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
893*35238bceSAndroid Build Coastguard Worker }
894*35238bceSAndroid Build Coastguard Worker
895*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx2)
896*35238bceSAndroid Build Coastguard Worker {
897*35238bceSAndroid Build Coastguard Worker if (s_uintTypes[dataTypeNdx2] == s_uintTypes[dataTypeNdx])
898*35238bceSAndroid Build Coastguard Worker continue;
899*35238bceSAndroid Build Coastguard Worker
900*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
901*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UADD_CARRY, s_uintTypes[dataTypeNdx],
902*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx2]));
903*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
904*35238bceSAndroid Build Coastguard Worker }
905*35238bceSAndroid Build Coastguard Worker }
906*35238bceSAndroid Build Coastguard Worker ctx.endSection();
907*35238bceSAndroid Build Coastguard Worker }
908*35238bceSAndroid Build Coastguard Worker }
909*35238bceSAndroid Build Coastguard Worker ctx.endSection();
910*35238bceSAndroid Build Coastguard Worker }
911*35238bceSAndroid Build Coastguard Worker
usub_borrow_invalid_x(NegativeTestContext & ctx)912*35238bceSAndroid Build Coastguard Worker void usub_borrow_invalid_x(NegativeTestContext &ctx)
913*35238bceSAndroid Build Coastguard Worker {
914*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
915*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
916*35238bceSAndroid Build Coastguard Worker
917*35238bceSAndroid Build Coastguard Worker ctx.beginSection("usubBorrow: Invalid x type.");
918*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
919*35238bceSAndroid Build Coastguard Worker {
920*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
921*35238bceSAndroid Build Coastguard Worker {
922*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
923*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
924*35238bceSAndroid Build Coastguard Worker {
925*35238bceSAndroid Build Coastguard Worker {
926*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
927*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_USUB_BORROW, s_floatTypes[dataTypeNdx],
928*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
929*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
930*35238bceSAndroid Build Coastguard Worker }
931*35238bceSAndroid Build Coastguard Worker {
932*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
933*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_USUB_BORROW, s_intTypes[dataTypeNdx],
934*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
935*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
936*35238bceSAndroid Build Coastguard Worker }
937*35238bceSAndroid Build Coastguard Worker
938*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx2)
939*35238bceSAndroid Build Coastguard Worker {
940*35238bceSAndroid Build Coastguard Worker if (s_uintTypes[dataTypeNdx2] == s_uintTypes[dataTypeNdx])
941*35238bceSAndroid Build Coastguard Worker continue;
942*35238bceSAndroid Build Coastguard Worker
943*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
944*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_USUB_BORROW, s_uintTypes[dataTypeNdx2],
945*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
946*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
947*35238bceSAndroid Build Coastguard Worker }
948*35238bceSAndroid Build Coastguard Worker }
949*35238bceSAndroid Build Coastguard Worker ctx.endSection();
950*35238bceSAndroid Build Coastguard Worker }
951*35238bceSAndroid Build Coastguard Worker }
952*35238bceSAndroid Build Coastguard Worker ctx.endSection();
953*35238bceSAndroid Build Coastguard Worker }
954*35238bceSAndroid Build Coastguard Worker
usub_borrow_invalid_y(NegativeTestContext & ctx)955*35238bceSAndroid Build Coastguard Worker void usub_borrow_invalid_y(NegativeTestContext &ctx)
956*35238bceSAndroid Build Coastguard Worker {
957*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
958*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
959*35238bceSAndroid Build Coastguard Worker
960*35238bceSAndroid Build Coastguard Worker ctx.beginSection("usubBorrow: Invalid y type.");
961*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
962*35238bceSAndroid Build Coastguard Worker {
963*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
964*35238bceSAndroid Build Coastguard Worker {
965*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
966*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
967*35238bceSAndroid Build Coastguard Worker {
968*35238bceSAndroid Build Coastguard Worker {
969*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
970*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_USUB_BORROW, s_uintTypes[dataTypeNdx],
971*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
972*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
973*35238bceSAndroid Build Coastguard Worker }
974*35238bceSAndroid Build Coastguard Worker {
975*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
976*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_USUB_BORROW, s_uintTypes[dataTypeNdx],
977*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
978*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
979*35238bceSAndroid Build Coastguard Worker }
980*35238bceSAndroid Build Coastguard Worker
981*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx2)
982*35238bceSAndroid Build Coastguard Worker {
983*35238bceSAndroid Build Coastguard Worker if (s_uintTypes[dataTypeNdx2] == s_uintTypes[dataTypeNdx])
984*35238bceSAndroid Build Coastguard Worker continue;
985*35238bceSAndroid Build Coastguard Worker
986*35238bceSAndroid Build Coastguard Worker const std::string shaderSource = genShaderSourceAddCarrySubBorrow(
987*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_USUB_BORROW, s_uintTypes[dataTypeNdx],
988*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx2], s_uintTypes[dataTypeNdx]);
989*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
990*35238bceSAndroid Build Coastguard Worker }
991*35238bceSAndroid Build Coastguard Worker }
992*35238bceSAndroid Build Coastguard Worker ctx.endSection();
993*35238bceSAndroid Build Coastguard Worker }
994*35238bceSAndroid Build Coastguard Worker }
995*35238bceSAndroid Build Coastguard Worker ctx.endSection();
996*35238bceSAndroid Build Coastguard Worker }
997*35238bceSAndroid Build Coastguard Worker
usub_borrow_invalid_borrow(NegativeTestContext & ctx)998*35238bceSAndroid Build Coastguard Worker void usub_borrow_invalid_borrow(NegativeTestContext &ctx)
999*35238bceSAndroid Build Coastguard Worker {
1000*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1001*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1002*35238bceSAndroid Build Coastguard Worker
1003*35238bceSAndroid Build Coastguard Worker ctx.beginSection("usubBorrow: Invalid borrow type.");
1004*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1005*35238bceSAndroid Build Coastguard Worker {
1006*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1007*35238bceSAndroid Build Coastguard Worker {
1008*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1009*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
1010*35238bceSAndroid Build Coastguard Worker {
1011*35238bceSAndroid Build Coastguard Worker {
1012*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
1013*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_USUB_BORROW, s_uintTypes[dataTypeNdx],
1014*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_floatTypes[dataTypeNdx]));
1015*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1016*35238bceSAndroid Build Coastguard Worker }
1017*35238bceSAndroid Build Coastguard Worker {
1018*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
1019*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_USUB_BORROW, s_uintTypes[dataTypeNdx],
1020*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1021*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1022*35238bceSAndroid Build Coastguard Worker }
1023*35238bceSAndroid Build Coastguard Worker
1024*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx2)
1025*35238bceSAndroid Build Coastguard Worker {
1026*35238bceSAndroid Build Coastguard Worker if (s_uintTypes[dataTypeNdx2] == s_uintTypes[dataTypeNdx])
1027*35238bceSAndroid Build Coastguard Worker continue;
1028*35238bceSAndroid Build Coastguard Worker
1029*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAddCarrySubBorrow(
1030*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_USUB_BORROW, s_uintTypes[dataTypeNdx],
1031*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx2]));
1032*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1033*35238bceSAndroid Build Coastguard Worker }
1034*35238bceSAndroid Build Coastguard Worker }
1035*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1036*35238bceSAndroid Build Coastguard Worker }
1037*35238bceSAndroid Build Coastguard Worker }
1038*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1039*35238bceSAndroid Build Coastguard Worker }
1040*35238bceSAndroid Build Coastguard Worker
1041*35238bceSAndroid Build Coastguard Worker // umulExtended, imulExtended
genShaderSourceMulExtended(NegativeTestContext & ctx,glu::ShaderType shaderType,ShaderFunction function,glu::DataType xDataType,glu::DataType yDataType,glu::DataType msbDataType,glu::DataType lsbDataType)1042*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceMulExtended(NegativeTestContext &ctx, glu::ShaderType shaderType, ShaderFunction function,
1043*35238bceSAndroid Build Coastguard Worker glu::DataType xDataType, glu::DataType yDataType, glu::DataType msbDataType,
1044*35238bceSAndroid Build Coastguard Worker glu::DataType lsbDataType)
1045*35238bceSAndroid Build Coastguard Worker {
1046*35238bceSAndroid Build Coastguard Worker DE_ASSERT(function == SHADER_FUNCTION_UMUL_EXTENDED || function == SHADER_FUNCTION_IMUL_EXTENDED);
1047*35238bceSAndroid Build Coastguard Worker
1048*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
1049*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
1050*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
1051*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
1052*35238bceSAndroid Build Coastguard Worker << "\n"
1053*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << "void main(void)\n"
1054*35238bceSAndroid Build Coastguard Worker << "{\n"
1055*35238bceSAndroid Build Coastguard Worker << " " << declareAndInitializeShaderVariable(xDataType, "x") << " "
1056*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(yDataType, "y") << " "
1057*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(msbDataType, "msb") << " "
1058*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(lsbDataType, "lsb");
1059*35238bceSAndroid Build Coastguard Worker
1060*35238bceSAndroid Build Coastguard Worker switch (function)
1061*35238bceSAndroid Build Coastguard Worker {
1062*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_UMUL_EXTENDED:
1063*35238bceSAndroid Build Coastguard Worker source << " umulExtended(x, y, msb, lsb);\n";
1064*35238bceSAndroid Build Coastguard Worker break;
1065*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_IMUL_EXTENDED:
1066*35238bceSAndroid Build Coastguard Worker source << " imulExtended(x, y, msb, lsb);\n";
1067*35238bceSAndroid Build Coastguard Worker break;
1068*35238bceSAndroid Build Coastguard Worker default:
1069*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported shader function.");
1070*35238bceSAndroid Build Coastguard Worker }
1071*35238bceSAndroid Build Coastguard Worker
1072*35238bceSAndroid Build Coastguard Worker source << "}\n";
1073*35238bceSAndroid Build Coastguard Worker
1074*35238bceSAndroid Build Coastguard Worker return source.str();
1075*35238bceSAndroid Build Coastguard Worker }
1076*35238bceSAndroid Build Coastguard Worker
umul_extended_invalid_x(NegativeTestContext & ctx)1077*35238bceSAndroid Build Coastguard Worker void umul_extended_invalid_x(NegativeTestContext &ctx)
1078*35238bceSAndroid Build Coastguard Worker {
1079*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1080*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1081*35238bceSAndroid Build Coastguard Worker
1082*35238bceSAndroid Build Coastguard Worker ctx.beginSection("umulExtended: Invalid x type.");
1083*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1084*35238bceSAndroid Build Coastguard Worker {
1085*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1086*35238bceSAndroid Build Coastguard Worker {
1087*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1088*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_uintTypes); ++dataTypeNdx)
1089*35238bceSAndroid Build Coastguard Worker {
1090*35238bceSAndroid Build Coastguard Worker {
1091*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1092*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UMUL_EXTENDED, s_floatTypes[dataTypeNdx],
1093*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
1094*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1095*35238bceSAndroid Build Coastguard Worker }
1096*35238bceSAndroid Build Coastguard Worker {
1097*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1098*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UMUL_EXTENDED, s_intTypes[dataTypeNdx],
1099*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
1100*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1101*35238bceSAndroid Build Coastguard Worker }
1102*35238bceSAndroid Build Coastguard Worker
1103*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_uintTypes); ++dataTypeNdx2)
1104*35238bceSAndroid Build Coastguard Worker {
1105*35238bceSAndroid Build Coastguard Worker if (s_uintTypes[dataTypeNdx2] == s_uintTypes[dataTypeNdx])
1106*35238bceSAndroid Build Coastguard Worker continue;
1107*35238bceSAndroid Build Coastguard Worker
1108*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1109*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UMUL_EXTENDED, s_uintTypes[dataTypeNdx2],
1110*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
1111*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1112*35238bceSAndroid Build Coastguard Worker }
1113*35238bceSAndroid Build Coastguard Worker }
1114*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1115*35238bceSAndroid Build Coastguard Worker }
1116*35238bceSAndroid Build Coastguard Worker }
1117*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1118*35238bceSAndroid Build Coastguard Worker }
1119*35238bceSAndroid Build Coastguard Worker
umul_extended_invalid_y(NegativeTestContext & ctx)1120*35238bceSAndroid Build Coastguard Worker void umul_extended_invalid_y(NegativeTestContext &ctx)
1121*35238bceSAndroid Build Coastguard Worker {
1122*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1123*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1124*35238bceSAndroid Build Coastguard Worker
1125*35238bceSAndroid Build Coastguard Worker ctx.beginSection("umulExtended: Invalid y type.");
1126*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1127*35238bceSAndroid Build Coastguard Worker {
1128*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1129*35238bceSAndroid Build Coastguard Worker {
1130*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1131*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_uintTypes); ++dataTypeNdx)
1132*35238bceSAndroid Build Coastguard Worker {
1133*35238bceSAndroid Build Coastguard Worker {
1134*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1135*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UMUL_EXTENDED, s_uintTypes[dataTypeNdx],
1136*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
1137*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1138*35238bceSAndroid Build Coastguard Worker }
1139*35238bceSAndroid Build Coastguard Worker {
1140*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1141*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UMUL_EXTENDED, s_uintTypes[dataTypeNdx],
1142*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
1143*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1144*35238bceSAndroid Build Coastguard Worker }
1145*35238bceSAndroid Build Coastguard Worker
1146*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_uintTypes); ++dataTypeNdx2)
1147*35238bceSAndroid Build Coastguard Worker {
1148*35238bceSAndroid Build Coastguard Worker if (s_uintTypes[dataTypeNdx2] == s_uintTypes[dataTypeNdx])
1149*35238bceSAndroid Build Coastguard Worker continue;
1150*35238bceSAndroid Build Coastguard Worker
1151*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1152*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UMUL_EXTENDED, s_uintTypes[dataTypeNdx],
1153*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx2], s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
1154*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1155*35238bceSAndroid Build Coastguard Worker }
1156*35238bceSAndroid Build Coastguard Worker }
1157*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1158*35238bceSAndroid Build Coastguard Worker }
1159*35238bceSAndroid Build Coastguard Worker }
1160*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1161*35238bceSAndroid Build Coastguard Worker }
1162*35238bceSAndroid Build Coastguard Worker
umul_extended_invalid_msb(NegativeTestContext & ctx)1163*35238bceSAndroid Build Coastguard Worker void umul_extended_invalid_msb(NegativeTestContext &ctx)
1164*35238bceSAndroid Build Coastguard Worker {
1165*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1166*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1167*35238bceSAndroid Build Coastguard Worker
1168*35238bceSAndroid Build Coastguard Worker ctx.beginSection("umulExtended: Invalid msb type.");
1169*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1170*35238bceSAndroid Build Coastguard Worker {
1171*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1172*35238bceSAndroid Build Coastguard Worker {
1173*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1174*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_uintTypes); ++dataTypeNdx)
1175*35238bceSAndroid Build Coastguard Worker {
1176*35238bceSAndroid Build Coastguard Worker {
1177*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1178*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UMUL_EXTENDED, s_uintTypes[dataTypeNdx],
1179*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_floatTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
1180*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1181*35238bceSAndroid Build Coastguard Worker }
1182*35238bceSAndroid Build Coastguard Worker {
1183*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1184*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UMUL_EXTENDED, s_uintTypes[dataTypeNdx],
1185*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_intTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
1186*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1187*35238bceSAndroid Build Coastguard Worker }
1188*35238bceSAndroid Build Coastguard Worker
1189*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_uintTypes); ++dataTypeNdx2)
1190*35238bceSAndroid Build Coastguard Worker {
1191*35238bceSAndroid Build Coastguard Worker if (s_uintTypes[dataTypeNdx2] == s_uintTypes[dataTypeNdx])
1192*35238bceSAndroid Build Coastguard Worker continue;
1193*35238bceSAndroid Build Coastguard Worker
1194*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1195*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UMUL_EXTENDED, s_uintTypes[dataTypeNdx],
1196*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx2], s_uintTypes[dataTypeNdx]));
1197*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1198*35238bceSAndroid Build Coastguard Worker }
1199*35238bceSAndroid Build Coastguard Worker }
1200*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1201*35238bceSAndroid Build Coastguard Worker }
1202*35238bceSAndroid Build Coastguard Worker }
1203*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1204*35238bceSAndroid Build Coastguard Worker }
1205*35238bceSAndroid Build Coastguard Worker
umul_extended_invalid_lsb(NegativeTestContext & ctx)1206*35238bceSAndroid Build Coastguard Worker void umul_extended_invalid_lsb(NegativeTestContext &ctx)
1207*35238bceSAndroid Build Coastguard Worker {
1208*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1209*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1210*35238bceSAndroid Build Coastguard Worker
1211*35238bceSAndroid Build Coastguard Worker ctx.beginSection("umulExtended: Invalid lsb type.");
1212*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1213*35238bceSAndroid Build Coastguard Worker {
1214*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1215*35238bceSAndroid Build Coastguard Worker {
1216*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1217*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_uintTypes); ++dataTypeNdx)
1218*35238bceSAndroid Build Coastguard Worker {
1219*35238bceSAndroid Build Coastguard Worker {
1220*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1221*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UMUL_EXTENDED, s_uintTypes[dataTypeNdx],
1222*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx], s_floatTypes[dataTypeNdx]));
1223*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1224*35238bceSAndroid Build Coastguard Worker }
1225*35238bceSAndroid Build Coastguard Worker {
1226*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1227*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UMUL_EXTENDED, s_uintTypes[dataTypeNdx],
1228*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1229*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1230*35238bceSAndroid Build Coastguard Worker }
1231*35238bceSAndroid Build Coastguard Worker
1232*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_uintTypes); ++dataTypeNdx2)
1233*35238bceSAndroid Build Coastguard Worker {
1234*35238bceSAndroid Build Coastguard Worker if (s_uintTypes[dataTypeNdx2] == s_uintTypes[dataTypeNdx])
1235*35238bceSAndroid Build Coastguard Worker continue;
1236*35238bceSAndroid Build Coastguard Worker
1237*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1238*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UMUL_EXTENDED, s_uintTypes[dataTypeNdx],
1239*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx], s_uintTypes[dataTypeNdx2]));
1240*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1241*35238bceSAndroid Build Coastguard Worker }
1242*35238bceSAndroid Build Coastguard Worker }
1243*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1244*35238bceSAndroid Build Coastguard Worker }
1245*35238bceSAndroid Build Coastguard Worker }
1246*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1247*35238bceSAndroid Build Coastguard Worker }
1248*35238bceSAndroid Build Coastguard Worker
imul_extended_invalid_x(NegativeTestContext & ctx)1249*35238bceSAndroid Build Coastguard Worker void imul_extended_invalid_x(NegativeTestContext &ctx)
1250*35238bceSAndroid Build Coastguard Worker {
1251*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1252*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1253*35238bceSAndroid Build Coastguard Worker
1254*35238bceSAndroid Build Coastguard Worker ctx.beginSection("imulExtended: Invalid x type.");
1255*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1256*35238bceSAndroid Build Coastguard Worker {
1257*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1258*35238bceSAndroid Build Coastguard Worker {
1259*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1260*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
1261*35238bceSAndroid Build Coastguard Worker {
1262*35238bceSAndroid Build Coastguard Worker {
1263*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1264*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_IMUL_EXTENDED, s_floatTypes[dataTypeNdx],
1265*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1266*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1267*35238bceSAndroid Build Coastguard Worker }
1268*35238bceSAndroid Build Coastguard Worker {
1269*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1270*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_IMUL_EXTENDED, s_uintTypes[dataTypeNdx],
1271*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1272*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1273*35238bceSAndroid Build Coastguard Worker }
1274*35238bceSAndroid Build Coastguard Worker
1275*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx2)
1276*35238bceSAndroid Build Coastguard Worker {
1277*35238bceSAndroid Build Coastguard Worker if (s_intTypes[dataTypeNdx2] == s_intTypes[dataTypeNdx])
1278*35238bceSAndroid Build Coastguard Worker continue;
1279*35238bceSAndroid Build Coastguard Worker
1280*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1281*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_IMUL_EXTENDED, s_intTypes[dataTypeNdx2],
1282*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1283*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1284*35238bceSAndroid Build Coastguard Worker }
1285*35238bceSAndroid Build Coastguard Worker }
1286*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1287*35238bceSAndroid Build Coastguard Worker }
1288*35238bceSAndroid Build Coastguard Worker }
1289*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1290*35238bceSAndroid Build Coastguard Worker }
1291*35238bceSAndroid Build Coastguard Worker
imul_extended_invalid_y(NegativeTestContext & ctx)1292*35238bceSAndroid Build Coastguard Worker void imul_extended_invalid_y(NegativeTestContext &ctx)
1293*35238bceSAndroid Build Coastguard Worker {
1294*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1295*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1296*35238bceSAndroid Build Coastguard Worker
1297*35238bceSAndroid Build Coastguard Worker ctx.beginSection("imulExtended: Invalid y type.");
1298*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1299*35238bceSAndroid Build Coastguard Worker {
1300*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1301*35238bceSAndroid Build Coastguard Worker {
1302*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1303*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
1304*35238bceSAndroid Build Coastguard Worker {
1305*35238bceSAndroid Build Coastguard Worker {
1306*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1307*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_IMUL_EXTENDED, s_intTypes[dataTypeNdx],
1308*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1309*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1310*35238bceSAndroid Build Coastguard Worker }
1311*35238bceSAndroid Build Coastguard Worker {
1312*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1313*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_IMUL_EXTENDED, s_intTypes[dataTypeNdx],
1314*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1315*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1316*35238bceSAndroid Build Coastguard Worker }
1317*35238bceSAndroid Build Coastguard Worker
1318*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx2)
1319*35238bceSAndroid Build Coastguard Worker {
1320*35238bceSAndroid Build Coastguard Worker if (s_intTypes[dataTypeNdx2] == s_intTypes[dataTypeNdx])
1321*35238bceSAndroid Build Coastguard Worker continue;
1322*35238bceSAndroid Build Coastguard Worker
1323*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1324*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_IMUL_EXTENDED, s_intTypes[dataTypeNdx],
1325*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx2], s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1326*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1327*35238bceSAndroid Build Coastguard Worker }
1328*35238bceSAndroid Build Coastguard Worker }
1329*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1330*35238bceSAndroid Build Coastguard Worker }
1331*35238bceSAndroid Build Coastguard Worker }
1332*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1333*35238bceSAndroid Build Coastguard Worker }
1334*35238bceSAndroid Build Coastguard Worker
imul_extended_invalid_msb(NegativeTestContext & ctx)1335*35238bceSAndroid Build Coastguard Worker void imul_extended_invalid_msb(NegativeTestContext &ctx)
1336*35238bceSAndroid Build Coastguard Worker {
1337*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1338*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1339*35238bceSAndroid Build Coastguard Worker
1340*35238bceSAndroid Build Coastguard Worker ctx.beginSection("imulExtended: Invalid msb type.");
1341*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1342*35238bceSAndroid Build Coastguard Worker {
1343*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1344*35238bceSAndroid Build Coastguard Worker {
1345*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1346*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
1347*35238bceSAndroid Build Coastguard Worker {
1348*35238bceSAndroid Build Coastguard Worker {
1349*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1350*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_IMUL_EXTENDED, s_intTypes[dataTypeNdx],
1351*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_floatTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1352*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1353*35238bceSAndroid Build Coastguard Worker }
1354*35238bceSAndroid Build Coastguard Worker {
1355*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1356*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_IMUL_EXTENDED, s_intTypes[dataTypeNdx],
1357*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_uintTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1358*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1359*35238bceSAndroid Build Coastguard Worker }
1360*35238bceSAndroid Build Coastguard Worker
1361*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx2)
1362*35238bceSAndroid Build Coastguard Worker {
1363*35238bceSAndroid Build Coastguard Worker if (s_intTypes[dataTypeNdx2] == s_intTypes[dataTypeNdx])
1364*35238bceSAndroid Build Coastguard Worker continue;
1365*35238bceSAndroid Build Coastguard Worker
1366*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1367*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_IMUL_EXTENDED, s_intTypes[dataTypeNdx],
1368*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx2], s_intTypes[dataTypeNdx]));
1369*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1370*35238bceSAndroid Build Coastguard Worker }
1371*35238bceSAndroid Build Coastguard Worker }
1372*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1373*35238bceSAndroid Build Coastguard Worker }
1374*35238bceSAndroid Build Coastguard Worker }
1375*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1376*35238bceSAndroid Build Coastguard Worker }
1377*35238bceSAndroid Build Coastguard Worker
imul_extended_invalid_lsb(NegativeTestContext & ctx)1378*35238bceSAndroid Build Coastguard Worker void imul_extended_invalid_lsb(NegativeTestContext &ctx)
1379*35238bceSAndroid Build Coastguard Worker {
1380*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1381*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1382*35238bceSAndroid Build Coastguard Worker
1383*35238bceSAndroid Build Coastguard Worker ctx.beginSection("imulExtended: Invalid lsb type.");
1384*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1385*35238bceSAndroid Build Coastguard Worker {
1386*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1387*35238bceSAndroid Build Coastguard Worker {
1388*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1389*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
1390*35238bceSAndroid Build Coastguard Worker {
1391*35238bceSAndroid Build Coastguard Worker {
1392*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1393*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_IMUL_EXTENDED, s_intTypes[dataTypeNdx],
1394*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx], s_floatTypes[dataTypeNdx]));
1395*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1396*35238bceSAndroid Build Coastguard Worker }
1397*35238bceSAndroid Build Coastguard Worker {
1398*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1399*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_IMUL_EXTENDED, s_intTypes[dataTypeNdx],
1400*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
1401*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1402*35238bceSAndroid Build Coastguard Worker }
1403*35238bceSAndroid Build Coastguard Worker
1404*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx2)
1405*35238bceSAndroid Build Coastguard Worker {
1406*35238bceSAndroid Build Coastguard Worker if (s_intTypes[dataTypeNdx2] == s_intTypes[dataTypeNdx])
1407*35238bceSAndroid Build Coastguard Worker continue;
1408*35238bceSAndroid Build Coastguard Worker
1409*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceMulExtended(
1410*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_IMUL_EXTENDED, s_intTypes[dataTypeNdx],
1411*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx2]));
1412*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1413*35238bceSAndroid Build Coastguard Worker }
1414*35238bceSAndroid Build Coastguard Worker }
1415*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1416*35238bceSAndroid Build Coastguard Worker }
1417*35238bceSAndroid Build Coastguard Worker }
1418*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1419*35238bceSAndroid Build Coastguard Worker }
1420*35238bceSAndroid Build Coastguard Worker
1421*35238bceSAndroid Build Coastguard Worker // frexp, ldexp
genShaderSourceFrexpLdexp(NegativeTestContext & ctx,glu::ShaderType shaderType,ShaderFunction function,glu::DataType xDataType,glu::DataType expDataType)1422*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceFrexpLdexp(NegativeTestContext &ctx, glu::ShaderType shaderType, ShaderFunction function,
1423*35238bceSAndroid Build Coastguard Worker glu::DataType xDataType, glu::DataType expDataType)
1424*35238bceSAndroid Build Coastguard Worker {
1425*35238bceSAndroid Build Coastguard Worker DE_ASSERT(function == SHADER_FUNCTION_FREXP || function == SHADER_FUNCTION_LDEXP);
1426*35238bceSAndroid Build Coastguard Worker
1427*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
1428*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
1429*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
1430*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
1431*35238bceSAndroid Build Coastguard Worker << "\n"
1432*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << "void main(void)\n"
1433*35238bceSAndroid Build Coastguard Worker << "{\n"
1434*35238bceSAndroid Build Coastguard Worker << " " << declareAndInitializeShaderVariable(xDataType, "x") << " "
1435*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(expDataType, "exp");
1436*35238bceSAndroid Build Coastguard Worker
1437*35238bceSAndroid Build Coastguard Worker switch (function)
1438*35238bceSAndroid Build Coastguard Worker {
1439*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_FREXP:
1440*35238bceSAndroid Build Coastguard Worker source << " frexp(x, exp);\n";
1441*35238bceSAndroid Build Coastguard Worker break;
1442*35238bceSAndroid Build Coastguard Worker
1443*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_LDEXP:
1444*35238bceSAndroid Build Coastguard Worker source << " ldexp(x, exp);\n";
1445*35238bceSAndroid Build Coastguard Worker break;
1446*35238bceSAndroid Build Coastguard Worker
1447*35238bceSAndroid Build Coastguard Worker default:
1448*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported shader function.");
1449*35238bceSAndroid Build Coastguard Worker }
1450*35238bceSAndroid Build Coastguard Worker
1451*35238bceSAndroid Build Coastguard Worker source << "}\n";
1452*35238bceSAndroid Build Coastguard Worker
1453*35238bceSAndroid Build Coastguard Worker return source.str();
1454*35238bceSAndroid Build Coastguard Worker }
1455*35238bceSAndroid Build Coastguard Worker
frexp_invalid_x(NegativeTestContext & ctx)1456*35238bceSAndroid Build Coastguard Worker void frexp_invalid_x(NegativeTestContext &ctx)
1457*35238bceSAndroid Build Coastguard Worker {
1458*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1459*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1460*35238bceSAndroid Build Coastguard Worker
1461*35238bceSAndroid Build Coastguard Worker ctx.beginSection("frexp: Invalid x type.");
1462*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1463*35238bceSAndroid Build Coastguard Worker {
1464*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1465*35238bceSAndroid Build Coastguard Worker {
1466*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1467*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
1468*35238bceSAndroid Build Coastguard Worker {
1469*35238bceSAndroid Build Coastguard Worker {
1470*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
1471*35238bceSAndroid Build Coastguard Worker genShaderSourceFrexpLdexp(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_FREXP,
1472*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1473*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1474*35238bceSAndroid Build Coastguard Worker }
1475*35238bceSAndroid Build Coastguard Worker {
1476*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
1477*35238bceSAndroid Build Coastguard Worker genShaderSourceFrexpLdexp(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_FREXP,
1478*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1479*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1480*35238bceSAndroid Build Coastguard Worker }
1481*35238bceSAndroid Build Coastguard Worker }
1482*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1483*35238bceSAndroid Build Coastguard Worker }
1484*35238bceSAndroid Build Coastguard Worker }
1485*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1486*35238bceSAndroid Build Coastguard Worker }
1487*35238bceSAndroid Build Coastguard Worker
frexp_invalid_exp(NegativeTestContext & ctx)1488*35238bceSAndroid Build Coastguard Worker void frexp_invalid_exp(NegativeTestContext &ctx)
1489*35238bceSAndroid Build Coastguard Worker {
1490*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1491*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1492*35238bceSAndroid Build Coastguard Worker
1493*35238bceSAndroid Build Coastguard Worker ctx.beginSection("frexp: Invalid exp type.");
1494*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1495*35238bceSAndroid Build Coastguard Worker {
1496*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1497*35238bceSAndroid Build Coastguard Worker {
1498*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1499*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
1500*35238bceSAndroid Build Coastguard Worker {
1501*35238bceSAndroid Build Coastguard Worker {
1502*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
1503*35238bceSAndroid Build Coastguard Worker genShaderSourceFrexpLdexp(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_FREXP,
1504*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
1505*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1506*35238bceSAndroid Build Coastguard Worker }
1507*35238bceSAndroid Build Coastguard Worker {
1508*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
1509*35238bceSAndroid Build Coastguard Worker genShaderSourceFrexpLdexp(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_FREXP,
1510*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], s_floatTypes[dataTypeNdx]));
1511*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1512*35238bceSAndroid Build Coastguard Worker }
1513*35238bceSAndroid Build Coastguard Worker }
1514*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1515*35238bceSAndroid Build Coastguard Worker }
1516*35238bceSAndroid Build Coastguard Worker }
1517*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1518*35238bceSAndroid Build Coastguard Worker }
1519*35238bceSAndroid Build Coastguard Worker
ldexp_invalid_x(NegativeTestContext & ctx)1520*35238bceSAndroid Build Coastguard Worker void ldexp_invalid_x(NegativeTestContext &ctx)
1521*35238bceSAndroid Build Coastguard Worker {
1522*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1523*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1524*35238bceSAndroid Build Coastguard Worker
1525*35238bceSAndroid Build Coastguard Worker ctx.beginSection("ldexp: Invalid x type.");
1526*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1527*35238bceSAndroid Build Coastguard Worker {
1528*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1529*35238bceSAndroid Build Coastguard Worker {
1530*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1531*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
1532*35238bceSAndroid Build Coastguard Worker {
1533*35238bceSAndroid Build Coastguard Worker {
1534*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
1535*35238bceSAndroid Build Coastguard Worker genShaderSourceFrexpLdexp(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_LDEXP,
1536*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1537*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1538*35238bceSAndroid Build Coastguard Worker }
1539*35238bceSAndroid Build Coastguard Worker {
1540*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
1541*35238bceSAndroid Build Coastguard Worker genShaderSourceFrexpLdexp(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_LDEXP,
1542*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], s_intTypes[dataTypeNdx]));
1543*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1544*35238bceSAndroid Build Coastguard Worker }
1545*35238bceSAndroid Build Coastguard Worker }
1546*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1547*35238bceSAndroid Build Coastguard Worker }
1548*35238bceSAndroid Build Coastguard Worker }
1549*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1550*35238bceSAndroid Build Coastguard Worker }
1551*35238bceSAndroid Build Coastguard Worker
ldexp_invalid_exp(NegativeTestContext & ctx)1552*35238bceSAndroid Build Coastguard Worker void ldexp_invalid_exp(NegativeTestContext &ctx)
1553*35238bceSAndroid Build Coastguard Worker {
1554*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1555*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1556*35238bceSAndroid Build Coastguard Worker
1557*35238bceSAndroid Build Coastguard Worker ctx.beginSection("ldexp: Invalid exp type.");
1558*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1559*35238bceSAndroid Build Coastguard Worker {
1560*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1561*35238bceSAndroid Build Coastguard Worker {
1562*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1563*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
1564*35238bceSAndroid Build Coastguard Worker {
1565*35238bceSAndroid Build Coastguard Worker {
1566*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
1567*35238bceSAndroid Build Coastguard Worker genShaderSourceFrexpLdexp(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_LDEXP,
1568*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], s_uintTypes[dataTypeNdx]));
1569*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1570*35238bceSAndroid Build Coastguard Worker }
1571*35238bceSAndroid Build Coastguard Worker {
1572*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
1573*35238bceSAndroid Build Coastguard Worker genShaderSourceFrexpLdexp(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_LDEXP,
1574*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], s_floatTypes[dataTypeNdx]));
1575*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1576*35238bceSAndroid Build Coastguard Worker }
1577*35238bceSAndroid Build Coastguard Worker }
1578*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1579*35238bceSAndroid Build Coastguard Worker }
1580*35238bceSAndroid Build Coastguard Worker }
1581*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1582*35238bceSAndroid Build Coastguard Worker }
1583*35238bceSAndroid Build Coastguard Worker
1584*35238bceSAndroid Build Coastguard Worker // packUnorm4x8, packSnorm4x8, unpackSnorm4x8, unpackUnorm4x8
genShaderSourcePackUnpackNorm4x8(NegativeTestContext & ctx,glu::ShaderType shaderType,ShaderFunction function,glu::DataType dataType)1585*35238bceSAndroid Build Coastguard Worker std::string genShaderSourcePackUnpackNorm4x8(NegativeTestContext &ctx, glu::ShaderType shaderType,
1586*35238bceSAndroid Build Coastguard Worker ShaderFunction function, glu::DataType dataType)
1587*35238bceSAndroid Build Coastguard Worker {
1588*35238bceSAndroid Build Coastguard Worker DE_ASSERT(function == SHADER_FUNCTION_PACK_UNORM_4X8 || function == SHADER_FUNCTION_PACK_SNORM_4X8 ||
1589*35238bceSAndroid Build Coastguard Worker function == SHADER_FUNCTION_UNPACK_SNORM_4X8 || function == SHADER_FUNCTION_UNPACK_UNORM_4X8);
1590*35238bceSAndroid Build Coastguard Worker
1591*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
1592*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
1593*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
1594*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
1595*35238bceSAndroid Build Coastguard Worker << "\n"
1596*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << "void main(void)\n"
1597*35238bceSAndroid Build Coastguard Worker << "{\n";
1598*35238bceSAndroid Build Coastguard Worker
1599*35238bceSAndroid Build Coastguard Worker switch (function)
1600*35238bceSAndroid Build Coastguard Worker {
1601*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_PACK_UNORM_4X8:
1602*35238bceSAndroid Build Coastguard Worker source << " mediump " << declareAndInitializeShaderVariable(dataType, "v") << " packUnorm4x8(v);\n";
1603*35238bceSAndroid Build Coastguard Worker break;
1604*35238bceSAndroid Build Coastguard Worker
1605*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_PACK_SNORM_4X8:
1606*35238bceSAndroid Build Coastguard Worker source << " mediump " << declareAndInitializeShaderVariable(dataType, "v") << " packSnorm4x8(v);\n";
1607*35238bceSAndroid Build Coastguard Worker break;
1608*35238bceSAndroid Build Coastguard Worker
1609*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_UNPACK_SNORM_4X8:
1610*35238bceSAndroid Build Coastguard Worker source << " highp " << declareAndInitializeShaderVariable(dataType, "p") << " unpackSnorm4x8(p);\n";
1611*35238bceSAndroid Build Coastguard Worker break;
1612*35238bceSAndroid Build Coastguard Worker
1613*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_UNPACK_UNORM_4X8:
1614*35238bceSAndroid Build Coastguard Worker source << " highp " << declareAndInitializeShaderVariable(dataType, "p") << " unpackUnorm4x8(p);\n";
1615*35238bceSAndroid Build Coastguard Worker break;
1616*35238bceSAndroid Build Coastguard Worker
1617*35238bceSAndroid Build Coastguard Worker default:
1618*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported shader function.");
1619*35238bceSAndroid Build Coastguard Worker }
1620*35238bceSAndroid Build Coastguard Worker
1621*35238bceSAndroid Build Coastguard Worker source << "}\n";
1622*35238bceSAndroid Build Coastguard Worker
1623*35238bceSAndroid Build Coastguard Worker return source.str();
1624*35238bceSAndroid Build Coastguard Worker }
1625*35238bceSAndroid Build Coastguard Worker
pack_unorm_4x8(NegativeTestContext & ctx)1626*35238bceSAndroid Build Coastguard Worker void pack_unorm_4x8(NegativeTestContext &ctx)
1627*35238bceSAndroid Build Coastguard Worker {
1628*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1629*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1630*35238bceSAndroid Build Coastguard Worker
1631*35238bceSAndroid Build Coastguard Worker ctx.beginSection("packUnorm4x8: Invalid v type.");
1632*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1633*35238bceSAndroid Build Coastguard Worker {
1634*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1635*35238bceSAndroid Build Coastguard Worker {
1636*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1637*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
1638*35238bceSAndroid Build Coastguard Worker {
1639*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] == glu::TYPE_FLOAT_VEC4)
1640*35238bceSAndroid Build Coastguard Worker continue;
1641*35238bceSAndroid Build Coastguard Worker
1642*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourcePackUnpackNorm4x8(
1643*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_PACK_UNORM_4X8, s_floatTypes[dataTypeNdx]));
1644*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1645*35238bceSAndroid Build Coastguard Worker }
1646*35238bceSAndroid Build Coastguard Worker
1647*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
1648*35238bceSAndroid Build Coastguard Worker {
1649*35238bceSAndroid Build Coastguard Worker {
1650*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourcePackUnpackNorm4x8(
1651*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_PACK_UNORM_4X8, s_intTypes[dataTypeNdx]));
1652*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1653*35238bceSAndroid Build Coastguard Worker }
1654*35238bceSAndroid Build Coastguard Worker {
1655*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourcePackUnpackNorm4x8(
1656*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_PACK_UNORM_4X8, s_uintTypes[dataTypeNdx]));
1657*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1658*35238bceSAndroid Build Coastguard Worker }
1659*35238bceSAndroid Build Coastguard Worker }
1660*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1661*35238bceSAndroid Build Coastguard Worker }
1662*35238bceSAndroid Build Coastguard Worker }
1663*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1664*35238bceSAndroid Build Coastguard Worker }
1665*35238bceSAndroid Build Coastguard Worker
pack_snorm_4x8(NegativeTestContext & ctx)1666*35238bceSAndroid Build Coastguard Worker void pack_snorm_4x8(NegativeTestContext &ctx)
1667*35238bceSAndroid Build Coastguard Worker {
1668*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1669*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1670*35238bceSAndroid Build Coastguard Worker
1671*35238bceSAndroid Build Coastguard Worker ctx.beginSection("packSnorm4x8: Invalid v type.");
1672*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1673*35238bceSAndroid Build Coastguard Worker {
1674*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1675*35238bceSAndroid Build Coastguard Worker {
1676*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1677*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
1678*35238bceSAndroid Build Coastguard Worker {
1679*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] == glu::TYPE_FLOAT_VEC4)
1680*35238bceSAndroid Build Coastguard Worker continue;
1681*35238bceSAndroid Build Coastguard Worker
1682*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourcePackUnpackNorm4x8(
1683*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_PACK_SNORM_4X8, s_floatTypes[dataTypeNdx]));
1684*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1685*35238bceSAndroid Build Coastguard Worker }
1686*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
1687*35238bceSAndroid Build Coastguard Worker {
1688*35238bceSAndroid Build Coastguard Worker {
1689*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourcePackUnpackNorm4x8(
1690*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_PACK_SNORM_4X8, s_intTypes[dataTypeNdx]));
1691*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1692*35238bceSAndroid Build Coastguard Worker }
1693*35238bceSAndroid Build Coastguard Worker {
1694*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourcePackUnpackNorm4x8(
1695*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_PACK_SNORM_4X8, s_uintTypes[dataTypeNdx]));
1696*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1697*35238bceSAndroid Build Coastguard Worker }
1698*35238bceSAndroid Build Coastguard Worker }
1699*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1700*35238bceSAndroid Build Coastguard Worker }
1701*35238bceSAndroid Build Coastguard Worker }
1702*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1703*35238bceSAndroid Build Coastguard Worker }
1704*35238bceSAndroid Build Coastguard Worker
unpack_snorm_4x8(NegativeTestContext & ctx)1705*35238bceSAndroid Build Coastguard Worker void unpack_snorm_4x8(NegativeTestContext &ctx)
1706*35238bceSAndroid Build Coastguard Worker {
1707*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1708*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1709*35238bceSAndroid Build Coastguard Worker
1710*35238bceSAndroid Build Coastguard Worker ctx.beginSection("unpackSnorm4x8: Invalid v type.");
1711*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1712*35238bceSAndroid Build Coastguard Worker {
1713*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1714*35238bceSAndroid Build Coastguard Worker {
1715*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1716*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_uintTypes); ++dataTypeNdx)
1717*35238bceSAndroid Build Coastguard Worker {
1718*35238bceSAndroid Build Coastguard Worker if (s_uintTypes[dataTypeNdx] == glu::TYPE_UINT)
1719*35238bceSAndroid Build Coastguard Worker continue;
1720*35238bceSAndroid Build Coastguard Worker
1721*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourcePackUnpackNorm4x8(
1722*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UNPACK_SNORM_4X8, s_uintTypes[dataTypeNdx]));
1723*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1724*35238bceSAndroid Build Coastguard Worker }
1725*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
1726*35238bceSAndroid Build Coastguard Worker {
1727*35238bceSAndroid Build Coastguard Worker {
1728*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourcePackUnpackNorm4x8(
1729*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UNPACK_SNORM_4X8, s_intTypes[dataTypeNdx]));
1730*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1731*35238bceSAndroid Build Coastguard Worker }
1732*35238bceSAndroid Build Coastguard Worker {
1733*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourcePackUnpackNorm4x8(
1734*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UNPACK_SNORM_4X8, s_floatTypes[dataTypeNdx]));
1735*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1736*35238bceSAndroid Build Coastguard Worker }
1737*35238bceSAndroid Build Coastguard Worker }
1738*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1739*35238bceSAndroid Build Coastguard Worker }
1740*35238bceSAndroid Build Coastguard Worker }
1741*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1742*35238bceSAndroid Build Coastguard Worker }
1743*35238bceSAndroid Build Coastguard Worker
unpack_unorm_4x8(NegativeTestContext & ctx)1744*35238bceSAndroid Build Coastguard Worker void unpack_unorm_4x8(NegativeTestContext &ctx)
1745*35238bceSAndroid Build Coastguard Worker {
1746*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1747*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1748*35238bceSAndroid Build Coastguard Worker
1749*35238bceSAndroid Build Coastguard Worker ctx.beginSection("unpackUnorm4x8: Invalid v type.");
1750*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1751*35238bceSAndroid Build Coastguard Worker {
1752*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1753*35238bceSAndroid Build Coastguard Worker {
1754*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1755*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_uintTypes); ++dataTypeNdx)
1756*35238bceSAndroid Build Coastguard Worker {
1757*35238bceSAndroid Build Coastguard Worker if (s_uintTypes[dataTypeNdx] == glu::TYPE_UINT)
1758*35238bceSAndroid Build Coastguard Worker continue;
1759*35238bceSAndroid Build Coastguard Worker
1760*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourcePackUnpackNorm4x8(
1761*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UNPACK_UNORM_4X8, s_uintTypes[dataTypeNdx]));
1762*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1763*35238bceSAndroid Build Coastguard Worker }
1764*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_intTypes); ++dataTypeNdx)
1765*35238bceSAndroid Build Coastguard Worker {
1766*35238bceSAndroid Build Coastguard Worker {
1767*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourcePackUnpackNorm4x8(
1768*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UNPACK_UNORM_4X8, s_intTypes[dataTypeNdx]));
1769*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1770*35238bceSAndroid Build Coastguard Worker }
1771*35238bceSAndroid Build Coastguard Worker {
1772*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourcePackUnpackNorm4x8(
1773*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_UNPACK_UNORM_4X8, s_floatTypes[dataTypeNdx]));
1774*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1775*35238bceSAndroid Build Coastguard Worker }
1776*35238bceSAndroid Build Coastguard Worker }
1777*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1778*35238bceSAndroid Build Coastguard Worker }
1779*35238bceSAndroid Build Coastguard Worker }
1780*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1781*35238bceSAndroid Build Coastguard Worker }
1782*35238bceSAndroid Build Coastguard Worker
1783*35238bceSAndroid Build Coastguard Worker // textureSize
genShaderSourceTextureSize_sampler(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType samplerDataType,glu::DataType lodDataType)1784*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTextureSize_sampler(NegativeTestContext &ctx, glu::ShaderType shaderType,
1785*35238bceSAndroid Build Coastguard Worker glu::DataType samplerDataType, glu::DataType lodDataType)
1786*35238bceSAndroid Build Coastguard Worker {
1787*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
1788*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
1789*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
1790*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
1791*35238bceSAndroid Build Coastguard Worker << "\n"
1792*35238bceSAndroid Build Coastguard Worker << getShaderExtensionDeclaration(getDataTypeExtension(samplerDataType))
1793*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << declareShaderUniform(samplerDataType, "sampler")
1794*35238bceSAndroid Build Coastguard Worker << "void main(void)\n"
1795*35238bceSAndroid Build Coastguard Worker << "{\n";
1796*35238bceSAndroid Build Coastguard Worker
1797*35238bceSAndroid Build Coastguard Worker switch (samplerDataType)
1798*35238bceSAndroid Build Coastguard Worker {
1799*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_2D:
1800*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_2D:
1801*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_2D:
1802*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_3D:
1803*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_3D:
1804*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_3D:
1805*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_CUBE:
1806*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_CUBE:
1807*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_CUBE:
1808*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_2D_ARRAY:
1809*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_2D_ARRAY:
1810*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_2D_ARRAY:
1811*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_CUBE_SHADOW:
1812*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_2D_SHADOW:
1813*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_2D_ARRAY_SHADOW:
1814*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_CUBE_ARRAY:
1815*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_CUBE_ARRAY:
1816*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_CUBE_ARRAY:
1817*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW:
1818*35238bceSAndroid Build Coastguard Worker source << " textureSize(sampler);\n";
1819*35238bceSAndroid Build Coastguard Worker break;
1820*35238bceSAndroid Build Coastguard Worker
1821*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_2D_MULTISAMPLE:
1822*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE:
1823*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE:
1824*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_BUFFER:
1825*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_BUFFER:
1826*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_BUFFER:
1827*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY:
1828*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
1829*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY:
1830*35238bceSAndroid Build Coastguard Worker source << " " << declareAndInitializeShaderVariable(lodDataType, "lod")
1831*35238bceSAndroid Build Coastguard Worker << " textureSize(sampler, lod);\n";
1832*35238bceSAndroid Build Coastguard Worker break;
1833*35238bceSAndroid Build Coastguard Worker
1834*35238bceSAndroid Build Coastguard Worker default:
1835*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported data type.");
1836*35238bceSAndroid Build Coastguard Worker }
1837*35238bceSAndroid Build Coastguard Worker
1838*35238bceSAndroid Build Coastguard Worker source << "}\n";
1839*35238bceSAndroid Build Coastguard Worker
1840*35238bceSAndroid Build Coastguard Worker return source.str();
1841*35238bceSAndroid Build Coastguard Worker }
1842*35238bceSAndroid Build Coastguard Worker
checkSupport(NegativeTestContext & ctx)1843*35238bceSAndroid Build Coastguard Worker static bool checkSupport(NegativeTestContext &ctx)
1844*35238bceSAndroid Build Coastguard Worker {
1845*35238bceSAndroid Build Coastguard Worker auto ctxType = ctx.getRenderContext().getType();
1846*35238bceSAndroid Build Coastguard Worker return contextSupports(ctxType, glu::ApiType::es(3, 2)) || contextSupports(ctxType, glu::ApiType::core(4, 5));
1847*35238bceSAndroid Build Coastguard Worker }
1848*35238bceSAndroid Build Coastguard Worker
texture_size_invalid_sampler(NegativeTestContext & ctx)1849*35238bceSAndroid Build Coastguard Worker void texture_size_invalid_sampler(NegativeTestContext &ctx)
1850*35238bceSAndroid Build Coastguard Worker {
1851*35238bceSAndroid Build Coastguard Worker ctx.beginSection(
1852*35238bceSAndroid Build Coastguard Worker "textureSize: Invalid sampler type - some overloads take two arguments while others take only one.");
1853*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1854*35238bceSAndroid Build Coastguard Worker {
1855*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1856*35238bceSAndroid Build Coastguard Worker {
1857*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1858*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_samplerTypes); ++dataTypeNdx)
1859*35238bceSAndroid Build Coastguard Worker {
1860*35238bceSAndroid Build Coastguard Worker if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(s_samplerTypes[dataTypeNdx])))
1861*35238bceSAndroid Build Coastguard Worker {
1862*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify sampler data type: " +
1863*35238bceSAndroid Build Coastguard Worker std::string(getDataTypeName(s_samplerTypes[dataTypeNdx])));
1864*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureSize_sampler(
1865*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], s_samplerTypes[dataTypeNdx], glu::TYPE_INT));
1866*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1867*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1868*35238bceSAndroid Build Coastguard Worker }
1869*35238bceSAndroid Build Coastguard Worker }
1870*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1871*35238bceSAndroid Build Coastguard Worker }
1872*35238bceSAndroid Build Coastguard Worker }
1873*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1874*35238bceSAndroid Build Coastguard Worker }
1875*35238bceSAndroid Build Coastguard Worker
genShaderSourceTextureSize_lod(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType samplerDataType,glu::DataType lodDataType)1876*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTextureSize_lod(NegativeTestContext &ctx, glu::ShaderType shaderType,
1877*35238bceSAndroid Build Coastguard Worker glu::DataType samplerDataType, glu::DataType lodDataType)
1878*35238bceSAndroid Build Coastguard Worker {
1879*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
1880*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
1881*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
1882*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
1883*35238bceSAndroid Build Coastguard Worker << "\n"
1884*35238bceSAndroid Build Coastguard Worker << getShaderExtensionDeclaration(getDataTypeExtension(samplerDataType))
1885*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << declareShaderUniform(samplerDataType, "sampler")
1886*35238bceSAndroid Build Coastguard Worker << "void main(void)\n"
1887*35238bceSAndroid Build Coastguard Worker << "{\n"
1888*35238bceSAndroid Build Coastguard Worker << " " << declareAndInitializeShaderVariable(lodDataType, "lod") << " textureSize(sampler, lod);\n"
1889*35238bceSAndroid Build Coastguard Worker << "}\n";
1890*35238bceSAndroid Build Coastguard Worker
1891*35238bceSAndroid Build Coastguard Worker return source.str();
1892*35238bceSAndroid Build Coastguard Worker }
1893*35238bceSAndroid Build Coastguard Worker
texture_size_invalid_lod(NegativeTestContext & ctx)1894*35238bceSAndroid Build Coastguard Worker void texture_size_invalid_lod(NegativeTestContext &ctx)
1895*35238bceSAndroid Build Coastguard Worker {
1896*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureSize: Invalid lod type.");
1897*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1898*35238bceSAndroid Build Coastguard Worker {
1899*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1900*35238bceSAndroid Build Coastguard Worker {
1901*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1902*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_samplerTypes); ++dataTypeNdx)
1903*35238bceSAndroid Build Coastguard Worker {
1904*35238bceSAndroid Build Coastguard Worker if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(s_samplerTypes[dataTypeNdx])))
1905*35238bceSAndroid Build Coastguard Worker {
1906*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify sampler/lod data type" +
1907*35238bceSAndroid Build Coastguard Worker std::string(getDataTypeName(s_samplerTypes[dataTypeNdx])));
1908*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_nonScalarIntTypes); ++dataTypeNdx2)
1909*35238bceSAndroid Build Coastguard Worker {
1910*35238bceSAndroid Build Coastguard Worker if (s_nonScalarIntTypes[dataTypeNdx2] == glu::TYPE_INT)
1911*35238bceSAndroid Build Coastguard Worker continue;
1912*35238bceSAndroid Build Coastguard Worker
1913*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureSize_lod(
1914*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], s_samplerTypes[dataTypeNdx], s_nonScalarIntTypes[dataTypeNdx2]));
1915*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1916*35238bceSAndroid Build Coastguard Worker }
1917*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1918*35238bceSAndroid Build Coastguard Worker }
1919*35238bceSAndroid Build Coastguard Worker }
1920*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1921*35238bceSAndroid Build Coastguard Worker }
1922*35238bceSAndroid Build Coastguard Worker }
1923*35238bceSAndroid Build Coastguard Worker ctx.endSection();
1924*35238bceSAndroid Build Coastguard Worker }
1925*35238bceSAndroid Build Coastguard Worker
1926*35238bceSAndroid Build Coastguard Worker // texture
genShaderSourceTexture(NegativeTestContext & ctx,glu::ShaderType shaderType,FunctionTextureModes mode,glu::DataType samplerDataType,glu::DataType pDataType,glu::DataType thirdArgumentDataType)1927*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTexture(NegativeTestContext &ctx, glu::ShaderType shaderType, FunctionTextureModes mode,
1928*35238bceSAndroid Build Coastguard Worker glu::DataType samplerDataType, glu::DataType pDataType,
1929*35238bceSAndroid Build Coastguard Worker glu::DataType thirdArgumentDataType)
1930*35238bceSAndroid Build Coastguard Worker {
1931*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
1932*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
1933*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
1934*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
1935*35238bceSAndroid Build Coastguard Worker << "\n"
1936*35238bceSAndroid Build Coastguard Worker << getShaderExtensionDeclaration(getDataTypeExtension(samplerDataType))
1937*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << declareShaderUniform(samplerDataType, "sampler")
1938*35238bceSAndroid Build Coastguard Worker << "void main(void)\n"
1939*35238bceSAndroid Build Coastguard Worker << "{\n"
1940*35238bceSAndroid Build Coastguard Worker << " highp " << declareAndInitializeShaderVariable(pDataType, "lod");
1941*35238bceSAndroid Build Coastguard Worker
1942*35238bceSAndroid Build Coastguard Worker switch (mode)
1943*35238bceSAndroid Build Coastguard Worker {
1944*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTURE_MODE_NO_BIAS_NO_COMPARE:
1945*35238bceSAndroid Build Coastguard Worker source << " texture(sampler, lod);\n";
1946*35238bceSAndroid Build Coastguard Worker break;
1947*35238bceSAndroid Build Coastguard Worker
1948*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTURE_MODE_BIAS_OR_COMPARE:
1949*35238bceSAndroid Build Coastguard Worker source << " highp " << declareAndInitializeShaderVariable(thirdArgumentDataType, "thirdArgument")
1950*35238bceSAndroid Build Coastguard Worker << " texture(sampler, lod, thirdArgument);\n";
1951*35238bceSAndroid Build Coastguard Worker break;
1952*35238bceSAndroid Build Coastguard Worker
1953*35238bceSAndroid Build Coastguard Worker default:
1954*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported shader function overload.");
1955*35238bceSAndroid Build Coastguard Worker }
1956*35238bceSAndroid Build Coastguard Worker
1957*35238bceSAndroid Build Coastguard Worker source << "}\n";
1958*35238bceSAndroid Build Coastguard Worker
1959*35238bceSAndroid Build Coastguard Worker return source.str();
1960*35238bceSAndroid Build Coastguard Worker }
1961*35238bceSAndroid Build Coastguard Worker
genShaderSourceTexture(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType samplerDataType,glu::DataType pDataType)1962*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTexture(NegativeTestContext &ctx, glu::ShaderType shaderType, glu::DataType samplerDataType,
1963*35238bceSAndroid Build Coastguard Worker glu::DataType pDataType)
1964*35238bceSAndroid Build Coastguard Worker {
1965*35238bceSAndroid Build Coastguard Worker return genShaderSourceTexture(ctx, shaderType, FUNCTION_TEXTURE_MODE_NO_BIAS_NO_COMPARE, samplerDataType, pDataType,
1966*35238bceSAndroid Build Coastguard Worker glu::TYPE_LAST);
1967*35238bceSAndroid Build Coastguard Worker }
1968*35238bceSAndroid Build Coastguard Worker
genShaderSourceTexture(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType samplerDataType,glu::DataType pDataType,glu::DataType thirdArgumentDataType)1969*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTexture(NegativeTestContext &ctx, glu::ShaderType shaderType, glu::DataType samplerDataType,
1970*35238bceSAndroid Build Coastguard Worker glu::DataType pDataType, glu::DataType thirdArgumentDataType)
1971*35238bceSAndroid Build Coastguard Worker {
1972*35238bceSAndroid Build Coastguard Worker return genShaderSourceTexture(ctx, shaderType, FUNCTION_TEXTURE_MODE_BIAS_OR_COMPARE, samplerDataType, pDataType,
1973*35238bceSAndroid Build Coastguard Worker thirdArgumentDataType);
1974*35238bceSAndroid Build Coastguard Worker }
1975*35238bceSAndroid Build Coastguard Worker
texture_invalid_p(NegativeTestContext & ctx)1976*35238bceSAndroid Build Coastguard Worker void texture_invalid_p(NegativeTestContext &ctx)
1977*35238bceSAndroid Build Coastguard Worker {
1978*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
1979*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
1980*35238bceSAndroid Build Coastguard Worker
1981*35238bceSAndroid Build Coastguard Worker ctx.beginSection("texture: Invalid P type.");
1982*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
1983*35238bceSAndroid Build Coastguard Worker {
1984*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
1985*35238bceSAndroid Build Coastguard Worker {
1986*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
1987*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
1988*35238bceSAndroid Build Coastguard Worker {
1989*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D
1990*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT_VEC2)
1991*35238bceSAndroid Build Coastguard Worker {
1992*35238bceSAndroid Build Coastguard Worker {
1993*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
1994*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D, s_floatTypes[dataTypeNdx]));
1995*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
1996*35238bceSAndroid Build Coastguard Worker }
1997*35238bceSAndroid Build Coastguard Worker {
1998*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
1999*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D,
2000*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2001*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2002*35238bceSAndroid Build Coastguard Worker }
2003*35238bceSAndroid Build Coastguard Worker {
2004*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2005*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D, s_floatTypes[dataTypeNdx]));
2006*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2007*35238bceSAndroid Build Coastguard Worker }
2008*35238bceSAndroid Build Coastguard Worker {
2009*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2010*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D,
2011*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2012*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2013*35238bceSAndroid Build Coastguard Worker }
2014*35238bceSAndroid Build Coastguard Worker {
2015*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2016*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D, s_floatTypes[dataTypeNdx]));
2017*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2018*35238bceSAndroid Build Coastguard Worker }
2019*35238bceSAndroid Build Coastguard Worker {
2020*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2021*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D,
2022*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2023*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2024*35238bceSAndroid Build Coastguard Worker }
2025*35238bceSAndroid Build Coastguard Worker }
2026*35238bceSAndroid Build Coastguard Worker {
2027*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2028*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D, s_intTypes[dataTypeNdx]));
2029*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2030*35238bceSAndroid Build Coastguard Worker }
2031*35238bceSAndroid Build Coastguard Worker {
2032*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2033*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D, s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2034*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2035*35238bceSAndroid Build Coastguard Worker }
2036*35238bceSAndroid Build Coastguard Worker {
2037*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2038*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D, s_intTypes[dataTypeNdx]));
2039*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2040*35238bceSAndroid Build Coastguard Worker }
2041*35238bceSAndroid Build Coastguard Worker {
2042*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2043*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D, s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2044*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2045*35238bceSAndroid Build Coastguard Worker }
2046*35238bceSAndroid Build Coastguard Worker {
2047*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2048*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D, s_intTypes[dataTypeNdx]));
2049*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2050*35238bceSAndroid Build Coastguard Worker }
2051*35238bceSAndroid Build Coastguard Worker {
2052*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2053*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_2D,
2054*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2055*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2056*35238bceSAndroid Build Coastguard Worker }
2057*35238bceSAndroid Build Coastguard Worker {
2058*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2059*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D, s_uintTypes[dataTypeNdx]));
2060*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2061*35238bceSAndroid Build Coastguard Worker }
2062*35238bceSAndroid Build Coastguard Worker {
2063*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2064*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D, s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2065*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2066*35238bceSAndroid Build Coastguard Worker }
2067*35238bceSAndroid Build Coastguard Worker {
2068*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2069*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D, s_uintTypes[dataTypeNdx]));
2070*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2071*35238bceSAndroid Build Coastguard Worker }
2072*35238bceSAndroid Build Coastguard Worker {
2073*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2074*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_2D,
2075*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2076*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2077*35238bceSAndroid Build Coastguard Worker }
2078*35238bceSAndroid Build Coastguard Worker {
2079*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2080*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D, s_uintTypes[dataTypeNdx]));
2081*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2082*35238bceSAndroid Build Coastguard Worker }
2083*35238bceSAndroid Build Coastguard Worker {
2084*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2085*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_2D,
2086*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2087*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2088*35238bceSAndroid Build Coastguard Worker }
2089*35238bceSAndroid Build Coastguard Worker
2090*35238bceSAndroid Build Coastguard Worker // SAMPLER_3D
2091*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT_VEC3)
2092*35238bceSAndroid Build Coastguard Worker {
2093*35238bceSAndroid Build Coastguard Worker {
2094*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2095*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_3D, s_floatTypes[dataTypeNdx]));
2096*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2097*35238bceSAndroid Build Coastguard Worker }
2098*35238bceSAndroid Build Coastguard Worker {
2099*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2100*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_3D,
2101*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2102*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2103*35238bceSAndroid Build Coastguard Worker }
2104*35238bceSAndroid Build Coastguard Worker {
2105*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2106*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_3D, s_floatTypes[dataTypeNdx]));
2107*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2108*35238bceSAndroid Build Coastguard Worker }
2109*35238bceSAndroid Build Coastguard Worker {
2110*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2111*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_3D,
2112*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2113*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2114*35238bceSAndroid Build Coastguard Worker }
2115*35238bceSAndroid Build Coastguard Worker {
2116*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2117*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D, s_floatTypes[dataTypeNdx]));
2118*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2119*35238bceSAndroid Build Coastguard Worker }
2120*35238bceSAndroid Build Coastguard Worker {
2121*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2122*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D,
2123*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2124*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2125*35238bceSAndroid Build Coastguard Worker }
2126*35238bceSAndroid Build Coastguard Worker }
2127*35238bceSAndroid Build Coastguard Worker {
2128*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2129*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_3D, s_intTypes[dataTypeNdx]));
2130*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2131*35238bceSAndroid Build Coastguard Worker }
2132*35238bceSAndroid Build Coastguard Worker {
2133*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2134*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_3D, s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2135*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2136*35238bceSAndroid Build Coastguard Worker }
2137*35238bceSAndroid Build Coastguard Worker {
2138*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2139*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_3D, s_intTypes[dataTypeNdx]));
2140*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2141*35238bceSAndroid Build Coastguard Worker }
2142*35238bceSAndroid Build Coastguard Worker {
2143*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2144*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_3D, s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2145*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2146*35238bceSAndroid Build Coastguard Worker }
2147*35238bceSAndroid Build Coastguard Worker {
2148*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2149*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D, s_intTypes[dataTypeNdx]));
2150*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2151*35238bceSAndroid Build Coastguard Worker }
2152*35238bceSAndroid Build Coastguard Worker {
2153*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2154*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_3D,
2155*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2156*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2157*35238bceSAndroid Build Coastguard Worker }
2158*35238bceSAndroid Build Coastguard Worker {
2159*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2160*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_3D, s_uintTypes[dataTypeNdx]));
2161*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2162*35238bceSAndroid Build Coastguard Worker }
2163*35238bceSAndroid Build Coastguard Worker {
2164*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2165*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_3D, s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2166*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2167*35238bceSAndroid Build Coastguard Worker }
2168*35238bceSAndroid Build Coastguard Worker {
2169*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2170*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_3D, s_uintTypes[dataTypeNdx]));
2171*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2172*35238bceSAndroid Build Coastguard Worker }
2173*35238bceSAndroid Build Coastguard Worker {
2174*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2175*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_3D,
2176*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2177*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2178*35238bceSAndroid Build Coastguard Worker }
2179*35238bceSAndroid Build Coastguard Worker {
2180*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2181*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D, s_uintTypes[dataTypeNdx]));
2182*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2183*35238bceSAndroid Build Coastguard Worker }
2184*35238bceSAndroid Build Coastguard Worker {
2185*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2186*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_3D,
2187*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2188*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2189*35238bceSAndroid Build Coastguard Worker }
2190*35238bceSAndroid Build Coastguard Worker
2191*35238bceSAndroid Build Coastguard Worker // SAMPLER_CUBE
2192*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT_VEC3)
2193*35238bceSAndroid Build Coastguard Worker {
2194*35238bceSAndroid Build Coastguard Worker {
2195*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2196*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE, s_floatTypes[dataTypeNdx]));
2197*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2198*35238bceSAndroid Build Coastguard Worker }
2199*35238bceSAndroid Build Coastguard Worker {
2200*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2201*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE,
2202*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2203*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2204*35238bceSAndroid Build Coastguard Worker }
2205*35238bceSAndroid Build Coastguard Worker {
2206*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2207*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE, s_floatTypes[dataTypeNdx]));
2208*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2209*35238bceSAndroid Build Coastguard Worker }
2210*35238bceSAndroid Build Coastguard Worker {
2211*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2212*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE,
2213*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2214*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2215*35238bceSAndroid Build Coastguard Worker }
2216*35238bceSAndroid Build Coastguard Worker {
2217*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2218*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE, s_floatTypes[dataTypeNdx]));
2219*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2220*35238bceSAndroid Build Coastguard Worker }
2221*35238bceSAndroid Build Coastguard Worker {
2222*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2223*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE,
2224*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2225*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2226*35238bceSAndroid Build Coastguard Worker }
2227*35238bceSAndroid Build Coastguard Worker }
2228*35238bceSAndroid Build Coastguard Worker {{const std::string shaderSource(
2229*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE, s_intTypes[dataTypeNdx]));
2230*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2231*35238bceSAndroid Build Coastguard Worker }
2232*35238bceSAndroid Build Coastguard Worker {
2233*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE,
2234*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2235*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2236*35238bceSAndroid Build Coastguard Worker }
2237*35238bceSAndroid Build Coastguard Worker {
2238*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2239*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE, s_intTypes[dataTypeNdx]));
2240*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2241*35238bceSAndroid Build Coastguard Worker }
2242*35238bceSAndroid Build Coastguard Worker {
2243*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2244*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE, s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2245*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2246*35238bceSAndroid Build Coastguard Worker }
2247*35238bceSAndroid Build Coastguard Worker {
2248*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2249*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE, s_intTypes[dataTypeNdx]));
2250*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2251*35238bceSAndroid Build Coastguard Worker }
2252*35238bceSAndroid Build Coastguard Worker {
2253*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2254*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE, s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2255*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2256*35238bceSAndroid Build Coastguard Worker }
2257*35238bceSAndroid Build Coastguard Worker }
2258*35238bceSAndroid Build Coastguard Worker {
2259*35238bceSAndroid Build Coastguard Worker {
2260*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE,
2261*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx]));
2262*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2263*35238bceSAndroid Build Coastguard Worker }
2264*35238bceSAndroid Build Coastguard Worker {
2265*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE,
2266*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2267*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2268*35238bceSAndroid Build Coastguard Worker }
2269*35238bceSAndroid Build Coastguard Worker {
2270*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2271*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE, s_uintTypes[dataTypeNdx]));
2272*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2273*35238bceSAndroid Build Coastguard Worker }
2274*35238bceSAndroid Build Coastguard Worker {
2275*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2276*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE, s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2277*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2278*35238bceSAndroid Build Coastguard Worker }
2279*35238bceSAndroid Build Coastguard Worker {
2280*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2281*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE, s_uintTypes[dataTypeNdx]));
2282*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2283*35238bceSAndroid Build Coastguard Worker }
2284*35238bceSAndroid Build Coastguard Worker {
2285*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2286*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE, s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2287*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2288*35238bceSAndroid Build Coastguard Worker }
2289*35238bceSAndroid Build Coastguard Worker }
2290*35238bceSAndroid Build Coastguard Worker
2291*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_ARRAY
2292*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT_VEC3)
2293*35238bceSAndroid Build Coastguard Worker {
2294*35238bceSAndroid Build Coastguard Worker {
2295*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2296*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY, s_floatTypes[dataTypeNdx]));
2297*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2298*35238bceSAndroid Build Coastguard Worker }
2299*35238bceSAndroid Build Coastguard Worker {
2300*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2301*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY, s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2302*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2303*35238bceSAndroid Build Coastguard Worker }
2304*35238bceSAndroid Build Coastguard Worker {
2305*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2306*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_ARRAY, s_floatTypes[dataTypeNdx]));
2307*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2308*35238bceSAndroid Build Coastguard Worker }
2309*35238bceSAndroid Build Coastguard Worker {
2310*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2311*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_2D_ARRAY,
2312*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2313*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2314*35238bceSAndroid Build Coastguard Worker }
2315*35238bceSAndroid Build Coastguard Worker {
2316*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2317*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_ARRAY, s_floatTypes[dataTypeNdx]));
2318*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2319*35238bceSAndroid Build Coastguard Worker }
2320*35238bceSAndroid Build Coastguard Worker {
2321*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2322*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_2D_ARRAY,
2323*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2324*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2325*35238bceSAndroid Build Coastguard Worker }
2326*35238bceSAndroid Build Coastguard Worker }
2327*35238bceSAndroid Build Coastguard Worker {
2328*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2329*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY, s_intTypes[dataTypeNdx]));
2330*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2331*35238bceSAndroid Build Coastguard Worker }
2332*35238bceSAndroid Build Coastguard Worker {
2333*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY,
2334*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2335*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2336*35238bceSAndroid Build Coastguard Worker }
2337*35238bceSAndroid Build Coastguard Worker {
2338*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2339*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_ARRAY, s_intTypes[dataTypeNdx]));
2340*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2341*35238bceSAndroid Build Coastguard Worker }
2342*35238bceSAndroid Build Coastguard Worker {
2343*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2344*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_ARRAY, s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2345*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2346*35238bceSAndroid Build Coastguard Worker }
2347*35238bceSAndroid Build Coastguard Worker {
2348*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2349*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_ARRAY, s_intTypes[dataTypeNdx]));
2350*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2351*35238bceSAndroid Build Coastguard Worker }
2352*35238bceSAndroid Build Coastguard Worker {
2353*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2354*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_ARRAY, s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2355*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2356*35238bceSAndroid Build Coastguard Worker }
2357*35238bceSAndroid Build Coastguard Worker {
2358*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY,
2359*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx]));
2360*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2361*35238bceSAndroid Build Coastguard Worker }
2362*35238bceSAndroid Build Coastguard Worker {
2363*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY,
2364*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2365*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2366*35238bceSAndroid Build Coastguard Worker }
2367*35238bceSAndroid Build Coastguard Worker {
2368*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2369*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_ARRAY, s_uintTypes[dataTypeNdx]));
2370*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2371*35238bceSAndroid Build Coastguard Worker }
2372*35238bceSAndroid Build Coastguard Worker {
2373*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2374*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_ARRAY, s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2375*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2376*35238bceSAndroid Build Coastguard Worker }
2377*35238bceSAndroid Build Coastguard Worker {
2378*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2379*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_ARRAY, s_uintTypes[dataTypeNdx]));
2380*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2381*35238bceSAndroid Build Coastguard Worker }
2382*35238bceSAndroid Build Coastguard Worker {
2383*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2384*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_ARRAY, s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2385*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2386*35238bceSAndroid Build Coastguard Worker }
2387*35238bceSAndroid Build Coastguard Worker
2388*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_SHADOW
2389*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT_VEC3)
2390*35238bceSAndroid Build Coastguard Worker {
2391*35238bceSAndroid Build Coastguard Worker {
2392*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2393*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_SHADOW, s_floatTypes[dataTypeNdx]));
2394*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2395*35238bceSAndroid Build Coastguard Worker }
2396*35238bceSAndroid Build Coastguard Worker {
2397*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2398*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_SHADOW,
2399*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2400*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2401*35238bceSAndroid Build Coastguard Worker }
2402*35238bceSAndroid Build Coastguard Worker }
2403*35238bceSAndroid Build Coastguard Worker {
2404*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2405*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_SHADOW, s_intTypes[dataTypeNdx]));
2406*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2407*35238bceSAndroid Build Coastguard Worker }
2408*35238bceSAndroid Build Coastguard Worker {
2409*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2410*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_SHADOW, s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2411*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2412*35238bceSAndroid Build Coastguard Worker }
2413*35238bceSAndroid Build Coastguard Worker {
2414*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2415*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_SHADOW, s_uintTypes[dataTypeNdx]));
2416*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2417*35238bceSAndroid Build Coastguard Worker }
2418*35238bceSAndroid Build Coastguard Worker {
2419*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2420*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_SHADOW, s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2421*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2422*35238bceSAndroid Build Coastguard Worker }
2423*35238bceSAndroid Build Coastguard Worker
2424*35238bceSAndroid Build Coastguard Worker // SAMPLER_CUBE_SHADOW
2425*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT_VEC4)
2426*35238bceSAndroid Build Coastguard Worker {
2427*35238bceSAndroid Build Coastguard Worker {
2428*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2429*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_SHADOW, s_floatTypes[dataTypeNdx]));
2430*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2431*35238bceSAndroid Build Coastguard Worker }
2432*35238bceSAndroid Build Coastguard Worker {
2433*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2434*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE_SHADOW,
2435*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2436*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2437*35238bceSAndroid Build Coastguard Worker }
2438*35238bceSAndroid Build Coastguard Worker }
2439*35238bceSAndroid Build Coastguard Worker {
2440*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2441*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_SHADOW, s_intTypes[dataTypeNdx]));
2442*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2443*35238bceSAndroid Build Coastguard Worker }
2444*35238bceSAndroid Build Coastguard Worker {
2445*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2446*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_SHADOW, s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2447*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2448*35238bceSAndroid Build Coastguard Worker }
2449*35238bceSAndroid Build Coastguard Worker {
2450*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2451*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_SHADOW, s_uintTypes[dataTypeNdx]));
2452*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2453*35238bceSAndroid Build Coastguard Worker }
2454*35238bceSAndroid Build Coastguard Worker {
2455*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2456*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_SHADOW, s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2457*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2458*35238bceSAndroid Build Coastguard Worker }
2459*35238bceSAndroid Build Coastguard Worker
2460*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_ARRAY_SHADOW
2461*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT_VEC4)
2462*35238bceSAndroid Build Coastguard Worker {
2463*35238bceSAndroid Build Coastguard Worker {
2464*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2465*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY_SHADOW, s_floatTypes[dataTypeNdx]));
2466*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2467*35238bceSAndroid Build Coastguard Worker }
2468*35238bceSAndroid Build Coastguard Worker {
2469*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2470*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY_SHADOW,
2471*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2472*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2473*35238bceSAndroid Build Coastguard Worker }
2474*35238bceSAndroid Build Coastguard Worker }
2475*35238bceSAndroid Build Coastguard Worker {
2476*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2477*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY_SHADOW, s_intTypes[dataTypeNdx]));
2478*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2479*35238bceSAndroid Build Coastguard Worker }
2480*35238bceSAndroid Build Coastguard Worker {
2481*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2482*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY_SHADOW,
2483*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2484*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2485*35238bceSAndroid Build Coastguard Worker }
2486*35238bceSAndroid Build Coastguard Worker {
2487*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2488*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY_SHADOW, s_uintTypes[dataTypeNdx]));
2489*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2490*35238bceSAndroid Build Coastguard Worker }
2491*35238bceSAndroid Build Coastguard Worker {
2492*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2493*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY_SHADOW,
2494*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2495*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2496*35238bceSAndroid Build Coastguard Worker }
2497*35238bceSAndroid Build Coastguard Worker
2498*35238bceSAndroid Build Coastguard Worker // SAMPLER_CUBE_ARRAY
2499*35238bceSAndroid Build Coastguard Worker if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
2500*35238bceSAndroid Build Coastguard Worker {
2501*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT_VEC4)
2502*35238bceSAndroid Build Coastguard Worker {
2503*35238bceSAndroid Build Coastguard Worker {
2504*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2505*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY, s_floatTypes[dataTypeNdx]));
2506*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2507*35238bceSAndroid Build Coastguard Worker }
2508*35238bceSAndroid Build Coastguard Worker {
2509*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2510*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE_ARRAY,
2511*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2512*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2513*35238bceSAndroid Build Coastguard Worker }
2514*35238bceSAndroid Build Coastguard Worker {
2515*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2516*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY, s_floatTypes[dataTypeNdx]));
2517*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2518*35238bceSAndroid Build Coastguard Worker }
2519*35238bceSAndroid Build Coastguard Worker {
2520*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2521*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
2522*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2523*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2524*35238bceSAndroid Build Coastguard Worker }
2525*35238bceSAndroid Build Coastguard Worker {
2526*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2527*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY, s_floatTypes[dataTypeNdx]));
2528*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2529*35238bceSAndroid Build Coastguard Worker }
2530*35238bceSAndroid Build Coastguard Worker {
2531*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2532*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
2533*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2534*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2535*35238bceSAndroid Build Coastguard Worker }
2536*35238bceSAndroid Build Coastguard Worker }
2537*35238bceSAndroid Build Coastguard Worker {
2538*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2539*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY, s_intTypes[dataTypeNdx]));
2540*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2541*35238bceSAndroid Build Coastguard Worker }
2542*35238bceSAndroid Build Coastguard Worker {
2543*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2544*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY, s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2545*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2546*35238bceSAndroid Build Coastguard Worker }
2547*35238bceSAndroid Build Coastguard Worker {
2548*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2549*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY, s_intTypes[dataTypeNdx]));
2550*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2551*35238bceSAndroid Build Coastguard Worker }
2552*35238bceSAndroid Build Coastguard Worker {
2553*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2554*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
2555*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2556*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2557*35238bceSAndroid Build Coastguard Worker }
2558*35238bceSAndroid Build Coastguard Worker {
2559*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2560*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY, s_intTypes[dataTypeNdx]));
2561*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2562*35238bceSAndroid Build Coastguard Worker }
2563*35238bceSAndroid Build Coastguard Worker {
2564*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2565*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
2566*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2567*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2568*35238bceSAndroid Build Coastguard Worker }
2569*35238bceSAndroid Build Coastguard Worker {
2570*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2571*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY, s_uintTypes[dataTypeNdx]));
2572*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2573*35238bceSAndroid Build Coastguard Worker }
2574*35238bceSAndroid Build Coastguard Worker {
2575*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2576*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE_ARRAY,
2577*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2578*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2579*35238bceSAndroid Build Coastguard Worker }
2580*35238bceSAndroid Build Coastguard Worker {
2581*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2582*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY, s_uintTypes[dataTypeNdx]));
2583*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2584*35238bceSAndroid Build Coastguard Worker }
2585*35238bceSAndroid Build Coastguard Worker {
2586*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2587*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
2588*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2589*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2590*35238bceSAndroid Build Coastguard Worker }
2591*35238bceSAndroid Build Coastguard Worker {
2592*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(
2593*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY, s_uintTypes[dataTypeNdx]));
2594*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2595*35238bceSAndroid Build Coastguard Worker }
2596*35238bceSAndroid Build Coastguard Worker {
2597*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2598*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
2599*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2600*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2601*35238bceSAndroid Build Coastguard Worker }
2602*35238bceSAndroid Build Coastguard Worker }
2603*35238bceSAndroid Build Coastguard Worker
2604*35238bceSAndroid Build Coastguard Worker // SAMPLER_CUBE_ARRAY_SHADOW
2605*35238bceSAndroid Build Coastguard Worker if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW)))
2606*35238bceSAndroid Build Coastguard Worker {
2607*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT_VEC4)
2608*35238bceSAndroid Build Coastguard Worker {
2609*35238bceSAndroid Build Coastguard Worker std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2610*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW,
2611*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
2612*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2613*35238bceSAndroid Build Coastguard Worker }
2614*35238bceSAndroid Build Coastguard Worker {
2615*35238bceSAndroid Build Coastguard Worker std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2616*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW,
2617*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
2618*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2619*35238bceSAndroid Build Coastguard Worker }
2620*35238bceSAndroid Build Coastguard Worker {
2621*35238bceSAndroid Build Coastguard Worker std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2622*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW,
2623*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
2624*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2625*35238bceSAndroid Build Coastguard Worker }
2626*35238bceSAndroid Build Coastguard Worker }
2627*35238bceSAndroid Build Coastguard Worker }
2628*35238bceSAndroid Build Coastguard Worker ctx.endSection();
2629*35238bceSAndroid Build Coastguard Worker }
2630*35238bceSAndroid Build Coastguard Worker } // namespace
2631*35238bceSAndroid Build Coastguard Worker ctx.endSection();
2632*35238bceSAndroid Build Coastguard Worker } // namespace NegativeTestShared
2633*35238bceSAndroid Build Coastguard Worker
texture_invalid_bias_or_compare(NegativeTestContext & ctx)2634*35238bceSAndroid Build Coastguard Worker void texture_invalid_bias_or_compare(NegativeTestContext &ctx)
2635*35238bceSAndroid Build Coastguard Worker {
2636*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
2637*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
2638*35238bceSAndroid Build Coastguard Worker
2639*35238bceSAndroid Build Coastguard Worker ctx.beginSection("texture: Invalid bias/compare type.");
2640*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
2641*35238bceSAndroid Build Coastguard Worker {
2642*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
2643*35238bceSAndroid Build Coastguard Worker {
2644*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
2645*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
2646*35238bceSAndroid Build Coastguard Worker {
2647*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D
2648*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT)
2649*35238bceSAndroid Build Coastguard Worker {
2650*35238bceSAndroid Build Coastguard Worker {
2651*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2652*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D,
2653*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, s_floatTypes[dataTypeNdx]));
2654*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2655*35238bceSAndroid Build Coastguard Worker }
2656*35238bceSAndroid Build Coastguard Worker {
2657*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2658*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D,
2659*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, s_floatTypes[dataTypeNdx]));
2660*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2661*35238bceSAndroid Build Coastguard Worker }
2662*35238bceSAndroid Build Coastguard Worker {
2663*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2664*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D,
2665*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, s_floatTypes[dataTypeNdx]));
2666*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2667*35238bceSAndroid Build Coastguard Worker }
2668*35238bceSAndroid Build Coastguard Worker }
2669*35238bceSAndroid Build Coastguard Worker {
2670*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2671*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D, glu::TYPE_FLOAT_VEC2,
2672*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx]));
2673*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2674*35238bceSAndroid Build Coastguard Worker }
2675*35238bceSAndroid Build Coastguard Worker {
2676*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2677*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D,
2678*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, s_uintTypes[dataTypeNdx]));
2679*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2680*35238bceSAndroid Build Coastguard Worker }
2681*35238bceSAndroid Build Coastguard Worker {
2682*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2683*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D,
2684*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, s_intTypes[dataTypeNdx]));
2685*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2686*35238bceSAndroid Build Coastguard Worker }
2687*35238bceSAndroid Build Coastguard Worker {
2688*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2689*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D,
2690*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, s_uintTypes[dataTypeNdx]));
2691*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2692*35238bceSAndroid Build Coastguard Worker }
2693*35238bceSAndroid Build Coastguard Worker {
2694*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2695*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D,
2696*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, s_intTypes[dataTypeNdx]));
2697*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2698*35238bceSAndroid Build Coastguard Worker }
2699*35238bceSAndroid Build Coastguard Worker {
2700*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2701*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D,
2702*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, s_uintTypes[dataTypeNdx]));
2703*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2704*35238bceSAndroid Build Coastguard Worker }
2705*35238bceSAndroid Build Coastguard Worker
2706*35238bceSAndroid Build Coastguard Worker // SAMPLER_3D
2707*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT)
2708*35238bceSAndroid Build Coastguard Worker {
2709*35238bceSAndroid Build Coastguard Worker {
2710*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2711*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_3D,
2712*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_floatTypes[dataTypeNdx]));
2713*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2714*35238bceSAndroid Build Coastguard Worker }
2715*35238bceSAndroid Build Coastguard Worker {
2716*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2717*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_3D,
2718*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_floatTypes[dataTypeNdx]));
2719*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2720*35238bceSAndroid Build Coastguard Worker }
2721*35238bceSAndroid Build Coastguard Worker {
2722*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2723*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D,
2724*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_floatTypes[dataTypeNdx]));
2725*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2726*35238bceSAndroid Build Coastguard Worker }
2727*35238bceSAndroid Build Coastguard Worker }
2728*35238bceSAndroid Build Coastguard Worker {
2729*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2730*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_3D, glu::TYPE_FLOAT_VEC3,
2731*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx]));
2732*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2733*35238bceSAndroid Build Coastguard Worker }
2734*35238bceSAndroid Build Coastguard Worker {
2735*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2736*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_3D, glu::TYPE_FLOAT_VEC3,
2737*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx]));
2738*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2739*35238bceSAndroid Build Coastguard Worker }
2740*35238bceSAndroid Build Coastguard Worker {
2741*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2742*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_3D,
2743*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_intTypes[dataTypeNdx]));
2744*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2745*35238bceSAndroid Build Coastguard Worker }
2746*35238bceSAndroid Build Coastguard Worker {
2747*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2748*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_3D,
2749*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_uintTypes[dataTypeNdx]));
2750*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2751*35238bceSAndroid Build Coastguard Worker }
2752*35238bceSAndroid Build Coastguard Worker {
2753*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2754*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D,
2755*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_intTypes[dataTypeNdx]));
2756*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2757*35238bceSAndroid Build Coastguard Worker }
2758*35238bceSAndroid Build Coastguard Worker {
2759*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2760*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D,
2761*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_uintTypes[dataTypeNdx]));
2762*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2763*35238bceSAndroid Build Coastguard Worker }
2764*35238bceSAndroid Build Coastguard Worker
2765*35238bceSAndroid Build Coastguard Worker // SAMPLER_CUBE
2766*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT)
2767*35238bceSAndroid Build Coastguard Worker {
2768*35238bceSAndroid Build Coastguard Worker std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE,
2769*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_floatTypes[dataTypeNdx]));
2770*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2771*35238bceSAndroid Build Coastguard Worker shaderSource = genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE,
2772*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_floatTypes[dataTypeNdx]);
2773*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2774*35238bceSAndroid Build Coastguard Worker shaderSource = genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE,
2775*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_floatTypes[dataTypeNdx]);
2776*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2777*35238bceSAndroid Build Coastguard Worker }
2778*35238bceSAndroid Build Coastguard Worker {
2779*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2780*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE, glu::TYPE_FLOAT_VEC3,
2781*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx]));
2782*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2783*35238bceSAndroid Build Coastguard Worker }
2784*35238bceSAndroid Build Coastguard Worker {
2785*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2786*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE, glu::TYPE_FLOAT_VEC3,
2787*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx]));
2788*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2789*35238bceSAndroid Build Coastguard Worker }
2790*35238bceSAndroid Build Coastguard Worker {
2791*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2792*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE,
2793*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_intTypes[dataTypeNdx]));
2794*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2795*35238bceSAndroid Build Coastguard Worker }
2796*35238bceSAndroid Build Coastguard Worker {
2797*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2798*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE,
2799*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_uintTypes[dataTypeNdx]));
2800*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2801*35238bceSAndroid Build Coastguard Worker }
2802*35238bceSAndroid Build Coastguard Worker {
2803*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2804*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE,
2805*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_intTypes[dataTypeNdx]));
2806*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2807*35238bceSAndroid Build Coastguard Worker }
2808*35238bceSAndroid Build Coastguard Worker {
2809*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2810*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE,
2811*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_uintTypes[dataTypeNdx]));
2812*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2813*35238bceSAndroid Build Coastguard Worker }
2814*35238bceSAndroid Build Coastguard Worker
2815*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_ARRAY
2816*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT)
2817*35238bceSAndroid Build Coastguard Worker {
2818*35238bceSAndroid Build Coastguard Worker {
2819*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2820*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY,
2821*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_floatTypes[dataTypeNdx]));
2822*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2823*35238bceSAndroid Build Coastguard Worker }
2824*35238bceSAndroid Build Coastguard Worker {
2825*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2826*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_ARRAY,
2827*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_floatTypes[dataTypeNdx]));
2828*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2829*35238bceSAndroid Build Coastguard Worker }
2830*35238bceSAndroid Build Coastguard Worker {
2831*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2832*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_ARRAY,
2833*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_floatTypes[dataTypeNdx]));
2834*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2835*35238bceSAndroid Build Coastguard Worker }
2836*35238bceSAndroid Build Coastguard Worker }
2837*35238bceSAndroid Build Coastguard Worker {
2838*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2839*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY,
2840*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_intTypes[dataTypeNdx]));
2841*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2842*35238bceSAndroid Build Coastguard Worker }
2843*35238bceSAndroid Build Coastguard Worker {
2844*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2845*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY,
2846*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_uintTypes[dataTypeNdx]));
2847*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2848*35238bceSAndroid Build Coastguard Worker }
2849*35238bceSAndroid Build Coastguard Worker {
2850*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2851*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_ARRAY,
2852*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_intTypes[dataTypeNdx]));
2853*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2854*35238bceSAndroid Build Coastguard Worker }
2855*35238bceSAndroid Build Coastguard Worker {
2856*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2857*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_ARRAY,
2858*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_uintTypes[dataTypeNdx]));
2859*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2860*35238bceSAndroid Build Coastguard Worker }
2861*35238bceSAndroid Build Coastguard Worker {
2862*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2863*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_ARRAY,
2864*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_intTypes[dataTypeNdx]));
2865*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2866*35238bceSAndroid Build Coastguard Worker }
2867*35238bceSAndroid Build Coastguard Worker {
2868*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2869*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_ARRAY,
2870*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_uintTypes[dataTypeNdx]));
2871*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2872*35238bceSAndroid Build Coastguard Worker }
2873*35238bceSAndroid Build Coastguard Worker
2874*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_SHADOW
2875*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT)
2876*35238bceSAndroid Build Coastguard Worker {
2877*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2878*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_SHADOW,
2879*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_floatTypes[dataTypeNdx]));
2880*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2881*35238bceSAndroid Build Coastguard Worker }
2882*35238bceSAndroid Build Coastguard Worker {
2883*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2884*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_SHADOW,
2885*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_intTypes[dataTypeNdx]));
2886*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2887*35238bceSAndroid Build Coastguard Worker }
2888*35238bceSAndroid Build Coastguard Worker {
2889*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2890*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_SHADOW,
2891*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, s_uintTypes[dataTypeNdx]));
2892*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2893*35238bceSAndroid Build Coastguard Worker }
2894*35238bceSAndroid Build Coastguard Worker
2895*35238bceSAndroid Build Coastguard Worker // SAMPLER_CUBE_SHADOW
2896*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT)
2897*35238bceSAndroid Build Coastguard Worker {
2898*35238bceSAndroid Build Coastguard Worker std::string shaderSource(genShaderSourceTexture(ctx, s_shaders[shaderNdx],
2899*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE_SHADOW, glu::TYPE_FLOAT_VEC4,
2900*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx]));
2901*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2902*35238bceSAndroid Build Coastguard Worker }
2903*35238bceSAndroid Build Coastguard Worker {
2904*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2905*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_SHADOW,
2906*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_intTypes[dataTypeNdx]));
2907*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2908*35238bceSAndroid Build Coastguard Worker }
2909*35238bceSAndroid Build Coastguard Worker {
2910*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2911*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_SHADOW,
2912*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_uintTypes[dataTypeNdx]));
2913*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2914*35238bceSAndroid Build Coastguard Worker }
2915*35238bceSAndroid Build Coastguard Worker
2916*35238bceSAndroid Build Coastguard Worker // SAMPLER_CUBE_ARRAY
2917*35238bceSAndroid Build Coastguard Worker if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
2918*35238bceSAndroid Build Coastguard Worker {
2919*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT)
2920*35238bceSAndroid Build Coastguard Worker {
2921*35238bceSAndroid Build Coastguard Worker {
2922*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2923*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY,
2924*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_floatTypes[dataTypeNdx]));
2925*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2926*35238bceSAndroid Build Coastguard Worker }
2927*35238bceSAndroid Build Coastguard Worker {
2928*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2929*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
2930*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_floatTypes[dataTypeNdx]));
2931*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2932*35238bceSAndroid Build Coastguard Worker }
2933*35238bceSAndroid Build Coastguard Worker {
2934*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2935*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
2936*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_floatTypes[dataTypeNdx]));
2937*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2938*35238bceSAndroid Build Coastguard Worker }
2939*35238bceSAndroid Build Coastguard Worker }
2940*35238bceSAndroid Build Coastguard Worker {
2941*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2942*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY,
2943*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_intTypes[dataTypeNdx]));
2944*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2945*35238bceSAndroid Build Coastguard Worker }
2946*35238bceSAndroid Build Coastguard Worker {
2947*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2948*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY,
2949*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_uintTypes[dataTypeNdx]));
2950*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2951*35238bceSAndroid Build Coastguard Worker }
2952*35238bceSAndroid Build Coastguard Worker {
2953*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2954*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
2955*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_intTypes[dataTypeNdx]));
2956*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2957*35238bceSAndroid Build Coastguard Worker }
2958*35238bceSAndroid Build Coastguard Worker {
2959*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2960*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
2961*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_uintTypes[dataTypeNdx]));
2962*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2963*35238bceSAndroid Build Coastguard Worker }
2964*35238bceSAndroid Build Coastguard Worker {
2965*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2966*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
2967*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_intTypes[dataTypeNdx]));
2968*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2969*35238bceSAndroid Build Coastguard Worker }
2970*35238bceSAndroid Build Coastguard Worker {
2971*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2972*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
2973*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_uintTypes[dataTypeNdx]));
2974*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2975*35238bceSAndroid Build Coastguard Worker }
2976*35238bceSAndroid Build Coastguard Worker }
2977*35238bceSAndroid Build Coastguard Worker
2978*35238bceSAndroid Build Coastguard Worker // SAMPLER_CUBE_ARRAY_SHADOW
2979*35238bceSAndroid Build Coastguard Worker if (checkSupport(ctx) ||
2980*35238bceSAndroid Build Coastguard Worker ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW)))
2981*35238bceSAndroid Build Coastguard Worker {
2982*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT)
2983*35238bceSAndroid Build Coastguard Worker {
2984*35238bceSAndroid Build Coastguard Worker {
2985*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2986*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW,
2987*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_floatTypes[dataTypeNdx]));
2988*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2989*35238bceSAndroid Build Coastguard Worker }
2990*35238bceSAndroid Build Coastguard Worker }
2991*35238bceSAndroid Build Coastguard Worker {
2992*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2993*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW,
2994*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_intTypes[dataTypeNdx]));
2995*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
2996*35238bceSAndroid Build Coastguard Worker }
2997*35238bceSAndroid Build Coastguard Worker {
2998*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
2999*35238bceSAndroid Build Coastguard Worker genShaderSourceTexture(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW,
3000*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_uintTypes[dataTypeNdx]));
3001*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3002*35238bceSAndroid Build Coastguard Worker }
3003*35238bceSAndroid Build Coastguard Worker }
3004*35238bceSAndroid Build Coastguard Worker }
3005*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3006*35238bceSAndroid Build Coastguard Worker }
3007*35238bceSAndroid Build Coastguard Worker }
3008*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3009*35238bceSAndroid Build Coastguard Worker }
3010*35238bceSAndroid Build Coastguard Worker
3011*35238bceSAndroid Build Coastguard Worker // textureLod
genShaderSourceTextureLod(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType samplerDataType,glu::DataType pDataType,glu::DataType lodDataType)3012*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTextureLod(NegativeTestContext &ctx, glu::ShaderType shaderType,
3013*35238bceSAndroid Build Coastguard Worker glu::DataType samplerDataType, glu::DataType pDataType, glu::DataType lodDataType)
3014*35238bceSAndroid Build Coastguard Worker {
3015*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
3016*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
3017*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
3018*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
3019*35238bceSAndroid Build Coastguard Worker << "\n"
3020*35238bceSAndroid Build Coastguard Worker << getShaderExtensionDeclaration(getDataTypeExtension(samplerDataType))
3021*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << declareShaderUniform(samplerDataType, "sampler")
3022*35238bceSAndroid Build Coastguard Worker << "void main(void)\n"
3023*35238bceSAndroid Build Coastguard Worker << "{\n"
3024*35238bceSAndroid Build Coastguard Worker << " " << declareAndInitializeShaderVariable(pDataType, "P") << " "
3025*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(lodDataType, "lod") << " textureLod(sampler, P, lod);\n"
3026*35238bceSAndroid Build Coastguard Worker << "}\n";
3027*35238bceSAndroid Build Coastguard Worker
3028*35238bceSAndroid Build Coastguard Worker return source.str();
3029*35238bceSAndroid Build Coastguard Worker }
3030*35238bceSAndroid Build Coastguard Worker
texture_lod_invalid_p(NegativeTestContext & ctx)3031*35238bceSAndroid Build Coastguard Worker void texture_lod_invalid_p(NegativeTestContext &ctx)
3032*35238bceSAndroid Build Coastguard Worker {
3033*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
3034*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
3035*35238bceSAndroid Build Coastguard Worker
3036*35238bceSAndroid Build Coastguard Worker if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
3037*35238bceSAndroid Build Coastguard Worker {
3038*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureLod: Invalid P type.");
3039*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
3040*35238bceSAndroid Build Coastguard Worker {
3041*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
3042*35238bceSAndroid Build Coastguard Worker {
3043*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
3044*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
3045*35238bceSAndroid Build Coastguard Worker {
3046*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT_VEC4)
3047*35238bceSAndroid Build Coastguard Worker {
3048*35238bceSAndroid Build Coastguard Worker {
3049*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3050*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY,
3051*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
3052*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3053*35238bceSAndroid Build Coastguard Worker }
3054*35238bceSAndroid Build Coastguard Worker {
3055*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3056*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
3057*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
3058*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3059*35238bceSAndroid Build Coastguard Worker }
3060*35238bceSAndroid Build Coastguard Worker {
3061*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3062*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
3063*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_FLOAT));
3064*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3065*35238bceSAndroid Build Coastguard Worker }
3066*35238bceSAndroid Build Coastguard Worker }
3067*35238bceSAndroid Build Coastguard Worker {
3068*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3069*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY,
3070*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
3071*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3072*35238bceSAndroid Build Coastguard Worker }
3073*35238bceSAndroid Build Coastguard Worker {
3074*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3075*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
3076*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
3077*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3078*35238bceSAndroid Build Coastguard Worker }
3079*35238bceSAndroid Build Coastguard Worker {
3080*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3081*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
3082*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_FLOAT));
3083*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3084*35238bceSAndroid Build Coastguard Worker }
3085*35238bceSAndroid Build Coastguard Worker {
3086*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3087*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY,
3088*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
3089*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3090*35238bceSAndroid Build Coastguard Worker }
3091*35238bceSAndroid Build Coastguard Worker {
3092*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3093*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
3094*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
3095*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3096*35238bceSAndroid Build Coastguard Worker }
3097*35238bceSAndroid Build Coastguard Worker {
3098*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3099*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
3100*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_FLOAT));
3101*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3102*35238bceSAndroid Build Coastguard Worker }
3103*35238bceSAndroid Build Coastguard Worker }
3104*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3105*35238bceSAndroid Build Coastguard Worker }
3106*35238bceSAndroid Build Coastguard Worker }
3107*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3108*35238bceSAndroid Build Coastguard Worker }
3109*35238bceSAndroid Build Coastguard Worker }
3110*35238bceSAndroid Build Coastguard Worker
texture_lod_invalid_lod(NegativeTestContext & ctx)3111*35238bceSAndroid Build Coastguard Worker void texture_lod_invalid_lod(NegativeTestContext &ctx)
3112*35238bceSAndroid Build Coastguard Worker {
3113*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
3114*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
3115*35238bceSAndroid Build Coastguard Worker
3116*35238bceSAndroid Build Coastguard Worker if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
3117*35238bceSAndroid Build Coastguard Worker {
3118*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureLod: Invalid lod type.");
3119*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
3120*35238bceSAndroid Build Coastguard Worker {
3121*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
3122*35238bceSAndroid Build Coastguard Worker {
3123*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
3124*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
3125*35238bceSAndroid Build Coastguard Worker {
3126*35238bceSAndroid Build Coastguard Worker if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT)
3127*35238bceSAndroid Build Coastguard Worker {
3128*35238bceSAndroid Build Coastguard Worker {
3129*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3130*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY,
3131*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, s_floatTypes[dataTypeNdx]));
3132*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3133*35238bceSAndroid Build Coastguard Worker }
3134*35238bceSAndroid Build Coastguard Worker {
3135*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3136*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
3137*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, s_floatTypes[dataTypeNdx]));
3138*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3139*35238bceSAndroid Build Coastguard Worker }
3140*35238bceSAndroid Build Coastguard Worker {
3141*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3142*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
3143*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, s_floatTypes[dataTypeNdx]));
3144*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3145*35238bceSAndroid Build Coastguard Worker }
3146*35238bceSAndroid Build Coastguard Worker }
3147*35238bceSAndroid Build Coastguard Worker {
3148*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3149*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY,
3150*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_intTypes[dataTypeNdx]));
3151*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3152*35238bceSAndroid Build Coastguard Worker }
3153*35238bceSAndroid Build Coastguard Worker {
3154*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3155*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
3156*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_intTypes[dataTypeNdx]));
3157*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3158*35238bceSAndroid Build Coastguard Worker }
3159*35238bceSAndroid Build Coastguard Worker {
3160*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3161*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
3162*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_intTypes[dataTypeNdx]));
3163*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3164*35238bceSAndroid Build Coastguard Worker }
3165*35238bceSAndroid Build Coastguard Worker {
3166*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3167*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY,
3168*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_uintTypes[dataTypeNdx]));
3169*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3170*35238bceSAndroid Build Coastguard Worker }
3171*35238bceSAndroid Build Coastguard Worker {
3172*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3173*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
3174*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_uintTypes[dataTypeNdx]));
3175*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3176*35238bceSAndroid Build Coastguard Worker }
3177*35238bceSAndroid Build Coastguard Worker {
3178*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3179*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureLod(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
3180*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, s_uintTypes[dataTypeNdx]));
3181*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3182*35238bceSAndroid Build Coastguard Worker }
3183*35238bceSAndroid Build Coastguard Worker }
3184*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3185*35238bceSAndroid Build Coastguard Worker }
3186*35238bceSAndroid Build Coastguard Worker }
3187*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3188*35238bceSAndroid Build Coastguard Worker }
3189*35238bceSAndroid Build Coastguard Worker }
3190*35238bceSAndroid Build Coastguard Worker
3191*35238bceSAndroid Build Coastguard Worker // texelFetch
genShaderSourceTexelFetch(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType samplerDataType,glu::DataType pDataType,glu::DataType sampleDataType)3192*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTexelFetch(NegativeTestContext &ctx, glu::ShaderType shaderType,
3193*35238bceSAndroid Build Coastguard Worker glu::DataType samplerDataType, glu::DataType pDataType,
3194*35238bceSAndroid Build Coastguard Worker glu::DataType sampleDataType)
3195*35238bceSAndroid Build Coastguard Worker {
3196*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
3197*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
3198*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
3199*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
3200*35238bceSAndroid Build Coastguard Worker << "\n"
3201*35238bceSAndroid Build Coastguard Worker << getShaderExtensionDeclaration(getDataTypeExtension(samplerDataType))
3202*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << declareShaderUniform(samplerDataType, "sampler")
3203*35238bceSAndroid Build Coastguard Worker << "void main(void)\n"
3204*35238bceSAndroid Build Coastguard Worker << "{\n"
3205*35238bceSAndroid Build Coastguard Worker << " " << declareAndInitializeShaderVariable(pDataType, "P");
3206*35238bceSAndroid Build Coastguard Worker
3207*35238bceSAndroid Build Coastguard Worker switch (samplerDataType)
3208*35238bceSAndroid Build Coastguard Worker {
3209*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_2D_MULTISAMPLE:
3210*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE:
3211*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE:
3212*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY:
3213*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
3214*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY:
3215*35238bceSAndroid Build Coastguard Worker source << " " << declareAndInitializeShaderVariable(sampleDataType, "varSample")
3216*35238bceSAndroid Build Coastguard Worker << " texelFetch(sampler, P, varSample);\n";
3217*35238bceSAndroid Build Coastguard Worker break;
3218*35238bceSAndroid Build Coastguard Worker
3219*35238bceSAndroid Build Coastguard Worker case glu::TYPE_SAMPLER_BUFFER:
3220*35238bceSAndroid Build Coastguard Worker case glu::TYPE_INT_SAMPLER_BUFFER:
3221*35238bceSAndroid Build Coastguard Worker case glu::TYPE_UINT_SAMPLER_BUFFER:
3222*35238bceSAndroid Build Coastguard Worker source << " texelFetch(sampler, P);\n";
3223*35238bceSAndroid Build Coastguard Worker break;
3224*35238bceSAndroid Build Coastguard Worker
3225*35238bceSAndroid Build Coastguard Worker default:
3226*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported data type.");
3227*35238bceSAndroid Build Coastguard Worker }
3228*35238bceSAndroid Build Coastguard Worker
3229*35238bceSAndroid Build Coastguard Worker source << "}\n";
3230*35238bceSAndroid Build Coastguard Worker
3231*35238bceSAndroid Build Coastguard Worker return source.str();
3232*35238bceSAndroid Build Coastguard Worker }
3233*35238bceSAndroid Build Coastguard Worker
genShaderSourceTexelFetch(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType samplerDataType,glu::DataType pDataType)3234*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTexelFetch(NegativeTestContext &ctx, glu::ShaderType shaderType,
3235*35238bceSAndroid Build Coastguard Worker glu::DataType samplerDataType, glu::DataType pDataType)
3236*35238bceSAndroid Build Coastguard Worker {
3237*35238bceSAndroid Build Coastguard Worker return genShaderSourceTexelFetch(ctx, shaderType, samplerDataType, pDataType, glu::TYPE_LAST);
3238*35238bceSAndroid Build Coastguard Worker }
3239*35238bceSAndroid Build Coastguard Worker
texel_fetch_invalid_p(NegativeTestContext & ctx)3240*35238bceSAndroid Build Coastguard Worker void texel_fetch_invalid_p(NegativeTestContext &ctx)
3241*35238bceSAndroid Build Coastguard Worker {
3242*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
3243*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
3244*35238bceSAndroid Build Coastguard Worker
3245*35238bceSAndroid Build Coastguard Worker if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
3246*35238bceSAndroid Build Coastguard Worker {
3247*35238bceSAndroid Build Coastguard Worker ctx.beginSection("texelFetch: Invalid P type.");
3248*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
3249*35238bceSAndroid Build Coastguard Worker {
3250*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
3251*35238bceSAndroid Build Coastguard Worker {
3252*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
3253*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
3254*35238bceSAndroid Build Coastguard Worker {
3255*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_MULTISAMPLE
3256*35238bceSAndroid Build Coastguard Worker {
3257*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3258*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_MULTISAMPLE,
3259*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_INT));
3260*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3261*35238bceSAndroid Build Coastguard Worker }
3262*35238bceSAndroid Build Coastguard Worker {
3263*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3264*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE,
3265*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_INT));
3266*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3267*35238bceSAndroid Build Coastguard Worker }
3268*35238bceSAndroid Build Coastguard Worker {
3269*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3270*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE,
3271*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_INT));
3272*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3273*35238bceSAndroid Build Coastguard Worker }
3274*35238bceSAndroid Build Coastguard Worker
3275*35238bceSAndroid Build Coastguard Worker if (s_intTypes[dataTypeNdx] != glu::TYPE_INT_VEC2)
3276*35238bceSAndroid Build Coastguard Worker {
3277*35238bceSAndroid Build Coastguard Worker {
3278*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3279*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_MULTISAMPLE,
3280*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_INT));
3281*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3282*35238bceSAndroid Build Coastguard Worker }
3283*35238bceSAndroid Build Coastguard Worker {
3284*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3285*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE,
3286*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_INT));
3287*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3288*35238bceSAndroid Build Coastguard Worker }
3289*35238bceSAndroid Build Coastguard Worker {
3290*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3291*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE,
3292*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_INT));
3293*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3294*35238bceSAndroid Build Coastguard Worker }
3295*35238bceSAndroid Build Coastguard Worker }
3296*35238bceSAndroid Build Coastguard Worker {
3297*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3298*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_MULTISAMPLE,
3299*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_INT));
3300*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3301*35238bceSAndroid Build Coastguard Worker }
3302*35238bceSAndroid Build Coastguard Worker {
3303*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3304*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE,
3305*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_INT));
3306*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3307*35238bceSAndroid Build Coastguard Worker }
3308*35238bceSAndroid Build Coastguard Worker {
3309*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3310*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE,
3311*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_INT));
3312*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3313*35238bceSAndroid Build Coastguard Worker }
3314*35238bceSAndroid Build Coastguard Worker
3315*35238bceSAndroid Build Coastguard Worker // SAMPLER_BUFFER
3316*35238bceSAndroid Build Coastguard Worker {
3317*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3318*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_BUFFER, s_floatTypes[dataTypeNdx]));
3319*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3320*35238bceSAndroid Build Coastguard Worker }
3321*35238bceSAndroid Build Coastguard Worker {
3322*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3323*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_BUFFER, s_floatTypes[dataTypeNdx]));
3324*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3325*35238bceSAndroid Build Coastguard Worker }
3326*35238bceSAndroid Build Coastguard Worker {
3327*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3328*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_BUFFER, s_floatTypes[dataTypeNdx]));
3329*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3330*35238bceSAndroid Build Coastguard Worker }
3331*35238bceSAndroid Build Coastguard Worker
3332*35238bceSAndroid Build Coastguard Worker if (s_intTypes[dataTypeNdx] != glu::TYPE_INT)
3333*35238bceSAndroid Build Coastguard Worker {
3334*35238bceSAndroid Build Coastguard Worker {
3335*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3336*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_BUFFER, s_intTypes[dataTypeNdx]));
3337*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3338*35238bceSAndroid Build Coastguard Worker }
3339*35238bceSAndroid Build Coastguard Worker {
3340*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3341*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_BUFFER, s_intTypes[dataTypeNdx]));
3342*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3343*35238bceSAndroid Build Coastguard Worker }
3344*35238bceSAndroid Build Coastguard Worker {
3345*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3346*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_BUFFER, s_intTypes[dataTypeNdx]));
3347*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3348*35238bceSAndroid Build Coastguard Worker }
3349*35238bceSAndroid Build Coastguard Worker }
3350*35238bceSAndroid Build Coastguard Worker
3351*35238bceSAndroid Build Coastguard Worker {
3352*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3353*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_BUFFER, s_uintTypes[dataTypeNdx]));
3354*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3355*35238bceSAndroid Build Coastguard Worker }
3356*35238bceSAndroid Build Coastguard Worker {
3357*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3358*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_BUFFER, s_uintTypes[dataTypeNdx]));
3359*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3360*35238bceSAndroid Build Coastguard Worker }
3361*35238bceSAndroid Build Coastguard Worker {
3362*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3363*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_BUFFER, s_uintTypes[dataTypeNdx]));
3364*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3365*35238bceSAndroid Build Coastguard Worker }
3366*35238bceSAndroid Build Coastguard Worker
3367*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_MULTISAMPLE_ARRAY
3368*35238bceSAndroid Build Coastguard Worker {
3369*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3370*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY,
3371*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_INT));
3372*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3373*35238bceSAndroid Build Coastguard Worker }
3374*35238bceSAndroid Build Coastguard Worker {
3375*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3376*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY,
3377*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_INT));
3378*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3379*35238bceSAndroid Build Coastguard Worker }
3380*35238bceSAndroid Build Coastguard Worker {
3381*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3382*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY,
3383*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx], glu::TYPE_INT));
3384*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3385*35238bceSAndroid Build Coastguard Worker }
3386*35238bceSAndroid Build Coastguard Worker
3387*35238bceSAndroid Build Coastguard Worker if (s_intTypes[dataTypeNdx] != glu::TYPE_INT_VEC3)
3388*35238bceSAndroid Build Coastguard Worker {
3389*35238bceSAndroid Build Coastguard Worker {
3390*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3391*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY,
3392*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_INT));
3393*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3394*35238bceSAndroid Build Coastguard Worker }
3395*35238bceSAndroid Build Coastguard Worker {
3396*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3397*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY,
3398*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_INT));
3399*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3400*35238bceSAndroid Build Coastguard Worker }
3401*35238bceSAndroid Build Coastguard Worker {
3402*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3403*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY,
3404*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx], glu::TYPE_INT));
3405*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3406*35238bceSAndroid Build Coastguard Worker }
3407*35238bceSAndroid Build Coastguard Worker }
3408*35238bceSAndroid Build Coastguard Worker {
3409*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3410*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY,
3411*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_INT));
3412*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3413*35238bceSAndroid Build Coastguard Worker }
3414*35238bceSAndroid Build Coastguard Worker {
3415*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3416*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY,
3417*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_INT));
3418*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3419*35238bceSAndroid Build Coastguard Worker }
3420*35238bceSAndroid Build Coastguard Worker {
3421*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3422*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY,
3423*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx], glu::TYPE_INT));
3424*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3425*35238bceSAndroid Build Coastguard Worker }
3426*35238bceSAndroid Build Coastguard Worker }
3427*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3428*35238bceSAndroid Build Coastguard Worker }
3429*35238bceSAndroid Build Coastguard Worker }
3430*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3431*35238bceSAndroid Build Coastguard Worker }
3432*35238bceSAndroid Build Coastguard Worker }
3433*35238bceSAndroid Build Coastguard Worker
texel_fetch_invalid_sample(NegativeTestContext & ctx)3434*35238bceSAndroid Build Coastguard Worker void texel_fetch_invalid_sample(NegativeTestContext &ctx)
3435*35238bceSAndroid Build Coastguard Worker {
3436*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
3437*35238bceSAndroid Build Coastguard Worker DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
3438*35238bceSAndroid Build Coastguard Worker
3439*35238bceSAndroid Build Coastguard Worker if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
3440*35238bceSAndroid Build Coastguard Worker {
3441*35238bceSAndroid Build Coastguard Worker ctx.beginSection("texelFetch: Invalid sample type.");
3442*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
3443*35238bceSAndroid Build Coastguard Worker {
3444*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
3445*35238bceSAndroid Build Coastguard Worker {
3446*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
3447*35238bceSAndroid Build Coastguard Worker for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_floatTypes); ++dataTypeNdx)
3448*35238bceSAndroid Build Coastguard Worker {
3449*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_MULTISAMPLE
3450*35238bceSAndroid Build Coastguard Worker {
3451*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3452*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_MULTISAMPLE,
3453*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2, s_floatTypes[dataTypeNdx]));
3454*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3455*35238bceSAndroid Build Coastguard Worker }
3456*35238bceSAndroid Build Coastguard Worker {
3457*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3458*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE,
3459*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2, s_floatTypes[dataTypeNdx]));
3460*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3461*35238bceSAndroid Build Coastguard Worker }
3462*35238bceSAndroid Build Coastguard Worker {
3463*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3464*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE,
3465*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2, s_floatTypes[dataTypeNdx]));
3466*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3467*35238bceSAndroid Build Coastguard Worker }
3468*35238bceSAndroid Build Coastguard Worker
3469*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_MULTISAMPLE_ARRAY
3470*35238bceSAndroid Build Coastguard Worker {
3471*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3472*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY,
3473*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC3, s_floatTypes[dataTypeNdx]));
3474*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3475*35238bceSAndroid Build Coastguard Worker }
3476*35238bceSAndroid Build Coastguard Worker {
3477*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3478*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, glu::TYPE_INT_VEC3,
3479*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx]));
3480*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3481*35238bceSAndroid Build Coastguard Worker }
3482*35238bceSAndroid Build Coastguard Worker {
3483*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3484*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY, glu::TYPE_INT_VEC3,
3485*35238bceSAndroid Build Coastguard Worker s_floatTypes[dataTypeNdx]));
3486*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3487*35238bceSAndroid Build Coastguard Worker }
3488*35238bceSAndroid Build Coastguard Worker
3489*35238bceSAndroid Build Coastguard Worker if (s_intTypes[dataTypeNdx] != glu::TYPE_INT)
3490*35238bceSAndroid Build Coastguard Worker {
3491*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_MULTISAMPLE
3492*35238bceSAndroid Build Coastguard Worker {
3493*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3494*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_MULTISAMPLE,
3495*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2, s_intTypes[dataTypeNdx]));
3496*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3497*35238bceSAndroid Build Coastguard Worker }
3498*35238bceSAndroid Build Coastguard Worker {
3499*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3500*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE, glu::TYPE_INT_VEC2,
3501*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx]));
3502*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3503*35238bceSAndroid Build Coastguard Worker }
3504*35238bceSAndroid Build Coastguard Worker {
3505*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3506*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE, glu::TYPE_INT_VEC2,
3507*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx]));
3508*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3509*35238bceSAndroid Build Coastguard Worker }
3510*35238bceSAndroid Build Coastguard Worker
3511*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_MULTISAMPLE_ARRAY
3512*35238bceSAndroid Build Coastguard Worker {
3513*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3514*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY, glu::TYPE_INT_VEC3,
3515*35238bceSAndroid Build Coastguard Worker s_intTypes[dataTypeNdx]));
3516*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3517*35238bceSAndroid Build Coastguard Worker }
3518*35238bceSAndroid Build Coastguard Worker {
3519*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3520*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY,
3521*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC3, s_intTypes[dataTypeNdx]));
3522*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3523*35238bceSAndroid Build Coastguard Worker }
3524*35238bceSAndroid Build Coastguard Worker {
3525*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3526*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY,
3527*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC3, s_intTypes[dataTypeNdx]));
3528*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3529*35238bceSAndroid Build Coastguard Worker }
3530*35238bceSAndroid Build Coastguard Worker }
3531*35238bceSAndroid Build Coastguard Worker
3532*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_MULTISAMPLE
3533*35238bceSAndroid Build Coastguard Worker {
3534*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3535*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_MULTISAMPLE,
3536*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2, s_uintTypes[dataTypeNdx]));
3537*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3538*35238bceSAndroid Build Coastguard Worker }
3539*35238bceSAndroid Build Coastguard Worker {
3540*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3541*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE,
3542*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2, s_uintTypes[dataTypeNdx]));
3543*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3544*35238bceSAndroid Build Coastguard Worker }
3545*35238bceSAndroid Build Coastguard Worker {
3546*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3547*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE,
3548*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2, s_uintTypes[dataTypeNdx]));
3549*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3550*35238bceSAndroid Build Coastguard Worker }
3551*35238bceSAndroid Build Coastguard Worker
3552*35238bceSAndroid Build Coastguard Worker // SAMPLER_2D_MULTISAMPLE_ARRAY
3553*35238bceSAndroid Build Coastguard Worker {
3554*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3555*35238bceSAndroid Build Coastguard Worker genShaderSourceTexelFetch(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY,
3556*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC3, s_uintTypes[dataTypeNdx]));
3557*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3558*35238bceSAndroid Build Coastguard Worker }
3559*35238bceSAndroid Build Coastguard Worker {
3560*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3561*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, glu::TYPE_INT_VEC3,
3562*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx]));
3563*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3564*35238bceSAndroid Build Coastguard Worker }
3565*35238bceSAndroid Build Coastguard Worker {
3566*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTexelFetch(
3567*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY, glu::TYPE_INT_VEC3,
3568*35238bceSAndroid Build Coastguard Worker s_uintTypes[dataTypeNdx]));
3569*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3570*35238bceSAndroid Build Coastguard Worker }
3571*35238bceSAndroid Build Coastguard Worker }
3572*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3573*35238bceSAndroid Build Coastguard Worker }
3574*35238bceSAndroid Build Coastguard Worker }
3575*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3576*35238bceSAndroid Build Coastguard Worker }
3577*35238bceSAndroid Build Coastguard Worker }
3578*35238bceSAndroid Build Coastguard Worker
3579*35238bceSAndroid Build Coastguard Worker // EmitVertex, EndPrimitive
genShaderSourceGeometry(NegativeTestContext & ctx,glu::ShaderType shaderType,ShaderFunction function)3580*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceGeometry(NegativeTestContext &ctx, glu::ShaderType shaderType, ShaderFunction function)
3581*35238bceSAndroid Build Coastguard Worker {
3582*35238bceSAndroid Build Coastguard Worker DE_ASSERT(function == SHADER_FUNCTION_EMIT_VERTEX || function == SHADER_FUNCTION_END_PRIMITIVE);
3583*35238bceSAndroid Build Coastguard Worker
3584*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
3585*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
3586*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
3587*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
3588*35238bceSAndroid Build Coastguard Worker << "\n"
3589*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << "void main(void)\n"
3590*35238bceSAndroid Build Coastguard Worker << "{\n";
3591*35238bceSAndroid Build Coastguard Worker
3592*35238bceSAndroid Build Coastguard Worker switch (function)
3593*35238bceSAndroid Build Coastguard Worker {
3594*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_EMIT_VERTEX:
3595*35238bceSAndroid Build Coastguard Worker source << " EmitVertex();\n";
3596*35238bceSAndroid Build Coastguard Worker break;
3597*35238bceSAndroid Build Coastguard Worker
3598*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_END_PRIMITIVE:
3599*35238bceSAndroid Build Coastguard Worker source << " EndPrimitive();\n";
3600*35238bceSAndroid Build Coastguard Worker break;
3601*35238bceSAndroid Build Coastguard Worker
3602*35238bceSAndroid Build Coastguard Worker default:
3603*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported shader function.");
3604*35238bceSAndroid Build Coastguard Worker }
3605*35238bceSAndroid Build Coastguard Worker
3606*35238bceSAndroid Build Coastguard Worker source << "}\n";
3607*35238bceSAndroid Build Coastguard Worker
3608*35238bceSAndroid Build Coastguard Worker return source.str();
3609*35238bceSAndroid Build Coastguard Worker }
3610*35238bceSAndroid Build Coastguard Worker
emit_vertex(NegativeTestContext & ctx)3611*35238bceSAndroid Build Coastguard Worker void emit_vertex(NegativeTestContext &ctx)
3612*35238bceSAndroid Build Coastguard Worker {
3613*35238bceSAndroid Build Coastguard Worker ctx.beginSection("EmitVertex.");
3614*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
3615*35238bceSAndroid Build Coastguard Worker {
3616*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
3617*35238bceSAndroid Build Coastguard Worker {
3618*35238bceSAndroid Build Coastguard Worker if (s_shaders[shaderNdx] == glu::SHADERTYPE_GEOMETRY)
3619*35238bceSAndroid Build Coastguard Worker continue;
3620*35238bceSAndroid Build Coastguard Worker
3621*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
3622*35238bceSAndroid Build Coastguard Worker const std::string shaderSource =
3623*35238bceSAndroid Build Coastguard Worker genShaderSourceGeometry(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_EMIT_VERTEX);
3624*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3625*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3626*35238bceSAndroid Build Coastguard Worker }
3627*35238bceSAndroid Build Coastguard Worker }
3628*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3629*35238bceSAndroid Build Coastguard Worker }
3630*35238bceSAndroid Build Coastguard Worker
end_primitive(NegativeTestContext & ctx)3631*35238bceSAndroid Build Coastguard Worker void end_primitive(NegativeTestContext &ctx)
3632*35238bceSAndroid Build Coastguard Worker {
3633*35238bceSAndroid Build Coastguard Worker ctx.beginSection("EndPrimitieve.");
3634*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
3635*35238bceSAndroid Build Coastguard Worker {
3636*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
3637*35238bceSAndroid Build Coastguard Worker {
3638*35238bceSAndroid Build Coastguard Worker if (s_shaders[shaderNdx] == glu::SHADERTYPE_GEOMETRY)
3639*35238bceSAndroid Build Coastguard Worker continue;
3640*35238bceSAndroid Build Coastguard Worker
3641*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
3642*35238bceSAndroid Build Coastguard Worker const std::string shaderSource =
3643*35238bceSAndroid Build Coastguard Worker genShaderSourceGeometry(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_END_PRIMITIVE);
3644*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3645*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3646*35238bceSAndroid Build Coastguard Worker }
3647*35238bceSAndroid Build Coastguard Worker }
3648*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3649*35238bceSAndroid Build Coastguard Worker }
3650*35238bceSAndroid Build Coastguard Worker
3651*35238bceSAndroid Build Coastguard Worker // textureGrad
genShaderSourceTextureGrad(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType samplerDataType,glu::DataType pDataType,glu::DataType dpdxDataType,glu::DataType dpdyDataType)3652*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTextureGrad(NegativeTestContext &ctx, glu::ShaderType shaderType,
3653*35238bceSAndroid Build Coastguard Worker glu::DataType samplerDataType, glu::DataType pDataType,
3654*35238bceSAndroid Build Coastguard Worker glu::DataType dpdxDataType, glu::DataType dpdyDataType)
3655*35238bceSAndroid Build Coastguard Worker {
3656*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
3657*35238bceSAndroid Build Coastguard Worker
3658*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
3659*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
3660*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
3661*35238bceSAndroid Build Coastguard Worker << "\n"
3662*35238bceSAndroid Build Coastguard Worker << getShaderExtensionDeclaration(getDataTypeExtension(samplerDataType))
3663*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << declareShaderUniform(samplerDataType, "sampler")
3664*35238bceSAndroid Build Coastguard Worker << "void main(void)\n"
3665*35238bceSAndroid Build Coastguard Worker << "{\n"
3666*35238bceSAndroid Build Coastguard Worker << " mediump " << declareAndInitializeShaderVariable(pDataType, "P") << " mediump "
3667*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(dpdxDataType, "dPdx") << " mediump "
3668*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(dpdyDataType, "dPdy") << " textureGrad(sampler, P, dPdx, dPdy);\n"
3669*35238bceSAndroid Build Coastguard Worker << "}\n";
3670*35238bceSAndroid Build Coastguard Worker
3671*35238bceSAndroid Build Coastguard Worker return source.str();
3672*35238bceSAndroid Build Coastguard Worker }
3673*35238bceSAndroid Build Coastguard Worker
texture_grad(NegativeTestContext & ctx)3674*35238bceSAndroid Build Coastguard Worker void texture_grad(NegativeTestContext &ctx)
3675*35238bceSAndroid Build Coastguard Worker {
3676*35238bceSAndroid Build Coastguard Worker TCU_CHECK_AND_THROW(NotSupportedError,
3677*35238bceSAndroid Build Coastguard Worker ctx.isExtensionSupported("GL_EXT_texture_cube_map_array") || checkSupport(ctx),
3678*35238bceSAndroid Build Coastguard Worker "Test requires support for GL_EXT_texture_cube_map_array or version 3.2.");
3679*35238bceSAndroid Build Coastguard Worker
3680*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGrad.");
3681*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
3682*35238bceSAndroid Build Coastguard Worker {
3683*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
3684*35238bceSAndroid Build Coastguard Worker {
3685*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
3686*35238bceSAndroid Build Coastguard Worker {
3687*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGrad(ctx, s_shaders[shaderNdx],
3688*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE_ARRAY, glu::TYPE_FLOAT,
3689*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT_VEC3));
3690*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3691*35238bceSAndroid Build Coastguard Worker }
3692*35238bceSAndroid Build Coastguard Worker {
3693*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3694*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureGrad(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY,
3695*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT, glu::TYPE_FLOAT_VEC3));
3696*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3697*35238bceSAndroid Build Coastguard Worker }
3698*35238bceSAndroid Build Coastguard Worker {
3699*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3700*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureGrad(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY,
3701*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
3702*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3703*35238bceSAndroid Build Coastguard Worker }
3704*35238bceSAndroid Build Coastguard Worker {
3705*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3706*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureGrad(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
3707*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT_VEC3));
3708*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3709*35238bceSAndroid Build Coastguard Worker }
3710*35238bceSAndroid Build Coastguard Worker {
3711*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3712*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureGrad(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
3713*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT, glu::TYPE_FLOAT_VEC3));
3714*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3715*35238bceSAndroid Build Coastguard Worker }
3716*35238bceSAndroid Build Coastguard Worker {
3717*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3718*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureGrad(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
3719*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
3720*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3721*35238bceSAndroid Build Coastguard Worker }
3722*35238bceSAndroid Build Coastguard Worker {
3723*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3724*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureGrad(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
3725*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT_VEC3));
3726*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3727*35238bceSAndroid Build Coastguard Worker }
3728*35238bceSAndroid Build Coastguard Worker {
3729*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3730*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureGrad(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
3731*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT, glu::TYPE_FLOAT_VEC3));
3732*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3733*35238bceSAndroid Build Coastguard Worker }
3734*35238bceSAndroid Build Coastguard Worker {
3735*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3736*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureGrad(ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
3737*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
3738*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3739*35238bceSAndroid Build Coastguard Worker }
3740*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3741*35238bceSAndroid Build Coastguard Worker }
3742*35238bceSAndroid Build Coastguard Worker }
3743*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3744*35238bceSAndroid Build Coastguard Worker }
3745*35238bceSAndroid Build Coastguard Worker
3746*35238bceSAndroid Build Coastguard Worker // textureGather
genShaderSourceTextureGather(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType samplerDataType,glu::DataType pDataType,glu::DataType thirdArgument)3747*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTextureGather(NegativeTestContext &ctx, glu::ShaderType shaderType,
3748*35238bceSAndroid Build Coastguard Worker glu::DataType samplerDataType, glu::DataType pDataType,
3749*35238bceSAndroid Build Coastguard Worker glu::DataType thirdArgument)
3750*35238bceSAndroid Build Coastguard Worker {
3751*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
3752*35238bceSAndroid Build Coastguard Worker
3753*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
3754*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
3755*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
3756*35238bceSAndroid Build Coastguard Worker << "\n"
3757*35238bceSAndroid Build Coastguard Worker << getShaderExtensionDeclaration(getDataTypeExtension(samplerDataType))
3758*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << declareShaderUniform(samplerDataType, "sampler")
3759*35238bceSAndroid Build Coastguard Worker << "void main(void)\n"
3760*35238bceSAndroid Build Coastguard Worker << "{\n"
3761*35238bceSAndroid Build Coastguard Worker << " mediump " << declareAndInitializeShaderVariable(pDataType, "P");
3762*35238bceSAndroid Build Coastguard Worker
3763*35238bceSAndroid Build Coastguard Worker if (thirdArgument != glu::TYPE_LAST)
3764*35238bceSAndroid Build Coastguard Worker source << " mediump " << declareAndInitializeShaderVariable(thirdArgument, "arg3")
3765*35238bceSAndroid Build Coastguard Worker << " textureGather(sampler, P, arg3);\n";
3766*35238bceSAndroid Build Coastguard Worker else
3767*35238bceSAndroid Build Coastguard Worker source << " textureGather(sampler, P);\n";
3768*35238bceSAndroid Build Coastguard Worker
3769*35238bceSAndroid Build Coastguard Worker source << "}\n";
3770*35238bceSAndroid Build Coastguard Worker
3771*35238bceSAndroid Build Coastguard Worker return source.str();
3772*35238bceSAndroid Build Coastguard Worker }
3773*35238bceSAndroid Build Coastguard Worker
genShaderSourceTextureGather(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType samplerDataType,glu::DataType pDataType)3774*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTextureGather(NegativeTestContext &ctx, glu::ShaderType shaderType,
3775*35238bceSAndroid Build Coastguard Worker glu::DataType samplerDataType, glu::DataType pDataType)
3776*35238bceSAndroid Build Coastguard Worker {
3777*35238bceSAndroid Build Coastguard Worker return genShaderSourceTextureGather(ctx, shaderType, samplerDataType, pDataType, glu::TYPE_LAST);
3778*35238bceSAndroid Build Coastguard Worker }
3779*35238bceSAndroid Build Coastguard Worker
texture_gather_sampler_2d(NegativeTestContext & ctx)3780*35238bceSAndroid Build Coastguard Worker void texture_gather_sampler_2d(NegativeTestContext &ctx)
3781*35238bceSAndroid Build Coastguard Worker {
3782*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGrad - sampler2D");
3783*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
3784*35238bceSAndroid Build Coastguard Worker {
3785*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
3786*35238bceSAndroid Build Coastguard Worker {
3787*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
3788*35238bceSAndroid Build Coastguard Worker {
3789*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3790*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureGather(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D, glu::TYPE_FLOAT));
3791*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3792*35238bceSAndroid Build Coastguard Worker }
3793*35238bceSAndroid Build Coastguard Worker {
3794*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3795*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D, glu::TYPE_FLOAT_VEC2, glu::TYPE_FLOAT));
3796*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3797*35238bceSAndroid Build Coastguard Worker }
3798*35238bceSAndroid Build Coastguard Worker {
3799*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3800*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D, glu::TYPE_FLOAT, glu::TYPE_INT));
3801*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3802*35238bceSAndroid Build Coastguard Worker }
3803*35238bceSAndroid Build Coastguard Worker {
3804*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3805*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureGather(ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D, glu::TYPE_FLOAT));
3806*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3807*35238bceSAndroid Build Coastguard Worker }
3808*35238bceSAndroid Build Coastguard Worker {
3809*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3810*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D, glu::TYPE_FLOAT_VEC2, glu::TYPE_FLOAT));
3811*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3812*35238bceSAndroid Build Coastguard Worker }
3813*35238bceSAndroid Build Coastguard Worker {
3814*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3815*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D, glu::TYPE_FLOAT, glu::TYPE_INT));
3816*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3817*35238bceSAndroid Build Coastguard Worker }
3818*35238bceSAndroid Build Coastguard Worker {
3819*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3820*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D, glu::TYPE_FLOAT));
3821*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3822*35238bceSAndroid Build Coastguard Worker }
3823*35238bceSAndroid Build Coastguard Worker {
3824*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3825*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D, glu::TYPE_FLOAT_VEC2, glu::TYPE_FLOAT));
3826*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3827*35238bceSAndroid Build Coastguard Worker }
3828*35238bceSAndroid Build Coastguard Worker {
3829*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3830*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D, glu::TYPE_FLOAT, glu::TYPE_INT));
3831*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3832*35238bceSAndroid Build Coastguard Worker }
3833*35238bceSAndroid Build Coastguard Worker {
3834*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3835*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D, glu::TYPE_FLOAT_VEC2));
3836*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3837*35238bceSAndroid Build Coastguard Worker }
3838*35238bceSAndroid Build Coastguard Worker {
3839*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3840*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D, glu::TYPE_FLOAT_VEC2, glu::TYPE_INT));
3841*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3842*35238bceSAndroid Build Coastguard Worker }
3843*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3844*35238bceSAndroid Build Coastguard Worker }
3845*35238bceSAndroid Build Coastguard Worker }
3846*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3847*35238bceSAndroid Build Coastguard Worker }
3848*35238bceSAndroid Build Coastguard Worker
texture_gather_sampler_2d_array(NegativeTestContext & ctx)3849*35238bceSAndroid Build Coastguard Worker void texture_gather_sampler_2d_array(NegativeTestContext &ctx)
3850*35238bceSAndroid Build Coastguard Worker {
3851*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGrad - sampler2DArray");
3852*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
3853*35238bceSAndroid Build Coastguard Worker {
3854*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
3855*35238bceSAndroid Build Coastguard Worker {
3856*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
3857*35238bceSAndroid Build Coastguard Worker {
3858*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3859*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT));
3860*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3861*35238bceSAndroid Build Coastguard Worker }
3862*35238bceSAndroid Build Coastguard Worker {
3863*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3864*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
3865*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3866*35238bceSAndroid Build Coastguard Worker }
3867*35238bceSAndroid Build Coastguard Worker {
3868*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3869*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT, glu::TYPE_INT));
3870*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3871*35238bceSAndroid Build Coastguard Worker }
3872*35238bceSAndroid Build Coastguard Worker {
3873*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3874*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT));
3875*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3876*35238bceSAndroid Build Coastguard Worker }
3877*35238bceSAndroid Build Coastguard Worker {
3878*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3879*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
3880*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3881*35238bceSAndroid Build Coastguard Worker }
3882*35238bceSAndroid Build Coastguard Worker {
3883*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3884*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT, glu::TYPE_INT));
3885*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3886*35238bceSAndroid Build Coastguard Worker }
3887*35238bceSAndroid Build Coastguard Worker {
3888*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3889*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT));
3890*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3891*35238bceSAndroid Build Coastguard Worker }
3892*35238bceSAndroid Build Coastguard Worker {
3893*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3894*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
3895*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3896*35238bceSAndroid Build Coastguard Worker }
3897*35238bceSAndroid Build Coastguard Worker {
3898*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3899*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT, glu::TYPE_INT));
3900*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3901*35238bceSAndroid Build Coastguard Worker }
3902*35238bceSAndroid Build Coastguard Worker {
3903*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3904*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D, glu::TYPE_FLOAT_VEC3));
3905*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3906*35238bceSAndroid Build Coastguard Worker }
3907*35238bceSAndroid Build Coastguard Worker {
3908*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3909*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D, glu::TYPE_FLOAT_VEC3, glu::TYPE_INT));
3910*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3911*35238bceSAndroid Build Coastguard Worker }
3912*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3913*35238bceSAndroid Build Coastguard Worker }
3914*35238bceSAndroid Build Coastguard Worker }
3915*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3916*35238bceSAndroid Build Coastguard Worker }
3917*35238bceSAndroid Build Coastguard Worker
texture_gather_sampler_cube(NegativeTestContext & ctx)3918*35238bceSAndroid Build Coastguard Worker void texture_gather_sampler_cube(NegativeTestContext &ctx)
3919*35238bceSAndroid Build Coastguard Worker {
3920*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGrad - samplerCube");
3921*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
3922*35238bceSAndroid Build Coastguard Worker {
3923*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
3924*35238bceSAndroid Build Coastguard Worker {
3925*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
3926*35238bceSAndroid Build Coastguard Worker {
3927*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
3928*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureGather(ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE, glu::TYPE_FLOAT));
3929*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3930*35238bceSAndroid Build Coastguard Worker }
3931*35238bceSAndroid Build Coastguard Worker {
3932*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3933*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
3934*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3935*35238bceSAndroid Build Coastguard Worker }
3936*35238bceSAndroid Build Coastguard Worker {
3937*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3938*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE, glu::TYPE_FLOAT, glu::TYPE_INT));
3939*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3940*35238bceSAndroid Build Coastguard Worker }
3941*35238bceSAndroid Build Coastguard Worker {
3942*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3943*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE, glu::TYPE_FLOAT));
3944*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3945*35238bceSAndroid Build Coastguard Worker }
3946*35238bceSAndroid Build Coastguard Worker {
3947*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3948*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
3949*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3950*35238bceSAndroid Build Coastguard Worker }
3951*35238bceSAndroid Build Coastguard Worker {
3952*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3953*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE, glu::TYPE_FLOAT, glu::TYPE_INT));
3954*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3955*35238bceSAndroid Build Coastguard Worker }
3956*35238bceSAndroid Build Coastguard Worker {
3957*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3958*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE, glu::TYPE_FLOAT));
3959*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3960*35238bceSAndroid Build Coastguard Worker }
3961*35238bceSAndroid Build Coastguard Worker {
3962*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3963*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
3964*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3965*35238bceSAndroid Build Coastguard Worker }
3966*35238bceSAndroid Build Coastguard Worker {
3967*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3968*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE, glu::TYPE_FLOAT, glu::TYPE_INT));
3969*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3970*35238bceSAndroid Build Coastguard Worker }
3971*35238bceSAndroid Build Coastguard Worker {
3972*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3973*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D, glu::TYPE_FLOAT_VEC3));
3974*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3975*35238bceSAndroid Build Coastguard Worker }
3976*35238bceSAndroid Build Coastguard Worker {
3977*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3978*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_3D, glu::TYPE_FLOAT_VEC3, glu::TYPE_INT));
3979*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3980*35238bceSAndroid Build Coastguard Worker }
3981*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3982*35238bceSAndroid Build Coastguard Worker }
3983*35238bceSAndroid Build Coastguard Worker }
3984*35238bceSAndroid Build Coastguard Worker ctx.endSection();
3985*35238bceSAndroid Build Coastguard Worker }
3986*35238bceSAndroid Build Coastguard Worker
texture_gather_sampler_2d_shadow(NegativeTestContext & ctx)3987*35238bceSAndroid Build Coastguard Worker void texture_gather_sampler_2d_shadow(NegativeTestContext &ctx)
3988*35238bceSAndroid Build Coastguard Worker {
3989*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGrad - sampler2DShadow");
3990*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
3991*35238bceSAndroid Build Coastguard Worker {
3992*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
3993*35238bceSAndroid Build Coastguard Worker {
3994*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
3995*35238bceSAndroid Build Coastguard Worker {
3996*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
3997*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_SHADOW, glu::TYPE_FLOAT));
3998*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
3999*35238bceSAndroid Build Coastguard Worker }
4000*35238bceSAndroid Build Coastguard Worker {
4001*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4002*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_SHADOW, glu::TYPE_FLOAT_VEC2, glu::TYPE_INT));
4003*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4004*35238bceSAndroid Build Coastguard Worker }
4005*35238bceSAndroid Build Coastguard Worker {
4006*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4007*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_SHADOW, glu::TYPE_FLOAT, glu::TYPE_FLOAT));
4008*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4009*35238bceSAndroid Build Coastguard Worker }
4010*35238bceSAndroid Build Coastguard Worker {
4011*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4012*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_3D, glu::TYPE_FLOAT_VEC2, glu::TYPE_FLOAT));
4013*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4014*35238bceSAndroid Build Coastguard Worker }
4015*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4016*35238bceSAndroid Build Coastguard Worker }
4017*35238bceSAndroid Build Coastguard Worker }
4018*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4019*35238bceSAndroid Build Coastguard Worker }
4020*35238bceSAndroid Build Coastguard Worker
texture_gather_sampler_2d_array_shadow(NegativeTestContext & ctx)4021*35238bceSAndroid Build Coastguard Worker void texture_gather_sampler_2d_array_shadow(NegativeTestContext &ctx)
4022*35238bceSAndroid Build Coastguard Worker {
4023*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGrad - sampler2DArrayShadow");
4024*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4025*35238bceSAndroid Build Coastguard Worker {
4026*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4027*35238bceSAndroid Build Coastguard Worker {
4028*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4029*35238bceSAndroid Build Coastguard Worker {
4030*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4031*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY_SHADOW, glu::TYPE_FLOAT));
4032*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4033*35238bceSAndroid Build Coastguard Worker }
4034*35238bceSAndroid Build Coastguard Worker {
4035*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4036*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY_SHADOW, glu::TYPE_FLOAT_VEC3, glu::TYPE_INT));
4037*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4038*35238bceSAndroid Build Coastguard Worker }
4039*35238bceSAndroid Build Coastguard Worker {
4040*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4041*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_2D_ARRAY_SHADOW, glu::TYPE_FLOAT, glu::TYPE_FLOAT));
4042*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4043*35238bceSAndroid Build Coastguard Worker }
4044*35238bceSAndroid Build Coastguard Worker {
4045*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4046*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_3D, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
4047*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4048*35238bceSAndroid Build Coastguard Worker }
4049*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4050*35238bceSAndroid Build Coastguard Worker }
4051*35238bceSAndroid Build Coastguard Worker }
4052*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4053*35238bceSAndroid Build Coastguard Worker }
4054*35238bceSAndroid Build Coastguard Worker
texture_gather_sampler_cube_shadow(NegativeTestContext & ctx)4055*35238bceSAndroid Build Coastguard Worker void texture_gather_sampler_cube_shadow(NegativeTestContext &ctx)
4056*35238bceSAndroid Build Coastguard Worker {
4057*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGrad - samplerCubeShadow");
4058*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4059*35238bceSAndroid Build Coastguard Worker {
4060*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4061*35238bceSAndroid Build Coastguard Worker {
4062*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4063*35238bceSAndroid Build Coastguard Worker {
4064*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4065*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_SHADOW, glu::TYPE_FLOAT));
4066*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4067*35238bceSAndroid Build Coastguard Worker }
4068*35238bceSAndroid Build Coastguard Worker {
4069*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4070*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_SHADOW, glu::TYPE_FLOAT_VEC3, glu::TYPE_INT));
4071*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4072*35238bceSAndroid Build Coastguard Worker }
4073*35238bceSAndroid Build Coastguard Worker {
4074*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4075*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_SHADOW, glu::TYPE_FLOAT, glu::TYPE_FLOAT));
4076*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4077*35238bceSAndroid Build Coastguard Worker }
4078*35238bceSAndroid Build Coastguard Worker {
4079*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4080*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_3D, glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
4081*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4082*35238bceSAndroid Build Coastguard Worker }
4083*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4084*35238bceSAndroid Build Coastguard Worker }
4085*35238bceSAndroid Build Coastguard Worker }
4086*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4087*35238bceSAndroid Build Coastguard Worker }
4088*35238bceSAndroid Build Coastguard Worker
texture_gather_sampler_cube_array(NegativeTestContext & ctx)4089*35238bceSAndroid Build Coastguard Worker void texture_gather_sampler_cube_array(NegativeTestContext &ctx)
4090*35238bceSAndroid Build Coastguard Worker {
4091*35238bceSAndroid Build Coastguard Worker TCU_CHECK_AND_THROW(NotSupportedError,
4092*35238bceSAndroid Build Coastguard Worker checkSupport(ctx) || ctx.isExtensionSupported("GL_EXT_texture_cube_map_array"),
4093*35238bceSAndroid Build Coastguard Worker "Test requires extension GL_EXT_texture_cube_map_array or context version 3.2 or higher.");
4094*35238bceSAndroid Build Coastguard Worker
4095*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGrad - samplerCubeArray");
4096*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4097*35238bceSAndroid Build Coastguard Worker {
4098*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4099*35238bceSAndroid Build Coastguard Worker {
4100*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4101*35238bceSAndroid Build Coastguard Worker {
4102*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4103*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY, glu::TYPE_FLOAT));
4104*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4105*35238bceSAndroid Build Coastguard Worker }
4106*35238bceSAndroid Build Coastguard Worker {
4107*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4108*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY, glu::TYPE_FLOAT, glu::TYPE_INT));
4109*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4110*35238bceSAndroid Build Coastguard Worker }
4111*35238bceSAndroid Build Coastguard Worker {
4112*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4113*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY, glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT));
4114*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4115*35238bceSAndroid Build Coastguard Worker }
4116*35238bceSAndroid Build Coastguard Worker {
4117*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4118*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY, glu::TYPE_FLOAT));
4119*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4120*35238bceSAndroid Build Coastguard Worker }
4121*35238bceSAndroid Build Coastguard Worker {
4122*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4123*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_INT_SAMPLER_CUBE_ARRAY, glu::TYPE_FLOAT, glu::TYPE_INT));
4124*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4125*35238bceSAndroid Build Coastguard Worker }
4126*35238bceSAndroid Build Coastguard Worker {
4127*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(ctx, s_shaders[shaderNdx],
4128*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_SAMPLER_CUBE_ARRAY,
4129*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT));
4130*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4131*35238bceSAndroid Build Coastguard Worker }
4132*35238bceSAndroid Build Coastguard Worker {
4133*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4134*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY, glu::TYPE_FLOAT));
4135*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4136*35238bceSAndroid Build Coastguard Worker }
4137*35238bceSAndroid Build Coastguard Worker {
4138*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4139*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_UINT_SAMPLER_CUBE_ARRAY, glu::TYPE_FLOAT, glu::TYPE_INT));
4140*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4141*35238bceSAndroid Build Coastguard Worker }
4142*35238bceSAndroid Build Coastguard Worker {
4143*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(ctx, s_shaders[shaderNdx],
4144*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_CUBE_ARRAY,
4145*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT));
4146*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4147*35238bceSAndroid Build Coastguard Worker }
4148*35238bceSAndroid Build Coastguard Worker {
4149*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4150*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_3D, glu::TYPE_FLOAT_VEC4, glu::TYPE_INT));
4151*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4152*35238bceSAndroid Build Coastguard Worker }
4153*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4154*35238bceSAndroid Build Coastguard Worker }
4155*35238bceSAndroid Build Coastguard Worker }
4156*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4157*35238bceSAndroid Build Coastguard Worker }
4158*35238bceSAndroid Build Coastguard Worker
texture_gather_sampler_cube_array_shadow(NegativeTestContext & ctx)4159*35238bceSAndroid Build Coastguard Worker void texture_gather_sampler_cube_array_shadow(NegativeTestContext &ctx)
4160*35238bceSAndroid Build Coastguard Worker {
4161*35238bceSAndroid Build Coastguard Worker TCU_CHECK_AND_THROW(NotSupportedError,
4162*35238bceSAndroid Build Coastguard Worker checkSupport(ctx) || ctx.isExtensionSupported("GL_EXT_texture_cube_map_array"),
4163*35238bceSAndroid Build Coastguard Worker "Test requires extension GL_EXT_texture_cube_map_array or context version 3.2 or higher.");
4164*35238bceSAndroid Build Coastguard Worker
4165*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGrad - samplerCubeArrayShadow");
4166*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4167*35238bceSAndroid Build Coastguard Worker {
4168*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4169*35238bceSAndroid Build Coastguard Worker {
4170*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4171*35238bceSAndroid Build Coastguard Worker {
4172*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4173*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW, glu::TYPE_FLOAT));
4174*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4175*35238bceSAndroid Build Coastguard Worker }
4176*35238bceSAndroid Build Coastguard Worker {
4177*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4178*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW, glu::TYPE_FLOAT, glu::TYPE_FLOAT));
4179*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4180*35238bceSAndroid Build Coastguard Worker }
4181*35238bceSAndroid Build Coastguard Worker {
4182*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(ctx, s_shaders[shaderNdx],
4183*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW,
4184*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_INT));
4185*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4186*35238bceSAndroid Build Coastguard Worker }
4187*35238bceSAndroid Build Coastguard Worker {
4188*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGather(
4189*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], glu::TYPE_SAMPLER_3D, glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT));
4190*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4191*35238bceSAndroid Build Coastguard Worker }
4192*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4193*35238bceSAndroid Build Coastguard Worker }
4194*35238bceSAndroid Build Coastguard Worker }
4195*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4196*35238bceSAndroid Build Coastguard Worker }
4197*35238bceSAndroid Build Coastguard Worker
4198*35238bceSAndroid Build Coastguard Worker // textureGatherOffset
genShaderSourceTextureGatherOffset(NegativeTestContext & ctx,glu::ShaderType shaderType,FunctionTextureGatherOffsetModes mode,glu::DataType samplerDataType,glu::DataType pDataType,glu::DataType offsetDataType,glu::DataType fourthArgument)4199*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTextureGatherOffset(NegativeTestContext &ctx, glu::ShaderType shaderType,
4200*35238bceSAndroid Build Coastguard Worker FunctionTextureGatherOffsetModes mode, glu::DataType samplerDataType,
4201*35238bceSAndroid Build Coastguard Worker glu::DataType pDataType, glu::DataType offsetDataType,
4202*35238bceSAndroid Build Coastguard Worker glu::DataType fourthArgument)
4203*35238bceSAndroid Build Coastguard Worker {
4204*35238bceSAndroid Build Coastguard Worker DE_ASSERT(mode < FUNCTION_TEXTURE_GATHER_OFFSET_MODE_LAST);
4205*35238bceSAndroid Build Coastguard Worker
4206*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
4207*35238bceSAndroid Build Coastguard Worker
4208*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
4209*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
4210*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
4211*35238bceSAndroid Build Coastguard Worker << "\n"
4212*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << declareShaderUniform(samplerDataType, "sampler")
4213*35238bceSAndroid Build Coastguard Worker << "void main(void)\n"
4214*35238bceSAndroid Build Coastguard Worker << "{\n"
4215*35238bceSAndroid Build Coastguard Worker << " mediump " << declareAndInitializeShaderVariable(pDataType, "P") << " mediump "
4216*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(offsetDataType, "offset");
4217*35238bceSAndroid Build Coastguard Worker
4218*35238bceSAndroid Build Coastguard Worker switch (mode)
4219*35238bceSAndroid Build Coastguard Worker {
4220*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP:
4221*35238bceSAndroid Build Coastguard Worker {
4222*35238bceSAndroid Build Coastguard Worker if (fourthArgument != glu::TYPE_LAST)
4223*35238bceSAndroid Build Coastguard Worker source << " mediump " << declareAndInitializeShaderVariable(fourthArgument, "comp")
4224*35238bceSAndroid Build Coastguard Worker << " textureGatherOffset(sampler, P, offset, comp);\n";
4225*35238bceSAndroid Build Coastguard Worker else
4226*35238bceSAndroid Build Coastguard Worker source << " textureGatherOffset(sampler, P, offset);\n";
4227*35238bceSAndroid Build Coastguard Worker break;
4228*35238bceSAndroid Build Coastguard Worker }
4229*35238bceSAndroid Build Coastguard Worker
4230*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z:
4231*35238bceSAndroid Build Coastguard Worker {
4232*35238bceSAndroid Build Coastguard Worker source << " mediump " << declareAndInitializeShaderVariable(fourthArgument, "refZ")
4233*35238bceSAndroid Build Coastguard Worker << " textureGatherOffset(sampler, P, refZ, offset);\n";
4234*35238bceSAndroid Build Coastguard Worker break;
4235*35238bceSAndroid Build Coastguard Worker }
4236*35238bceSAndroid Build Coastguard Worker
4237*35238bceSAndroid Build Coastguard Worker default:
4238*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported shader function overload.");
4239*35238bceSAndroid Build Coastguard Worker }
4240*35238bceSAndroid Build Coastguard Worker
4241*35238bceSAndroid Build Coastguard Worker source << "}\n";
4242*35238bceSAndroid Build Coastguard Worker
4243*35238bceSAndroid Build Coastguard Worker return source.str();
4244*35238bceSAndroid Build Coastguard Worker }
4245*35238bceSAndroid Build Coastguard Worker
genShaderSourceTextureGatherOffset(NegativeTestContext & ctx,glu::ShaderType shaderType,FunctionTextureGatherOffsetModes mode,glu::DataType samplerDataType,glu::DataType pDataType,glu::DataType offsetDataType)4246*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTextureGatherOffset(NegativeTestContext &ctx, glu::ShaderType shaderType,
4247*35238bceSAndroid Build Coastguard Worker FunctionTextureGatherOffsetModes mode, glu::DataType samplerDataType,
4248*35238bceSAndroid Build Coastguard Worker glu::DataType pDataType, glu::DataType offsetDataType)
4249*35238bceSAndroid Build Coastguard Worker {
4250*35238bceSAndroid Build Coastguard Worker DE_ASSERT(mode == FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP);
4251*35238bceSAndroid Build Coastguard Worker
4252*35238bceSAndroid Build Coastguard Worker return genShaderSourceTextureGatherOffset(ctx, shaderType, mode, samplerDataType, pDataType, offsetDataType,
4253*35238bceSAndroid Build Coastguard Worker glu::TYPE_LAST);
4254*35238bceSAndroid Build Coastguard Worker }
4255*35238bceSAndroid Build Coastguard Worker
texture_gather_offset_sampler_2d(NegativeTestContext & ctx)4256*35238bceSAndroid Build Coastguard Worker void texture_gather_offset_sampler_2d(NegativeTestContext &ctx)
4257*35238bceSAndroid Build Coastguard Worker {
4258*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGatherOffset - sampler2D");
4259*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4260*35238bceSAndroid Build Coastguard Worker {
4261*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4262*35238bceSAndroid Build Coastguard Worker {
4263*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4264*35238bceSAndroid Build Coastguard Worker {
4265*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4266*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_SAMPLER_2D,
4267*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_INT_VEC2));
4268*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4269*35238bceSAndroid Build Coastguard Worker }
4270*35238bceSAndroid Build Coastguard Worker {
4271*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4272*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_SAMPLER_2D,
4273*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT));
4274*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4275*35238bceSAndroid Build Coastguard Worker }
4276*35238bceSAndroid Build Coastguard Worker {
4277*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4278*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_SAMPLER_2D,
4279*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_INT_VEC2, glu::TYPE_INT));
4280*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4281*35238bceSAndroid Build Coastguard Worker }
4282*35238bceSAndroid Build Coastguard Worker {
4283*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4284*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_SAMPLER_2D,
4285*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT, glu::TYPE_INT));
4286*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4287*35238bceSAndroid Build Coastguard Worker }
4288*35238bceSAndroid Build Coastguard Worker {
4289*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4290*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_SAMPLER_2D,
4291*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT_VEC2, glu::TYPE_FLOAT));
4292*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4293*35238bceSAndroid Build Coastguard Worker }
4294*35238bceSAndroid Build Coastguard Worker {
4295*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4296*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_INT_SAMPLER_2D,
4297*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_INT_VEC2));
4298*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4299*35238bceSAndroid Build Coastguard Worker }
4300*35238bceSAndroid Build Coastguard Worker {
4301*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4302*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_INT_SAMPLER_2D,
4303*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT));
4304*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4305*35238bceSAndroid Build Coastguard Worker }
4306*35238bceSAndroid Build Coastguard Worker {
4307*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4308*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_INT_SAMPLER_2D,
4309*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_INT_VEC2, glu::TYPE_INT));
4310*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4311*35238bceSAndroid Build Coastguard Worker }
4312*35238bceSAndroid Build Coastguard Worker {
4313*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4314*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_INT_SAMPLER_2D,
4315*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT, glu::TYPE_INT));
4316*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4317*35238bceSAndroid Build Coastguard Worker }
4318*35238bceSAndroid Build Coastguard Worker {
4319*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4320*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_INT_SAMPLER_2D,
4321*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT_VEC2, glu::TYPE_FLOAT));
4322*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4323*35238bceSAndroid Build Coastguard Worker }
4324*35238bceSAndroid Build Coastguard Worker {
4325*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4326*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_UINT_SAMPLER_2D,
4327*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_INT_VEC2));
4328*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4329*35238bceSAndroid Build Coastguard Worker }
4330*35238bceSAndroid Build Coastguard Worker {
4331*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4332*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_UINT_SAMPLER_2D,
4333*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT));
4334*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4335*35238bceSAndroid Build Coastguard Worker }
4336*35238bceSAndroid Build Coastguard Worker {
4337*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4338*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_UINT_SAMPLER_2D,
4339*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_INT_VEC2, glu::TYPE_INT));
4340*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4341*35238bceSAndroid Build Coastguard Worker }
4342*35238bceSAndroid Build Coastguard Worker {
4343*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4344*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_UINT_SAMPLER_2D,
4345*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT, glu::TYPE_INT));
4346*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4347*35238bceSAndroid Build Coastguard Worker }
4348*35238bceSAndroid Build Coastguard Worker {
4349*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4350*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_UINT_SAMPLER_2D,
4351*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT_VEC2, glu::TYPE_FLOAT));
4352*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4353*35238bceSAndroid Build Coastguard Worker }
4354*35238bceSAndroid Build Coastguard Worker {
4355*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4356*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_SAMPLER_3D,
4357*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT_VEC2));
4358*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4359*35238bceSAndroid Build Coastguard Worker }
4360*35238bceSAndroid Build Coastguard Worker {
4361*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4362*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_SAMPLER_3D,
4363*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT_VEC2, glu::TYPE_INT));
4364*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4365*35238bceSAndroid Build Coastguard Worker }
4366*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4367*35238bceSAndroid Build Coastguard Worker }
4368*35238bceSAndroid Build Coastguard Worker }
4369*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4370*35238bceSAndroid Build Coastguard Worker }
4371*35238bceSAndroid Build Coastguard Worker
texture_gather_offset_sampler_2d_array(NegativeTestContext & ctx)4372*35238bceSAndroid Build Coastguard Worker void texture_gather_offset_sampler_2d_array(NegativeTestContext &ctx)
4373*35238bceSAndroid Build Coastguard Worker {
4374*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGatherOffset - sampler2DArray");
4375*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4376*35238bceSAndroid Build Coastguard Worker {
4377*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4378*35238bceSAndroid Build Coastguard Worker {
4379*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4380*35238bceSAndroid Build Coastguard Worker {
4381*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4382*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_SAMPLER_2D_ARRAY,
4383*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_INT_VEC2));
4384*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4385*35238bceSAndroid Build Coastguard Worker }
4386*35238bceSAndroid Build Coastguard Worker {
4387*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4388*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_SAMPLER_2D_ARRAY,
4389*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_INT));
4390*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4391*35238bceSAndroid Build Coastguard Worker }
4392*35238bceSAndroid Build Coastguard Worker {
4393*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4394*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_SAMPLER_2D_ARRAY,
4395*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_INT_VEC2, glu::TYPE_INT));
4396*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4397*35238bceSAndroid Build Coastguard Worker }
4398*35238bceSAndroid Build Coastguard Worker {
4399*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4400*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_SAMPLER_2D_ARRAY,
4401*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_INT, glu::TYPE_INT));
4402*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4403*35238bceSAndroid Build Coastguard Worker }
4404*35238bceSAndroid Build Coastguard Worker {
4405*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4406*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_SAMPLER_2D_ARRAY,
4407*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_INT, glu::TYPE_FLOAT));
4408*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4409*35238bceSAndroid Build Coastguard Worker }
4410*35238bceSAndroid Build Coastguard Worker {
4411*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4412*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_INT_SAMPLER_2D_ARRAY,
4413*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_INT_VEC2));
4414*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4415*35238bceSAndroid Build Coastguard Worker }
4416*35238bceSAndroid Build Coastguard Worker {
4417*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4418*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_INT_SAMPLER_2D_ARRAY,
4419*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_INT));
4420*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4421*35238bceSAndroid Build Coastguard Worker }
4422*35238bceSAndroid Build Coastguard Worker {
4423*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4424*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_INT_SAMPLER_2D_ARRAY,
4425*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_INT_VEC2, glu::TYPE_INT));
4426*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4427*35238bceSAndroid Build Coastguard Worker }
4428*35238bceSAndroid Build Coastguard Worker {
4429*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4430*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_INT_SAMPLER_2D_ARRAY,
4431*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_INT, glu::TYPE_INT));
4432*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4433*35238bceSAndroid Build Coastguard Worker }
4434*35238bceSAndroid Build Coastguard Worker {
4435*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4436*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_INT_SAMPLER_2D_ARRAY,
4437*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_INT, glu::TYPE_FLOAT));
4438*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4439*35238bceSAndroid Build Coastguard Worker }
4440*35238bceSAndroid Build Coastguard Worker {
4441*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4442*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
4443*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT, glu::TYPE_INT_VEC2));
4444*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4445*35238bceSAndroid Build Coastguard Worker }
4446*35238bceSAndroid Build Coastguard Worker {
4447*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4448*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
4449*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT_VEC3, glu::TYPE_INT));
4450*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4451*35238bceSAndroid Build Coastguard Worker }
4452*35238bceSAndroid Build Coastguard Worker {
4453*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4454*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
4455*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT, glu::TYPE_INT_VEC2, glu::TYPE_INT));
4456*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4457*35238bceSAndroid Build Coastguard Worker }
4458*35238bceSAndroid Build Coastguard Worker {
4459*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4460*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
4461*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT_VEC3, glu::TYPE_INT, glu::TYPE_INT));
4462*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4463*35238bceSAndroid Build Coastguard Worker }
4464*35238bceSAndroid Build Coastguard Worker {
4465*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4466*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
4467*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT_SAMPLER_2D_ARRAY, glu::TYPE_FLOAT_VEC3, glu::TYPE_INT, glu::TYPE_FLOAT));
4468*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4469*35238bceSAndroid Build Coastguard Worker }
4470*35238bceSAndroid Build Coastguard Worker {
4471*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4472*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP, glu::TYPE_UINT_SAMPLER_3D,
4473*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_INT_VEC2, glu::TYPE_INT));
4474*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4475*35238bceSAndroid Build Coastguard Worker }
4476*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4477*35238bceSAndroid Build Coastguard Worker }
4478*35238bceSAndroid Build Coastguard Worker }
4479*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4480*35238bceSAndroid Build Coastguard Worker }
4481*35238bceSAndroid Build Coastguard Worker
texture_gather_offset_sampler_2d_shadow(NegativeTestContext & ctx)4482*35238bceSAndroid Build Coastguard Worker void texture_gather_offset_sampler_2d_shadow(NegativeTestContext &ctx)
4483*35238bceSAndroid Build Coastguard Worker {
4484*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGatherOffset - sampler2DShadow");
4485*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4486*35238bceSAndroid Build Coastguard Worker {
4487*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4488*35238bceSAndroid Build Coastguard Worker {
4489*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4490*35238bceSAndroid Build Coastguard Worker {
4491*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4492*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z, glu::TYPE_SAMPLER_2D_SHADOW,
4493*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_INT_VEC2, glu::TYPE_FLOAT));
4494*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4495*35238bceSAndroid Build Coastguard Worker }
4496*35238bceSAndroid Build Coastguard Worker {
4497*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4498*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z, glu::TYPE_SAMPLER_2D_SHADOW,
4499*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT_VEC2, glu::TYPE_INT));
4500*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4501*35238bceSAndroid Build Coastguard Worker }
4502*35238bceSAndroid Build Coastguard Worker {
4503*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4504*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z, glu::TYPE_SAMPLER_2D_SHADOW,
4505*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT, glu::TYPE_FLOAT));
4506*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4507*35238bceSAndroid Build Coastguard Worker }
4508*35238bceSAndroid Build Coastguard Worker {
4509*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4510*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z, glu::TYPE_SAMPLER_3D,
4511*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT_VEC2, glu::TYPE_FLOAT));
4512*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4513*35238bceSAndroid Build Coastguard Worker }
4514*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4515*35238bceSAndroid Build Coastguard Worker }
4516*35238bceSAndroid Build Coastguard Worker }
4517*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4518*35238bceSAndroid Build Coastguard Worker }
4519*35238bceSAndroid Build Coastguard Worker
texture_gather_offset_sampler_2d_array_shadow(NegativeTestContext & ctx)4520*35238bceSAndroid Build Coastguard Worker void texture_gather_offset_sampler_2d_array_shadow(NegativeTestContext &ctx)
4521*35238bceSAndroid Build Coastguard Worker {
4522*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGatherOffset - sampler2DShadow");
4523*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4524*35238bceSAndroid Build Coastguard Worker {
4525*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4526*35238bceSAndroid Build Coastguard Worker {
4527*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4528*35238bceSAndroid Build Coastguard Worker {
4529*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4530*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
4531*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY_SHADOW, glu::TYPE_FLOAT, glu::TYPE_INT_VEC2, glu::TYPE_FLOAT));
4532*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4533*35238bceSAndroid Build Coastguard Worker }
4534*35238bceSAndroid Build Coastguard Worker {
4535*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4536*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
4537*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY_SHADOW, glu::TYPE_FLOAT_VEC3, glu::TYPE_INT_VEC2, glu::TYPE_INT));
4538*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4539*35238bceSAndroid Build Coastguard Worker }
4540*35238bceSAndroid Build Coastguard Worker {
4541*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4542*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
4543*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY_SHADOW, glu::TYPE_FLOAT_VEC3, glu::TYPE_INT, glu::TYPE_FLOAT));
4544*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4545*35238bceSAndroid Build Coastguard Worker }
4546*35238bceSAndroid Build Coastguard Worker {
4547*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceTextureGatherOffset(
4548*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z, glu::TYPE_SAMPLER_3D,
4549*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_INT_VEC2, glu::TYPE_FLOAT));
4550*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4551*35238bceSAndroid Build Coastguard Worker }
4552*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4553*35238bceSAndroid Build Coastguard Worker }
4554*35238bceSAndroid Build Coastguard Worker }
4555*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4556*35238bceSAndroid Build Coastguard Worker }
4557*35238bceSAndroid Build Coastguard Worker
4558*35238bceSAndroid Build Coastguard Worker // atomicAdd, atomicMin, atomicMax, atomicAnd, atomicOr, atomixXor, atomixExchange, atomicCompSwap
genShaderSourceAtomicOperations(NegativeTestContext & ctx,glu::ShaderType shaderType,ShaderFunction function,glu::DataType memDataType,glu::DataType dataDataType,glu::DataType compareDataType)4559*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceAtomicOperations(NegativeTestContext &ctx, glu::ShaderType shaderType,
4560*35238bceSAndroid Build Coastguard Worker ShaderFunction function, glu::DataType memDataType,
4561*35238bceSAndroid Build Coastguard Worker glu::DataType dataDataType, glu::DataType compareDataType)
4562*35238bceSAndroid Build Coastguard Worker {
4563*35238bceSAndroid Build Coastguard Worker DE_ASSERT(SHADER_FUNCTION_ATOMIC_ADD <= function && function <= SHADER_FUNCTION_ATOMIC_COMP_SWAP);
4564*35238bceSAndroid Build Coastguard Worker
4565*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
4566*35238bceSAndroid Build Coastguard Worker
4567*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
4568*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
4569*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
4570*35238bceSAndroid Build Coastguard Worker << "\n"
4571*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << declareBuffer(memDataType, "mem") << "void main()\n"
4572*35238bceSAndroid Build Coastguard Worker << "{\n"
4573*35238bceSAndroid Build Coastguard Worker << " mediump " << declareAndInitializeShaderVariable(dataDataType, "data");
4574*35238bceSAndroid Build Coastguard Worker
4575*35238bceSAndroid Build Coastguard Worker switch (function)
4576*35238bceSAndroid Build Coastguard Worker {
4577*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_ATOMIC_ADD:
4578*35238bceSAndroid Build Coastguard Worker source << " atomicAdd(mem, data);\n";
4579*35238bceSAndroid Build Coastguard Worker break;
4580*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_ATOMIC_MIN:
4581*35238bceSAndroid Build Coastguard Worker source << " atomicMin(mem, data);\n";
4582*35238bceSAndroid Build Coastguard Worker break;
4583*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_ATOMIC_MAX:
4584*35238bceSAndroid Build Coastguard Worker source << " atomicMax(mem, data);\n";
4585*35238bceSAndroid Build Coastguard Worker break;
4586*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_ATOMIC_AND:
4587*35238bceSAndroid Build Coastguard Worker source << " atomicAnd(mem, data);\n";
4588*35238bceSAndroid Build Coastguard Worker break;
4589*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_ATOMIC_OR:
4590*35238bceSAndroid Build Coastguard Worker source << " atomicOr(mem, data);\n";
4591*35238bceSAndroid Build Coastguard Worker break;
4592*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_ATOMIC_XOR:
4593*35238bceSAndroid Build Coastguard Worker source << " atomicXor(mem, data);\n";
4594*35238bceSAndroid Build Coastguard Worker break;
4595*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_ATOMIC_EXCHANGE:
4596*35238bceSAndroid Build Coastguard Worker source << " atomicExchange(mem, data);\n";
4597*35238bceSAndroid Build Coastguard Worker break;
4598*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_ATOMIC_COMP_SWAP:
4599*35238bceSAndroid Build Coastguard Worker source << " mediump " << declareAndInitializeShaderVariable(compareDataType, "compare")
4600*35238bceSAndroid Build Coastguard Worker << " atomicCompSwap(mem, compare, data);\n";
4601*35238bceSAndroid Build Coastguard Worker break;
4602*35238bceSAndroid Build Coastguard Worker
4603*35238bceSAndroid Build Coastguard Worker default:
4604*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported shader function.");
4605*35238bceSAndroid Build Coastguard Worker }
4606*35238bceSAndroid Build Coastguard Worker
4607*35238bceSAndroid Build Coastguard Worker source << "}\n";
4608*35238bceSAndroid Build Coastguard Worker
4609*35238bceSAndroid Build Coastguard Worker return source.str();
4610*35238bceSAndroid Build Coastguard Worker }
4611*35238bceSAndroid Build Coastguard Worker
genShaderSourceAtomicOperations(NegativeTestContext & ctx,glu::ShaderType shaderType,ShaderFunction function,glu::DataType memDataType,glu::DataType dataDataType)4612*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceAtomicOperations(NegativeTestContext &ctx, glu::ShaderType shaderType,
4613*35238bceSAndroid Build Coastguard Worker ShaderFunction function, glu::DataType memDataType,
4614*35238bceSAndroid Build Coastguard Worker glu::DataType dataDataType)
4615*35238bceSAndroid Build Coastguard Worker {
4616*35238bceSAndroid Build Coastguard Worker DE_ASSERT(function != SHADER_FUNCTION_ATOMIC_COMP_SWAP);
4617*35238bceSAndroid Build Coastguard Worker
4618*35238bceSAndroid Build Coastguard Worker return genShaderSourceAtomicOperations(ctx, shaderType, function, memDataType, dataDataType, glu::TYPE_LAST);
4619*35238bceSAndroid Build Coastguard Worker }
4620*35238bceSAndroid Build Coastguard Worker
atomic_add(NegativeTestContext & ctx)4621*35238bceSAndroid Build Coastguard Worker void atomic_add(NegativeTestContext &ctx)
4622*35238bceSAndroid Build Coastguard Worker {
4623*35238bceSAndroid Build Coastguard Worker ctx.beginSection("atomicAdd");
4624*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4625*35238bceSAndroid Build Coastguard Worker {
4626*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4627*35238bceSAndroid Build Coastguard Worker {
4628*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4629*35238bceSAndroid Build Coastguard Worker {
4630*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4631*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_ADD, glu::TYPE_UINT, glu::TYPE_INT));
4632*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4633*35238bceSAndroid Build Coastguard Worker }
4634*35238bceSAndroid Build Coastguard Worker {
4635*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4636*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_ADD, glu::TYPE_INT, glu::TYPE_UINT));
4637*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4638*35238bceSAndroid Build Coastguard Worker }
4639*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4640*35238bceSAndroid Build Coastguard Worker }
4641*35238bceSAndroid Build Coastguard Worker }
4642*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4643*35238bceSAndroid Build Coastguard Worker }
4644*35238bceSAndroid Build Coastguard Worker
atomic_min(NegativeTestContext & ctx)4645*35238bceSAndroid Build Coastguard Worker void atomic_min(NegativeTestContext &ctx)
4646*35238bceSAndroid Build Coastguard Worker {
4647*35238bceSAndroid Build Coastguard Worker ctx.beginSection("atomicMin");
4648*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4649*35238bceSAndroid Build Coastguard Worker {
4650*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4651*35238bceSAndroid Build Coastguard Worker {
4652*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4653*35238bceSAndroid Build Coastguard Worker {
4654*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4655*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_MIN, glu::TYPE_UINT, glu::TYPE_INT));
4656*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4657*35238bceSAndroid Build Coastguard Worker }
4658*35238bceSAndroid Build Coastguard Worker {
4659*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4660*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_MIN, glu::TYPE_INT, glu::TYPE_UINT));
4661*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4662*35238bceSAndroid Build Coastguard Worker }
4663*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4664*35238bceSAndroid Build Coastguard Worker }
4665*35238bceSAndroid Build Coastguard Worker }
4666*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4667*35238bceSAndroid Build Coastguard Worker }
4668*35238bceSAndroid Build Coastguard Worker
atomic_max(NegativeTestContext & ctx)4669*35238bceSAndroid Build Coastguard Worker void atomic_max(NegativeTestContext &ctx)
4670*35238bceSAndroid Build Coastguard Worker {
4671*35238bceSAndroid Build Coastguard Worker ctx.beginSection("atomicMax");
4672*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4673*35238bceSAndroid Build Coastguard Worker {
4674*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4675*35238bceSAndroid Build Coastguard Worker {
4676*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4677*35238bceSAndroid Build Coastguard Worker {
4678*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4679*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_MAX, glu::TYPE_UINT, glu::TYPE_INT));
4680*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4681*35238bceSAndroid Build Coastguard Worker }
4682*35238bceSAndroid Build Coastguard Worker {
4683*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4684*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_MAX, glu::TYPE_INT, glu::TYPE_UINT));
4685*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4686*35238bceSAndroid Build Coastguard Worker }
4687*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4688*35238bceSAndroid Build Coastguard Worker }
4689*35238bceSAndroid Build Coastguard Worker }
4690*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4691*35238bceSAndroid Build Coastguard Worker }
4692*35238bceSAndroid Build Coastguard Worker
atomic_and(NegativeTestContext & ctx)4693*35238bceSAndroid Build Coastguard Worker void atomic_and(NegativeTestContext &ctx)
4694*35238bceSAndroid Build Coastguard Worker {
4695*35238bceSAndroid Build Coastguard Worker ctx.beginSection("atomicAnd");
4696*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4697*35238bceSAndroid Build Coastguard Worker {
4698*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4699*35238bceSAndroid Build Coastguard Worker {
4700*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4701*35238bceSAndroid Build Coastguard Worker {
4702*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4703*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_AND, glu::TYPE_UINT, glu::TYPE_INT));
4704*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4705*35238bceSAndroid Build Coastguard Worker }
4706*35238bceSAndroid Build Coastguard Worker {
4707*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4708*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_AND, glu::TYPE_INT, glu::TYPE_UINT));
4709*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4710*35238bceSAndroid Build Coastguard Worker }
4711*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4712*35238bceSAndroid Build Coastguard Worker }
4713*35238bceSAndroid Build Coastguard Worker }
4714*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4715*35238bceSAndroid Build Coastguard Worker }
4716*35238bceSAndroid Build Coastguard Worker
atomic_or(NegativeTestContext & ctx)4717*35238bceSAndroid Build Coastguard Worker void atomic_or(NegativeTestContext &ctx)
4718*35238bceSAndroid Build Coastguard Worker {
4719*35238bceSAndroid Build Coastguard Worker ctx.beginSection("atomicOr");
4720*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4721*35238bceSAndroid Build Coastguard Worker {
4722*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4723*35238bceSAndroid Build Coastguard Worker {
4724*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4725*35238bceSAndroid Build Coastguard Worker {
4726*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4727*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_OR, glu::TYPE_UINT, glu::TYPE_INT));
4728*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4729*35238bceSAndroid Build Coastguard Worker }
4730*35238bceSAndroid Build Coastguard Worker {
4731*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4732*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_OR, glu::TYPE_INT, glu::TYPE_UINT));
4733*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4734*35238bceSAndroid Build Coastguard Worker }
4735*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4736*35238bceSAndroid Build Coastguard Worker }
4737*35238bceSAndroid Build Coastguard Worker }
4738*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4739*35238bceSAndroid Build Coastguard Worker }
4740*35238bceSAndroid Build Coastguard Worker
atomic_xor(NegativeTestContext & ctx)4741*35238bceSAndroid Build Coastguard Worker void atomic_xor(NegativeTestContext &ctx)
4742*35238bceSAndroid Build Coastguard Worker {
4743*35238bceSAndroid Build Coastguard Worker ctx.beginSection("atomicXor");
4744*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4745*35238bceSAndroid Build Coastguard Worker {
4746*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4747*35238bceSAndroid Build Coastguard Worker {
4748*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4749*35238bceSAndroid Build Coastguard Worker {
4750*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4751*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_XOR, glu::TYPE_UINT, glu::TYPE_INT));
4752*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4753*35238bceSAndroid Build Coastguard Worker }
4754*35238bceSAndroid Build Coastguard Worker {
4755*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4756*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_XOR, glu::TYPE_INT, glu::TYPE_UINT));
4757*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4758*35238bceSAndroid Build Coastguard Worker }
4759*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4760*35238bceSAndroid Build Coastguard Worker }
4761*35238bceSAndroid Build Coastguard Worker }
4762*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4763*35238bceSAndroid Build Coastguard Worker }
4764*35238bceSAndroid Build Coastguard Worker
atomic_exchange(NegativeTestContext & ctx)4765*35238bceSAndroid Build Coastguard Worker void atomic_exchange(NegativeTestContext &ctx)
4766*35238bceSAndroid Build Coastguard Worker {
4767*35238bceSAndroid Build Coastguard Worker ctx.beginSection("atomicExchange");
4768*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4769*35238bceSAndroid Build Coastguard Worker {
4770*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4771*35238bceSAndroid Build Coastguard Worker {
4772*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4773*35238bceSAndroid Build Coastguard Worker {
4774*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4775*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_EXCHANGE, glu::TYPE_UINT, glu::TYPE_INT));
4776*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4777*35238bceSAndroid Build Coastguard Worker }
4778*35238bceSAndroid Build Coastguard Worker {
4779*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceAtomicOperations(
4780*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_EXCHANGE, glu::TYPE_INT, glu::TYPE_UINT));
4781*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4782*35238bceSAndroid Build Coastguard Worker }
4783*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4784*35238bceSAndroid Build Coastguard Worker }
4785*35238bceSAndroid Build Coastguard Worker }
4786*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4787*35238bceSAndroid Build Coastguard Worker }
4788*35238bceSAndroid Build Coastguard Worker
atomic_comp_swap(NegativeTestContext & ctx)4789*35238bceSAndroid Build Coastguard Worker void atomic_comp_swap(NegativeTestContext &ctx)
4790*35238bceSAndroid Build Coastguard Worker {
4791*35238bceSAndroid Build Coastguard Worker ctx.beginSection("atomicCompSwap");
4792*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4793*35238bceSAndroid Build Coastguard Worker {
4794*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4795*35238bceSAndroid Build Coastguard Worker {
4796*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4797*35238bceSAndroid Build Coastguard Worker {
4798*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
4799*35238bceSAndroid Build Coastguard Worker genShaderSourceAtomicOperations(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_COMP_SWAP,
4800*35238bceSAndroid Build Coastguard Worker glu::TYPE_UINT, glu::TYPE_INT, glu::TYPE_INT));
4801*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4802*35238bceSAndroid Build Coastguard Worker }
4803*35238bceSAndroid Build Coastguard Worker {
4804*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
4805*35238bceSAndroid Build Coastguard Worker genShaderSourceAtomicOperations(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_COMP_SWAP,
4806*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT, glu::TYPE_UINT, glu::TYPE_INT));
4807*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4808*35238bceSAndroid Build Coastguard Worker }
4809*35238bceSAndroid Build Coastguard Worker {
4810*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
4811*35238bceSAndroid Build Coastguard Worker genShaderSourceAtomicOperations(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_ATOMIC_COMP_SWAP,
4812*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT, glu::TYPE_INT, glu::TYPE_UINT));
4813*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4814*35238bceSAndroid Build Coastguard Worker }
4815*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4816*35238bceSAndroid Build Coastguard Worker }
4817*35238bceSAndroid Build Coastguard Worker }
4818*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4819*35238bceSAndroid Build Coastguard Worker }
4820*35238bceSAndroid Build Coastguard Worker
4821*35238bceSAndroid Build Coastguard Worker // interpolatedAtCentroid, interpolatedAtSample, interpolateAtOffset,
genShaderSourceInterpolateAt(NegativeTestContext & ctx,glu::ShaderType shaderType,ShaderFunction function,glu::DataType interpolantDataType,glu::DataType secondArgumentDataType)4822*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceInterpolateAt(NegativeTestContext &ctx, glu::ShaderType shaderType, ShaderFunction function,
4823*35238bceSAndroid Build Coastguard Worker glu::DataType interpolantDataType, glu::DataType secondArgumentDataType)
4824*35238bceSAndroid Build Coastguard Worker {
4825*35238bceSAndroid Build Coastguard Worker DE_ASSERT(function >= SHADER_FUNCTION_INTERPOLATED_AT_CENTROID &&
4826*35238bceSAndroid Build Coastguard Worker function <= SHADER_FUNCTION_INTERPOLATED_AT_OFFSET);
4827*35238bceSAndroid Build Coastguard Worker
4828*35238bceSAndroid Build Coastguard Worker auto ctxType = ctx.getRenderContext().getType();
4829*35238bceSAndroid Build Coastguard Worker const bool isES32orGL45 = glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
4830*35238bceSAndroid Build Coastguard Worker glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
4831*35238bceSAndroid Build Coastguard Worker
4832*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
4833*35238bceSAndroid Build Coastguard Worker source << (isES32orGL45 ? glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
4834*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
4835*35238bceSAndroid Build Coastguard Worker << "\n"
4836*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType)
4837*35238bceSAndroid Build Coastguard Worker << (isES32orGL45 ? "" : getShaderExtensionDeclaration("GL_OES_shader_multisample_interpolation"))
4838*35238bceSAndroid Build Coastguard Worker << declareShaderInput(interpolantDataType, "interpolant") << "void main()\n"
4839*35238bceSAndroid Build Coastguard Worker << "{\n";
4840*35238bceSAndroid Build Coastguard Worker
4841*35238bceSAndroid Build Coastguard Worker switch (function)
4842*35238bceSAndroid Build Coastguard Worker {
4843*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_INTERPOLATED_AT_CENTROID:
4844*35238bceSAndroid Build Coastguard Worker source << " interpolateAtCentroid(interpolant);\n";
4845*35238bceSAndroid Build Coastguard Worker break;
4846*35238bceSAndroid Build Coastguard Worker
4847*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_INTERPOLATED_AT_SAMPLE:
4848*35238bceSAndroid Build Coastguard Worker source << " mediump " << declareAndInitializeShaderVariable(secondArgumentDataType, "sample")
4849*35238bceSAndroid Build Coastguard Worker << " interpolateAtSample(interpolant, sample);\n";
4850*35238bceSAndroid Build Coastguard Worker break;
4851*35238bceSAndroid Build Coastguard Worker
4852*35238bceSAndroid Build Coastguard Worker case SHADER_FUNCTION_INTERPOLATED_AT_OFFSET:
4853*35238bceSAndroid Build Coastguard Worker source << " mediump " << declareAndInitializeShaderVariable(secondArgumentDataType, "offset")
4854*35238bceSAndroid Build Coastguard Worker << " interpolateAtOffset(interpolant, offset);\n";
4855*35238bceSAndroid Build Coastguard Worker break;
4856*35238bceSAndroid Build Coastguard Worker
4857*35238bceSAndroid Build Coastguard Worker default:
4858*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported shader function.");
4859*35238bceSAndroid Build Coastguard Worker }
4860*35238bceSAndroid Build Coastguard Worker
4861*35238bceSAndroid Build Coastguard Worker source << "}\n";
4862*35238bceSAndroid Build Coastguard Worker
4863*35238bceSAndroid Build Coastguard Worker return source.str();
4864*35238bceSAndroid Build Coastguard Worker }
4865*35238bceSAndroid Build Coastguard Worker
genShaderSourceInterpolateAt(NegativeTestContext & ctx,glu::ShaderType shaderType,ShaderFunction function,glu::DataType interpolantDataType)4866*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceInterpolateAt(NegativeTestContext &ctx, glu::ShaderType shaderType, ShaderFunction function,
4867*35238bceSAndroid Build Coastguard Worker glu::DataType interpolantDataType)
4868*35238bceSAndroid Build Coastguard Worker {
4869*35238bceSAndroid Build Coastguard Worker DE_ASSERT(function == SHADER_FUNCTION_INTERPOLATED_AT_CENTROID);
4870*35238bceSAndroid Build Coastguard Worker
4871*35238bceSAndroid Build Coastguard Worker return genShaderSourceInterpolateAt(ctx, shaderType, function, interpolantDataType, glu::TYPE_LAST);
4872*35238bceSAndroid Build Coastguard Worker }
4873*35238bceSAndroid Build Coastguard Worker
interpolate_at_centroid(NegativeTestContext & ctx)4874*35238bceSAndroid Build Coastguard Worker void interpolate_at_centroid(NegativeTestContext &ctx)
4875*35238bceSAndroid Build Coastguard Worker {
4876*35238bceSAndroid Build Coastguard Worker TCU_CHECK_AND_THROW(NotSupportedError,
4877*35238bceSAndroid Build Coastguard Worker checkSupport(ctx) || ctx.isExtensionSupported("GL_OES_shader_multisample_interpolation"),
4878*35238bceSAndroid Build Coastguard Worker "This test requires a context version 3.2 or higher.");
4879*35238bceSAndroid Build Coastguard Worker
4880*35238bceSAndroid Build Coastguard Worker ctx.beginSection("interpolateAtCentroid");
4881*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4882*35238bceSAndroid Build Coastguard Worker {
4883*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4884*35238bceSAndroid Build Coastguard Worker {
4885*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4886*35238bceSAndroid Build Coastguard Worker if (s_shaders[shaderNdx] == glu::SHADERTYPE_FRAGMENT)
4887*35238bceSAndroid Build Coastguard Worker {
4888*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(
4889*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_INTERPOLATED_AT_CENTROID, glu::TYPE_INT));
4890*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4891*35238bceSAndroid Build Coastguard Worker }
4892*35238bceSAndroid Build Coastguard Worker else
4893*35238bceSAndroid Build Coastguard Worker {
4894*35238bceSAndroid Build Coastguard Worker {
4895*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(
4896*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_INTERPOLATED_AT_CENTROID, glu::TYPE_FLOAT));
4897*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4898*35238bceSAndroid Build Coastguard Worker }
4899*35238bceSAndroid Build Coastguard Worker {
4900*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(
4901*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_INTERPOLATED_AT_CENTROID, glu::TYPE_FLOAT_VEC2));
4902*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4903*35238bceSAndroid Build Coastguard Worker }
4904*35238bceSAndroid Build Coastguard Worker {
4905*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(
4906*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_INTERPOLATED_AT_CENTROID, glu::TYPE_FLOAT_VEC3));
4907*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4908*35238bceSAndroid Build Coastguard Worker }
4909*35238bceSAndroid Build Coastguard Worker {
4910*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(
4911*35238bceSAndroid Build Coastguard Worker ctx, s_shaders[shaderNdx], SHADER_FUNCTION_INTERPOLATED_AT_CENTROID, glu::TYPE_FLOAT_VEC4));
4912*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4913*35238bceSAndroid Build Coastguard Worker }
4914*35238bceSAndroid Build Coastguard Worker }
4915*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4916*35238bceSAndroid Build Coastguard Worker }
4917*35238bceSAndroid Build Coastguard Worker }
4918*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4919*35238bceSAndroid Build Coastguard Worker }
4920*35238bceSAndroid Build Coastguard Worker
interpolate_at_sample(NegativeTestContext & ctx)4921*35238bceSAndroid Build Coastguard Worker void interpolate_at_sample(NegativeTestContext &ctx)
4922*35238bceSAndroid Build Coastguard Worker {
4923*35238bceSAndroid Build Coastguard Worker TCU_CHECK_AND_THROW(NotSupportedError,
4924*35238bceSAndroid Build Coastguard Worker checkSupport(ctx) || ctx.isExtensionSupported("GL_OES_shader_multisample_interpolation"),
4925*35238bceSAndroid Build Coastguard Worker "This test requires a context version 3.2 or higher.");
4926*35238bceSAndroid Build Coastguard Worker
4927*35238bceSAndroid Build Coastguard Worker ctx.beginSection("interpolateAtSample");
4928*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
4929*35238bceSAndroid Build Coastguard Worker {
4930*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
4931*35238bceSAndroid Build Coastguard Worker {
4932*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
4933*35238bceSAndroid Build Coastguard Worker if (s_shaders[shaderNdx] == glu::SHADERTYPE_FRAGMENT)
4934*35238bceSAndroid Build Coastguard Worker {
4935*35238bceSAndroid Build Coastguard Worker {
4936*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
4937*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_SAMPLE,
4938*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT, glu::TYPE_INT));
4939*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4940*35238bceSAndroid Build Coastguard Worker }
4941*35238bceSAndroid Build Coastguard Worker {
4942*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
4943*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_SAMPLE,
4944*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_FLOAT));
4945*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4946*35238bceSAndroid Build Coastguard Worker }
4947*35238bceSAndroid Build Coastguard Worker {
4948*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
4949*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_SAMPLE,
4950*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_FLOAT));
4951*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4952*35238bceSAndroid Build Coastguard Worker }
4953*35238bceSAndroid Build Coastguard Worker {
4954*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
4955*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_SAMPLE,
4956*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
4957*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4958*35238bceSAndroid Build Coastguard Worker }
4959*35238bceSAndroid Build Coastguard Worker {
4960*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
4961*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_SAMPLE,
4962*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT));
4963*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4964*35238bceSAndroid Build Coastguard Worker }
4965*35238bceSAndroid Build Coastguard Worker }
4966*35238bceSAndroid Build Coastguard Worker else
4967*35238bceSAndroid Build Coastguard Worker {
4968*35238bceSAndroid Build Coastguard Worker {
4969*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
4970*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_SAMPLE,
4971*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_INT));
4972*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4973*35238bceSAndroid Build Coastguard Worker }
4974*35238bceSAndroid Build Coastguard Worker {
4975*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
4976*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_SAMPLE,
4977*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_INT));
4978*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4979*35238bceSAndroid Build Coastguard Worker }
4980*35238bceSAndroid Build Coastguard Worker {
4981*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
4982*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_SAMPLE,
4983*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_INT));
4984*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4985*35238bceSAndroid Build Coastguard Worker }
4986*35238bceSAndroid Build Coastguard Worker {
4987*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
4988*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_SAMPLE,
4989*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_INT));
4990*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
4991*35238bceSAndroid Build Coastguard Worker }
4992*35238bceSAndroid Build Coastguard Worker }
4993*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4994*35238bceSAndroid Build Coastguard Worker }
4995*35238bceSAndroid Build Coastguard Worker }
4996*35238bceSAndroid Build Coastguard Worker ctx.endSection();
4997*35238bceSAndroid Build Coastguard Worker }
4998*35238bceSAndroid Build Coastguard Worker
interpolate_at_offset(NegativeTestContext & ctx)4999*35238bceSAndroid Build Coastguard Worker void interpolate_at_offset(NegativeTestContext &ctx)
5000*35238bceSAndroid Build Coastguard Worker {
5001*35238bceSAndroid Build Coastguard Worker TCU_CHECK_AND_THROW(NotSupportedError,
5002*35238bceSAndroid Build Coastguard Worker checkSupport(ctx) || ctx.isExtensionSupported("GL_OES_shader_multisample_interpolation"),
5003*35238bceSAndroid Build Coastguard Worker "This test requires a context version 3.2 or higher.");
5004*35238bceSAndroid Build Coastguard Worker
5005*35238bceSAndroid Build Coastguard Worker ctx.beginSection("interpolateAtOffset");
5006*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
5007*35238bceSAndroid Build Coastguard Worker {
5008*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
5009*35238bceSAndroid Build Coastguard Worker {
5010*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
5011*35238bceSAndroid Build Coastguard Worker if (s_shaders[shaderNdx] == glu::SHADERTYPE_FRAGMENT)
5012*35238bceSAndroid Build Coastguard Worker {
5013*35238bceSAndroid Build Coastguard Worker {
5014*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
5015*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_OFFSET,
5016*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT, glu::TYPE_FLOAT_VEC2));
5017*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5018*35238bceSAndroid Build Coastguard Worker }
5019*35238bceSAndroid Build Coastguard Worker {
5020*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
5021*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_OFFSET,
5022*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_FLOAT));
5023*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5024*35238bceSAndroid Build Coastguard Worker }
5025*35238bceSAndroid Build Coastguard Worker {
5026*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
5027*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_OFFSET,
5028*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_FLOAT));
5029*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5030*35238bceSAndroid Build Coastguard Worker }
5031*35238bceSAndroid Build Coastguard Worker {
5032*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
5033*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_OFFSET,
5034*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT));
5035*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5036*35238bceSAndroid Build Coastguard Worker }
5037*35238bceSAndroid Build Coastguard Worker {
5038*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
5039*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_OFFSET,
5040*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT));
5041*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5042*35238bceSAndroid Build Coastguard Worker }
5043*35238bceSAndroid Build Coastguard Worker }
5044*35238bceSAndroid Build Coastguard Worker else
5045*35238bceSAndroid Build Coastguard Worker {
5046*35238bceSAndroid Build Coastguard Worker {
5047*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx],
5048*35238bceSAndroid Build Coastguard Worker SHADER_FUNCTION_INTERPOLATED_AT_OFFSET,
5049*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, glu::TYPE_FLOAT_VEC2));
5050*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5051*35238bceSAndroid Build Coastguard Worker }
5052*35238bceSAndroid Build Coastguard Worker {
5053*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
5054*35238bceSAndroid Build Coastguard Worker genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_INTERPOLATED_AT_OFFSET,
5055*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2, glu::TYPE_FLOAT_VEC2));
5056*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5057*35238bceSAndroid Build Coastguard Worker }
5058*35238bceSAndroid Build Coastguard Worker {
5059*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
5060*35238bceSAndroid Build Coastguard Worker genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_INTERPOLATED_AT_OFFSET,
5061*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3, glu::TYPE_FLOAT_VEC2));
5062*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5063*35238bceSAndroid Build Coastguard Worker }
5064*35238bceSAndroid Build Coastguard Worker {
5065*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
5066*35238bceSAndroid Build Coastguard Worker genShaderSourceInterpolateAt(ctx, s_shaders[shaderNdx], SHADER_FUNCTION_INTERPOLATED_AT_OFFSET,
5067*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC4, glu::TYPE_FLOAT_VEC2));
5068*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5069*35238bceSAndroid Build Coastguard Worker }
5070*35238bceSAndroid Build Coastguard Worker }
5071*35238bceSAndroid Build Coastguard Worker ctx.endSection();
5072*35238bceSAndroid Build Coastguard Worker }
5073*35238bceSAndroid Build Coastguard Worker }
5074*35238bceSAndroid Build Coastguard Worker ctx.endSection();
5075*35238bceSAndroid Build Coastguard Worker }
5076*35238bceSAndroid Build Coastguard Worker
5077*35238bceSAndroid Build Coastguard Worker // textureGatherOffsets
genShaderSourceTextureGatherOffsets(NegativeTestContext & ctx,glu::ShaderType shaderType,const TextureGatherOffsetsTestSpec & spec)5078*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceTextureGatherOffsets(NegativeTestContext &ctx, glu::ShaderType shaderType,
5079*35238bceSAndroid Build Coastguard Worker const TextureGatherOffsetsTestSpec &spec)
5080*35238bceSAndroid Build Coastguard Worker {
5081*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
5082*35238bceSAndroid Build Coastguard Worker
5083*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
5084*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
5085*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
5086*35238bceSAndroid Build Coastguard Worker << "\n"
5087*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << declareShaderUniform(spec.samplerDataType, "sampler")
5088*35238bceSAndroid Build Coastguard Worker << "void main(void)\n"
5089*35238bceSAndroid Build Coastguard Worker << "{\n"
5090*35238bceSAndroid Build Coastguard Worker << " mediump " << declareAndInitializeShaderVariable(spec.pDataType, "P") << " mediump "
5091*35238bceSAndroid Build Coastguard Worker << (spec.offsetIsConst ? "const " : "")
5092*35238bceSAndroid Build Coastguard Worker << declareShaderArrayVariable(spec.offsetsDataType, "offsets", spec.offsetArraySize) << "\n";
5093*35238bceSAndroid Build Coastguard Worker
5094*35238bceSAndroid Build Coastguard Worker switch (spec.mode)
5095*35238bceSAndroid Build Coastguard Worker {
5096*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP:
5097*35238bceSAndroid Build Coastguard Worker {
5098*35238bceSAndroid Build Coastguard Worker if (spec.fourthArgument != glu::TYPE_LAST)
5099*35238bceSAndroid Build Coastguard Worker source << " mediump " << declareAndInitializeShaderVariable(spec.fourthArgument, "comp")
5100*35238bceSAndroid Build Coastguard Worker << " textureGatherOffsets(sampler, P, offsets, comp);\n";
5101*35238bceSAndroid Build Coastguard Worker else
5102*35238bceSAndroid Build Coastguard Worker source << " textureGatherOffsets(sampler, P, offsets);\n";
5103*35238bceSAndroid Build Coastguard Worker break;
5104*35238bceSAndroid Build Coastguard Worker }
5105*35238bceSAndroid Build Coastguard Worker
5106*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z:
5107*35238bceSAndroid Build Coastguard Worker {
5108*35238bceSAndroid Build Coastguard Worker source << " mediump " << declareAndInitializeShaderVariable(spec.fourthArgument, "refZ")
5109*35238bceSAndroid Build Coastguard Worker << " textureGatherOffsets(sampler, P, refZ, offsets);\n";
5110*35238bceSAndroid Build Coastguard Worker break;
5111*35238bceSAndroid Build Coastguard Worker }
5112*35238bceSAndroid Build Coastguard Worker
5113*35238bceSAndroid Build Coastguard Worker default:
5114*35238bceSAndroid Build Coastguard Worker DE_FATAL("Unsupported shader function overload.");
5115*35238bceSAndroid Build Coastguard Worker break;
5116*35238bceSAndroid Build Coastguard Worker }
5117*35238bceSAndroid Build Coastguard Worker
5118*35238bceSAndroid Build Coastguard Worker source << "}\n";
5119*35238bceSAndroid Build Coastguard Worker return source.str();
5120*35238bceSAndroid Build Coastguard Worker }
5121*35238bceSAndroid Build Coastguard Worker
texture_gather_offsets(NegativeTestContext & ctx)5122*35238bceSAndroid Build Coastguard Worker void texture_gather_offsets(NegativeTestContext &ctx)
5123*35238bceSAndroid Build Coastguard Worker {
5124*35238bceSAndroid Build Coastguard Worker TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx) || ctx.isExtensionSupported("GL_EXT_gpu_shader5"),
5125*35238bceSAndroid Build Coastguard Worker "This test requires a context version 3.2 or higher.");
5126*35238bceSAndroid Build Coastguard Worker
5127*35238bceSAndroid Build Coastguard Worker const struct TextureGatherOffsetsTestSpec testSpecs[] = {
5128*35238bceSAndroid Build Coastguard Worker //mode samplerDataType pDataType offsetsDataType fourthArgument offsetIsConst offsetArraySize
5129*35238bceSAndroid Build Coastguard Worker {
5130*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5131*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D,
5132*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2,
5133*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5134*35238bceSAndroid Build Coastguard Worker glu::TYPE_LAST,
5135*35238bceSAndroid Build Coastguard Worker false,
5136*35238bceSAndroid Build Coastguard Worker 4,
5137*35238bceSAndroid Build Coastguard Worker },
5138*35238bceSAndroid Build Coastguard Worker {
5139*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5140*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D,
5141*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2,
5142*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5143*35238bceSAndroid Build Coastguard Worker glu::TYPE_LAST,
5144*35238bceSAndroid Build Coastguard Worker true,
5145*35238bceSAndroid Build Coastguard Worker 3,
5146*35238bceSAndroid Build Coastguard Worker },
5147*35238bceSAndroid Build Coastguard Worker {
5148*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5149*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D,
5150*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5151*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5152*35238bceSAndroid Build Coastguard Worker glu::TYPE_LAST,
5153*35238bceSAndroid Build Coastguard Worker true,
5154*35238bceSAndroid Build Coastguard Worker 4,
5155*35238bceSAndroid Build Coastguard Worker },
5156*35238bceSAndroid Build Coastguard Worker {
5157*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5158*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D,
5159*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2,
5160*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5161*35238bceSAndroid Build Coastguard Worker glu::TYPE_LAST,
5162*35238bceSAndroid Build Coastguard Worker true,
5163*35238bceSAndroid Build Coastguard Worker 4,
5164*35238bceSAndroid Build Coastguard Worker },
5165*35238bceSAndroid Build Coastguard Worker {
5166*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5167*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D,
5168*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2,
5169*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5170*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5171*35238bceSAndroid Build Coastguard Worker false,
5172*35238bceSAndroid Build Coastguard Worker 4,
5173*35238bceSAndroid Build Coastguard Worker },
5174*35238bceSAndroid Build Coastguard Worker {
5175*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5176*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D,
5177*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2,
5178*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5179*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5180*35238bceSAndroid Build Coastguard Worker true,
5181*35238bceSAndroid Build Coastguard Worker 4,
5182*35238bceSAndroid Build Coastguard Worker },
5183*35238bceSAndroid Build Coastguard Worker {
5184*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5185*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D,
5186*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2,
5187*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5188*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5189*35238bceSAndroid Build Coastguard Worker true,
5190*35238bceSAndroid Build Coastguard Worker 3,
5191*35238bceSAndroid Build Coastguard Worker },
5192*35238bceSAndroid Build Coastguard Worker {
5193*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5194*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D,
5195*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5196*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5197*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5198*35238bceSAndroid Build Coastguard Worker true,
5199*35238bceSAndroid Build Coastguard Worker 4,
5200*35238bceSAndroid Build Coastguard Worker },
5201*35238bceSAndroid Build Coastguard Worker {
5202*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5203*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D,
5204*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2,
5205*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5206*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5207*35238bceSAndroid Build Coastguard Worker true,
5208*35238bceSAndroid Build Coastguard Worker 4,
5209*35238bceSAndroid Build Coastguard Worker },
5210*35238bceSAndroid Build Coastguard Worker
5211*35238bceSAndroid Build Coastguard Worker {
5212*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5213*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY,
5214*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3,
5215*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5216*35238bceSAndroid Build Coastguard Worker glu::TYPE_LAST,
5217*35238bceSAndroid Build Coastguard Worker false,
5218*35238bceSAndroid Build Coastguard Worker 4,
5219*35238bceSAndroid Build Coastguard Worker },
5220*35238bceSAndroid Build Coastguard Worker {
5221*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5222*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY,
5223*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3,
5224*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5225*35238bceSAndroid Build Coastguard Worker glu::TYPE_LAST,
5226*35238bceSAndroid Build Coastguard Worker true,
5227*35238bceSAndroid Build Coastguard Worker 3,
5228*35238bceSAndroid Build Coastguard Worker },
5229*35238bceSAndroid Build Coastguard Worker {
5230*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5231*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY,
5232*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5233*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5234*35238bceSAndroid Build Coastguard Worker glu::TYPE_LAST,
5235*35238bceSAndroid Build Coastguard Worker true,
5236*35238bceSAndroid Build Coastguard Worker 4,
5237*35238bceSAndroid Build Coastguard Worker },
5238*35238bceSAndroid Build Coastguard Worker {
5239*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5240*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY,
5241*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3,
5242*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5243*35238bceSAndroid Build Coastguard Worker glu::TYPE_LAST,
5244*35238bceSAndroid Build Coastguard Worker true,
5245*35238bceSAndroid Build Coastguard Worker 4,
5246*35238bceSAndroid Build Coastguard Worker },
5247*35238bceSAndroid Build Coastguard Worker {
5248*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5249*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY,
5250*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3,
5251*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5252*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5253*35238bceSAndroid Build Coastguard Worker false,
5254*35238bceSAndroid Build Coastguard Worker 4,
5255*35238bceSAndroid Build Coastguard Worker },
5256*35238bceSAndroid Build Coastguard Worker {
5257*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5258*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY,
5259*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3,
5260*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5261*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5262*35238bceSAndroid Build Coastguard Worker true,
5263*35238bceSAndroid Build Coastguard Worker 4,
5264*35238bceSAndroid Build Coastguard Worker },
5265*35238bceSAndroid Build Coastguard Worker {
5266*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5267*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY,
5268*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3,
5269*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5270*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5271*35238bceSAndroid Build Coastguard Worker true,
5272*35238bceSAndroid Build Coastguard Worker 3,
5273*35238bceSAndroid Build Coastguard Worker },
5274*35238bceSAndroid Build Coastguard Worker {
5275*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5276*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY,
5277*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5278*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5279*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5280*35238bceSAndroid Build Coastguard Worker true,
5281*35238bceSAndroid Build Coastguard Worker 4,
5282*35238bceSAndroid Build Coastguard Worker },
5283*35238bceSAndroid Build Coastguard Worker {
5284*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_COMP,
5285*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY,
5286*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3,
5287*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5288*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5289*35238bceSAndroid Build Coastguard Worker true,
5290*35238bceSAndroid Build Coastguard Worker 4,
5291*35238bceSAndroid Build Coastguard Worker },
5292*35238bceSAndroid Build Coastguard Worker
5293*35238bceSAndroid Build Coastguard Worker {
5294*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
5295*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_SHADOW,
5296*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2,
5297*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5298*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5299*35238bceSAndroid Build Coastguard Worker false,
5300*35238bceSAndroid Build Coastguard Worker 4,
5301*35238bceSAndroid Build Coastguard Worker },
5302*35238bceSAndroid Build Coastguard Worker {
5303*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
5304*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_SHADOW,
5305*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2,
5306*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5307*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5308*35238bceSAndroid Build Coastguard Worker true,
5309*35238bceSAndroid Build Coastguard Worker 3,
5310*35238bceSAndroid Build Coastguard Worker },
5311*35238bceSAndroid Build Coastguard Worker {
5312*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
5313*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_SHADOW,
5314*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5315*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5316*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5317*35238bceSAndroid Build Coastguard Worker true,
5318*35238bceSAndroid Build Coastguard Worker 4,
5319*35238bceSAndroid Build Coastguard Worker },
5320*35238bceSAndroid Build Coastguard Worker {
5321*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
5322*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_SHADOW,
5323*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2,
5324*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5325*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5326*35238bceSAndroid Build Coastguard Worker true,
5327*35238bceSAndroid Build Coastguard Worker 4,
5328*35238bceSAndroid Build Coastguard Worker },
5329*35238bceSAndroid Build Coastguard Worker {
5330*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
5331*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_SHADOW,
5332*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2,
5333*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5334*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5335*35238bceSAndroid Build Coastguard Worker true,
5336*35238bceSAndroid Build Coastguard Worker 4,
5337*35238bceSAndroid Build Coastguard Worker },
5338*35238bceSAndroid Build Coastguard Worker
5339*35238bceSAndroid Build Coastguard Worker {
5340*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
5341*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY_SHADOW,
5342*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3,
5343*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5344*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5345*35238bceSAndroid Build Coastguard Worker false,
5346*35238bceSAndroid Build Coastguard Worker 4,
5347*35238bceSAndroid Build Coastguard Worker },
5348*35238bceSAndroid Build Coastguard Worker {
5349*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
5350*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY_SHADOW,
5351*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3,
5352*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5353*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5354*35238bceSAndroid Build Coastguard Worker true,
5355*35238bceSAndroid Build Coastguard Worker 3,
5356*35238bceSAndroid Build Coastguard Worker },
5357*35238bceSAndroid Build Coastguard Worker {
5358*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
5359*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY_SHADOW,
5360*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5361*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5362*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5363*35238bceSAndroid Build Coastguard Worker true,
5364*35238bceSAndroid Build Coastguard Worker 4,
5365*35238bceSAndroid Build Coastguard Worker },
5366*35238bceSAndroid Build Coastguard Worker {
5367*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
5368*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY_SHADOW,
5369*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3,
5370*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5371*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT,
5372*35238bceSAndroid Build Coastguard Worker true,
5373*35238bceSAndroid Build Coastguard Worker 4,
5374*35238bceSAndroid Build Coastguard Worker },
5375*35238bceSAndroid Build Coastguard Worker {
5376*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE_GATHER_OFFSET_MODE_REF_Z,
5377*35238bceSAndroid Build Coastguard Worker glu::TYPE_SAMPLER_2D_ARRAY_SHADOW,
5378*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3,
5379*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT_VEC2,
5380*35238bceSAndroid Build Coastguard Worker glu::TYPE_INT,
5381*35238bceSAndroid Build Coastguard Worker true,
5382*35238bceSAndroid Build Coastguard Worker 4,
5383*35238bceSAndroid Build Coastguard Worker },
5384*35238bceSAndroid Build Coastguard Worker };
5385*35238bceSAndroid Build Coastguard Worker
5386*35238bceSAndroid Build Coastguard Worker ctx.beginSection("textureGatherOffsets");
5387*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
5388*35238bceSAndroid Build Coastguard Worker {
5389*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
5390*35238bceSAndroid Build Coastguard Worker {
5391*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
5392*35238bceSAndroid Build Coastguard Worker for (int specNdx = 0; specNdx < DE_LENGTH_OF_ARRAY(testSpecs); ++specNdx)
5393*35238bceSAndroid Build Coastguard Worker {
5394*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
5395*35238bceSAndroid Build Coastguard Worker genShaderSourceTextureGatherOffsets(ctx, s_shaders[shaderNdx], testSpecs[specNdx]));
5396*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5397*35238bceSAndroid Build Coastguard Worker }
5398*35238bceSAndroid Build Coastguard Worker ctx.endSection();
5399*35238bceSAndroid Build Coastguard Worker }
5400*35238bceSAndroid Build Coastguard Worker }
5401*35238bceSAndroid Build Coastguard Worker ctx.endSection();
5402*35238bceSAndroid Build Coastguard Worker }
5403*35238bceSAndroid Build Coastguard Worker
5404*35238bceSAndroid Build Coastguard Worker // fma
genShaderSourceFma(NegativeTestContext & ctx,glu::ShaderType shaderType,glu::DataType aDataType,glu::DataType bDataType,glu::DataType cDataType)5405*35238bceSAndroid Build Coastguard Worker std::string genShaderSourceFma(NegativeTestContext &ctx, glu::ShaderType shaderType, glu::DataType aDataType,
5406*35238bceSAndroid Build Coastguard Worker glu::DataType bDataType, glu::DataType cDataType)
5407*35238bceSAndroid Build Coastguard Worker {
5408*35238bceSAndroid Build Coastguard Worker std::ostringstream source;
5409*35238bceSAndroid Build Coastguard Worker
5410*35238bceSAndroid Build Coastguard Worker source << (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
5411*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) :
5412*35238bceSAndroid Build Coastguard Worker glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES))
5413*35238bceSAndroid Build Coastguard Worker << "\n"
5414*35238bceSAndroid Build Coastguard Worker << getShaderInitialization(ctx, shaderType) << "void main(void)\n"
5415*35238bceSAndroid Build Coastguard Worker << "{\n"
5416*35238bceSAndroid Build Coastguard Worker << " mediump " << declareAndInitializeShaderVariable(aDataType, "a") << " mediump "
5417*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(bDataType, "b") << " mediump "
5418*35238bceSAndroid Build Coastguard Worker << declareAndInitializeShaderVariable(cDataType, "c") << " fma(a, b, c);"
5419*35238bceSAndroid Build Coastguard Worker << "}\n";
5420*35238bceSAndroid Build Coastguard Worker return source.str();
5421*35238bceSAndroid Build Coastguard Worker }
5422*35238bceSAndroid Build Coastguard Worker
fma(NegativeTestContext & ctx)5423*35238bceSAndroid Build Coastguard Worker void fma(NegativeTestContext &ctx)
5424*35238bceSAndroid Build Coastguard Worker {
5425*35238bceSAndroid Build Coastguard Worker TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx) || ctx.isExtensionSupported("GL_EXT_gpu_shader5"),
5426*35238bceSAndroid Build Coastguard Worker "This test requires a context version 3.2 or higher.");
5427*35238bceSAndroid Build Coastguard Worker
5428*35238bceSAndroid Build Coastguard Worker ctx.beginSection("fma");
5429*35238bceSAndroid Build Coastguard Worker for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
5430*35238bceSAndroid Build Coastguard Worker {
5431*35238bceSAndroid Build Coastguard Worker if (ctx.isShaderSupported(s_shaders[shaderNdx]))
5432*35238bceSAndroid Build Coastguard Worker {
5433*35238bceSAndroid Build Coastguard Worker ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
5434*35238bceSAndroid Build Coastguard Worker {
5435*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
5436*35238bceSAndroid Build Coastguard Worker genShaderSourceFma(ctx, s_shaders[shaderNdx], glu::TYPE_FLOAT, glu::TYPE_FLOAT, glu::TYPE_INT));
5437*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5438*35238bceSAndroid Build Coastguard Worker }
5439*35238bceSAndroid Build Coastguard Worker {
5440*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
5441*35238bceSAndroid Build Coastguard Worker genShaderSourceFma(ctx, s_shaders[shaderNdx], glu::TYPE_FLOAT, glu::TYPE_INT, glu::TYPE_FLOAT));
5442*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5443*35238bceSAndroid Build Coastguard Worker }
5444*35238bceSAndroid Build Coastguard Worker {
5445*35238bceSAndroid Build Coastguard Worker const std::string shaderSource(
5446*35238bceSAndroid Build Coastguard Worker genShaderSourceFma(ctx, s_shaders[shaderNdx], glu::TYPE_INT, glu::TYPE_FLOAT, glu::TYPE_FLOAT));
5447*35238bceSAndroid Build Coastguard Worker verifyShader(ctx, s_shaders[shaderNdx], shaderSource);
5448*35238bceSAndroid Build Coastguard Worker }
5449*35238bceSAndroid Build Coastguard Worker ctx.endSection();
5450*35238bceSAndroid Build Coastguard Worker }
5451*35238bceSAndroid Build Coastguard Worker }
5452*35238bceSAndroid Build Coastguard Worker ctx.endSection();
5453*35238bceSAndroid Build Coastguard Worker }
5454*35238bceSAndroid Build Coastguard Worker
5455*35238bceSAndroid Build Coastguard Worker } // namespace Functional
5456*35238bceSAndroid Build Coastguard Worker
getNegativeShaderFunctionTestFunctions()5457*35238bceSAndroid Build Coastguard Worker std::vector<FunctionContainer> getNegativeShaderFunctionTestFunctions()
5458*35238bceSAndroid Build Coastguard Worker {
5459*35238bceSAndroid Build Coastguard Worker const FunctionContainer funcs[] = {
5460*35238bceSAndroid Build Coastguard Worker {bitfield_extract_invalid_value_type, "bitfield_extract_invalid_value_type",
5461*35238bceSAndroid Build Coastguard Worker "Invalid usage of bitfieldExtract."},
5462*35238bceSAndroid Build Coastguard Worker {bitfield_extract_invalid_offset_type, "bitfield_extract_invalid_offset_type",
5463*35238bceSAndroid Build Coastguard Worker "Invalid usage of bitfieldExtract."},
5464*35238bceSAndroid Build Coastguard Worker {bitfield_extract_invalid_bits_type, "bitfield_extract_invalid_bits_type", "Invalid usage of bitfieldExtract."},
5465*35238bceSAndroid Build Coastguard Worker {bitfield_insert_invalid_base_type, "bitfield_insert_invalid_base_type", "Invalid usage of bitfieldInsert."},
5466*35238bceSAndroid Build Coastguard Worker {bitfield_insert_invalid_insert_type, "bitfield_insert_invalid_insert_type",
5467*35238bceSAndroid Build Coastguard Worker "Invalid usage of bitfieldInsert."},
5468*35238bceSAndroid Build Coastguard Worker {bitfield_insert_invalid_offset_type, "bitfield_insert_invalid_offset_type",
5469*35238bceSAndroid Build Coastguard Worker "Invalid usage of bitfieldInsert."},
5470*35238bceSAndroid Build Coastguard Worker {bitfield_insert_invalid_bits_type, "bitfield_insert_invalid_bits_type", "Invalid usage of bitfieldInsert."},
5471*35238bceSAndroid Build Coastguard Worker {bitfield_reverse, "bitfield_reverse", "Invalid usage of bitfieldReverse."},
5472*35238bceSAndroid Build Coastguard Worker {bit_count, "bit_count", "Invalid usage of bitCount."},
5473*35238bceSAndroid Build Coastguard Worker {find_msb, "find_msb", "Invalid usage of findMSB."},
5474*35238bceSAndroid Build Coastguard Worker {find_lsb, "find_lsb", "Invalid usage of findLSB."},
5475*35238bceSAndroid Build Coastguard Worker {uadd_carry_invalid_x, "uadd_carry_invalid_x", "Invalid usage of uaddCarry."},
5476*35238bceSAndroid Build Coastguard Worker {uadd_carry_invalid_y, "uadd_carry_invalid_y", "Invalid usage of uaddCarry."},
5477*35238bceSAndroid Build Coastguard Worker {uadd_carry_invalid_carry, "uadd_carry_invalid_carry", "Invalid usage of uaddCarry."},
5478*35238bceSAndroid Build Coastguard Worker {usub_borrow_invalid_x, "usub_borrow_invalid_x", "Invalid usage of usubBorrow."},
5479*35238bceSAndroid Build Coastguard Worker {usub_borrow_invalid_y, "usub_borrow_invalid_y", "Invalid usage of usubBorrow."},
5480*35238bceSAndroid Build Coastguard Worker {usub_borrow_invalid_borrow, "usub_borrow_invalid_borrow", "Invalid usage of usubBorrow."},
5481*35238bceSAndroid Build Coastguard Worker {umul_extended_invalid_x, "umul_extended_invalid_x", "Invalid usage of umulExtended."},
5482*35238bceSAndroid Build Coastguard Worker {umul_extended_invalid_y, "umul_extended_invalid_y", "Invalid usage of umulExtended."},
5483*35238bceSAndroid Build Coastguard Worker {umul_extended_invalid_msb, "umul_extended_invalid_msb", "Invalid usage of umulExtended."},
5484*35238bceSAndroid Build Coastguard Worker {umul_extended_invalid_lsb, "umul_extended_invalid_lsb", "Invalid usage of umulExtended."},
5485*35238bceSAndroid Build Coastguard Worker {imul_extended_invalid_x, "imul_extended_invalid_x", "Invalid usage of imulExtended."},
5486*35238bceSAndroid Build Coastguard Worker {imul_extended_invalid_y, "imul_extended_invalid_y", "Invalid usage of imulExtended."},
5487*35238bceSAndroid Build Coastguard Worker {imul_extended_invalid_msb, "imul_extended_invalid_msb", "Invalid usage of imulExtended."},
5488*35238bceSAndroid Build Coastguard Worker {imul_extended_invalid_lsb, "imul_extended_invalid_lsb", "Invalid usage of imulExtended."},
5489*35238bceSAndroid Build Coastguard Worker {frexp_invalid_x, "frexp_invalid_x", "Invalid usage of frexp."},
5490*35238bceSAndroid Build Coastguard Worker {frexp_invalid_exp, "frexp_invalid_exp", "Invalid usage of frexp."},
5491*35238bceSAndroid Build Coastguard Worker {ldexp_invalid_x, "ldexp_invalid_x", "Invalid usage of ldexp."},
5492*35238bceSAndroid Build Coastguard Worker {ldexp_invalid_exp, "ldexp_invalid_exp", "Invalid usage of ldexp."},
5493*35238bceSAndroid Build Coastguard Worker {pack_unorm_4x8, "pack_unorm_4x8", "Invalid usage of packUnorm4x8."},
5494*35238bceSAndroid Build Coastguard Worker {pack_snorm_4x8, "pack_snorm_4x8", "Invalid usage of packSnorm4x8."},
5495*35238bceSAndroid Build Coastguard Worker {unpack_snorm_4x8, "unpack_snorm_4x8", "Invalid usage of unpackSnorm4x8."},
5496*35238bceSAndroid Build Coastguard Worker {unpack_unorm_4x8, "unpack_unorm_4x8", "Invalid usage of unpackUnorm4x8."},
5497*35238bceSAndroid Build Coastguard Worker {texture_size_invalid_sampler, "texture_size_invalid_sampler", "Invalid usage of textureSize."},
5498*35238bceSAndroid Build Coastguard Worker {texture_size_invalid_lod, "texture_size_invalid_lod", "Invalid usage of textureSize."},
5499*35238bceSAndroid Build Coastguard Worker {texture_invalid_p, "texture_invalid_p", "Invalid usage of texture."},
5500*35238bceSAndroid Build Coastguard Worker {texture_invalid_bias_or_compare, "texture_invalid_bias_or_compare", "Invalid usage of texture."},
5501*35238bceSAndroid Build Coastguard Worker {texture_lod_invalid_p, "texture_lod_invalid_p", "Invalid usage of textureLod."},
5502*35238bceSAndroid Build Coastguard Worker {texture_lod_invalid_lod, "texture_lod_invalid_lod", "Invalid usage of textureLod."},
5503*35238bceSAndroid Build Coastguard Worker {texel_fetch_invalid_p, "texel_fetch_invalid_p", "Invalid usage of texelFetch."},
5504*35238bceSAndroid Build Coastguard Worker {texel_fetch_invalid_sample, "texel_fetch_invalid_sample", "Invalid usage of texelFetch."},
5505*35238bceSAndroid Build Coastguard Worker {emit_vertex, "emit_vertex", "Invalid usage of EmitVertex."},
5506*35238bceSAndroid Build Coastguard Worker {end_primitive, "end_primitive", "Invalid usage of EndPrimitive."},
5507*35238bceSAndroid Build Coastguard Worker {texture_grad, "texture_grad", "Invalid usage of textureGrad."},
5508*35238bceSAndroid Build Coastguard Worker {texture_gather_sampler_2d, "texture_gather_sampler_2d", "Invalid usage of textureGather."},
5509*35238bceSAndroid Build Coastguard Worker {texture_gather_sampler_2d_array, "texture_gather_sampler_2d_array", "Invalid usage of textureGather."},
5510*35238bceSAndroid Build Coastguard Worker {texture_gather_sampler_cube, "texture_gather_sampler_cube", "Invalid usage of textureGather."},
5511*35238bceSAndroid Build Coastguard Worker {texture_gather_sampler_2d_shadow, "texture_gather_sampler_2d_shadow", "Invalid usage of textureGather."},
5512*35238bceSAndroid Build Coastguard Worker {texture_gather_sampler_2d_array_shadow, "texture_gather_sampler_2d_array_shadow",
5513*35238bceSAndroid Build Coastguard Worker "Invalid usage of textureGather."},
5514*35238bceSAndroid Build Coastguard Worker {texture_gather_sampler_cube_shadow, "texture_gather_sampler_cube_shadow", "Invalid usage of textureGather."},
5515*35238bceSAndroid Build Coastguard Worker {texture_gather_sampler_cube_array, "texture_gather_sampler_cube_array", "Invalid usage of textureGather."},
5516*35238bceSAndroid Build Coastguard Worker {texture_gather_sampler_cube_array_shadow, "texture_gather_sampler_cube_array_shadow",
5517*35238bceSAndroid Build Coastguard Worker "Invalid usage of textureGather."},
5518*35238bceSAndroid Build Coastguard Worker {texture_gather_offset_sampler_2d, "texture_gather_offset_sampler_2d", "Invalid usage of textureGatherOffset."},
5519*35238bceSAndroid Build Coastguard Worker {texture_gather_offset_sampler_2d_array, "texture_gather_offset_sampler_2d_array",
5520*35238bceSAndroid Build Coastguard Worker "Invalid usage of textureGatherOffset."},
5521*35238bceSAndroid Build Coastguard Worker {texture_gather_offset_sampler_2d_shadow, "texture_gather_offset_sampler_2d_shadow",
5522*35238bceSAndroid Build Coastguard Worker "Invalid usage of textureGatherOffset."},
5523*35238bceSAndroid Build Coastguard Worker {texture_gather_offset_sampler_2d_array_shadow, "texture_gather_offset_sampler_2d_array_shadow",
5524*35238bceSAndroid Build Coastguard Worker "Invalid usage of textureGatherOffset."},
5525*35238bceSAndroid Build Coastguard Worker {texture_gather_offsets, "texture_gather_offsets", "Invalid usage of textureGatherOffsets."},
5526*35238bceSAndroid Build Coastguard Worker {atomic_add, "atomic_add", "Invalid usage of atomicAdd."},
5527*35238bceSAndroid Build Coastguard Worker {atomic_min, "atomic_min", "Invalid usage of atomicMin."},
5528*35238bceSAndroid Build Coastguard Worker {atomic_max, "atomic_max", "Invalid usage of atomicMax."},
5529*35238bceSAndroid Build Coastguard Worker {atomic_and, "atomic_and", "Invalid usage of atomicAnd."},
5530*35238bceSAndroid Build Coastguard Worker {atomic_or, "atomic_or", "Invalid usage of atomicOr."},
5531*35238bceSAndroid Build Coastguard Worker {atomic_xor, "atomic_xor", "Invalid usage of atomicXor."},
5532*35238bceSAndroid Build Coastguard Worker {atomic_exchange, "atomic_exchange", "Invalid usage of atomicExchange."},
5533*35238bceSAndroid Build Coastguard Worker {atomic_comp_swap, "atomic_comp_swap", "Invalid usage of atomicCompSwap."},
5534*35238bceSAndroid Build Coastguard Worker {interpolate_at_centroid, "interpolate_at_centroid", "Invalid usage of interpolateAtCentroid."},
5535*35238bceSAndroid Build Coastguard Worker {interpolate_at_sample, "interpolate_at_sample", "Invalid usage of interpolateAtSample."},
5536*35238bceSAndroid Build Coastguard Worker {interpolate_at_offset, "interpolate_at_offset", "Invalid usage of interpolateAtOffset."},
5537*35238bceSAndroid Build Coastguard Worker {fma, "fma", "Invalid usage of fma."},
5538*35238bceSAndroid Build Coastguard Worker };
5539*35238bceSAndroid Build Coastguard Worker
5540*35238bceSAndroid Build Coastguard Worker return std::vector<FunctionContainer>(DE_ARRAY_BEGIN(funcs), DE_ARRAY_END(funcs));
5541*35238bceSAndroid Build Coastguard Worker }
5542*35238bceSAndroid Build Coastguard Worker
5543*35238bceSAndroid Build Coastguard Worker } // namespace gles31
5544*35238bceSAndroid Build Coastguard Worker } // namespace deqp
5545*35238bceSAndroid Build Coastguard Worker } // gles31
5546*35238bceSAndroid Build Coastguard Worker } // deqp
5547