1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 3.0 Module
3*35238bceSAndroid Build Coastguard Worker * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker *
5*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker *
7*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker *
11*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker *
13*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker *
19*35238bceSAndroid Build Coastguard Worker *//*!
20*35238bceSAndroid Build Coastguard Worker * \file
21*35238bceSAndroid Build Coastguard Worker * \brief Texture access function tests.
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es3fShaderTextureFunctionTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "glsShaderRenderCase.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "glsShaderLibrary.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "glsTextureTestUtil.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "gluTexture.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "gluTextureUtil.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "gluPixelTransfer.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "gluStrUtil.hpp"
32*35238bceSAndroid Build Coastguard Worker #include "tcuTextureUtil.hpp"
33*35238bceSAndroid Build Coastguard Worker #include "tcuMatrix.hpp"
34*35238bceSAndroid Build Coastguard Worker #include "tcuMatrixUtil.hpp"
35*35238bceSAndroid Build Coastguard Worker #include "tcuTestLog.hpp"
36*35238bceSAndroid Build Coastguard Worker #include "glwFunctions.hpp"
37*35238bceSAndroid Build Coastguard Worker #include "deMath.h"
38*35238bceSAndroid Build Coastguard Worker
39*35238bceSAndroid Build Coastguard Worker #include <sstream>
40*35238bceSAndroid Build Coastguard Worker
41*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
42*35238bceSAndroid Build Coastguard Worker #include "glwFunctions.hpp"
43*35238bceSAndroid Build Coastguard Worker
44*35238bceSAndroid Build Coastguard Worker namespace deqp
45*35238bceSAndroid Build Coastguard Worker {
46*35238bceSAndroid Build Coastguard Worker namespace gles3
47*35238bceSAndroid Build Coastguard Worker {
48*35238bceSAndroid Build Coastguard Worker namespace Functional
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker
51*35238bceSAndroid Build Coastguard Worker namespace
52*35238bceSAndroid Build Coastguard Worker {
53*35238bceSAndroid Build Coastguard Worker
54*35238bceSAndroid Build Coastguard Worker using glu::TextureTestUtil::computeLodFromDerivates;
55*35238bceSAndroid Build Coastguard Worker
56*35238bceSAndroid Build Coastguard Worker enum Function
57*35238bceSAndroid Build Coastguard Worker {
58*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURE = 0, //!< texture(), textureOffset()
59*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTUREPROJ, //!< textureProj(), textureProjOffset()
60*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTUREPROJ3, //!< textureProj(sampler2D, vec3)
61*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTURELOD, // ...
62*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTUREPROJLOD,
63*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTUREPROJLOD3, //!< textureProjLod(sampler2D, vec3)
64*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTUREGRAD,
65*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTUREPROJGRAD,
66*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXTUREPROJGRAD3, //!< textureProjGrad(sampler2D, vec3)
67*35238bceSAndroid Build Coastguard Worker FUNCTION_TEXELFETCH,
68*35238bceSAndroid Build Coastguard Worker
69*35238bceSAndroid Build Coastguard Worker FUNCTION_LAST
70*35238bceSAndroid Build Coastguard Worker };
71*35238bceSAndroid Build Coastguard Worker
functionHasAutoLod(glu::ShaderType shaderType,Function function)72*35238bceSAndroid Build Coastguard Worker inline bool functionHasAutoLod(glu::ShaderType shaderType, Function function)
73*35238bceSAndroid Build Coastguard Worker {
74*35238bceSAndroid Build Coastguard Worker return shaderType == glu::SHADERTYPE_FRAGMENT &&
75*35238bceSAndroid Build Coastguard Worker (function == FUNCTION_TEXTURE || function == FUNCTION_TEXTUREPROJ || function == FUNCTION_TEXTUREPROJ3);
76*35238bceSAndroid Build Coastguard Worker }
77*35238bceSAndroid Build Coastguard Worker
functionHasProj(Function function)78*35238bceSAndroid Build Coastguard Worker inline bool functionHasProj(Function function)
79*35238bceSAndroid Build Coastguard Worker {
80*35238bceSAndroid Build Coastguard Worker return function == FUNCTION_TEXTUREPROJ || function == FUNCTION_TEXTUREPROJ3 ||
81*35238bceSAndroid Build Coastguard Worker function == FUNCTION_TEXTUREPROJLOD || function == FUNCTION_TEXTUREPROJGRAD ||
82*35238bceSAndroid Build Coastguard Worker function == FUNCTION_TEXTUREPROJLOD3 || function == FUNCTION_TEXTUREPROJGRAD3;
83*35238bceSAndroid Build Coastguard Worker }
84*35238bceSAndroid Build Coastguard Worker
functionHasGrad(Function function)85*35238bceSAndroid Build Coastguard Worker inline bool functionHasGrad(Function function)
86*35238bceSAndroid Build Coastguard Worker {
87*35238bceSAndroid Build Coastguard Worker return function == FUNCTION_TEXTUREGRAD || function == FUNCTION_TEXTUREPROJGRAD ||
88*35238bceSAndroid Build Coastguard Worker function == FUNCTION_TEXTUREPROJGRAD3;
89*35238bceSAndroid Build Coastguard Worker }
90*35238bceSAndroid Build Coastguard Worker
functionHasLod(Function function)91*35238bceSAndroid Build Coastguard Worker inline bool functionHasLod(Function function)
92*35238bceSAndroid Build Coastguard Worker {
93*35238bceSAndroid Build Coastguard Worker return function == FUNCTION_TEXTURELOD || function == FUNCTION_TEXTUREPROJLOD ||
94*35238bceSAndroid Build Coastguard Worker function == FUNCTION_TEXTUREPROJLOD3 || function == FUNCTION_TEXELFETCH;
95*35238bceSAndroid Build Coastguard Worker }
96*35238bceSAndroid Build Coastguard Worker
97*35238bceSAndroid Build Coastguard Worker struct TextureLookupSpec
98*35238bceSAndroid Build Coastguard Worker {
99*35238bceSAndroid Build Coastguard Worker Function function;
100*35238bceSAndroid Build Coastguard Worker
101*35238bceSAndroid Build Coastguard Worker tcu::Vec4 minCoord;
102*35238bceSAndroid Build Coastguard Worker tcu::Vec4 maxCoord;
103*35238bceSAndroid Build Coastguard Worker
104*35238bceSAndroid Build Coastguard Worker // Bias
105*35238bceSAndroid Build Coastguard Worker bool useBias;
106*35238bceSAndroid Build Coastguard Worker
107*35238bceSAndroid Build Coastguard Worker // Bias or Lod for *Lod* functions
108*35238bceSAndroid Build Coastguard Worker float minLodBias;
109*35238bceSAndroid Build Coastguard Worker float maxLodBias;
110*35238bceSAndroid Build Coastguard Worker
111*35238bceSAndroid Build Coastguard Worker // For *Grad* functions
112*35238bceSAndroid Build Coastguard Worker tcu::Vec3 minDX;
113*35238bceSAndroid Build Coastguard Worker tcu::Vec3 maxDX;
114*35238bceSAndroid Build Coastguard Worker tcu::Vec3 minDY;
115*35238bceSAndroid Build Coastguard Worker tcu::Vec3 maxDY;
116*35238bceSAndroid Build Coastguard Worker
117*35238bceSAndroid Build Coastguard Worker bool useOffset;
118*35238bceSAndroid Build Coastguard Worker tcu::IVec3 offset;
119*35238bceSAndroid Build Coastguard Worker
TextureLookupSpecdeqp::gles3::Functional::__anonffd091fa0111::TextureLookupSpec120*35238bceSAndroid Build Coastguard Worker TextureLookupSpec(void)
121*35238bceSAndroid Build Coastguard Worker : function(FUNCTION_LAST)
122*35238bceSAndroid Build Coastguard Worker , minCoord(0.0f)
123*35238bceSAndroid Build Coastguard Worker , maxCoord(1.0f)
124*35238bceSAndroid Build Coastguard Worker , useBias(false)
125*35238bceSAndroid Build Coastguard Worker , minLodBias(0.0f)
126*35238bceSAndroid Build Coastguard Worker , maxLodBias(0.0f)
127*35238bceSAndroid Build Coastguard Worker , minDX(0.0f)
128*35238bceSAndroid Build Coastguard Worker , maxDX(0.0f)
129*35238bceSAndroid Build Coastguard Worker , minDY(0.0f)
130*35238bceSAndroid Build Coastguard Worker , maxDY(0.0f)
131*35238bceSAndroid Build Coastguard Worker , useOffset(false)
132*35238bceSAndroid Build Coastguard Worker , offset(0)
133*35238bceSAndroid Build Coastguard Worker {
134*35238bceSAndroid Build Coastguard Worker }
135*35238bceSAndroid Build Coastguard Worker
TextureLookupSpecdeqp::gles3::Functional::__anonffd091fa0111::TextureLookupSpec136*35238bceSAndroid Build Coastguard Worker TextureLookupSpec(Function function_, const tcu::Vec4 &minCoord_, const tcu::Vec4 &maxCoord_, bool useBias_,
137*35238bceSAndroid Build Coastguard Worker float minLodBias_, float maxLodBias_, const tcu::Vec3 &minDX_, const tcu::Vec3 &maxDX_,
138*35238bceSAndroid Build Coastguard Worker const tcu::Vec3 &minDY_, const tcu::Vec3 &maxDY_, bool useOffset_, const tcu::IVec3 &offset_)
139*35238bceSAndroid Build Coastguard Worker : function(function_)
140*35238bceSAndroid Build Coastguard Worker , minCoord(minCoord_)
141*35238bceSAndroid Build Coastguard Worker , maxCoord(maxCoord_)
142*35238bceSAndroid Build Coastguard Worker , useBias(useBias_)
143*35238bceSAndroid Build Coastguard Worker , minLodBias(minLodBias_)
144*35238bceSAndroid Build Coastguard Worker , maxLodBias(maxLodBias_)
145*35238bceSAndroid Build Coastguard Worker , minDX(minDX_)
146*35238bceSAndroid Build Coastguard Worker , maxDX(maxDX_)
147*35238bceSAndroid Build Coastguard Worker , minDY(minDY_)
148*35238bceSAndroid Build Coastguard Worker , maxDY(maxDY_)
149*35238bceSAndroid Build Coastguard Worker , useOffset(useOffset_)
150*35238bceSAndroid Build Coastguard Worker , offset(offset_)
151*35238bceSAndroid Build Coastguard Worker {
152*35238bceSAndroid Build Coastguard Worker }
153*35238bceSAndroid Build Coastguard Worker };
154*35238bceSAndroid Build Coastguard Worker
155*35238bceSAndroid Build Coastguard Worker enum TextureType
156*35238bceSAndroid Build Coastguard Worker {
157*35238bceSAndroid Build Coastguard Worker TEXTURETYPE_2D,
158*35238bceSAndroid Build Coastguard Worker TEXTURETYPE_CUBE_MAP,
159*35238bceSAndroid Build Coastguard Worker TEXTURETYPE_2D_ARRAY,
160*35238bceSAndroid Build Coastguard Worker TEXTURETYPE_3D,
161*35238bceSAndroid Build Coastguard Worker
162*35238bceSAndroid Build Coastguard Worker TEXTURETYPE_LAST
163*35238bceSAndroid Build Coastguard Worker };
164*35238bceSAndroid Build Coastguard Worker
165*35238bceSAndroid Build Coastguard Worker struct TextureSpec
166*35238bceSAndroid Build Coastguard Worker {
167*35238bceSAndroid Build Coastguard Worker TextureType type; //!< Texture type (2D, cubemap, ...)
168*35238bceSAndroid Build Coastguard Worker uint32_t format; //!< Internal format.
169*35238bceSAndroid Build Coastguard Worker int width;
170*35238bceSAndroid Build Coastguard Worker int height;
171*35238bceSAndroid Build Coastguard Worker int depth;
172*35238bceSAndroid Build Coastguard Worker int numLevels;
173*35238bceSAndroid Build Coastguard Worker tcu::Sampler sampler;
174*35238bceSAndroid Build Coastguard Worker
TextureSpecdeqp::gles3::Functional::__anonffd091fa0111::TextureSpec175*35238bceSAndroid Build Coastguard Worker TextureSpec(void) : type(TEXTURETYPE_LAST), format(GL_NONE), width(0), height(0), depth(0), numLevels(0)
176*35238bceSAndroid Build Coastguard Worker {
177*35238bceSAndroid Build Coastguard Worker }
178*35238bceSAndroid Build Coastguard Worker
TextureSpecdeqp::gles3::Functional::__anonffd091fa0111::TextureSpec179*35238bceSAndroid Build Coastguard Worker TextureSpec(TextureType type_, uint32_t format_, int width_, int height_, int depth_, int numLevels_,
180*35238bceSAndroid Build Coastguard Worker const tcu::Sampler &sampler_)
181*35238bceSAndroid Build Coastguard Worker : type(type_)
182*35238bceSAndroid Build Coastguard Worker , format(format_)
183*35238bceSAndroid Build Coastguard Worker , width(width_)
184*35238bceSAndroid Build Coastguard Worker , height(height_)
185*35238bceSAndroid Build Coastguard Worker , depth(depth_)
186*35238bceSAndroid Build Coastguard Worker , numLevels(numLevels_)
187*35238bceSAndroid Build Coastguard Worker , sampler(sampler_)
188*35238bceSAndroid Build Coastguard Worker {
189*35238bceSAndroid Build Coastguard Worker }
190*35238bceSAndroid Build Coastguard Worker };
191*35238bceSAndroid Build Coastguard Worker
192*35238bceSAndroid Build Coastguard Worker struct TexLookupParams
193*35238bceSAndroid Build Coastguard Worker {
194*35238bceSAndroid Build Coastguard Worker float lod;
195*35238bceSAndroid Build Coastguard Worker tcu::IVec3 offset;
196*35238bceSAndroid Build Coastguard Worker tcu::Vec4 scale;
197*35238bceSAndroid Build Coastguard Worker tcu::Vec4 bias;
198*35238bceSAndroid Build Coastguard Worker
TexLookupParamsdeqp::gles3::Functional::__anonffd091fa0111::TexLookupParams199*35238bceSAndroid Build Coastguard Worker TexLookupParams(void) : lod(0.0f), offset(0), scale(1.0f), bias(0.0f)
200*35238bceSAndroid Build Coastguard Worker {
201*35238bceSAndroid Build Coastguard Worker }
202*35238bceSAndroid Build Coastguard Worker };
203*35238bceSAndroid Build Coastguard Worker
204*35238bceSAndroid Build Coastguard Worker } // namespace
205*35238bceSAndroid Build Coastguard Worker
206*35238bceSAndroid Build Coastguard Worker using tcu::IVec2;
207*35238bceSAndroid Build Coastguard Worker using tcu::IVec3;
208*35238bceSAndroid Build Coastguard Worker using tcu::IVec4;
209*35238bceSAndroid Build Coastguard Worker using tcu::Vec2;
210*35238bceSAndroid Build Coastguard Worker using tcu::Vec3;
211*35238bceSAndroid Build Coastguard Worker using tcu::Vec4;
212*35238bceSAndroid Build Coastguard Worker
213*35238bceSAndroid Build Coastguard Worker static const glu::TextureTestUtil::LodMode DEFAULT_LOD_MODE = glu::TextureTestUtil::LODMODE_EXACT;
214*35238bceSAndroid Build Coastguard Worker
computeLodFromGrad2D(const gls::ShaderEvalContext & c)215*35238bceSAndroid Build Coastguard Worker inline float computeLodFromGrad2D(const gls::ShaderEvalContext &c)
216*35238bceSAndroid Build Coastguard Worker {
217*35238bceSAndroid Build Coastguard Worker float w = (float)c.textures[0].tex2D->getWidth();
218*35238bceSAndroid Build Coastguard Worker float h = (float)c.textures[0].tex2D->getHeight();
219*35238bceSAndroid Build Coastguard Worker return computeLodFromDerivates(DEFAULT_LOD_MODE, c.in[1].x() * w, c.in[1].y() * h, c.in[2].x() * w,
220*35238bceSAndroid Build Coastguard Worker c.in[2].y() * h);
221*35238bceSAndroid Build Coastguard Worker }
222*35238bceSAndroid Build Coastguard Worker
computeLodFromGrad2DArray(const gls::ShaderEvalContext & c)223*35238bceSAndroid Build Coastguard Worker inline float computeLodFromGrad2DArray(const gls::ShaderEvalContext &c)
224*35238bceSAndroid Build Coastguard Worker {
225*35238bceSAndroid Build Coastguard Worker float w = (float)c.textures[0].tex2DArray->getWidth();
226*35238bceSAndroid Build Coastguard Worker float h = (float)c.textures[0].tex2DArray->getHeight();
227*35238bceSAndroid Build Coastguard Worker return computeLodFromDerivates(DEFAULT_LOD_MODE, c.in[1].x() * w, c.in[1].y() * h, c.in[2].x() * w,
228*35238bceSAndroid Build Coastguard Worker c.in[2].y() * h);
229*35238bceSAndroid Build Coastguard Worker }
230*35238bceSAndroid Build Coastguard Worker
computeLodFromGrad3D(const gls::ShaderEvalContext & c)231*35238bceSAndroid Build Coastguard Worker inline float computeLodFromGrad3D(const gls::ShaderEvalContext &c)
232*35238bceSAndroid Build Coastguard Worker {
233*35238bceSAndroid Build Coastguard Worker float w = (float)c.textures[0].tex3D->getWidth();
234*35238bceSAndroid Build Coastguard Worker float h = (float)c.textures[0].tex3D->getHeight();
235*35238bceSAndroid Build Coastguard Worker float d = (float)c.textures[0].tex3D->getDepth();
236*35238bceSAndroid Build Coastguard Worker return computeLodFromDerivates(DEFAULT_LOD_MODE, c.in[1].x() * w, c.in[1].y() * h, c.in[1].z() * d, c.in[2].x() * w,
237*35238bceSAndroid Build Coastguard Worker c.in[2].y() * h, c.in[2].z() * d);
238*35238bceSAndroid Build Coastguard Worker }
239*35238bceSAndroid Build Coastguard Worker
computeLodFromGradCube(const gls::ShaderEvalContext & c)240*35238bceSAndroid Build Coastguard Worker inline float computeLodFromGradCube(const gls::ShaderEvalContext &c)
241*35238bceSAndroid Build Coastguard Worker {
242*35238bceSAndroid Build Coastguard Worker // \note Major axis is always -Z or +Z
243*35238bceSAndroid Build Coastguard Worker float m = de::abs(c.in[0].z());
244*35238bceSAndroid Build Coastguard Worker float d = (float)c.textures[0].texCube->getSize();
245*35238bceSAndroid Build Coastguard Worker float s = d / (2.0f * m);
246*35238bceSAndroid Build Coastguard Worker float t = d / (2.0f * m);
247*35238bceSAndroid Build Coastguard Worker return computeLodFromDerivates(DEFAULT_LOD_MODE, c.in[1].x() * s, c.in[1].y() * t, c.in[2].x() * s,
248*35238bceSAndroid Build Coastguard Worker c.in[2].y() * t);
249*35238bceSAndroid Build Coastguard Worker }
250*35238bceSAndroid Build Coastguard Worker
251*35238bceSAndroid Build Coastguard Worker typedef void (*TexEvalFunc)(gls::ShaderEvalContext &c, const TexLookupParams &lookupParams);
252*35238bceSAndroid Build Coastguard Worker
texture2D(const gls::ShaderEvalContext & c,float s,float t,float lod)253*35238bceSAndroid Build Coastguard Worker inline Vec4 texture2D(const gls::ShaderEvalContext &c, float s, float t, float lod)
254*35238bceSAndroid Build Coastguard Worker {
255*35238bceSAndroid Build Coastguard Worker return c.textures[0].tex2D->sample(c.textures[0].sampler, s, t, lod);
256*35238bceSAndroid Build Coastguard Worker }
textureCube(const gls::ShaderEvalContext & c,float s,float t,float r,float lod)257*35238bceSAndroid Build Coastguard Worker inline Vec4 textureCube(const gls::ShaderEvalContext &c, float s, float t, float r, float lod)
258*35238bceSAndroid Build Coastguard Worker {
259*35238bceSAndroid Build Coastguard Worker return c.textures[0].texCube->sample(c.textures[0].sampler, s, t, r, lod);
260*35238bceSAndroid Build Coastguard Worker }
texture2DArray(const gls::ShaderEvalContext & c,float s,float t,float r,float lod)261*35238bceSAndroid Build Coastguard Worker inline Vec4 texture2DArray(const gls::ShaderEvalContext &c, float s, float t, float r, float lod)
262*35238bceSAndroid Build Coastguard Worker {
263*35238bceSAndroid Build Coastguard Worker return c.textures[0].tex2DArray->sample(c.textures[0].sampler, s, t, r, lod);
264*35238bceSAndroid Build Coastguard Worker }
texture3D(const gls::ShaderEvalContext & c,float s,float t,float r,float lod)265*35238bceSAndroid Build Coastguard Worker inline Vec4 texture3D(const gls::ShaderEvalContext &c, float s, float t, float r, float lod)
266*35238bceSAndroid Build Coastguard Worker {
267*35238bceSAndroid Build Coastguard Worker return c.textures[0].tex3D->sample(c.textures[0].sampler, s, t, r, lod);
268*35238bceSAndroid Build Coastguard Worker }
269*35238bceSAndroid Build Coastguard Worker
texture2DShadow(const gls::ShaderEvalContext & c,float ref,float s,float t,float lod)270*35238bceSAndroid Build Coastguard Worker inline float texture2DShadow(const gls::ShaderEvalContext &c, float ref, float s, float t, float lod)
271*35238bceSAndroid Build Coastguard Worker {
272*35238bceSAndroid Build Coastguard Worker return c.textures[0].tex2D->sampleCompare(c.textures[0].sampler, ref, s, t, lod);
273*35238bceSAndroid Build Coastguard Worker }
textureCubeShadow(const gls::ShaderEvalContext & c,float ref,float s,float t,float r,float lod)274*35238bceSAndroid Build Coastguard Worker inline float textureCubeShadow(const gls::ShaderEvalContext &c, float ref, float s, float t, float r, float lod)
275*35238bceSAndroid Build Coastguard Worker {
276*35238bceSAndroid Build Coastguard Worker return c.textures[0].texCube->sampleCompare(c.textures[0].sampler, ref, s, t, r, lod);
277*35238bceSAndroid Build Coastguard Worker }
texture2DArrayShadow(const gls::ShaderEvalContext & c,float ref,float s,float t,float r,float lod)278*35238bceSAndroid Build Coastguard Worker inline float texture2DArrayShadow(const gls::ShaderEvalContext &c, float ref, float s, float t, float r, float lod)
279*35238bceSAndroid Build Coastguard Worker {
280*35238bceSAndroid Build Coastguard Worker return c.textures[0].tex2DArray->sampleCompare(c.textures[0].sampler, ref, s, t, r, lod);
281*35238bceSAndroid Build Coastguard Worker }
282*35238bceSAndroid Build Coastguard Worker
texture2DOffset(const gls::ShaderEvalContext & c,float s,float t,float lod,IVec2 offset)283*35238bceSAndroid Build Coastguard Worker inline Vec4 texture2DOffset(const gls::ShaderEvalContext &c, float s, float t, float lod, IVec2 offset)
284*35238bceSAndroid Build Coastguard Worker {
285*35238bceSAndroid Build Coastguard Worker return c.textures[0].tex2D->sampleOffset(c.textures[0].sampler, s, t, lod, offset);
286*35238bceSAndroid Build Coastguard Worker }
texture2DArrayOffset(const gls::ShaderEvalContext & c,float s,float t,float r,float lod,IVec2 offset)287*35238bceSAndroid Build Coastguard Worker inline Vec4 texture2DArrayOffset(const gls::ShaderEvalContext &c, float s, float t, float r, float lod, IVec2 offset)
288*35238bceSAndroid Build Coastguard Worker {
289*35238bceSAndroid Build Coastguard Worker return c.textures[0].tex2DArray->sampleOffset(c.textures[0].sampler, s, t, r, lod, offset);
290*35238bceSAndroid Build Coastguard Worker }
texture3DOffset(const gls::ShaderEvalContext & c,float s,float t,float r,float lod,IVec3 offset)291*35238bceSAndroid Build Coastguard Worker inline Vec4 texture3DOffset(const gls::ShaderEvalContext &c, float s, float t, float r, float lod, IVec3 offset)
292*35238bceSAndroid Build Coastguard Worker {
293*35238bceSAndroid Build Coastguard Worker return c.textures[0].tex3D->sampleOffset(c.textures[0].sampler, s, t, r, lod, offset);
294*35238bceSAndroid Build Coastguard Worker }
295*35238bceSAndroid Build Coastguard Worker
texture2DShadowOffset(const gls::ShaderEvalContext & c,float ref,float s,float t,float lod,IVec2 offset)296*35238bceSAndroid Build Coastguard Worker inline float texture2DShadowOffset(const gls::ShaderEvalContext &c, float ref, float s, float t, float lod,
297*35238bceSAndroid Build Coastguard Worker IVec2 offset)
298*35238bceSAndroid Build Coastguard Worker {
299*35238bceSAndroid Build Coastguard Worker return c.textures[0].tex2D->sampleCompareOffset(c.textures[0].sampler, ref, s, t, lod, offset);
300*35238bceSAndroid Build Coastguard Worker }
texture2DArrayShadowOffset(const gls::ShaderEvalContext & c,float ref,float s,float t,float r,float lod,IVec2 offset)301*35238bceSAndroid Build Coastguard Worker inline float texture2DArrayShadowOffset(const gls::ShaderEvalContext &c, float ref, float s, float t, float r,
302*35238bceSAndroid Build Coastguard Worker float lod, IVec2 offset)
303*35238bceSAndroid Build Coastguard Worker {
304*35238bceSAndroid Build Coastguard Worker return c.textures[0].tex2DArray->sampleCompareOffset(c.textures[0].sampler, ref, s, t, r, lod, offset);
305*35238bceSAndroid Build Coastguard Worker }
306*35238bceSAndroid Build Coastguard Worker
307*35238bceSAndroid Build Coastguard Worker // Eval functions.
evalTexture2D(gls::ShaderEvalContext & c,const TexLookupParams & p)308*35238bceSAndroid Build Coastguard Worker static void evalTexture2D(gls::ShaderEvalContext &c, const TexLookupParams &p)
309*35238bceSAndroid Build Coastguard Worker {
310*35238bceSAndroid Build Coastguard Worker c.color = texture2D(c, c.in[0].x(), c.in[0].y(), p.lod) * p.scale + p.bias;
311*35238bceSAndroid Build Coastguard Worker }
evalTextureCube(gls::ShaderEvalContext & c,const TexLookupParams & p)312*35238bceSAndroid Build Coastguard Worker static void evalTextureCube(gls::ShaderEvalContext &c, const TexLookupParams &p)
313*35238bceSAndroid Build Coastguard Worker {
314*35238bceSAndroid Build Coastguard Worker c.color = textureCube(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod) * p.scale + p.bias;
315*35238bceSAndroid Build Coastguard Worker }
evalTexture2DArray(gls::ShaderEvalContext & c,const TexLookupParams & p)316*35238bceSAndroid Build Coastguard Worker static void evalTexture2DArray(gls::ShaderEvalContext &c, const TexLookupParams &p)
317*35238bceSAndroid Build Coastguard Worker {
318*35238bceSAndroid Build Coastguard Worker c.color = texture2DArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod) * p.scale + p.bias;
319*35238bceSAndroid Build Coastguard Worker }
evalTexture3D(gls::ShaderEvalContext & c,const TexLookupParams & p)320*35238bceSAndroid Build Coastguard Worker static void evalTexture3D(gls::ShaderEvalContext &c, const TexLookupParams &p)
321*35238bceSAndroid Build Coastguard Worker {
322*35238bceSAndroid Build Coastguard Worker c.color = texture3D(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod) * p.scale + p.bias;
323*35238bceSAndroid Build Coastguard Worker }
324*35238bceSAndroid Build Coastguard Worker
evalTexture2DBias(gls::ShaderEvalContext & c,const TexLookupParams & p)325*35238bceSAndroid Build Coastguard Worker static void evalTexture2DBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
326*35238bceSAndroid Build Coastguard Worker {
327*35238bceSAndroid Build Coastguard Worker c.color = texture2D(c, c.in[0].x(), c.in[0].y(), p.lod + c.in[1].x()) * p.scale + p.bias;
328*35238bceSAndroid Build Coastguard Worker }
evalTextureCubeBias(gls::ShaderEvalContext & c,const TexLookupParams & p)329*35238bceSAndroid Build Coastguard Worker static void evalTextureCubeBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
330*35238bceSAndroid Build Coastguard Worker {
331*35238bceSAndroid Build Coastguard Worker c.color = textureCube(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod + c.in[1].x()) * p.scale + p.bias;
332*35238bceSAndroid Build Coastguard Worker }
evalTexture2DArrayBias(gls::ShaderEvalContext & c,const TexLookupParams & p)333*35238bceSAndroid Build Coastguard Worker static void evalTexture2DArrayBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
334*35238bceSAndroid Build Coastguard Worker {
335*35238bceSAndroid Build Coastguard Worker c.color = texture2DArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod + c.in[1].x()) * p.scale + p.bias;
336*35238bceSAndroid Build Coastguard Worker }
evalTexture3DBias(gls::ShaderEvalContext & c,const TexLookupParams & p)337*35238bceSAndroid Build Coastguard Worker static void evalTexture3DBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
338*35238bceSAndroid Build Coastguard Worker {
339*35238bceSAndroid Build Coastguard Worker c.color = texture3D(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod + c.in[1].x()) * p.scale + p.bias;
340*35238bceSAndroid Build Coastguard Worker }
341*35238bceSAndroid Build Coastguard Worker
evalTexture2DProj3(gls::ShaderEvalContext & c,const TexLookupParams & p)342*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProj3(gls::ShaderEvalContext &c, const TexLookupParams &p)
343*35238bceSAndroid Build Coastguard Worker {
344*35238bceSAndroid Build Coastguard Worker c.color = texture2D(c, c.in[0].x() / c.in[0].z(), c.in[0].y() / c.in[0].z(), p.lod) * p.scale + p.bias;
345*35238bceSAndroid Build Coastguard Worker }
evalTexture2DProj3Bias(gls::ShaderEvalContext & c,const TexLookupParams & p)346*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProj3Bias(gls::ShaderEvalContext &c, const TexLookupParams &p)
347*35238bceSAndroid Build Coastguard Worker {
348*35238bceSAndroid Build Coastguard Worker c.color =
349*35238bceSAndroid Build Coastguard Worker texture2D(c, c.in[0].x() / c.in[0].z(), c.in[0].y() / c.in[0].z(), p.lod + c.in[1].x()) * p.scale + p.bias;
350*35238bceSAndroid Build Coastguard Worker }
evalTexture2DProj(gls::ShaderEvalContext & c,const TexLookupParams & p)351*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProj(gls::ShaderEvalContext &c, const TexLookupParams &p)
352*35238bceSAndroid Build Coastguard Worker {
353*35238bceSAndroid Build Coastguard Worker c.color = texture2D(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), p.lod) * p.scale + p.bias;
354*35238bceSAndroid Build Coastguard Worker }
evalTexture2DProjBias(gls::ShaderEvalContext & c,const TexLookupParams & p)355*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProjBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
356*35238bceSAndroid Build Coastguard Worker {
357*35238bceSAndroid Build Coastguard Worker c.color =
358*35238bceSAndroid Build Coastguard Worker texture2D(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), p.lod + c.in[1].x()) * p.scale + p.bias;
359*35238bceSAndroid Build Coastguard Worker }
evalTexture3DProj(gls::ShaderEvalContext & c,const TexLookupParams & p)360*35238bceSAndroid Build Coastguard Worker static void evalTexture3DProj(gls::ShaderEvalContext &c, const TexLookupParams &p)
361*35238bceSAndroid Build Coastguard Worker {
362*35238bceSAndroid Build Coastguard Worker c.color =
363*35238bceSAndroid Build Coastguard Worker texture3D(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), c.in[0].z() / c.in[0].w(), p.lod) * p.scale +
364*35238bceSAndroid Build Coastguard Worker p.bias;
365*35238bceSAndroid Build Coastguard Worker }
evalTexture3DProjBias(gls::ShaderEvalContext & c,const TexLookupParams & p)366*35238bceSAndroid Build Coastguard Worker static void evalTexture3DProjBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
367*35238bceSAndroid Build Coastguard Worker {
368*35238bceSAndroid Build Coastguard Worker c.color = texture3D(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), c.in[0].z() / c.in[0].w(),
369*35238bceSAndroid Build Coastguard Worker p.lod + c.in[1].x()) *
370*35238bceSAndroid Build Coastguard Worker p.scale +
371*35238bceSAndroid Build Coastguard Worker p.bias;
372*35238bceSAndroid Build Coastguard Worker }
373*35238bceSAndroid Build Coastguard Worker
evalTexture2DLod(gls::ShaderEvalContext & c,const TexLookupParams & p)374*35238bceSAndroid Build Coastguard Worker static void evalTexture2DLod(gls::ShaderEvalContext &c, const TexLookupParams &p)
375*35238bceSAndroid Build Coastguard Worker {
376*35238bceSAndroid Build Coastguard Worker c.color = texture2D(c, c.in[0].x(), c.in[0].y(), c.in[1].x()) * p.scale + p.bias;
377*35238bceSAndroid Build Coastguard Worker }
evalTextureCubeLod(gls::ShaderEvalContext & c,const TexLookupParams & p)378*35238bceSAndroid Build Coastguard Worker static void evalTextureCubeLod(gls::ShaderEvalContext &c, const TexLookupParams &p)
379*35238bceSAndroid Build Coastguard Worker {
380*35238bceSAndroid Build Coastguard Worker c.color = textureCube(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[1].x()) * p.scale + p.bias;
381*35238bceSAndroid Build Coastguard Worker }
evalTexture2DArrayLod(gls::ShaderEvalContext & c,const TexLookupParams & p)382*35238bceSAndroid Build Coastguard Worker static void evalTexture2DArrayLod(gls::ShaderEvalContext &c, const TexLookupParams &p)
383*35238bceSAndroid Build Coastguard Worker {
384*35238bceSAndroid Build Coastguard Worker c.color = texture2DArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[1].x()) * p.scale + p.bias;
385*35238bceSAndroid Build Coastguard Worker }
evalTexture3DLod(gls::ShaderEvalContext & c,const TexLookupParams & p)386*35238bceSAndroid Build Coastguard Worker static void evalTexture3DLod(gls::ShaderEvalContext &c, const TexLookupParams &p)
387*35238bceSAndroid Build Coastguard Worker {
388*35238bceSAndroid Build Coastguard Worker c.color = texture3D(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[1].x()) * p.scale + p.bias;
389*35238bceSAndroid Build Coastguard Worker }
390*35238bceSAndroid Build Coastguard Worker
evalTexture2DProjLod3(gls::ShaderEvalContext & c,const TexLookupParams & p)391*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProjLod3(gls::ShaderEvalContext &c, const TexLookupParams &p)
392*35238bceSAndroid Build Coastguard Worker {
393*35238bceSAndroid Build Coastguard Worker c.color = texture2D(c, c.in[0].x() / c.in[0].z(), c.in[0].y() / c.in[0].z(), c.in[1].x()) * p.scale + p.bias;
394*35238bceSAndroid Build Coastguard Worker }
evalTexture2DProjLod(gls::ShaderEvalContext & c,const TexLookupParams & p)395*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProjLod(gls::ShaderEvalContext &c, const TexLookupParams &p)
396*35238bceSAndroid Build Coastguard Worker {
397*35238bceSAndroid Build Coastguard Worker c.color = texture2D(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), c.in[1].x()) * p.scale + p.bias;
398*35238bceSAndroid Build Coastguard Worker }
evalTexture3DProjLod(gls::ShaderEvalContext & c,const TexLookupParams & p)399*35238bceSAndroid Build Coastguard Worker static void evalTexture3DProjLod(gls::ShaderEvalContext &c, const TexLookupParams &p)
400*35238bceSAndroid Build Coastguard Worker {
401*35238bceSAndroid Build Coastguard Worker c.color =
402*35238bceSAndroid Build Coastguard Worker texture3D(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), c.in[0].z() / c.in[0].w(), c.in[1].x()) *
403*35238bceSAndroid Build Coastguard Worker p.scale +
404*35238bceSAndroid Build Coastguard Worker p.bias;
405*35238bceSAndroid Build Coastguard Worker }
406*35238bceSAndroid Build Coastguard Worker
407*35238bceSAndroid Build Coastguard Worker // Offset variants
408*35238bceSAndroid Build Coastguard Worker
evalTexture2DOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)409*35238bceSAndroid Build Coastguard Worker static void evalTexture2DOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
410*35238bceSAndroid Build Coastguard Worker {
411*35238bceSAndroid Build Coastguard Worker c.color = texture2DOffset(c, c.in[0].x(), c.in[0].y(), p.lod, p.offset.swizzle(0, 1)) * p.scale + p.bias;
412*35238bceSAndroid Build Coastguard Worker }
evalTexture2DArrayOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)413*35238bceSAndroid Build Coastguard Worker static void evalTexture2DArrayOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
414*35238bceSAndroid Build Coastguard Worker {
415*35238bceSAndroid Build Coastguard Worker c.color = texture2DArrayOffset(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod, p.offset.swizzle(0, 1)) * p.scale +
416*35238bceSAndroid Build Coastguard Worker p.bias;
417*35238bceSAndroid Build Coastguard Worker }
evalTexture3DOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)418*35238bceSAndroid Build Coastguard Worker static void evalTexture3DOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
419*35238bceSAndroid Build Coastguard Worker {
420*35238bceSAndroid Build Coastguard Worker c.color = texture3DOffset(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod, p.offset) * p.scale + p.bias;
421*35238bceSAndroid Build Coastguard Worker }
422*35238bceSAndroid Build Coastguard Worker
evalTexture2DOffsetBias(gls::ShaderEvalContext & c,const TexLookupParams & p)423*35238bceSAndroid Build Coastguard Worker static void evalTexture2DOffsetBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
424*35238bceSAndroid Build Coastguard Worker {
425*35238bceSAndroid Build Coastguard Worker c.color =
426*35238bceSAndroid Build Coastguard Worker texture2DOffset(c, c.in[0].x(), c.in[0].y(), p.lod + c.in[1].x(), p.offset.swizzle(0, 1)) * p.scale + p.bias;
427*35238bceSAndroid Build Coastguard Worker }
evalTexture2DArrayOffsetBias(gls::ShaderEvalContext & c,const TexLookupParams & p)428*35238bceSAndroid Build Coastguard Worker static void evalTexture2DArrayOffsetBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
429*35238bceSAndroid Build Coastguard Worker {
430*35238bceSAndroid Build Coastguard Worker c.color =
431*35238bceSAndroid Build Coastguard Worker texture2DArrayOffset(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod + c.in[1].x(), p.offset.swizzle(0, 1)) *
432*35238bceSAndroid Build Coastguard Worker p.scale +
433*35238bceSAndroid Build Coastguard Worker p.bias;
434*35238bceSAndroid Build Coastguard Worker }
evalTexture3DOffsetBias(gls::ShaderEvalContext & c,const TexLookupParams & p)435*35238bceSAndroid Build Coastguard Worker static void evalTexture3DOffsetBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
436*35238bceSAndroid Build Coastguard Worker {
437*35238bceSAndroid Build Coastguard Worker c.color =
438*35238bceSAndroid Build Coastguard Worker texture3DOffset(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod + c.in[1].x(), p.offset) * p.scale + p.bias;
439*35238bceSAndroid Build Coastguard Worker }
440*35238bceSAndroid Build Coastguard Worker
evalTexture2DLodOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)441*35238bceSAndroid Build Coastguard Worker static void evalTexture2DLodOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
442*35238bceSAndroid Build Coastguard Worker {
443*35238bceSAndroid Build Coastguard Worker c.color = texture2DOffset(c, c.in[0].x(), c.in[0].y(), c.in[1].x(), p.offset.swizzle(0, 1)) * p.scale + p.bias;
444*35238bceSAndroid Build Coastguard Worker }
evalTexture2DArrayLodOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)445*35238bceSAndroid Build Coastguard Worker static void evalTexture2DArrayLodOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
446*35238bceSAndroid Build Coastguard Worker {
447*35238bceSAndroid Build Coastguard Worker c.color =
448*35238bceSAndroid Build Coastguard Worker texture2DArrayOffset(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[1].x(), p.offset.swizzle(0, 1)) * p.scale +
449*35238bceSAndroid Build Coastguard Worker p.bias;
450*35238bceSAndroid Build Coastguard Worker }
evalTexture3DLodOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)451*35238bceSAndroid Build Coastguard Worker static void evalTexture3DLodOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
452*35238bceSAndroid Build Coastguard Worker {
453*35238bceSAndroid Build Coastguard Worker c.color = texture3DOffset(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), c.in[1].x(), p.offset) * p.scale + p.bias;
454*35238bceSAndroid Build Coastguard Worker }
455*35238bceSAndroid Build Coastguard Worker
evalTexture2DProj3Offset(gls::ShaderEvalContext & c,const TexLookupParams & p)456*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProj3Offset(gls::ShaderEvalContext &c, const TexLookupParams &p)
457*35238bceSAndroid Build Coastguard Worker {
458*35238bceSAndroid Build Coastguard Worker c.color = texture2DOffset(c, c.in[0].x() / c.in[0].z(), c.in[0].y() / c.in[0].z(), p.lod, p.offset.swizzle(0, 1)) *
459*35238bceSAndroid Build Coastguard Worker p.scale +
460*35238bceSAndroid Build Coastguard Worker p.bias;
461*35238bceSAndroid Build Coastguard Worker }
evalTexture2DProj3OffsetBias(gls::ShaderEvalContext & c,const TexLookupParams & p)462*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProj3OffsetBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
463*35238bceSAndroid Build Coastguard Worker {
464*35238bceSAndroid Build Coastguard Worker c.color = texture2DOffset(c, c.in[0].x() / c.in[0].z(), c.in[0].y() / c.in[0].z(), p.lod + c.in[1].x(),
465*35238bceSAndroid Build Coastguard Worker p.offset.swizzle(0, 1)) *
466*35238bceSAndroid Build Coastguard Worker p.scale +
467*35238bceSAndroid Build Coastguard Worker p.bias;
468*35238bceSAndroid Build Coastguard Worker }
evalTexture2DProjOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)469*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProjOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
470*35238bceSAndroid Build Coastguard Worker {
471*35238bceSAndroid Build Coastguard Worker c.color = texture2DOffset(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), p.lod, p.offset.swizzle(0, 1)) *
472*35238bceSAndroid Build Coastguard Worker p.scale +
473*35238bceSAndroid Build Coastguard Worker p.bias;
474*35238bceSAndroid Build Coastguard Worker }
evalTexture2DProjOffsetBias(gls::ShaderEvalContext & c,const TexLookupParams & p)475*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProjOffsetBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
476*35238bceSAndroid Build Coastguard Worker {
477*35238bceSAndroid Build Coastguard Worker c.color = texture2DOffset(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), p.lod + c.in[1].x(),
478*35238bceSAndroid Build Coastguard Worker p.offset.swizzle(0, 1)) *
479*35238bceSAndroid Build Coastguard Worker p.scale +
480*35238bceSAndroid Build Coastguard Worker p.bias;
481*35238bceSAndroid Build Coastguard Worker }
evalTexture3DProjOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)482*35238bceSAndroid Build Coastguard Worker static void evalTexture3DProjOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
483*35238bceSAndroid Build Coastguard Worker {
484*35238bceSAndroid Build Coastguard Worker c.color = texture3DOffset(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), c.in[0].z() / c.in[0].w(), p.lod,
485*35238bceSAndroid Build Coastguard Worker p.offset) *
486*35238bceSAndroid Build Coastguard Worker p.scale +
487*35238bceSAndroid Build Coastguard Worker p.bias;
488*35238bceSAndroid Build Coastguard Worker }
evalTexture3DProjOffsetBias(gls::ShaderEvalContext & c,const TexLookupParams & p)489*35238bceSAndroid Build Coastguard Worker static void evalTexture3DProjOffsetBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
490*35238bceSAndroid Build Coastguard Worker {
491*35238bceSAndroid Build Coastguard Worker c.color = texture3DOffset(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), c.in[0].z() / c.in[0].w(),
492*35238bceSAndroid Build Coastguard Worker p.lod + c.in[1].x(), p.offset) *
493*35238bceSAndroid Build Coastguard Worker p.scale +
494*35238bceSAndroid Build Coastguard Worker p.bias;
495*35238bceSAndroid Build Coastguard Worker }
496*35238bceSAndroid Build Coastguard Worker
evalTexture2DProjLod3Offset(gls::ShaderEvalContext & c,const TexLookupParams & p)497*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProjLod3Offset(gls::ShaderEvalContext &c, const TexLookupParams &p)
498*35238bceSAndroid Build Coastguard Worker {
499*35238bceSAndroid Build Coastguard Worker c.color =
500*35238bceSAndroid Build Coastguard Worker texture2DOffset(c, c.in[0].x() / c.in[0].z(), c.in[0].y() / c.in[0].z(), c.in[1].x(), p.offset.swizzle(0, 1)) *
501*35238bceSAndroid Build Coastguard Worker p.scale +
502*35238bceSAndroid Build Coastguard Worker p.bias;
503*35238bceSAndroid Build Coastguard Worker }
evalTexture2DProjLodOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)504*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProjLodOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
505*35238bceSAndroid Build Coastguard Worker {
506*35238bceSAndroid Build Coastguard Worker c.color =
507*35238bceSAndroid Build Coastguard Worker texture2DOffset(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), c.in[1].x(), p.offset.swizzle(0, 1)) *
508*35238bceSAndroid Build Coastguard Worker p.scale +
509*35238bceSAndroid Build Coastguard Worker p.bias;
510*35238bceSAndroid Build Coastguard Worker }
evalTexture3DProjLodOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)511*35238bceSAndroid Build Coastguard Worker static void evalTexture3DProjLodOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
512*35238bceSAndroid Build Coastguard Worker {
513*35238bceSAndroid Build Coastguard Worker c.color = texture3DOffset(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), c.in[0].z() / c.in[0].w(),
514*35238bceSAndroid Build Coastguard Worker c.in[1].x(), p.offset) *
515*35238bceSAndroid Build Coastguard Worker p.scale +
516*35238bceSAndroid Build Coastguard Worker p.bias;
517*35238bceSAndroid Build Coastguard Worker }
518*35238bceSAndroid Build Coastguard Worker
519*35238bceSAndroid Build Coastguard Worker // Shadow variants
520*35238bceSAndroid Build Coastguard Worker
evalTexture2DShadow(gls::ShaderEvalContext & c,const TexLookupParams & p)521*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadow(gls::ShaderEvalContext &c, const TexLookupParams &p)
522*35238bceSAndroid Build Coastguard Worker {
523*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadow(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), p.lod);
524*35238bceSAndroid Build Coastguard Worker }
evalTexture2DShadowBias(gls::ShaderEvalContext & c,const TexLookupParams & p)525*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
526*35238bceSAndroid Build Coastguard Worker {
527*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadow(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), p.lod + c.in[1].x());
528*35238bceSAndroid Build Coastguard Worker }
529*35238bceSAndroid Build Coastguard Worker
evalTextureCubeShadow(gls::ShaderEvalContext & c,const TexLookupParams & p)530*35238bceSAndroid Build Coastguard Worker static void evalTextureCubeShadow(gls::ShaderEvalContext &c, const TexLookupParams &p)
531*35238bceSAndroid Build Coastguard Worker {
532*35238bceSAndroid Build Coastguard Worker c.color.x() = textureCubeShadow(c, c.in[0].w(), c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod);
533*35238bceSAndroid Build Coastguard Worker }
evalTextureCubeShadowBias(gls::ShaderEvalContext & c,const TexLookupParams & p)534*35238bceSAndroid Build Coastguard Worker static void evalTextureCubeShadowBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
535*35238bceSAndroid Build Coastguard Worker {
536*35238bceSAndroid Build Coastguard Worker c.color.x() = textureCubeShadow(c, c.in[0].w(), c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod + c.in[1].x());
537*35238bceSAndroid Build Coastguard Worker }
538*35238bceSAndroid Build Coastguard Worker
evalTexture2DArrayShadow(gls::ShaderEvalContext & c,const TexLookupParams & p)539*35238bceSAndroid Build Coastguard Worker static void evalTexture2DArrayShadow(gls::ShaderEvalContext &c, const TexLookupParams &p)
540*35238bceSAndroid Build Coastguard Worker {
541*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DArrayShadow(c, c.in[0].w(), c.in[0].x(), c.in[0].y(), c.in[0].z(), p.lod);
542*35238bceSAndroid Build Coastguard Worker }
543*35238bceSAndroid Build Coastguard Worker
evalTexture2DShadowLod(gls::ShaderEvalContext & c,const TexLookupParams &)544*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowLod(gls::ShaderEvalContext &c, const TexLookupParams &)
545*35238bceSAndroid Build Coastguard Worker {
546*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadow(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), c.in[1].x());
547*35238bceSAndroid Build Coastguard Worker }
evalTexture2DShadowLodOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)548*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowLodOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
549*35238bceSAndroid Build Coastguard Worker {
550*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadowOffset(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), c.in[1].x(), p.offset.swizzle(0, 1));
551*35238bceSAndroid Build Coastguard Worker }
552*35238bceSAndroid Build Coastguard Worker
evalTexture2DShadowProj(gls::ShaderEvalContext & c,const TexLookupParams & p)553*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowProj(gls::ShaderEvalContext &c, const TexLookupParams &p)
554*35238bceSAndroid Build Coastguard Worker {
555*35238bceSAndroid Build Coastguard Worker c.color.x() =
556*35238bceSAndroid Build Coastguard Worker texture2DShadow(c, c.in[0].z() / c.in[0].w(), c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), p.lod);
557*35238bceSAndroid Build Coastguard Worker }
evalTexture2DShadowProjBias(gls::ShaderEvalContext & c,const TexLookupParams & p)558*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowProjBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
559*35238bceSAndroid Build Coastguard Worker {
560*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadow(c, c.in[0].z() / c.in[0].w(), c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(),
561*35238bceSAndroid Build Coastguard Worker p.lod + c.in[1].x());
562*35238bceSAndroid Build Coastguard Worker }
563*35238bceSAndroid Build Coastguard Worker
evalTexture2DShadowProjLod(gls::ShaderEvalContext & c,const TexLookupParams &)564*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowProjLod(gls::ShaderEvalContext &c, const TexLookupParams &)
565*35238bceSAndroid Build Coastguard Worker {
566*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadow(c, c.in[0].z() / c.in[0].w(), c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(),
567*35238bceSAndroid Build Coastguard Worker c.in[1].x());
568*35238bceSAndroid Build Coastguard Worker }
evalTexture2DShadowProjLodOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)569*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowProjLodOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
570*35238bceSAndroid Build Coastguard Worker {
571*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadowOffset(c, c.in[0].z() / c.in[0].w(), c.in[0].x() / c.in[0].w(),
572*35238bceSAndroid Build Coastguard Worker c.in[0].y() / c.in[0].w(), c.in[1].x(), p.offset.swizzle(0, 1));
573*35238bceSAndroid Build Coastguard Worker }
574*35238bceSAndroid Build Coastguard Worker
evalTexture2DShadowOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)575*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
576*35238bceSAndroid Build Coastguard Worker {
577*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadowOffset(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), p.lod, p.offset.swizzle(0, 1));
578*35238bceSAndroid Build Coastguard Worker }
evalTexture2DShadowOffsetBias(gls::ShaderEvalContext & c,const TexLookupParams & p)579*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowOffsetBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
580*35238bceSAndroid Build Coastguard Worker {
581*35238bceSAndroid Build Coastguard Worker c.color.x() =
582*35238bceSAndroid Build Coastguard Worker texture2DShadowOffset(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), p.lod + c.in[1].x(), p.offset.swizzle(0, 1));
583*35238bceSAndroid Build Coastguard Worker }
584*35238bceSAndroid Build Coastguard Worker
evalTexture2DShadowProjOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)585*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowProjOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
586*35238bceSAndroid Build Coastguard Worker {
587*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadowOffset(c, c.in[0].z() / c.in[0].w(), c.in[0].x() / c.in[0].w(),
588*35238bceSAndroid Build Coastguard Worker c.in[0].y() / c.in[0].w(), p.lod, p.offset.swizzle(0, 1));
589*35238bceSAndroid Build Coastguard Worker }
evalTexture2DShadowProjOffsetBias(gls::ShaderEvalContext & c,const TexLookupParams & p)590*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowProjOffsetBias(gls::ShaderEvalContext &c, const TexLookupParams &p)
591*35238bceSAndroid Build Coastguard Worker {
592*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadowOffset(c, c.in[0].z() / c.in[0].w(), c.in[0].x() / c.in[0].w(),
593*35238bceSAndroid Build Coastguard Worker c.in[0].y() / c.in[0].w(), p.lod + c.in[1].x(), p.offset.swizzle(0, 1));
594*35238bceSAndroid Build Coastguard Worker }
595*35238bceSAndroid Build Coastguard Worker
596*35238bceSAndroid Build Coastguard Worker // Gradient variarts
597*35238bceSAndroid Build Coastguard Worker
evalTexture2DGrad(gls::ShaderEvalContext & c,const TexLookupParams & p)598*35238bceSAndroid Build Coastguard Worker static void evalTexture2DGrad(gls::ShaderEvalContext &c, const TexLookupParams &p)
599*35238bceSAndroid Build Coastguard Worker {
600*35238bceSAndroid Build Coastguard Worker c.color = texture2D(c, c.in[0].x(), c.in[0].y(), computeLodFromGrad2D(c)) * p.scale + p.bias;
601*35238bceSAndroid Build Coastguard Worker }
evalTextureCubeGrad(gls::ShaderEvalContext & c,const TexLookupParams & p)602*35238bceSAndroid Build Coastguard Worker static void evalTextureCubeGrad(gls::ShaderEvalContext &c, const TexLookupParams &p)
603*35238bceSAndroid Build Coastguard Worker {
604*35238bceSAndroid Build Coastguard Worker c.color = textureCube(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), computeLodFromGradCube(c)) * p.scale + p.bias;
605*35238bceSAndroid Build Coastguard Worker }
evalTexture2DArrayGrad(gls::ShaderEvalContext & c,const TexLookupParams & p)606*35238bceSAndroid Build Coastguard Worker static void evalTexture2DArrayGrad(gls::ShaderEvalContext &c, const TexLookupParams &p)
607*35238bceSAndroid Build Coastguard Worker {
608*35238bceSAndroid Build Coastguard Worker c.color = texture2DArray(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), computeLodFromGrad2DArray(c)) * p.scale + p.bias;
609*35238bceSAndroid Build Coastguard Worker }
evalTexture3DGrad(gls::ShaderEvalContext & c,const TexLookupParams & p)610*35238bceSAndroid Build Coastguard Worker static void evalTexture3DGrad(gls::ShaderEvalContext &c, const TexLookupParams &p)
611*35238bceSAndroid Build Coastguard Worker {
612*35238bceSAndroid Build Coastguard Worker c.color = texture3D(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), computeLodFromGrad3D(c)) * p.scale + p.bias;
613*35238bceSAndroid Build Coastguard Worker }
614*35238bceSAndroid Build Coastguard Worker
evalTexture2DShadowGrad(gls::ShaderEvalContext & c,const TexLookupParams &)615*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowGrad(gls::ShaderEvalContext &c, const TexLookupParams &)
616*35238bceSAndroid Build Coastguard Worker {
617*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadow(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), computeLodFromGrad2D(c));
618*35238bceSAndroid Build Coastguard Worker }
evalTextureCubeShadowGrad(gls::ShaderEvalContext & c,const TexLookupParams &)619*35238bceSAndroid Build Coastguard Worker static void evalTextureCubeShadowGrad(gls::ShaderEvalContext &c, const TexLookupParams &)
620*35238bceSAndroid Build Coastguard Worker {
621*35238bceSAndroid Build Coastguard Worker c.color.x() = textureCubeShadow(c, c.in[0].w(), c.in[0].x(), c.in[0].y(), c.in[0].z(), computeLodFromGradCube(c));
622*35238bceSAndroid Build Coastguard Worker }
evalTexture2DArrayShadowGrad(gls::ShaderEvalContext & c,const TexLookupParams &)623*35238bceSAndroid Build Coastguard Worker static void evalTexture2DArrayShadowGrad(gls::ShaderEvalContext &c, const TexLookupParams &)
624*35238bceSAndroid Build Coastguard Worker {
625*35238bceSAndroid Build Coastguard Worker c.color.x() =
626*35238bceSAndroid Build Coastguard Worker texture2DArrayShadow(c, c.in[0].w(), c.in[0].x(), c.in[0].y(), c.in[0].z(), computeLodFromGrad2DArray(c));
627*35238bceSAndroid Build Coastguard Worker }
628*35238bceSAndroid Build Coastguard Worker
evalTexture2DGradOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)629*35238bceSAndroid Build Coastguard Worker static void evalTexture2DGradOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
630*35238bceSAndroid Build Coastguard Worker {
631*35238bceSAndroid Build Coastguard Worker c.color = texture2DOffset(c, c.in[0].x(), c.in[0].y(), computeLodFromGrad2D(c), p.offset.swizzle(0, 1)) * p.scale +
632*35238bceSAndroid Build Coastguard Worker p.bias;
633*35238bceSAndroid Build Coastguard Worker }
evalTexture2DArrayGradOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)634*35238bceSAndroid Build Coastguard Worker static void evalTexture2DArrayGradOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
635*35238bceSAndroid Build Coastguard Worker {
636*35238bceSAndroid Build Coastguard Worker c.color = texture2DArrayOffset(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), computeLodFromGrad2DArray(c),
637*35238bceSAndroid Build Coastguard Worker p.offset.swizzle(0, 1)) *
638*35238bceSAndroid Build Coastguard Worker p.scale +
639*35238bceSAndroid Build Coastguard Worker p.bias;
640*35238bceSAndroid Build Coastguard Worker }
evalTexture3DGradOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)641*35238bceSAndroid Build Coastguard Worker static void evalTexture3DGradOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
642*35238bceSAndroid Build Coastguard Worker {
643*35238bceSAndroid Build Coastguard Worker c.color =
644*35238bceSAndroid Build Coastguard Worker texture3DOffset(c, c.in[0].x(), c.in[0].y(), c.in[0].z(), computeLodFromGrad3D(c), p.offset) * p.scale + p.bias;
645*35238bceSAndroid Build Coastguard Worker }
646*35238bceSAndroid Build Coastguard Worker
evalTexture2DShadowGradOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)647*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowGradOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
648*35238bceSAndroid Build Coastguard Worker {
649*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadowOffset(c, c.in[0].z(), c.in[0].x(), c.in[0].y(), computeLodFromGrad2D(c),
650*35238bceSAndroid Build Coastguard Worker p.offset.swizzle(0, 1));
651*35238bceSAndroid Build Coastguard Worker }
evalTexture2DArrayShadowGradOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)652*35238bceSAndroid Build Coastguard Worker static void evalTexture2DArrayShadowGradOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
653*35238bceSAndroid Build Coastguard Worker {
654*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DArrayShadowOffset(c, c.in[0].w(), c.in[0].x(), c.in[0].y(), c.in[0].z(),
655*35238bceSAndroid Build Coastguard Worker computeLodFromGrad2DArray(c), p.offset.swizzle(0, 1));
656*35238bceSAndroid Build Coastguard Worker }
657*35238bceSAndroid Build Coastguard Worker
evalTexture2DShadowProjGrad(gls::ShaderEvalContext & c,const TexLookupParams &)658*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowProjGrad(gls::ShaderEvalContext &c, const TexLookupParams &)
659*35238bceSAndroid Build Coastguard Worker {
660*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadow(c, c.in[0].z() / c.in[0].w(), c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(),
661*35238bceSAndroid Build Coastguard Worker computeLodFromGrad2D(c));
662*35238bceSAndroid Build Coastguard Worker }
evalTexture2DShadowProjGradOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)663*35238bceSAndroid Build Coastguard Worker static void evalTexture2DShadowProjGradOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
664*35238bceSAndroid Build Coastguard Worker {
665*35238bceSAndroid Build Coastguard Worker c.color.x() = texture2DShadowOffset(c, c.in[0].z() / c.in[0].w(), c.in[0].x() / c.in[0].w(),
666*35238bceSAndroid Build Coastguard Worker c.in[0].y() / c.in[0].w(), computeLodFromGrad2D(c), p.offset.swizzle(0, 1));
667*35238bceSAndroid Build Coastguard Worker }
668*35238bceSAndroid Build Coastguard Worker
evalTexture2DProjGrad3(gls::ShaderEvalContext & c,const TexLookupParams & p)669*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProjGrad3(gls::ShaderEvalContext &c, const TexLookupParams &p)
670*35238bceSAndroid Build Coastguard Worker {
671*35238bceSAndroid Build Coastguard Worker c.color =
672*35238bceSAndroid Build Coastguard Worker texture2D(c, c.in[0].x() / c.in[0].z(), c.in[0].y() / c.in[0].z(), computeLodFromGrad2D(c)) * p.scale + p.bias;
673*35238bceSAndroid Build Coastguard Worker }
evalTexture2DProjGrad(gls::ShaderEvalContext & c,const TexLookupParams & p)674*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProjGrad(gls::ShaderEvalContext &c, const TexLookupParams &p)
675*35238bceSAndroid Build Coastguard Worker {
676*35238bceSAndroid Build Coastguard Worker c.color =
677*35238bceSAndroid Build Coastguard Worker texture2D(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), computeLodFromGrad2D(c)) * p.scale + p.bias;
678*35238bceSAndroid Build Coastguard Worker }
evalTexture3DProjGrad(gls::ShaderEvalContext & c,const TexLookupParams & p)679*35238bceSAndroid Build Coastguard Worker static void evalTexture3DProjGrad(gls::ShaderEvalContext &c, const TexLookupParams &p)
680*35238bceSAndroid Build Coastguard Worker {
681*35238bceSAndroid Build Coastguard Worker c.color = texture3D(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), c.in[0].z() / c.in[0].w(),
682*35238bceSAndroid Build Coastguard Worker computeLodFromGrad3D(c)) *
683*35238bceSAndroid Build Coastguard Worker p.scale +
684*35238bceSAndroid Build Coastguard Worker p.bias;
685*35238bceSAndroid Build Coastguard Worker }
686*35238bceSAndroid Build Coastguard Worker
evalTexture2DProjGrad3Offset(gls::ShaderEvalContext & c,const TexLookupParams & p)687*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProjGrad3Offset(gls::ShaderEvalContext &c, const TexLookupParams &p)
688*35238bceSAndroid Build Coastguard Worker {
689*35238bceSAndroid Build Coastguard Worker c.color = texture2DOffset(c, c.in[0].x() / c.in[0].z(), c.in[0].y() / c.in[0].z(), computeLodFromGrad2D(c),
690*35238bceSAndroid Build Coastguard Worker p.offset.swizzle(0, 1)) *
691*35238bceSAndroid Build Coastguard Worker p.scale +
692*35238bceSAndroid Build Coastguard Worker p.bias;
693*35238bceSAndroid Build Coastguard Worker }
evalTexture2DProjGradOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)694*35238bceSAndroid Build Coastguard Worker static void evalTexture2DProjGradOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
695*35238bceSAndroid Build Coastguard Worker {
696*35238bceSAndroid Build Coastguard Worker c.color = texture2DOffset(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), computeLodFromGrad2D(c),
697*35238bceSAndroid Build Coastguard Worker p.offset.swizzle(0, 1)) *
698*35238bceSAndroid Build Coastguard Worker p.scale +
699*35238bceSAndroid Build Coastguard Worker p.bias;
700*35238bceSAndroid Build Coastguard Worker }
evalTexture3DProjGradOffset(gls::ShaderEvalContext & c,const TexLookupParams & p)701*35238bceSAndroid Build Coastguard Worker static void evalTexture3DProjGradOffset(gls::ShaderEvalContext &c, const TexLookupParams &p)
702*35238bceSAndroid Build Coastguard Worker {
703*35238bceSAndroid Build Coastguard Worker c.color = texture3DOffset(c, c.in[0].x() / c.in[0].w(), c.in[0].y() / c.in[0].w(), c.in[0].z() / c.in[0].w(),
704*35238bceSAndroid Build Coastguard Worker computeLodFromGrad3D(c), p.offset) *
705*35238bceSAndroid Build Coastguard Worker p.scale +
706*35238bceSAndroid Build Coastguard Worker p.bias;
707*35238bceSAndroid Build Coastguard Worker }
708*35238bceSAndroid Build Coastguard Worker
709*35238bceSAndroid Build Coastguard Worker // Texel fetch variants
710*35238bceSAndroid Build Coastguard Worker
evalTexelFetch2D(gls::ShaderEvalContext & c,const TexLookupParams & p)711*35238bceSAndroid Build Coastguard Worker static void evalTexelFetch2D(gls::ShaderEvalContext &c, const TexLookupParams &p)
712*35238bceSAndroid Build Coastguard Worker {
713*35238bceSAndroid Build Coastguard Worker int x = deChopFloatToInt32(c.in[0].x()) + p.offset.x();
714*35238bceSAndroid Build Coastguard Worker int y = deChopFloatToInt32(c.in[0].y()) + p.offset.y();
715*35238bceSAndroid Build Coastguard Worker int lod = deChopFloatToInt32(c.in[1].x());
716*35238bceSAndroid Build Coastguard Worker c.color = c.textures[0].tex2D->getLevel(lod).getPixel(x, y) * p.scale + p.bias;
717*35238bceSAndroid Build Coastguard Worker }
718*35238bceSAndroid Build Coastguard Worker
evalTexelFetch2DArray(gls::ShaderEvalContext & c,const TexLookupParams & p)719*35238bceSAndroid Build Coastguard Worker static void evalTexelFetch2DArray(gls::ShaderEvalContext &c, const TexLookupParams &p)
720*35238bceSAndroid Build Coastguard Worker {
721*35238bceSAndroid Build Coastguard Worker int x = deChopFloatToInt32(c.in[0].x()) + p.offset.x();
722*35238bceSAndroid Build Coastguard Worker int y = deChopFloatToInt32(c.in[0].y()) + p.offset.y();
723*35238bceSAndroid Build Coastguard Worker int l = deChopFloatToInt32(c.in[0].z());
724*35238bceSAndroid Build Coastguard Worker int lod = deChopFloatToInt32(c.in[1].x());
725*35238bceSAndroid Build Coastguard Worker c.color = c.textures[0].tex2DArray->getLevel(lod).getPixel(x, y, l) * p.scale + p.bias;
726*35238bceSAndroid Build Coastguard Worker }
727*35238bceSAndroid Build Coastguard Worker
evalTexelFetch3D(gls::ShaderEvalContext & c,const TexLookupParams & p)728*35238bceSAndroid Build Coastguard Worker static void evalTexelFetch3D(gls::ShaderEvalContext &c, const TexLookupParams &p)
729*35238bceSAndroid Build Coastguard Worker {
730*35238bceSAndroid Build Coastguard Worker int x = deChopFloatToInt32(c.in[0].x()) + p.offset.x();
731*35238bceSAndroid Build Coastguard Worker int y = deChopFloatToInt32(c.in[0].y()) + p.offset.y();
732*35238bceSAndroid Build Coastguard Worker int z = deChopFloatToInt32(c.in[0].z()) + p.offset.z();
733*35238bceSAndroid Build Coastguard Worker int lod = deChopFloatToInt32(c.in[1].x());
734*35238bceSAndroid Build Coastguard Worker c.color = c.textures[0].tex3D->getLevel(lod).getPixel(x, y, z) * p.scale + p.bias;
735*35238bceSAndroid Build Coastguard Worker }
736*35238bceSAndroid Build Coastguard Worker
737*35238bceSAndroid Build Coastguard Worker class TexLookupEvaluator : public gls::ShaderEvaluator
738*35238bceSAndroid Build Coastguard Worker {
739*35238bceSAndroid Build Coastguard Worker public:
TexLookupEvaluator(TexEvalFunc evalFunc,const TexLookupParams & lookupParams)740*35238bceSAndroid Build Coastguard Worker TexLookupEvaluator(TexEvalFunc evalFunc, const TexLookupParams &lookupParams)
741*35238bceSAndroid Build Coastguard Worker : m_evalFunc(evalFunc)
742*35238bceSAndroid Build Coastguard Worker , m_lookupParams(lookupParams)
743*35238bceSAndroid Build Coastguard Worker {
744*35238bceSAndroid Build Coastguard Worker }
745*35238bceSAndroid Build Coastguard Worker
evaluate(gls::ShaderEvalContext & ctx)746*35238bceSAndroid Build Coastguard Worker virtual void evaluate(gls::ShaderEvalContext &ctx)
747*35238bceSAndroid Build Coastguard Worker {
748*35238bceSAndroid Build Coastguard Worker m_evalFunc(ctx, m_lookupParams);
749*35238bceSAndroid Build Coastguard Worker }
750*35238bceSAndroid Build Coastguard Worker
751*35238bceSAndroid Build Coastguard Worker private:
752*35238bceSAndroid Build Coastguard Worker TexEvalFunc m_evalFunc;
753*35238bceSAndroid Build Coastguard Worker const TexLookupParams &m_lookupParams;
754*35238bceSAndroid Build Coastguard Worker };
755*35238bceSAndroid Build Coastguard Worker
756*35238bceSAndroid Build Coastguard Worker class ShaderTextureFunctionCase : public gls::ShaderRenderCase
757*35238bceSAndroid Build Coastguard Worker {
758*35238bceSAndroid Build Coastguard Worker public:
759*35238bceSAndroid Build Coastguard Worker ShaderTextureFunctionCase(Context &context, const char *name, const char *desc, const TextureLookupSpec &lookup,
760*35238bceSAndroid Build Coastguard Worker const TextureSpec &texture, TexEvalFunc evalFunc, bool isVertexCase);
761*35238bceSAndroid Build Coastguard Worker ~ShaderTextureFunctionCase(void);
762*35238bceSAndroid Build Coastguard Worker
763*35238bceSAndroid Build Coastguard Worker void init(void);
764*35238bceSAndroid Build Coastguard Worker void deinit(void);
765*35238bceSAndroid Build Coastguard Worker
766*35238bceSAndroid Build Coastguard Worker protected:
767*35238bceSAndroid Build Coastguard Worker void setupUniforms(int programID, const tcu::Vec4 &constCoords);
768*35238bceSAndroid Build Coastguard Worker
769*35238bceSAndroid Build Coastguard Worker private:
770*35238bceSAndroid Build Coastguard Worker void initTexture(void);
771*35238bceSAndroid Build Coastguard Worker void initShaderSources(void);
772*35238bceSAndroid Build Coastguard Worker
773*35238bceSAndroid Build Coastguard Worker TextureLookupSpec m_lookupSpec;
774*35238bceSAndroid Build Coastguard Worker TextureSpec m_textureSpec;
775*35238bceSAndroid Build Coastguard Worker
776*35238bceSAndroid Build Coastguard Worker TexLookupParams m_lookupParams;
777*35238bceSAndroid Build Coastguard Worker TexLookupEvaluator m_evaluator;
778*35238bceSAndroid Build Coastguard Worker
779*35238bceSAndroid Build Coastguard Worker glu::Texture2D *m_texture2D;
780*35238bceSAndroid Build Coastguard Worker glu::TextureCube *m_textureCube;
781*35238bceSAndroid Build Coastguard Worker glu::Texture2DArray *m_texture2DArray;
782*35238bceSAndroid Build Coastguard Worker glu::Texture3D *m_texture3D;
783*35238bceSAndroid Build Coastguard Worker };
784*35238bceSAndroid Build Coastguard Worker
ShaderTextureFunctionCase(Context & context,const char * name,const char * desc,const TextureLookupSpec & lookup,const TextureSpec & texture,TexEvalFunc evalFunc,bool isVertexCase)785*35238bceSAndroid Build Coastguard Worker ShaderTextureFunctionCase::ShaderTextureFunctionCase(Context &context, const char *name, const char *desc,
786*35238bceSAndroid Build Coastguard Worker const TextureLookupSpec &lookup, const TextureSpec &texture,
787*35238bceSAndroid Build Coastguard Worker TexEvalFunc evalFunc, bool isVertexCase)
788*35238bceSAndroid Build Coastguard Worker : gls::ShaderRenderCase(context.getTestContext(), context.getRenderContext(), context.getContextInfo(), name, desc,
789*35238bceSAndroid Build Coastguard Worker isVertexCase, m_evaluator)
790*35238bceSAndroid Build Coastguard Worker , m_lookupSpec(lookup)
791*35238bceSAndroid Build Coastguard Worker , m_textureSpec(texture)
792*35238bceSAndroid Build Coastguard Worker , m_evaluator(evalFunc, m_lookupParams)
793*35238bceSAndroid Build Coastguard Worker , m_texture2D(DE_NULL)
794*35238bceSAndroid Build Coastguard Worker , m_textureCube(DE_NULL)
795*35238bceSAndroid Build Coastguard Worker , m_texture2DArray(DE_NULL)
796*35238bceSAndroid Build Coastguard Worker , m_texture3D(DE_NULL)
797*35238bceSAndroid Build Coastguard Worker {
798*35238bceSAndroid Build Coastguard Worker }
799*35238bceSAndroid Build Coastguard Worker
~ShaderTextureFunctionCase(void)800*35238bceSAndroid Build Coastguard Worker ShaderTextureFunctionCase::~ShaderTextureFunctionCase(void)
801*35238bceSAndroid Build Coastguard Worker {
802*35238bceSAndroid Build Coastguard Worker delete m_texture2D;
803*35238bceSAndroid Build Coastguard Worker delete m_textureCube;
804*35238bceSAndroid Build Coastguard Worker delete m_texture2DArray;
805*35238bceSAndroid Build Coastguard Worker delete m_texture3D;
806*35238bceSAndroid Build Coastguard Worker }
807*35238bceSAndroid Build Coastguard Worker
init(void)808*35238bceSAndroid Build Coastguard Worker void ShaderTextureFunctionCase::init(void)
809*35238bceSAndroid Build Coastguard Worker {
810*35238bceSAndroid Build Coastguard Worker {
811*35238bceSAndroid Build Coastguard Worker // Base coord scale & bias
812*35238bceSAndroid Build Coastguard Worker Vec4 s = m_lookupSpec.maxCoord - m_lookupSpec.minCoord;
813*35238bceSAndroid Build Coastguard Worker Vec4 b = m_lookupSpec.minCoord;
814*35238bceSAndroid Build Coastguard Worker
815*35238bceSAndroid Build Coastguard Worker float baseCoordTrans[] = {s.x(), 0.0f, 0.f, b.x(),
816*35238bceSAndroid Build Coastguard Worker 0.f, s.y(), 0.f, b.y(),
817*35238bceSAndroid Build Coastguard Worker s.z() / 2.f, -s.z() / 2.f, 0.f, s.z() / 2.f + b.z(),
818*35238bceSAndroid Build Coastguard Worker -s.w() / 2.f, s.w() / 2.f, 0.f, s.w() / 2.f + b.w()};
819*35238bceSAndroid Build Coastguard Worker
820*35238bceSAndroid Build Coastguard Worker m_userAttribTransforms.push_back(tcu::Mat4(baseCoordTrans));
821*35238bceSAndroid Build Coastguard Worker }
822*35238bceSAndroid Build Coastguard Worker
823*35238bceSAndroid Build Coastguard Worker bool hasLodBias = functionHasLod(m_lookupSpec.function) || m_lookupSpec.useBias;
824*35238bceSAndroid Build Coastguard Worker bool isGrad = functionHasGrad(m_lookupSpec.function);
825*35238bceSAndroid Build Coastguard Worker DE_ASSERT(!isGrad || !hasLodBias);
826*35238bceSAndroid Build Coastguard Worker
827*35238bceSAndroid Build Coastguard Worker if (hasLodBias)
828*35238bceSAndroid Build Coastguard Worker {
829*35238bceSAndroid Build Coastguard Worker float s = m_lookupSpec.maxLodBias - m_lookupSpec.minLodBias;
830*35238bceSAndroid Build Coastguard Worker float b = m_lookupSpec.minLodBias;
831*35238bceSAndroid Build Coastguard Worker float lodCoordTrans[] = {s / 2.0f, s / 2.0f, 0.f, b, 0.0f, 0.0f, 0.0f, 0.0f,
832*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
833*35238bceSAndroid Build Coastguard Worker
834*35238bceSAndroid Build Coastguard Worker m_userAttribTransforms.push_back(tcu::Mat4(lodCoordTrans));
835*35238bceSAndroid Build Coastguard Worker }
836*35238bceSAndroid Build Coastguard Worker else if (isGrad)
837*35238bceSAndroid Build Coastguard Worker {
838*35238bceSAndroid Build Coastguard Worker Vec3 sx = m_lookupSpec.maxDX - m_lookupSpec.minDX;
839*35238bceSAndroid Build Coastguard Worker Vec3 sy = m_lookupSpec.maxDY - m_lookupSpec.minDY;
840*35238bceSAndroid Build Coastguard Worker float gradDxTrans[] = {sx.x() / 2.0f, sx.x() / 2.0f, 0.f, m_lookupSpec.minDX.x(),
841*35238bceSAndroid Build Coastguard Worker sx.y() / 2.0f, sx.y() / 2.0f, 0.0f, m_lookupSpec.minDX.y(),
842*35238bceSAndroid Build Coastguard Worker sx.z() / 2.0f, sx.z() / 2.0f, 0.0f, m_lookupSpec.minDX.z(),
843*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, 0.0f, 0.0f};
844*35238bceSAndroid Build Coastguard Worker float gradDyTrans[] = {-sy.x() / 2.0f, -sy.x() / 2.0f, 0.f, m_lookupSpec.maxDY.x(),
845*35238bceSAndroid Build Coastguard Worker -sy.y() / 2.0f, -sy.y() / 2.0f, 0.0f, m_lookupSpec.maxDY.y(),
846*35238bceSAndroid Build Coastguard Worker -sy.z() / 2.0f, -sy.z() / 2.0f, 0.0f, m_lookupSpec.maxDY.z(),
847*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, 0.0f, 0.0f};
848*35238bceSAndroid Build Coastguard Worker
849*35238bceSAndroid Build Coastguard Worker m_userAttribTransforms.push_back(tcu::Mat4(gradDxTrans));
850*35238bceSAndroid Build Coastguard Worker m_userAttribTransforms.push_back(tcu::Mat4(gradDyTrans));
851*35238bceSAndroid Build Coastguard Worker }
852*35238bceSAndroid Build Coastguard Worker
853*35238bceSAndroid Build Coastguard Worker initShaderSources();
854*35238bceSAndroid Build Coastguard Worker initTexture();
855*35238bceSAndroid Build Coastguard Worker
856*35238bceSAndroid Build Coastguard Worker gls::ShaderRenderCase::init();
857*35238bceSAndroid Build Coastguard Worker }
858*35238bceSAndroid Build Coastguard Worker
initTexture(void)859*35238bceSAndroid Build Coastguard Worker void ShaderTextureFunctionCase::initTexture(void)
860*35238bceSAndroid Build Coastguard Worker {
861*35238bceSAndroid Build Coastguard Worker static const IVec4 texCubeSwz[] = {IVec4(0, 0, 1, 1), IVec4(1, 1, 0, 0), IVec4(0, 1, 0, 1),
862*35238bceSAndroid Build Coastguard Worker IVec4(1, 0, 1, 0), IVec4(0, 1, 1, 0), IVec4(1, 0, 0, 1)};
863*35238bceSAndroid Build Coastguard Worker DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(texCubeSwz) == tcu::CUBEFACE_LAST);
864*35238bceSAndroid Build Coastguard Worker
865*35238bceSAndroid Build Coastguard Worker tcu::TextureFormat texFmt = glu::mapGLInternalFormat(m_textureSpec.format);
866*35238bceSAndroid Build Coastguard Worker tcu::TextureFormatInfo fmtInfo = tcu::getTextureFormatInfo(texFmt);
867*35238bceSAndroid Build Coastguard Worker tcu::IVec2 viewportSize = getViewportSize();
868*35238bceSAndroid Build Coastguard Worker bool useProj = functionHasProj(m_lookupSpec.function) && !functionHasGrad(m_lookupSpec.function) &&
869*35238bceSAndroid Build Coastguard Worker !functionHasLod(m_lookupSpec.function);
870*35238bceSAndroid Build Coastguard Worker bool isAutoLod = functionHasAutoLod(m_isVertexCase ? glu::SHADERTYPE_VERTEX : glu::SHADERTYPE_FRAGMENT,
871*35238bceSAndroid Build Coastguard Worker m_lookupSpec.function); // LOD can vary significantly
872*35238bceSAndroid Build Coastguard Worker float proj = useProj ? 1.0f / m_lookupSpec.minCoord[m_lookupSpec.function == FUNCTION_TEXTUREPROJ3 ? 2 : 3] : 1.0f;
873*35238bceSAndroid Build Coastguard Worker
874*35238bceSAndroid Build Coastguard Worker switch (m_textureSpec.type)
875*35238bceSAndroid Build Coastguard Worker {
876*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_2D:
877*35238bceSAndroid Build Coastguard Worker {
878*35238bceSAndroid Build Coastguard Worker float levelStep = isAutoLod ? 0.0f : 1.0f / (float)de::max(1, m_textureSpec.numLevels - 1);
879*35238bceSAndroid Build Coastguard Worker Vec4 cScale = fmtInfo.valueMax - fmtInfo.valueMin;
880*35238bceSAndroid Build Coastguard Worker Vec4 cBias = fmtInfo.valueMin;
881*35238bceSAndroid Build Coastguard Worker int baseCellSize = de::min(m_textureSpec.width / 4, m_textureSpec.height / 4);
882*35238bceSAndroid Build Coastguard Worker
883*35238bceSAndroid Build Coastguard Worker m_texture2D = new glu::Texture2D(m_renderCtx, m_textureSpec.format, m_textureSpec.width, m_textureSpec.height);
884*35238bceSAndroid Build Coastguard Worker for (int level = 0; level < m_textureSpec.numLevels; level++)
885*35238bceSAndroid Build Coastguard Worker {
886*35238bceSAndroid Build Coastguard Worker float fA = float(level) * levelStep;
887*35238bceSAndroid Build Coastguard Worker float fB = 1.0f - fA;
888*35238bceSAndroid Build Coastguard Worker Vec4 colorA = cBias + cScale * Vec4(fA, fB, fA, fB);
889*35238bceSAndroid Build Coastguard Worker Vec4 colorB = cBias + cScale * Vec4(fB, fA, fB, fA);
890*35238bceSAndroid Build Coastguard Worker
891*35238bceSAndroid Build Coastguard Worker m_texture2D->getRefTexture().allocLevel(level);
892*35238bceSAndroid Build Coastguard Worker tcu::fillWithGrid(m_texture2D->getRefTexture().getLevel(level), de::max(1, baseCellSize >> level), colorA,
893*35238bceSAndroid Build Coastguard Worker colorB);
894*35238bceSAndroid Build Coastguard Worker }
895*35238bceSAndroid Build Coastguard Worker m_texture2D->upload();
896*35238bceSAndroid Build Coastguard Worker
897*35238bceSAndroid Build Coastguard Worker // Compute LOD.
898*35238bceSAndroid Build Coastguard Worker float dudx = (m_lookupSpec.maxCoord[0] - m_lookupSpec.minCoord[0]) * proj * (float)m_textureSpec.width /
899*35238bceSAndroid Build Coastguard Worker (float)viewportSize[0];
900*35238bceSAndroid Build Coastguard Worker float dvdy = (m_lookupSpec.maxCoord[1] - m_lookupSpec.minCoord[1]) * proj * (float)m_textureSpec.height /
901*35238bceSAndroid Build Coastguard Worker (float)viewportSize[1];
902*35238bceSAndroid Build Coastguard Worker m_lookupParams.lod = computeLodFromDerivates(DEFAULT_LOD_MODE, dudx, 0.0f, 0.0f, dvdy);
903*35238bceSAndroid Build Coastguard Worker
904*35238bceSAndroid Build Coastguard Worker // Append to texture list.
905*35238bceSAndroid Build Coastguard Worker m_textures.push_back(gls::TextureBinding(m_texture2D, m_textureSpec.sampler));
906*35238bceSAndroid Build Coastguard Worker break;
907*35238bceSAndroid Build Coastguard Worker }
908*35238bceSAndroid Build Coastguard Worker
909*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_CUBE_MAP:
910*35238bceSAndroid Build Coastguard Worker {
911*35238bceSAndroid Build Coastguard Worker float levelStep = isAutoLod ? 0.0f : 1.0f / (float)de::max(1, m_textureSpec.numLevels - 1);
912*35238bceSAndroid Build Coastguard Worker Vec4 cScale = fmtInfo.valueMax - fmtInfo.valueMin;
913*35238bceSAndroid Build Coastguard Worker Vec4 cBias = fmtInfo.valueMin;
914*35238bceSAndroid Build Coastguard Worker Vec4 cCorner = cBias + cScale * 0.5f;
915*35238bceSAndroid Build Coastguard Worker int baseCellSize = de::min(m_textureSpec.width / 4, m_textureSpec.height / 4);
916*35238bceSAndroid Build Coastguard Worker
917*35238bceSAndroid Build Coastguard Worker DE_ASSERT(m_textureSpec.width == m_textureSpec.height);
918*35238bceSAndroid Build Coastguard Worker m_textureCube = new glu::TextureCube(m_renderCtx, m_textureSpec.format, m_textureSpec.width);
919*35238bceSAndroid Build Coastguard Worker for (int level = 0; level < m_textureSpec.numLevels; level++)
920*35238bceSAndroid Build Coastguard Worker {
921*35238bceSAndroid Build Coastguard Worker float fA = float(level) * levelStep;
922*35238bceSAndroid Build Coastguard Worker float fB = 1.0f - fA;
923*35238bceSAndroid Build Coastguard Worker Vec2 f(fA, fB);
924*35238bceSAndroid Build Coastguard Worker
925*35238bceSAndroid Build Coastguard Worker for (int face = 0; face < tcu::CUBEFACE_LAST; face++)
926*35238bceSAndroid Build Coastguard Worker {
927*35238bceSAndroid Build Coastguard Worker const IVec4 &swzA = texCubeSwz[face];
928*35238bceSAndroid Build Coastguard Worker IVec4 swzB = 1 - swzA;
929*35238bceSAndroid Build Coastguard Worker Vec4 colorA = cBias + cScale * f.swizzle(swzA[0], swzA[1], swzA[2], swzA[3]);
930*35238bceSAndroid Build Coastguard Worker Vec4 colorB = cBias + cScale * f.swizzle(swzB[0], swzB[1], swzB[2], swzB[3]);
931*35238bceSAndroid Build Coastguard Worker
932*35238bceSAndroid Build Coastguard Worker m_textureCube->getRefTexture().allocLevel((tcu::CubeFace)face, level);
933*35238bceSAndroid Build Coastguard Worker
934*35238bceSAndroid Build Coastguard Worker {
935*35238bceSAndroid Build Coastguard Worker const tcu::PixelBufferAccess access =
936*35238bceSAndroid Build Coastguard Worker m_textureCube->getRefTexture().getLevelFace(level, (tcu::CubeFace)face);
937*35238bceSAndroid Build Coastguard Worker const int lastPix = access.getWidth() - 1;
938*35238bceSAndroid Build Coastguard Worker
939*35238bceSAndroid Build Coastguard Worker tcu::fillWithGrid(access, de::max(1, baseCellSize >> level), colorA, colorB);
940*35238bceSAndroid Build Coastguard Worker
941*35238bceSAndroid Build Coastguard Worker // Ensure all corners have identical colors in order to avoid dealing with ambiguous corner texel filtering
942*35238bceSAndroid Build Coastguard Worker access.setPixel(cCorner, 0, 0);
943*35238bceSAndroid Build Coastguard Worker access.setPixel(cCorner, 0, lastPix);
944*35238bceSAndroid Build Coastguard Worker access.setPixel(cCorner, lastPix, 0);
945*35238bceSAndroid Build Coastguard Worker access.setPixel(cCorner, lastPix, lastPix);
946*35238bceSAndroid Build Coastguard Worker }
947*35238bceSAndroid Build Coastguard Worker }
948*35238bceSAndroid Build Coastguard Worker }
949*35238bceSAndroid Build Coastguard Worker m_textureCube->upload();
950*35238bceSAndroid Build Coastguard Worker
951*35238bceSAndroid Build Coastguard Worker // Compute LOD \note Assumes that only single side is accessed and R is constant major axis.
952*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::abs(m_lookupSpec.minCoord[2] - m_lookupSpec.maxCoord[2]) < 0.005);
953*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::abs(m_lookupSpec.minCoord[0]) < de::abs(m_lookupSpec.minCoord[2]) &&
954*35238bceSAndroid Build Coastguard Worker de::abs(m_lookupSpec.maxCoord[0]) < de::abs(m_lookupSpec.minCoord[2]));
955*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::abs(m_lookupSpec.minCoord[1]) < de::abs(m_lookupSpec.minCoord[2]) &&
956*35238bceSAndroid Build Coastguard Worker de::abs(m_lookupSpec.maxCoord[1]) < de::abs(m_lookupSpec.minCoord[2]));
957*35238bceSAndroid Build Coastguard Worker
958*35238bceSAndroid Build Coastguard Worker tcu::CubeFaceFloatCoords c00 = tcu::getCubeFaceCoords(
959*35238bceSAndroid Build Coastguard Worker Vec3(m_lookupSpec.minCoord[0] * proj, m_lookupSpec.minCoord[1] * proj, m_lookupSpec.minCoord[2] * proj));
960*35238bceSAndroid Build Coastguard Worker tcu::CubeFaceFloatCoords c10 = tcu::getCubeFaceCoords(
961*35238bceSAndroid Build Coastguard Worker Vec3(m_lookupSpec.maxCoord[0] * proj, m_lookupSpec.minCoord[1] * proj, m_lookupSpec.minCoord[2] * proj));
962*35238bceSAndroid Build Coastguard Worker tcu::CubeFaceFloatCoords c01 = tcu::getCubeFaceCoords(
963*35238bceSAndroid Build Coastguard Worker Vec3(m_lookupSpec.minCoord[0] * proj, m_lookupSpec.maxCoord[1] * proj, m_lookupSpec.minCoord[2] * proj));
964*35238bceSAndroid Build Coastguard Worker float dudx = (c10.s - c00.s) * (float)m_textureSpec.width / (float)viewportSize[0];
965*35238bceSAndroid Build Coastguard Worker float dvdy = (c01.t - c00.t) * (float)m_textureSpec.height / (float)viewportSize[1];
966*35238bceSAndroid Build Coastguard Worker
967*35238bceSAndroid Build Coastguard Worker m_lookupParams.lod = computeLodFromDerivates(DEFAULT_LOD_MODE, dudx, 0.0f, 0.0f, dvdy);
968*35238bceSAndroid Build Coastguard Worker
969*35238bceSAndroid Build Coastguard Worker m_textures.push_back(gls::TextureBinding(m_textureCube, m_textureSpec.sampler));
970*35238bceSAndroid Build Coastguard Worker break;
971*35238bceSAndroid Build Coastguard Worker }
972*35238bceSAndroid Build Coastguard Worker
973*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_2D_ARRAY:
974*35238bceSAndroid Build Coastguard Worker {
975*35238bceSAndroid Build Coastguard Worker float layerStep = 1.0f / (float)m_textureSpec.depth;
976*35238bceSAndroid Build Coastguard Worker float levelStep =
977*35238bceSAndroid Build Coastguard Worker isAutoLod ? 0.0f : 1.0f / (float)(de::max(1, m_textureSpec.numLevels - 1) * m_textureSpec.depth);
978*35238bceSAndroid Build Coastguard Worker Vec4 cScale = fmtInfo.valueMax - fmtInfo.valueMin;
979*35238bceSAndroid Build Coastguard Worker Vec4 cBias = fmtInfo.valueMin;
980*35238bceSAndroid Build Coastguard Worker int baseCellSize = de::min(m_textureSpec.width / 4, m_textureSpec.height / 4);
981*35238bceSAndroid Build Coastguard Worker
982*35238bceSAndroid Build Coastguard Worker m_texture2DArray = new glu::Texture2DArray(m_renderCtx, m_textureSpec.format, m_textureSpec.width,
983*35238bceSAndroid Build Coastguard Worker m_textureSpec.height, m_textureSpec.depth);
984*35238bceSAndroid Build Coastguard Worker for (int level = 0; level < m_textureSpec.numLevels; level++)
985*35238bceSAndroid Build Coastguard Worker {
986*35238bceSAndroid Build Coastguard Worker m_texture2DArray->getRefTexture().allocLevel(level);
987*35238bceSAndroid Build Coastguard Worker tcu::PixelBufferAccess levelAccess = m_texture2DArray->getRefTexture().getLevel(level);
988*35238bceSAndroid Build Coastguard Worker
989*35238bceSAndroid Build Coastguard Worker for (int layer = 0; layer < levelAccess.getDepth(); layer++)
990*35238bceSAndroid Build Coastguard Worker {
991*35238bceSAndroid Build Coastguard Worker float fA = (float)layer * layerStep + (float)level * levelStep;
992*35238bceSAndroid Build Coastguard Worker float fB = 1.0f - fA;
993*35238bceSAndroid Build Coastguard Worker Vec4 colorA = cBias + cScale * Vec4(fA, fB, fA, fB);
994*35238bceSAndroid Build Coastguard Worker Vec4 colorB = cBias + cScale * Vec4(fB, fA, fB, fA);
995*35238bceSAndroid Build Coastguard Worker
996*35238bceSAndroid Build Coastguard Worker tcu::fillWithGrid(
997*35238bceSAndroid Build Coastguard Worker tcu::getSubregion(levelAccess, 0, 0, layer, levelAccess.getWidth(), levelAccess.getHeight(), 1),
998*35238bceSAndroid Build Coastguard Worker de::max(1, baseCellSize >> level), colorA, colorB);
999*35238bceSAndroid Build Coastguard Worker }
1000*35238bceSAndroid Build Coastguard Worker }
1001*35238bceSAndroid Build Coastguard Worker m_texture2DArray->upload();
1002*35238bceSAndroid Build Coastguard Worker
1003*35238bceSAndroid Build Coastguard Worker // Compute LOD.
1004*35238bceSAndroid Build Coastguard Worker float dudx = (m_lookupSpec.maxCoord[0] - m_lookupSpec.minCoord[0]) * proj * (float)m_textureSpec.width /
1005*35238bceSAndroid Build Coastguard Worker (float)viewportSize[0];
1006*35238bceSAndroid Build Coastguard Worker float dvdy = (m_lookupSpec.maxCoord[1] - m_lookupSpec.minCoord[1]) * proj * (float)m_textureSpec.height /
1007*35238bceSAndroid Build Coastguard Worker (float)viewportSize[1];
1008*35238bceSAndroid Build Coastguard Worker m_lookupParams.lod = computeLodFromDerivates(DEFAULT_LOD_MODE, dudx, 0.0f, 0.0f, dvdy);
1009*35238bceSAndroid Build Coastguard Worker
1010*35238bceSAndroid Build Coastguard Worker // Append to texture list.
1011*35238bceSAndroid Build Coastguard Worker m_textures.push_back(gls::TextureBinding(m_texture2DArray, m_textureSpec.sampler));
1012*35238bceSAndroid Build Coastguard Worker break;
1013*35238bceSAndroid Build Coastguard Worker }
1014*35238bceSAndroid Build Coastguard Worker
1015*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_3D:
1016*35238bceSAndroid Build Coastguard Worker {
1017*35238bceSAndroid Build Coastguard Worker float levelStep = isAutoLod ? 0.0f : 1.0f / (float)de::max(1, m_textureSpec.numLevels - 1);
1018*35238bceSAndroid Build Coastguard Worker Vec4 cScale = fmtInfo.valueMax - fmtInfo.valueMin;
1019*35238bceSAndroid Build Coastguard Worker Vec4 cBias = fmtInfo.valueMin;
1020*35238bceSAndroid Build Coastguard Worker int baseCellSize = de::min(de::min(m_textureSpec.width / 2, m_textureSpec.height / 2), m_textureSpec.depth / 2);
1021*35238bceSAndroid Build Coastguard Worker
1022*35238bceSAndroid Build Coastguard Worker m_texture3D = new glu::Texture3D(m_renderCtx, m_textureSpec.format, m_textureSpec.width, m_textureSpec.height,
1023*35238bceSAndroid Build Coastguard Worker m_textureSpec.depth);
1024*35238bceSAndroid Build Coastguard Worker for (int level = 0; level < m_textureSpec.numLevels; level++)
1025*35238bceSAndroid Build Coastguard Worker {
1026*35238bceSAndroid Build Coastguard Worker float fA = (float)level * levelStep;
1027*35238bceSAndroid Build Coastguard Worker float fB = 1.0f - fA;
1028*35238bceSAndroid Build Coastguard Worker Vec4 colorA = cBias + cScale * Vec4(fA, fB, fA, fB);
1029*35238bceSAndroid Build Coastguard Worker Vec4 colorB = cBias + cScale * Vec4(fB, fA, fB, fA);
1030*35238bceSAndroid Build Coastguard Worker
1031*35238bceSAndroid Build Coastguard Worker m_texture3D->getRefTexture().allocLevel(level);
1032*35238bceSAndroid Build Coastguard Worker tcu::fillWithGrid(m_texture3D->getRefTexture().getLevel(level), de::max(1, baseCellSize >> level), colorA,
1033*35238bceSAndroid Build Coastguard Worker colorB);
1034*35238bceSAndroid Build Coastguard Worker }
1035*35238bceSAndroid Build Coastguard Worker m_texture3D->upload();
1036*35238bceSAndroid Build Coastguard Worker
1037*35238bceSAndroid Build Coastguard Worker // Compute LOD.
1038*35238bceSAndroid Build Coastguard Worker float dudx = (m_lookupSpec.maxCoord[0] - m_lookupSpec.minCoord[0]) * proj * (float)m_textureSpec.width /
1039*35238bceSAndroid Build Coastguard Worker (float)viewportSize[0];
1040*35238bceSAndroid Build Coastguard Worker float dvdy = (m_lookupSpec.maxCoord[1] - m_lookupSpec.minCoord[1]) * proj * (float)m_textureSpec.height /
1041*35238bceSAndroid Build Coastguard Worker (float)viewportSize[1];
1042*35238bceSAndroid Build Coastguard Worker float dwdx = (m_lookupSpec.maxCoord[2] - m_lookupSpec.minCoord[2]) * 0.5f * proj * (float)m_textureSpec.depth /
1043*35238bceSAndroid Build Coastguard Worker (float)viewportSize[0];
1044*35238bceSAndroid Build Coastguard Worker float dwdy = (m_lookupSpec.maxCoord[2] - m_lookupSpec.minCoord[2]) * 0.5f * proj * (float)m_textureSpec.depth /
1045*35238bceSAndroid Build Coastguard Worker (float)viewportSize[1];
1046*35238bceSAndroid Build Coastguard Worker m_lookupParams.lod = computeLodFromDerivates(DEFAULT_LOD_MODE, dudx, 0.0f, dwdx, 0.0f, dvdy, dwdy);
1047*35238bceSAndroid Build Coastguard Worker
1048*35238bceSAndroid Build Coastguard Worker // Append to texture list.
1049*35238bceSAndroid Build Coastguard Worker m_textures.push_back(gls::TextureBinding(m_texture3D, m_textureSpec.sampler));
1050*35238bceSAndroid Build Coastguard Worker break;
1051*35238bceSAndroid Build Coastguard Worker }
1052*35238bceSAndroid Build Coastguard Worker
1053*35238bceSAndroid Build Coastguard Worker default:
1054*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
1055*35238bceSAndroid Build Coastguard Worker }
1056*35238bceSAndroid Build Coastguard Worker
1057*35238bceSAndroid Build Coastguard Worker // Set lookup scale & bias
1058*35238bceSAndroid Build Coastguard Worker m_lookupParams.scale = fmtInfo.lookupScale;
1059*35238bceSAndroid Build Coastguard Worker m_lookupParams.bias = fmtInfo.lookupBias;
1060*35238bceSAndroid Build Coastguard Worker m_lookupParams.offset = m_lookupSpec.offset;
1061*35238bceSAndroid Build Coastguard Worker }
1062*35238bceSAndroid Build Coastguard Worker
initShaderSources(void)1063*35238bceSAndroid Build Coastguard Worker void ShaderTextureFunctionCase::initShaderSources(void)
1064*35238bceSAndroid Build Coastguard Worker {
1065*35238bceSAndroid Build Coastguard Worker Function function = m_lookupSpec.function;
1066*35238bceSAndroid Build Coastguard Worker bool isVtxCase = m_isVertexCase;
1067*35238bceSAndroid Build Coastguard Worker bool isProj = functionHasProj(function);
1068*35238bceSAndroid Build Coastguard Worker bool isGrad = functionHasGrad(function);
1069*35238bceSAndroid Build Coastguard Worker bool isShadow = m_textureSpec.sampler.compare != tcu::Sampler::COMPAREMODE_NONE;
1070*35238bceSAndroid Build Coastguard Worker bool is2DProj4 = !isShadow && m_textureSpec.type == TEXTURETYPE_2D &&
1071*35238bceSAndroid Build Coastguard Worker (function == FUNCTION_TEXTUREPROJ || function == FUNCTION_TEXTUREPROJLOD ||
1072*35238bceSAndroid Build Coastguard Worker function == FUNCTION_TEXTUREPROJGRAD);
1073*35238bceSAndroid Build Coastguard Worker bool isIntCoord = function == FUNCTION_TEXELFETCH;
1074*35238bceSAndroid Build Coastguard Worker bool hasLodBias = functionHasLod(m_lookupSpec.function) || m_lookupSpec.useBias;
1075*35238bceSAndroid Build Coastguard Worker int texCoordComps = m_textureSpec.type == TEXTURETYPE_2D ? 2 : 3;
1076*35238bceSAndroid Build Coastguard Worker int extraCoordComps = (isProj ? (is2DProj4 ? 2 : 1) : 0) + (isShadow ? 1 : 0);
1077*35238bceSAndroid Build Coastguard Worker glu::DataType coordType = glu::getDataTypeFloatVec(texCoordComps + extraCoordComps);
1078*35238bceSAndroid Build Coastguard Worker glu::Precision coordPrec = glu::PRECISION_HIGHP;
1079*35238bceSAndroid Build Coastguard Worker const char *coordTypeName = glu::getDataTypeName(coordType);
1080*35238bceSAndroid Build Coastguard Worker const char *coordPrecName = glu::getPrecisionName(coordPrec);
1081*35238bceSAndroid Build Coastguard Worker tcu::TextureFormat texFmt = glu::mapGLInternalFormat(m_textureSpec.format);
1082*35238bceSAndroid Build Coastguard Worker glu::DataType samplerType = glu::TYPE_LAST;
1083*35238bceSAndroid Build Coastguard Worker glu::DataType gradType = (m_textureSpec.type == TEXTURETYPE_CUBE_MAP || m_textureSpec.type == TEXTURETYPE_3D) ?
1084*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC3 :
1085*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT_VEC2;
1086*35238bceSAndroid Build Coastguard Worker const char *gradTypeName = glu::getDataTypeName(gradType);
1087*35238bceSAndroid Build Coastguard Worker const char *baseFuncName = DE_NULL;
1088*35238bceSAndroid Build Coastguard Worker
1089*35238bceSAndroid Build Coastguard Worker DE_ASSERT(!isGrad || !hasLodBias);
1090*35238bceSAndroid Build Coastguard Worker
1091*35238bceSAndroid Build Coastguard Worker switch (m_textureSpec.type)
1092*35238bceSAndroid Build Coastguard Worker {
1093*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_2D:
1094*35238bceSAndroid Build Coastguard Worker samplerType = isShadow ? glu::TYPE_SAMPLER_2D_SHADOW : glu::getSampler2DType(texFmt);
1095*35238bceSAndroid Build Coastguard Worker break;
1096*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_CUBE_MAP:
1097*35238bceSAndroid Build Coastguard Worker samplerType = isShadow ? glu::TYPE_SAMPLER_CUBE_SHADOW : glu::getSamplerCubeType(texFmt);
1098*35238bceSAndroid Build Coastguard Worker break;
1099*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_2D_ARRAY:
1100*35238bceSAndroid Build Coastguard Worker samplerType = isShadow ? glu::TYPE_SAMPLER_2D_ARRAY_SHADOW : glu::getSampler2DArrayType(texFmt);
1101*35238bceSAndroid Build Coastguard Worker break;
1102*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_3D:
1103*35238bceSAndroid Build Coastguard Worker DE_ASSERT(!isShadow);
1104*35238bceSAndroid Build Coastguard Worker samplerType = glu::getSampler3DType(texFmt);
1105*35238bceSAndroid Build Coastguard Worker break;
1106*35238bceSAndroid Build Coastguard Worker default:
1107*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
1108*35238bceSAndroid Build Coastguard Worker }
1109*35238bceSAndroid Build Coastguard Worker
1110*35238bceSAndroid Build Coastguard Worker switch (m_lookupSpec.function)
1111*35238bceSAndroid Build Coastguard Worker {
1112*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTURE:
1113*35238bceSAndroid Build Coastguard Worker baseFuncName = "texture";
1114*35238bceSAndroid Build Coastguard Worker break;
1115*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTUREPROJ:
1116*35238bceSAndroid Build Coastguard Worker baseFuncName = "textureProj";
1117*35238bceSAndroid Build Coastguard Worker break;
1118*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTUREPROJ3:
1119*35238bceSAndroid Build Coastguard Worker baseFuncName = "textureProj";
1120*35238bceSAndroid Build Coastguard Worker break;
1121*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTURELOD:
1122*35238bceSAndroid Build Coastguard Worker baseFuncName = "textureLod";
1123*35238bceSAndroid Build Coastguard Worker break;
1124*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTUREPROJLOD:
1125*35238bceSAndroid Build Coastguard Worker baseFuncName = "textureProjLod";
1126*35238bceSAndroid Build Coastguard Worker break;
1127*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTUREPROJLOD3:
1128*35238bceSAndroid Build Coastguard Worker baseFuncName = "textureProjLod";
1129*35238bceSAndroid Build Coastguard Worker break;
1130*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTUREGRAD:
1131*35238bceSAndroid Build Coastguard Worker baseFuncName = "textureGrad";
1132*35238bceSAndroid Build Coastguard Worker break;
1133*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTUREPROJGRAD:
1134*35238bceSAndroid Build Coastguard Worker baseFuncName = "textureProjGrad";
1135*35238bceSAndroid Build Coastguard Worker break;
1136*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXTUREPROJGRAD3:
1137*35238bceSAndroid Build Coastguard Worker baseFuncName = "textureProjGrad";
1138*35238bceSAndroid Build Coastguard Worker break;
1139*35238bceSAndroid Build Coastguard Worker case FUNCTION_TEXELFETCH:
1140*35238bceSAndroid Build Coastguard Worker baseFuncName = "texelFetch";
1141*35238bceSAndroid Build Coastguard Worker break;
1142*35238bceSAndroid Build Coastguard Worker default:
1143*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
1144*35238bceSAndroid Build Coastguard Worker }
1145*35238bceSAndroid Build Coastguard Worker
1146*35238bceSAndroid Build Coastguard Worker std::ostringstream vert;
1147*35238bceSAndroid Build Coastguard Worker std::ostringstream frag;
1148*35238bceSAndroid Build Coastguard Worker std::ostringstream &op = isVtxCase ? vert : frag;
1149*35238bceSAndroid Build Coastguard Worker
1150*35238bceSAndroid Build Coastguard Worker vert << "#version 300 es\n"
1151*35238bceSAndroid Build Coastguard Worker << "in highp vec4 a_position;\n"
1152*35238bceSAndroid Build Coastguard Worker << "in " << coordPrecName << " " << coordTypeName << " a_in0;\n";
1153*35238bceSAndroid Build Coastguard Worker
1154*35238bceSAndroid Build Coastguard Worker if (isGrad)
1155*35238bceSAndroid Build Coastguard Worker {
1156*35238bceSAndroid Build Coastguard Worker vert << "in " << coordPrecName << " " << gradTypeName << " a_in1;\n";
1157*35238bceSAndroid Build Coastguard Worker vert << "in " << coordPrecName << " " << gradTypeName << " a_in2;\n";
1158*35238bceSAndroid Build Coastguard Worker }
1159*35238bceSAndroid Build Coastguard Worker else if (hasLodBias)
1160*35238bceSAndroid Build Coastguard Worker vert << "in " << coordPrecName << " float a_in1;\n";
1161*35238bceSAndroid Build Coastguard Worker
1162*35238bceSAndroid Build Coastguard Worker frag << "#version 300 es\n"
1163*35238bceSAndroid Build Coastguard Worker << "layout(location = 0) out mediump vec4 o_color;\n";
1164*35238bceSAndroid Build Coastguard Worker
1165*35238bceSAndroid Build Coastguard Worker if (isVtxCase)
1166*35238bceSAndroid Build Coastguard Worker {
1167*35238bceSAndroid Build Coastguard Worker vert << "out mediump vec4 v_color;\n";
1168*35238bceSAndroid Build Coastguard Worker frag << "in mediump vec4 v_color;\n";
1169*35238bceSAndroid Build Coastguard Worker }
1170*35238bceSAndroid Build Coastguard Worker else
1171*35238bceSAndroid Build Coastguard Worker {
1172*35238bceSAndroid Build Coastguard Worker vert << "out " << coordPrecName << " " << coordTypeName << " v_texCoord;\n";
1173*35238bceSAndroid Build Coastguard Worker frag << "in " << coordPrecName << " " << coordTypeName << " v_texCoord;\n";
1174*35238bceSAndroid Build Coastguard Worker
1175*35238bceSAndroid Build Coastguard Worker if (isGrad)
1176*35238bceSAndroid Build Coastguard Worker {
1177*35238bceSAndroid Build Coastguard Worker vert << "out " << coordPrecName << " " << gradTypeName << " v_gradX;\n";
1178*35238bceSAndroid Build Coastguard Worker vert << "out " << coordPrecName << " " << gradTypeName << " v_gradY;\n";
1179*35238bceSAndroid Build Coastguard Worker frag << "in " << coordPrecName << " " << gradTypeName << " v_gradX;\n";
1180*35238bceSAndroid Build Coastguard Worker frag << "in " << coordPrecName << " " << gradTypeName << " v_gradY;\n";
1181*35238bceSAndroid Build Coastguard Worker }
1182*35238bceSAndroid Build Coastguard Worker
1183*35238bceSAndroid Build Coastguard Worker if (hasLodBias)
1184*35238bceSAndroid Build Coastguard Worker {
1185*35238bceSAndroid Build Coastguard Worker vert << "out " << coordPrecName << " float v_lodBias;\n";
1186*35238bceSAndroid Build Coastguard Worker frag << "in " << coordPrecName << " float v_lodBias;\n";
1187*35238bceSAndroid Build Coastguard Worker }
1188*35238bceSAndroid Build Coastguard Worker }
1189*35238bceSAndroid Build Coastguard Worker
1190*35238bceSAndroid Build Coastguard Worker // Uniforms
1191*35238bceSAndroid Build Coastguard Worker op << "uniform highp " << glu::getDataTypeName(samplerType) << " u_sampler;\n"
1192*35238bceSAndroid Build Coastguard Worker << "uniform highp vec4 u_scale;\n"
1193*35238bceSAndroid Build Coastguard Worker << "uniform highp vec4 u_bias;\n";
1194*35238bceSAndroid Build Coastguard Worker
1195*35238bceSAndroid Build Coastguard Worker vert << "\nvoid main()\n{\n"
1196*35238bceSAndroid Build Coastguard Worker << "\tgl_Position = a_position;\n";
1197*35238bceSAndroid Build Coastguard Worker frag << "\nvoid main()\n{\n";
1198*35238bceSAndroid Build Coastguard Worker
1199*35238bceSAndroid Build Coastguard Worker if (isVtxCase)
1200*35238bceSAndroid Build Coastguard Worker vert << "\tv_color = ";
1201*35238bceSAndroid Build Coastguard Worker else
1202*35238bceSAndroid Build Coastguard Worker frag << "\to_color = ";
1203*35238bceSAndroid Build Coastguard Worker
1204*35238bceSAndroid Build Coastguard Worker // Op.
1205*35238bceSAndroid Build Coastguard Worker {
1206*35238bceSAndroid Build Coastguard Worker const char *texCoord = isVtxCase ? "a_in0" : "v_texCoord";
1207*35238bceSAndroid Build Coastguard Worker const char *gradX = isVtxCase ? "a_in1" : "v_gradX";
1208*35238bceSAndroid Build Coastguard Worker const char *gradY = isVtxCase ? "a_in2" : "v_gradY";
1209*35238bceSAndroid Build Coastguard Worker const char *lodBias = isVtxCase ? "a_in1" : "v_lodBias";
1210*35238bceSAndroid Build Coastguard Worker
1211*35238bceSAndroid Build Coastguard Worker op << "vec4(" << baseFuncName;
1212*35238bceSAndroid Build Coastguard Worker if (m_lookupSpec.useOffset)
1213*35238bceSAndroid Build Coastguard Worker op << "Offset";
1214*35238bceSAndroid Build Coastguard Worker op << "(u_sampler, ";
1215*35238bceSAndroid Build Coastguard Worker
1216*35238bceSAndroid Build Coastguard Worker if (isIntCoord)
1217*35238bceSAndroid Build Coastguard Worker op << "ivec" << (texCoordComps + extraCoordComps) << "(";
1218*35238bceSAndroid Build Coastguard Worker
1219*35238bceSAndroid Build Coastguard Worker op << texCoord;
1220*35238bceSAndroid Build Coastguard Worker
1221*35238bceSAndroid Build Coastguard Worker if (isIntCoord)
1222*35238bceSAndroid Build Coastguard Worker op << ")";
1223*35238bceSAndroid Build Coastguard Worker
1224*35238bceSAndroid Build Coastguard Worker if (isGrad)
1225*35238bceSAndroid Build Coastguard Worker op << ", " << gradX << ", " << gradY;
1226*35238bceSAndroid Build Coastguard Worker
1227*35238bceSAndroid Build Coastguard Worker if (functionHasLod(function))
1228*35238bceSAndroid Build Coastguard Worker {
1229*35238bceSAndroid Build Coastguard Worker if (isIntCoord)
1230*35238bceSAndroid Build Coastguard Worker op << ", int(" << lodBias << ")";
1231*35238bceSAndroid Build Coastguard Worker else
1232*35238bceSAndroid Build Coastguard Worker op << ", " << lodBias;
1233*35238bceSAndroid Build Coastguard Worker }
1234*35238bceSAndroid Build Coastguard Worker
1235*35238bceSAndroid Build Coastguard Worker if (m_lookupSpec.useOffset)
1236*35238bceSAndroid Build Coastguard Worker {
1237*35238bceSAndroid Build Coastguard Worker int offsetComps = m_textureSpec.type == TEXTURETYPE_3D ? 3 : 2;
1238*35238bceSAndroid Build Coastguard Worker
1239*35238bceSAndroid Build Coastguard Worker op << ", ivec" << offsetComps << "(";
1240*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < offsetComps; ndx++)
1241*35238bceSAndroid Build Coastguard Worker {
1242*35238bceSAndroid Build Coastguard Worker if (ndx != 0)
1243*35238bceSAndroid Build Coastguard Worker op << ", ";
1244*35238bceSAndroid Build Coastguard Worker op << m_lookupSpec.offset[ndx];
1245*35238bceSAndroid Build Coastguard Worker }
1246*35238bceSAndroid Build Coastguard Worker op << ")";
1247*35238bceSAndroid Build Coastguard Worker }
1248*35238bceSAndroid Build Coastguard Worker
1249*35238bceSAndroid Build Coastguard Worker if (m_lookupSpec.useBias)
1250*35238bceSAndroid Build Coastguard Worker op << ", " << lodBias;
1251*35238bceSAndroid Build Coastguard Worker
1252*35238bceSAndroid Build Coastguard Worker op << ")";
1253*35238bceSAndroid Build Coastguard Worker
1254*35238bceSAndroid Build Coastguard Worker if (isShadow)
1255*35238bceSAndroid Build Coastguard Worker op << ", 0.0, 0.0, 1.0)";
1256*35238bceSAndroid Build Coastguard Worker else
1257*35238bceSAndroid Build Coastguard Worker op << ")*u_scale + u_bias";
1258*35238bceSAndroid Build Coastguard Worker
1259*35238bceSAndroid Build Coastguard Worker op << ";\n";
1260*35238bceSAndroid Build Coastguard Worker }
1261*35238bceSAndroid Build Coastguard Worker
1262*35238bceSAndroid Build Coastguard Worker if (isVtxCase)
1263*35238bceSAndroid Build Coastguard Worker frag << "\to_color = v_color;\n";
1264*35238bceSAndroid Build Coastguard Worker else
1265*35238bceSAndroid Build Coastguard Worker {
1266*35238bceSAndroid Build Coastguard Worker vert << "\tv_texCoord = a_in0;\n";
1267*35238bceSAndroid Build Coastguard Worker
1268*35238bceSAndroid Build Coastguard Worker if (isGrad)
1269*35238bceSAndroid Build Coastguard Worker {
1270*35238bceSAndroid Build Coastguard Worker vert << "\tv_gradX = a_in1;\n";
1271*35238bceSAndroid Build Coastguard Worker vert << "\tv_gradY = a_in2;\n";
1272*35238bceSAndroid Build Coastguard Worker }
1273*35238bceSAndroid Build Coastguard Worker else if (hasLodBias)
1274*35238bceSAndroid Build Coastguard Worker vert << "\tv_lodBias = a_in1;\n";
1275*35238bceSAndroid Build Coastguard Worker }
1276*35238bceSAndroid Build Coastguard Worker
1277*35238bceSAndroid Build Coastguard Worker vert << "}\n";
1278*35238bceSAndroid Build Coastguard Worker frag << "}\n";
1279*35238bceSAndroid Build Coastguard Worker
1280*35238bceSAndroid Build Coastguard Worker m_vertShaderSource = vert.str();
1281*35238bceSAndroid Build Coastguard Worker m_fragShaderSource = frag.str();
1282*35238bceSAndroid Build Coastguard Worker }
1283*35238bceSAndroid Build Coastguard Worker
deinit(void)1284*35238bceSAndroid Build Coastguard Worker void ShaderTextureFunctionCase::deinit(void)
1285*35238bceSAndroid Build Coastguard Worker {
1286*35238bceSAndroid Build Coastguard Worker gls::ShaderRenderCase::deinit();
1287*35238bceSAndroid Build Coastguard Worker
1288*35238bceSAndroid Build Coastguard Worker delete m_texture2D;
1289*35238bceSAndroid Build Coastguard Worker delete m_textureCube;
1290*35238bceSAndroid Build Coastguard Worker delete m_texture2DArray;
1291*35238bceSAndroid Build Coastguard Worker delete m_texture3D;
1292*35238bceSAndroid Build Coastguard Worker
1293*35238bceSAndroid Build Coastguard Worker m_texture2D = DE_NULL;
1294*35238bceSAndroid Build Coastguard Worker m_textureCube = DE_NULL;
1295*35238bceSAndroid Build Coastguard Worker m_texture2DArray = DE_NULL;
1296*35238bceSAndroid Build Coastguard Worker m_texture3D = DE_NULL;
1297*35238bceSAndroid Build Coastguard Worker }
1298*35238bceSAndroid Build Coastguard Worker
setupUniforms(int programID,const tcu::Vec4 &)1299*35238bceSAndroid Build Coastguard Worker void ShaderTextureFunctionCase::setupUniforms(int programID, const tcu::Vec4 &)
1300*35238bceSAndroid Build Coastguard Worker {
1301*35238bceSAndroid Build Coastguard Worker const glw::Functions &gl = m_renderCtx.getFunctions();
1302*35238bceSAndroid Build Coastguard Worker gl.uniform1i(gl.getUniformLocation(programID, "u_sampler"), 0);
1303*35238bceSAndroid Build Coastguard Worker gl.uniform4fv(gl.getUniformLocation(programID, "u_scale"), 1, m_lookupParams.scale.getPtr());
1304*35238bceSAndroid Build Coastguard Worker gl.uniform4fv(gl.getUniformLocation(programID, "u_bias"), 1, m_lookupParams.bias.getPtr());
1305*35238bceSAndroid Build Coastguard Worker }
1306*35238bceSAndroid Build Coastguard Worker
1307*35238bceSAndroid Build Coastguard Worker class TextureSizeCase : public TestCase
1308*35238bceSAndroid Build Coastguard Worker {
1309*35238bceSAndroid Build Coastguard Worker public:
1310*35238bceSAndroid Build Coastguard Worker TextureSizeCase(Context &context, const char *name, const char *desc, const char *samplerType,
1311*35238bceSAndroid Build Coastguard Worker const TextureSpec &texture, bool isVertexCase);
1312*35238bceSAndroid Build Coastguard Worker ~TextureSizeCase(void);
1313*35238bceSAndroid Build Coastguard Worker
1314*35238bceSAndroid Build Coastguard Worker void deinit(void);
1315*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void);
1316*35238bceSAndroid Build Coastguard Worker
1317*35238bceSAndroid Build Coastguard Worker private:
1318*35238bceSAndroid Build Coastguard Worker struct TestSize
1319*35238bceSAndroid Build Coastguard Worker {
1320*35238bceSAndroid Build Coastguard Worker tcu::IVec3 textureSize;
1321*35238bceSAndroid Build Coastguard Worker int lod;
1322*35238bceSAndroid Build Coastguard Worker int lodBase;
1323*35238bceSAndroid Build Coastguard Worker tcu::IVec3 expectedSize;
1324*35238bceSAndroid Build Coastguard Worker };
1325*35238bceSAndroid Build Coastguard Worker
1326*35238bceSAndroid Build Coastguard Worker bool initShader(void);
1327*35238bceSAndroid Build Coastguard Worker void freeShader(void);
1328*35238bceSAndroid Build Coastguard Worker bool testTextureSize(const TestSize &);
1329*35238bceSAndroid Build Coastguard Worker std::string genVertexShader(void) const;
1330*35238bceSAndroid Build Coastguard Worker std::string genFragmentShader(void) const;
1331*35238bceSAndroid Build Coastguard Worker glw::GLenum getGLTextureTarget(void) const;
1332*35238bceSAndroid Build Coastguard Worker
1333*35238bceSAndroid Build Coastguard Worker const char *m_samplerTypeStr;
1334*35238bceSAndroid Build Coastguard Worker const TextureSpec m_textureSpec;
1335*35238bceSAndroid Build Coastguard Worker const bool m_isVertexCase;
1336*35238bceSAndroid Build Coastguard Worker const bool m_has3DSize;
1337*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram *m_program;
1338*35238bceSAndroid Build Coastguard Worker int m_iterationCounter;
1339*35238bceSAndroid Build Coastguard Worker };
1340*35238bceSAndroid Build Coastguard Worker
TextureSizeCase(Context & context,const char * name,const char * desc,const char * samplerType,const TextureSpec & texture,bool isVertexCase)1341*35238bceSAndroid Build Coastguard Worker TextureSizeCase::TextureSizeCase(Context &context, const char *name, const char *desc, const char *samplerType,
1342*35238bceSAndroid Build Coastguard Worker const TextureSpec &texture, bool isVertexCase)
1343*35238bceSAndroid Build Coastguard Worker : TestCase(context, name, desc)
1344*35238bceSAndroid Build Coastguard Worker , m_samplerTypeStr(samplerType)
1345*35238bceSAndroid Build Coastguard Worker , m_textureSpec(texture)
1346*35238bceSAndroid Build Coastguard Worker , m_isVertexCase(isVertexCase)
1347*35238bceSAndroid Build Coastguard Worker , m_has3DSize(texture.type == TEXTURETYPE_3D || texture.type == TEXTURETYPE_2D_ARRAY)
1348*35238bceSAndroid Build Coastguard Worker , m_program(DE_NULL)
1349*35238bceSAndroid Build Coastguard Worker , m_iterationCounter(0)
1350*35238bceSAndroid Build Coastguard Worker {
1351*35238bceSAndroid Build Coastguard Worker }
1352*35238bceSAndroid Build Coastguard Worker
~TextureSizeCase(void)1353*35238bceSAndroid Build Coastguard Worker TextureSizeCase::~TextureSizeCase(void)
1354*35238bceSAndroid Build Coastguard Worker {
1355*35238bceSAndroid Build Coastguard Worker deinit();
1356*35238bceSAndroid Build Coastguard Worker }
1357*35238bceSAndroid Build Coastguard Worker
deinit(void)1358*35238bceSAndroid Build Coastguard Worker void TextureSizeCase::deinit(void)
1359*35238bceSAndroid Build Coastguard Worker {
1360*35238bceSAndroid Build Coastguard Worker freeShader();
1361*35238bceSAndroid Build Coastguard Worker }
1362*35238bceSAndroid Build Coastguard Worker
iterate(void)1363*35238bceSAndroid Build Coastguard Worker TestCase::IterateResult TextureSizeCase::iterate(void)
1364*35238bceSAndroid Build Coastguard Worker {
1365*35238bceSAndroid Build Coastguard Worker const int currentIteration = m_iterationCounter++;
1366*35238bceSAndroid Build Coastguard Worker const TestSize testSizes[] = {
1367*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(1, 2, 1), 1, 0, tcu::IVec3(1, 1, 1)},
1368*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(1, 2, 1), 0, 0, tcu::IVec3(1, 2, 1)},
1369*35238bceSAndroid Build Coastguard Worker
1370*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(1, 3, 2), 0, 0, tcu::IVec3(1, 3, 2)},
1371*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(1, 3, 2), 1, 0, tcu::IVec3(1, 1, 1)},
1372*35238bceSAndroid Build Coastguard Worker
1373*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 31, 18), 0, 0, tcu::IVec3(100, 31, 18)},
1374*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 31, 18), 1, 0, tcu::IVec3(50, 15, 9)},
1375*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 31, 18), 2, 0, tcu::IVec3(25, 7, 4)},
1376*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 31, 18), 3, 0, tcu::IVec3(12, 3, 2)},
1377*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 31, 18), 4, 0, tcu::IVec3(6, 1, 1)},
1378*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 31, 18), 5, 0, tcu::IVec3(3, 1, 1)},
1379*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 31, 18), 6, 0, tcu::IVec3(1, 1, 1)},
1380*35238bceSAndroid Build Coastguard Worker
1381*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 128, 32), 0, 0, tcu::IVec3(100, 128, 32)},
1382*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 128, 32), 1, 0, tcu::IVec3(50, 64, 16)},
1383*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 128, 32), 2, 0, tcu::IVec3(25, 32, 8)},
1384*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 128, 32), 3, 0, tcu::IVec3(12, 16, 4)},
1385*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 128, 32), 4, 0, tcu::IVec3(6, 8, 2)},
1386*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 128, 32), 5, 0, tcu::IVec3(3, 4, 1)},
1387*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 128, 32), 6, 0, tcu::IVec3(1, 2, 1)},
1388*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 128, 32), 7, 0, tcu::IVec3(1, 1, 1)},
1389*35238bceSAndroid Build Coastguard Worker
1390*35238bceSAndroid Build Coastguard Worker // pow 2
1391*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(128, 64, 32), 0, 0, tcu::IVec3(128, 64, 32)},
1392*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(128, 64, 32), 1, 0, tcu::IVec3(64, 32, 16)},
1393*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(128, 64, 32), 2, 0, tcu::IVec3(32, 16, 8)},
1394*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(128, 64, 32), 3, 0, tcu::IVec3(16, 8, 4)},
1395*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(128, 64, 32), 4, 0, tcu::IVec3(8, 4, 2)},
1396*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(128, 64, 32), 5, 0, tcu::IVec3(4, 2, 1)},
1397*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(128, 64, 32), 6, 0, tcu::IVec3(2, 1, 1)},
1398*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(128, 64, 32), 7, 0, tcu::IVec3(1, 1, 1)},
1399*35238bceSAndroid Build Coastguard Worker
1400*35238bceSAndroid Build Coastguard Worker // w == h
1401*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(1, 1, 1), 0, 0, tcu::IVec3(1, 1, 1)},
1402*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(64, 64, 64), 0, 0, tcu::IVec3(64, 64, 64)},
1403*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(64, 64, 64), 1, 0, tcu::IVec3(32, 32, 32)},
1404*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(64, 64, 64), 2, 0, tcu::IVec3(16, 16, 16)},
1405*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(64, 64, 64), 3, 0, tcu::IVec3(8, 8, 8)},
1406*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(64, 64, 64), 4, 0, tcu::IVec3(4, 4, 4)},
1407*35238bceSAndroid Build Coastguard Worker
1408*35238bceSAndroid Build Coastguard Worker // with lod base
1409*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(100, 31, 18), 3, 1, tcu::IVec3(6, 1, 1)},
1410*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(128, 64, 32), 3, 1, tcu::IVec3(8, 4, 2)},
1411*35238bceSAndroid Build Coastguard Worker {tcu::IVec3(64, 64, 64), 1, 1, tcu::IVec3(16, 16, 16)},
1412*35238bceSAndroid Build Coastguard Worker
1413*35238bceSAndroid Build Coastguard Worker };
1414*35238bceSAndroid Build Coastguard Worker const int lastIterationIndex = DE_LENGTH_OF_ARRAY(testSizes) + 1;
1415*35238bceSAndroid Build Coastguard Worker
1416*35238bceSAndroid Build Coastguard Worker if (currentIteration == 0)
1417*35238bceSAndroid Build Coastguard Worker {
1418*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
1419*35238bceSAndroid Build Coastguard Worker return initShader() ? CONTINUE : STOP;
1420*35238bceSAndroid Build Coastguard Worker }
1421*35238bceSAndroid Build Coastguard Worker else if (currentIteration == lastIterationIndex)
1422*35238bceSAndroid Build Coastguard Worker {
1423*35238bceSAndroid Build Coastguard Worker freeShader();
1424*35238bceSAndroid Build Coastguard Worker return STOP;
1425*35238bceSAndroid Build Coastguard Worker }
1426*35238bceSAndroid Build Coastguard Worker else
1427*35238bceSAndroid Build Coastguard Worker {
1428*35238bceSAndroid Build Coastguard Worker if (!testTextureSize(testSizes[currentIteration - 1]))
1429*35238bceSAndroid Build Coastguard Worker if (m_testCtx.getTestResult() != QP_TEST_RESULT_FAIL)
1430*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got unexpected texture size");
1431*35238bceSAndroid Build Coastguard Worker return CONTINUE;
1432*35238bceSAndroid Build Coastguard Worker }
1433*35238bceSAndroid Build Coastguard Worker }
1434*35238bceSAndroid Build Coastguard Worker
initShader(void)1435*35238bceSAndroid Build Coastguard Worker bool TextureSizeCase::initShader(void)
1436*35238bceSAndroid Build Coastguard Worker {
1437*35238bceSAndroid Build Coastguard Worker const std::string vertSrc = genVertexShader();
1438*35238bceSAndroid Build Coastguard Worker const std::string fragSrc = genFragmentShader();
1439*35238bceSAndroid Build Coastguard Worker
1440*35238bceSAndroid Build Coastguard Worker DE_ASSERT(m_program == DE_NULL);
1441*35238bceSAndroid Build Coastguard Worker m_program = new glu::ShaderProgram(m_context.getRenderContext(), glu::makeVtxFragSources(vertSrc, fragSrc));
1442*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog() << *m_program;
1443*35238bceSAndroid Build Coastguard Worker
1444*35238bceSAndroid Build Coastguard Worker if (!m_program->isOk())
1445*35238bceSAndroid Build Coastguard Worker {
1446*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Shader failed");
1447*35238bceSAndroid Build Coastguard Worker return false;
1448*35238bceSAndroid Build Coastguard Worker }
1449*35238bceSAndroid Build Coastguard Worker
1450*35238bceSAndroid Build Coastguard Worker return true;
1451*35238bceSAndroid Build Coastguard Worker }
1452*35238bceSAndroid Build Coastguard Worker
freeShader(void)1453*35238bceSAndroid Build Coastguard Worker void TextureSizeCase::freeShader(void)
1454*35238bceSAndroid Build Coastguard Worker {
1455*35238bceSAndroid Build Coastguard Worker delete m_program;
1456*35238bceSAndroid Build Coastguard Worker m_program = DE_NULL;
1457*35238bceSAndroid Build Coastguard Worker }
1458*35238bceSAndroid Build Coastguard Worker
testTextureSize(const TestSize & testSize)1459*35238bceSAndroid Build Coastguard Worker bool TextureSizeCase::testTextureSize(const TestSize &testSize)
1460*35238bceSAndroid Build Coastguard Worker {
1461*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
1462*35238bceSAndroid Build Coastguard Worker
1463*35238bceSAndroid Build Coastguard Worker const tcu::Vec4 triangle[3] = // covers entire viewport
1464*35238bceSAndroid Build Coastguard Worker {
1465*35238bceSAndroid Build Coastguard Worker tcu::Vec4(-1, -1, 0, 1),
1466*35238bceSAndroid Build Coastguard Worker tcu::Vec4(4, -1, 0, 1),
1467*35238bceSAndroid Build Coastguard Worker tcu::Vec4(-1, 4, 0, 1),
1468*35238bceSAndroid Build Coastguard Worker };
1469*35238bceSAndroid Build Coastguard Worker
1470*35238bceSAndroid Build Coastguard Worker const glw::Functions &gl = m_context.getRenderContext().getFunctions();
1471*35238bceSAndroid Build Coastguard Worker
1472*35238bceSAndroid Build Coastguard Worker const glw::GLint positionLoc = gl.getAttribLocation(m_program->getProgram(), "a_position");
1473*35238bceSAndroid Build Coastguard Worker const glw::GLint samplerLoc = gl.getUniformLocation(m_program->getProgram(), "u_sampler");
1474*35238bceSAndroid Build Coastguard Worker const glw::GLint sizeLoc = gl.getUniformLocation(m_program->getProgram(), "u_texSize");
1475*35238bceSAndroid Build Coastguard Worker const glw::GLint lodLoc = gl.getUniformLocation(m_program->getProgram(), "u_lod");
1476*35238bceSAndroid Build Coastguard Worker const glw::GLenum textureTarget = getGLTextureTarget();
1477*35238bceSAndroid Build Coastguard Worker const bool isSquare = testSize.textureSize.x() == testSize.textureSize.y();
1478*35238bceSAndroid Build Coastguard Worker const bool is2DLodValid = (testSize.textureSize.x() >> (testSize.lod + testSize.lodBase)) != 0 ||
1479*35238bceSAndroid Build Coastguard Worker (testSize.textureSize.y() >> (testSize.lod + testSize.lodBase)) != 0;
1480*35238bceSAndroid Build Coastguard Worker bool success = true;
1481*35238bceSAndroid Build Coastguard Worker glw::GLenum errorValue;
1482*35238bceSAndroid Build Coastguard Worker
1483*35238bceSAndroid Build Coastguard Worker // Skip incompatible cases
1484*35238bceSAndroid Build Coastguard Worker if (m_textureSpec.type == TEXTURETYPE_CUBE_MAP && !isSquare)
1485*35238bceSAndroid Build Coastguard Worker return true;
1486*35238bceSAndroid Build Coastguard Worker if (m_textureSpec.type == TEXTURETYPE_2D && !is2DLodValid)
1487*35238bceSAndroid Build Coastguard Worker return true;
1488*35238bceSAndroid Build Coastguard Worker if (m_textureSpec.type == TEXTURETYPE_2D_ARRAY && !is2DLodValid)
1489*35238bceSAndroid Build Coastguard Worker return true;
1490*35238bceSAndroid Build Coastguard Worker
1491*35238bceSAndroid Build Coastguard Worker // setup rendering
1492*35238bceSAndroid Build Coastguard Worker
1493*35238bceSAndroid Build Coastguard Worker gl.useProgram(m_program->getProgram());
1494*35238bceSAndroid Build Coastguard Worker gl.uniform1i(samplerLoc, 0);
1495*35238bceSAndroid Build Coastguard Worker gl.clearColor(0.5f, 0.5f, 0.5f, 1.0f);
1496*35238bceSAndroid Build Coastguard Worker gl.viewport(0, 0, 1, 1);
1497*35238bceSAndroid Build Coastguard Worker gl.vertexAttribPointer(positionLoc, 4, GL_FLOAT, GL_FALSE, 0, triangle);
1498*35238bceSAndroid Build Coastguard Worker gl.enableVertexAttribArray(positionLoc);
1499*35238bceSAndroid Build Coastguard Worker
1500*35238bceSAndroid Build Coastguard Worker // setup texture
1501*35238bceSAndroid Build Coastguard Worker {
1502*35238bceSAndroid Build Coastguard Worker const int maxLevel = testSize.lod + testSize.lodBase;
1503*35238bceSAndroid Build Coastguard Worker const int levels = maxLevel + 1;
1504*35238bceSAndroid Build Coastguard Worker glw::GLuint texId = 0;
1505*35238bceSAndroid Build Coastguard Worker
1506*35238bceSAndroid Build Coastguard Worker // gen texture
1507*35238bceSAndroid Build Coastguard Worker gl.genTextures(1, &texId);
1508*35238bceSAndroid Build Coastguard Worker gl.bindTexture(textureTarget, texId);
1509*35238bceSAndroid Build Coastguard Worker gl.texParameteri(textureTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
1510*35238bceSAndroid Build Coastguard Worker gl.texParameteri(textureTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
1511*35238bceSAndroid Build Coastguard Worker gl.texParameteri(textureTarget, GL_TEXTURE_BASE_LEVEL, testSize.lodBase);
1512*35238bceSAndroid Build Coastguard Worker
1513*35238bceSAndroid Build Coastguard Worker // set up texture
1514*35238bceSAndroid Build Coastguard Worker
1515*35238bceSAndroid Build Coastguard Worker switch (m_textureSpec.type)
1516*35238bceSAndroid Build Coastguard Worker {
1517*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_3D:
1518*35238bceSAndroid Build Coastguard Worker {
1519*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog()
1520*35238bceSAndroid Build Coastguard Worker << TestLog::Message << "Testing image size " << testSize.textureSize.x() << "x"
1521*35238bceSAndroid Build Coastguard Worker << testSize.textureSize.y() << "x" << testSize.textureSize.z() << TestLog::EndMessage;
1522*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog() << TestLog::Message << "Lod: " << testSize.lod
1523*35238bceSAndroid Build Coastguard Worker << ", base level: " << testSize.lodBase << TestLog::EndMessage;
1524*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog()
1525*35238bceSAndroid Build Coastguard Worker << TestLog::Message << "Expecting: " << testSize.expectedSize.x() << "x" << testSize.expectedSize.y()
1526*35238bceSAndroid Build Coastguard Worker << "x" << testSize.expectedSize.z() << TestLog::EndMessage;
1527*35238bceSAndroid Build Coastguard Worker
1528*35238bceSAndroid Build Coastguard Worker gl.uniform3iv(sizeLoc, 1, testSize.expectedSize.m_data);
1529*35238bceSAndroid Build Coastguard Worker gl.uniform1iv(lodLoc, 1, &testSize.lod);
1530*35238bceSAndroid Build Coastguard Worker
1531*35238bceSAndroid Build Coastguard Worker gl.texStorage3D(textureTarget, levels, m_textureSpec.format, testSize.textureSize.x(),
1532*35238bceSAndroid Build Coastguard Worker testSize.textureSize.y(), testSize.textureSize.z());
1533*35238bceSAndroid Build Coastguard Worker break;
1534*35238bceSAndroid Build Coastguard Worker }
1535*35238bceSAndroid Build Coastguard Worker
1536*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_2D:
1537*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_CUBE_MAP:
1538*35238bceSAndroid Build Coastguard Worker {
1539*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog() << TestLog::Message << "Testing image size " << testSize.textureSize.x()
1540*35238bceSAndroid Build Coastguard Worker << "x" << testSize.textureSize.y() << TestLog::EndMessage;
1541*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog() << TestLog::Message << "Lod: " << testSize.lod
1542*35238bceSAndroid Build Coastguard Worker << ", base level: " << testSize.lodBase << TestLog::EndMessage;
1543*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog() << TestLog::Message << "Expecting: " << testSize.expectedSize.x() << "x"
1544*35238bceSAndroid Build Coastguard Worker << testSize.expectedSize.y() << TestLog::EndMessage;
1545*35238bceSAndroid Build Coastguard Worker
1546*35238bceSAndroid Build Coastguard Worker gl.uniform2iv(sizeLoc, 1, testSize.expectedSize.m_data);
1547*35238bceSAndroid Build Coastguard Worker gl.uniform1iv(lodLoc, 1, &testSize.lod);
1548*35238bceSAndroid Build Coastguard Worker
1549*35238bceSAndroid Build Coastguard Worker gl.texStorage2D(textureTarget, levels, m_textureSpec.format, testSize.textureSize.x(),
1550*35238bceSAndroid Build Coastguard Worker testSize.textureSize.y());
1551*35238bceSAndroid Build Coastguard Worker break;
1552*35238bceSAndroid Build Coastguard Worker }
1553*35238bceSAndroid Build Coastguard Worker
1554*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_2D_ARRAY:
1555*35238bceSAndroid Build Coastguard Worker {
1556*35238bceSAndroid Build Coastguard Worker tcu::IVec3 expectedSize(testSize.expectedSize.x(), testSize.expectedSize.y(), testSize.textureSize.z());
1557*35238bceSAndroid Build Coastguard Worker
1558*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog() << TestLog::Message << "Testing image size " << testSize.textureSize.x()
1559*35238bceSAndroid Build Coastguard Worker << "x" << testSize.textureSize.y() << " with "
1560*35238bceSAndroid Build Coastguard Worker << testSize.textureSize.z() << " layer(s)" << TestLog::EndMessage;
1561*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog() << TestLog::Message << "Lod: " << testSize.lod
1562*35238bceSAndroid Build Coastguard Worker << ", base level: " << testSize.lodBase << TestLog::EndMessage;
1563*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog()
1564*35238bceSAndroid Build Coastguard Worker << TestLog::Message << "Expecting: " << testSize.expectedSize.x() << "x" << testSize.expectedSize.y()
1565*35238bceSAndroid Build Coastguard Worker << " and " << testSize.textureSize.z() << " layer(s)" << TestLog::EndMessage;
1566*35238bceSAndroid Build Coastguard Worker
1567*35238bceSAndroid Build Coastguard Worker gl.uniform3iv(sizeLoc, 1, expectedSize.m_data);
1568*35238bceSAndroid Build Coastguard Worker gl.uniform1iv(lodLoc, 1, &testSize.lod);
1569*35238bceSAndroid Build Coastguard Worker
1570*35238bceSAndroid Build Coastguard Worker gl.texStorage3D(textureTarget, levels, m_textureSpec.format, testSize.textureSize.x(),
1571*35238bceSAndroid Build Coastguard Worker testSize.textureSize.y(), testSize.textureSize.z());
1572*35238bceSAndroid Build Coastguard Worker break;
1573*35238bceSAndroid Build Coastguard Worker }
1574*35238bceSAndroid Build Coastguard Worker
1575*35238bceSAndroid Build Coastguard Worker default:
1576*35238bceSAndroid Build Coastguard Worker {
1577*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
1578*35238bceSAndroid Build Coastguard Worker break;
1579*35238bceSAndroid Build Coastguard Worker }
1580*35238bceSAndroid Build Coastguard Worker }
1581*35238bceSAndroid Build Coastguard Worker
1582*35238bceSAndroid Build Coastguard Worker errorValue = gl.getError();
1583*35238bceSAndroid Build Coastguard Worker if (errorValue == GL_OUT_OF_MEMORY)
1584*35238bceSAndroid Build Coastguard Worker {
1585*35238bceSAndroid Build Coastguard Worker throw glu::OutOfMemoryError("Failed to allocate texture, got GL_OUT_OF_MEMORY.", "TexStorageXD", __FILE__,
1586*35238bceSAndroid Build Coastguard Worker __LINE__);
1587*35238bceSAndroid Build Coastguard Worker }
1588*35238bceSAndroid Build Coastguard Worker else if (errorValue != GL_NO_ERROR)
1589*35238bceSAndroid Build Coastguard Worker {
1590*35238bceSAndroid Build Coastguard Worker // error is a failure too
1591*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog() << tcu::TestLog::Message << "Failed, got "
1592*35238bceSAndroid Build Coastguard Worker << glu::getErrorStr(errorValue) << "." << tcu::TestLog::EndMessage;
1593*35238bceSAndroid Build Coastguard Worker success = false;
1594*35238bceSAndroid Build Coastguard Worker }
1595*35238bceSAndroid Build Coastguard Worker else
1596*35238bceSAndroid Build Coastguard Worker {
1597*35238bceSAndroid Build Coastguard Worker // test
1598*35238bceSAndroid Build Coastguard Worker const float colorTolerance = 0.1f;
1599*35238bceSAndroid Build Coastguard Worker tcu::TextureLevel sample(tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8), 1,
1600*35238bceSAndroid Build Coastguard Worker 1);
1601*35238bceSAndroid Build Coastguard Worker tcu::Vec4 outputColor;
1602*35238bceSAndroid Build Coastguard Worker
1603*35238bceSAndroid Build Coastguard Worker gl.clear(GL_COLOR_BUFFER_BIT);
1604*35238bceSAndroid Build Coastguard Worker gl.drawArrays(GL_TRIANGLES, 0, 3);
1605*35238bceSAndroid Build Coastguard Worker gl.finish();
1606*35238bceSAndroid Build Coastguard Worker
1607*35238bceSAndroid Build Coastguard Worker glu::readPixels(m_context.getRenderContext(), 0, 0, sample.getAccess());
1608*35238bceSAndroid Build Coastguard Worker
1609*35238bceSAndroid Build Coastguard Worker outputColor = sample.getAccess().getPixel(0, 0);
1610*35238bceSAndroid Build Coastguard Worker
1611*35238bceSAndroid Build Coastguard Worker if (outputColor.x() >= 1.0f - colorTolerance && outputColor.y() >= 1.0f - colorTolerance &&
1612*35238bceSAndroid Build Coastguard Worker outputColor.z() >= 1.0f - colorTolerance)
1613*35238bceSAndroid Build Coastguard Worker {
1614*35238bceSAndroid Build Coastguard Worker // success
1615*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog() << TestLog::Message << "Passed" << TestLog::EndMessage;
1616*35238bceSAndroid Build Coastguard Worker }
1617*35238bceSAndroid Build Coastguard Worker else
1618*35238bceSAndroid Build Coastguard Worker {
1619*35238bceSAndroid Build Coastguard Worker // failure
1620*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog() << TestLog::Message << "Failed" << TestLog::EndMessage;
1621*35238bceSAndroid Build Coastguard Worker success = false;
1622*35238bceSAndroid Build Coastguard Worker }
1623*35238bceSAndroid Build Coastguard Worker }
1624*35238bceSAndroid Build Coastguard Worker
1625*35238bceSAndroid Build Coastguard Worker // empty line to format log nicely
1626*35238bceSAndroid Build Coastguard Worker m_context.getTestContext().getLog() << TestLog::Message << TestLog::EndMessage;
1627*35238bceSAndroid Build Coastguard Worker
1628*35238bceSAndroid Build Coastguard Worker // free
1629*35238bceSAndroid Build Coastguard Worker gl.bindTexture(textureTarget, 0);
1630*35238bceSAndroid Build Coastguard Worker gl.deleteTextures(1, &texId);
1631*35238bceSAndroid Build Coastguard Worker }
1632*35238bceSAndroid Build Coastguard Worker
1633*35238bceSAndroid Build Coastguard Worker gl.useProgram(0);
1634*35238bceSAndroid Build Coastguard Worker
1635*35238bceSAndroid Build Coastguard Worker return success;
1636*35238bceSAndroid Build Coastguard Worker }
1637*35238bceSAndroid Build Coastguard Worker
genVertexShader() const1638*35238bceSAndroid Build Coastguard Worker std::string TextureSizeCase::genVertexShader() const
1639*35238bceSAndroid Build Coastguard Worker {
1640*35238bceSAndroid Build Coastguard Worker std::ostringstream vert;
1641*35238bceSAndroid Build Coastguard Worker
1642*35238bceSAndroid Build Coastguard Worker vert << "#version 300 es\n"
1643*35238bceSAndroid Build Coastguard Worker << "in highp vec4 a_position;\n";
1644*35238bceSAndroid Build Coastguard Worker
1645*35238bceSAndroid Build Coastguard Worker if (m_isVertexCase)
1646*35238bceSAndroid Build Coastguard Worker {
1647*35238bceSAndroid Build Coastguard Worker vert << "out mediump vec4 v_color;\n";
1648*35238bceSAndroid Build Coastguard Worker vert << "uniform highp " << m_samplerTypeStr << " u_sampler;\n";
1649*35238bceSAndroid Build Coastguard Worker vert << "uniform highp ivec" << (m_has3DSize ? 3 : 2) << " u_texSize;\n";
1650*35238bceSAndroid Build Coastguard Worker vert << "uniform highp int u_lod;\n";
1651*35238bceSAndroid Build Coastguard Worker }
1652*35238bceSAndroid Build Coastguard Worker
1653*35238bceSAndroid Build Coastguard Worker vert << "void main()\n{\n";
1654*35238bceSAndroid Build Coastguard Worker
1655*35238bceSAndroid Build Coastguard Worker if (m_isVertexCase)
1656*35238bceSAndroid Build Coastguard Worker vert << " v_color = (textureSize(u_sampler, u_lod) == u_texSize ? vec4(1.0, 1.0, 1.0, 1.0) : vec4(0.0, 0.0, "
1657*35238bceSAndroid Build Coastguard Worker "0.0, 1.0));\n";
1658*35238bceSAndroid Build Coastguard Worker
1659*35238bceSAndroid Build Coastguard Worker vert << " gl_Position = a_position;\n"
1660*35238bceSAndroid Build Coastguard Worker << "}\n";
1661*35238bceSAndroid Build Coastguard Worker
1662*35238bceSAndroid Build Coastguard Worker return vert.str();
1663*35238bceSAndroid Build Coastguard Worker }
1664*35238bceSAndroid Build Coastguard Worker
genFragmentShader() const1665*35238bceSAndroid Build Coastguard Worker std::string TextureSizeCase::genFragmentShader() const
1666*35238bceSAndroid Build Coastguard Worker {
1667*35238bceSAndroid Build Coastguard Worker std::ostringstream frag;
1668*35238bceSAndroid Build Coastguard Worker
1669*35238bceSAndroid Build Coastguard Worker frag << "#version 300 es\n"
1670*35238bceSAndroid Build Coastguard Worker << "layout(location = 0) out mediump vec4 o_color;\n";
1671*35238bceSAndroid Build Coastguard Worker
1672*35238bceSAndroid Build Coastguard Worker if (m_isVertexCase)
1673*35238bceSAndroid Build Coastguard Worker frag << "in mediump vec4 v_color;\n";
1674*35238bceSAndroid Build Coastguard Worker
1675*35238bceSAndroid Build Coastguard Worker if (!m_isVertexCase)
1676*35238bceSAndroid Build Coastguard Worker {
1677*35238bceSAndroid Build Coastguard Worker frag << "uniform highp " << m_samplerTypeStr << " u_sampler;\n";
1678*35238bceSAndroid Build Coastguard Worker frag << "uniform highp ivec" << (m_has3DSize ? 3 : 2) << " u_texSize;\n";
1679*35238bceSAndroid Build Coastguard Worker frag << "uniform highp int u_lod;\n";
1680*35238bceSAndroid Build Coastguard Worker }
1681*35238bceSAndroid Build Coastguard Worker
1682*35238bceSAndroid Build Coastguard Worker frag << "void main()\n{\n";
1683*35238bceSAndroid Build Coastguard Worker
1684*35238bceSAndroid Build Coastguard Worker if (!m_isVertexCase)
1685*35238bceSAndroid Build Coastguard Worker frag << " o_color = (textureSize(u_sampler, u_lod) == u_texSize ? vec4(1.0, 1.0, 1.0, 1.0) : vec4(0.0, 0.0, "
1686*35238bceSAndroid Build Coastguard Worker "0.0, 1.0));\n";
1687*35238bceSAndroid Build Coastguard Worker else
1688*35238bceSAndroid Build Coastguard Worker frag << " o_color = v_color;\n";
1689*35238bceSAndroid Build Coastguard Worker
1690*35238bceSAndroid Build Coastguard Worker frag << "}\n";
1691*35238bceSAndroid Build Coastguard Worker
1692*35238bceSAndroid Build Coastguard Worker return frag.str();
1693*35238bceSAndroid Build Coastguard Worker }
1694*35238bceSAndroid Build Coastguard Worker
getGLTextureTarget() const1695*35238bceSAndroid Build Coastguard Worker glw::GLenum TextureSizeCase::getGLTextureTarget() const
1696*35238bceSAndroid Build Coastguard Worker {
1697*35238bceSAndroid Build Coastguard Worker switch (m_textureSpec.type)
1698*35238bceSAndroid Build Coastguard Worker {
1699*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_2D:
1700*35238bceSAndroid Build Coastguard Worker return GL_TEXTURE_2D;
1701*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_CUBE_MAP:
1702*35238bceSAndroid Build Coastguard Worker return GL_TEXTURE_CUBE_MAP;
1703*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_2D_ARRAY:
1704*35238bceSAndroid Build Coastguard Worker return GL_TEXTURE_2D_ARRAY;
1705*35238bceSAndroid Build Coastguard Worker case TEXTURETYPE_3D:
1706*35238bceSAndroid Build Coastguard Worker return GL_TEXTURE_3D;
1707*35238bceSAndroid Build Coastguard Worker default:
1708*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
1709*35238bceSAndroid Build Coastguard Worker }
1710*35238bceSAndroid Build Coastguard Worker return 0;
1711*35238bceSAndroid Build Coastguard Worker }
1712*35238bceSAndroid Build Coastguard Worker
ShaderTextureFunctionTests(Context & context)1713*35238bceSAndroid Build Coastguard Worker ShaderTextureFunctionTests::ShaderTextureFunctionTests(Context &context)
1714*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "texture_functions", "Texture Access Function Tests")
1715*35238bceSAndroid Build Coastguard Worker {
1716*35238bceSAndroid Build Coastguard Worker }
1717*35238bceSAndroid Build Coastguard Worker
~ShaderTextureFunctionTests(void)1718*35238bceSAndroid Build Coastguard Worker ShaderTextureFunctionTests::~ShaderTextureFunctionTests(void)
1719*35238bceSAndroid Build Coastguard Worker {
1720*35238bceSAndroid Build Coastguard Worker }
1721*35238bceSAndroid Build Coastguard Worker
1722*35238bceSAndroid Build Coastguard Worker enum CaseFlags
1723*35238bceSAndroid Build Coastguard Worker {
1724*35238bceSAndroid Build Coastguard Worker VERTEX = (1 << 0),
1725*35238bceSAndroid Build Coastguard Worker FRAGMENT = (1 << 1),
1726*35238bceSAndroid Build Coastguard Worker BOTH = VERTEX | FRAGMENT
1727*35238bceSAndroid Build Coastguard Worker };
1728*35238bceSAndroid Build Coastguard Worker
1729*35238bceSAndroid Build Coastguard Worker struct TexFuncCaseSpec
1730*35238bceSAndroid Build Coastguard Worker {
1731*35238bceSAndroid Build Coastguard Worker const char *name;
1732*35238bceSAndroid Build Coastguard Worker TextureLookupSpec lookupSpec;
1733*35238bceSAndroid Build Coastguard Worker TextureSpec texSpec;
1734*35238bceSAndroid Build Coastguard Worker TexEvalFunc evalFunc;
1735*35238bceSAndroid Build Coastguard Worker uint32_t flags;
1736*35238bceSAndroid Build Coastguard Worker };
1737*35238bceSAndroid Build Coastguard Worker
1738*35238bceSAndroid Build Coastguard Worker #define CASE_SPEC(NAME, FUNC, MINCOORD, MAXCOORD, USEBIAS, MINLOD, MAXLOD, USEOFFSET, OFFSET, TEXSPEC, EVALFUNC, \
1739*35238bceSAndroid Build Coastguard Worker FLAGS) \
1740*35238bceSAndroid Build Coastguard Worker { \
1741*35238bceSAndroid Build Coastguard Worker #NAME, \
1742*35238bceSAndroid Build Coastguard Worker TextureLookupSpec(FUNC, MINCOORD, MAXCOORD, USEBIAS, MINLOD, MAXLOD, tcu::Vec3(0.0f), tcu::Vec3(0.0f), \
1743*35238bceSAndroid Build Coastguard Worker tcu::Vec3(0.0f), tcu::Vec3(0.0f), USEOFFSET, OFFSET), \
1744*35238bceSAndroid Build Coastguard Worker TEXSPEC, EVALFUNC, FLAGS \
1745*35238bceSAndroid Build Coastguard Worker }
1746*35238bceSAndroid Build Coastguard Worker #define GRAD_CASE_SPEC(NAME, FUNC, MINCOORD, MAXCOORD, MINDX, MAXDX, MINDY, MAXDY, USEOFFSET, OFFSET, TEXSPEC, \
1747*35238bceSAndroid Build Coastguard Worker EVALFUNC, FLAGS) \
1748*35238bceSAndroid Build Coastguard Worker { \
1749*35238bceSAndroid Build Coastguard Worker #NAME, \
1750*35238bceSAndroid Build Coastguard Worker TextureLookupSpec(FUNC, MINCOORD, MAXCOORD, false, 0.0f, 0.0f, MINDX, MAXDX, MINDY, MAXDY, USEOFFSET, \
1751*35238bceSAndroid Build Coastguard Worker OFFSET), \
1752*35238bceSAndroid Build Coastguard Worker TEXSPEC, EVALFUNC, FLAGS \
1753*35238bceSAndroid Build Coastguard Worker }
1754*35238bceSAndroid Build Coastguard Worker
createCaseGroup(TestCaseGroup * parent,const char * groupName,const char * groupDesc,const TexFuncCaseSpec * cases,int numCases)1755*35238bceSAndroid Build Coastguard Worker static void createCaseGroup(TestCaseGroup *parent, const char *groupName, const char *groupDesc,
1756*35238bceSAndroid Build Coastguard Worker const TexFuncCaseSpec *cases, int numCases)
1757*35238bceSAndroid Build Coastguard Worker {
1758*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *group = new tcu::TestCaseGroup(parent->getTestContext(), groupName, groupDesc);
1759*35238bceSAndroid Build Coastguard Worker parent->addChild(group);
1760*35238bceSAndroid Build Coastguard Worker
1761*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < numCases; ndx++)
1762*35238bceSAndroid Build Coastguard Worker {
1763*35238bceSAndroid Build Coastguard Worker std::string name = cases[ndx].name;
1764*35238bceSAndroid Build Coastguard Worker if (cases[ndx].flags & VERTEX)
1765*35238bceSAndroid Build Coastguard Worker group->addChild(new ShaderTextureFunctionCase(parent->getContext(), (name + "_vertex").c_str(), "",
1766*35238bceSAndroid Build Coastguard Worker cases[ndx].lookupSpec, cases[ndx].texSpec,
1767*35238bceSAndroid Build Coastguard Worker cases[ndx].evalFunc, true));
1768*35238bceSAndroid Build Coastguard Worker if (cases[ndx].flags & FRAGMENT)
1769*35238bceSAndroid Build Coastguard Worker group->addChild(new ShaderTextureFunctionCase(parent->getContext(), (name + "_fragment").c_str(), "",
1770*35238bceSAndroid Build Coastguard Worker cases[ndx].lookupSpec, cases[ndx].texSpec,
1771*35238bceSAndroid Build Coastguard Worker cases[ndx].evalFunc, false));
1772*35238bceSAndroid Build Coastguard Worker }
1773*35238bceSAndroid Build Coastguard Worker }
1774*35238bceSAndroid Build Coastguard Worker
init(void)1775*35238bceSAndroid Build Coastguard Worker void ShaderTextureFunctionTests::init(void)
1776*35238bceSAndroid Build Coastguard Worker {
1777*35238bceSAndroid Build Coastguard Worker // Samplers
1778*35238bceSAndroid Build Coastguard Worker static const tcu::Sampler samplerNearestNoMipmap(
1779*35238bceSAndroid Build Coastguard Worker tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::NEAREST,
1780*35238bceSAndroid Build Coastguard Worker tcu::Sampler::NEAREST, 0.0f /* LOD threshold */, true /* normalized coords */, tcu::Sampler::COMPAREMODE_NONE,
1781*35238bceSAndroid Build Coastguard Worker 0 /* cmp channel */, tcu::Vec4(0.0f) /* border color */, true /* seamless cube map */);
1782*35238bceSAndroid Build Coastguard Worker static const tcu::Sampler samplerLinearNoMipmap(
1783*35238bceSAndroid Build Coastguard Worker tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::LINEAR,
1784*35238bceSAndroid Build Coastguard Worker tcu::Sampler::LINEAR, 0.0f /* LOD threshold */, true /* normalized coords */, tcu::Sampler::COMPAREMODE_NONE,
1785*35238bceSAndroid Build Coastguard Worker 0 /* cmp channel */, tcu::Vec4(0.0f) /* border color */, true /* seamless cube map */);
1786*35238bceSAndroid Build Coastguard Worker static const tcu::Sampler samplerNearestMipmap(
1787*35238bceSAndroid Build Coastguard Worker tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::NEAREST_MIPMAP_NEAREST,
1788*35238bceSAndroid Build Coastguard Worker tcu::Sampler::NEAREST, 0.0f /* LOD threshold */, true /* normalized coords */, tcu::Sampler::COMPAREMODE_NONE,
1789*35238bceSAndroid Build Coastguard Worker 0 /* cmp channel */, tcu::Vec4(0.0f) /* border color */, true /* seamless cube map */);
1790*35238bceSAndroid Build Coastguard Worker static const tcu::Sampler samplerLinearMipmap(
1791*35238bceSAndroid Build Coastguard Worker tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::LINEAR_MIPMAP_NEAREST,
1792*35238bceSAndroid Build Coastguard Worker tcu::Sampler::LINEAR, 0.0f /* LOD threshold */, true /* normalized coords */, tcu::Sampler::COMPAREMODE_NONE,
1793*35238bceSAndroid Build Coastguard Worker 0 /* cmp channel */, tcu::Vec4(0.0f) /* border color */, true /* seamless cube map */);
1794*35238bceSAndroid Build Coastguard Worker
1795*35238bceSAndroid Build Coastguard Worker static const tcu::Sampler samplerShadowNoMipmap(
1796*35238bceSAndroid Build Coastguard Worker tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::NEAREST,
1797*35238bceSAndroid Build Coastguard Worker tcu::Sampler::NEAREST, 0.0f /* LOD threshold */, true /* normalized coords */, tcu::Sampler::COMPAREMODE_LESS,
1798*35238bceSAndroid Build Coastguard Worker 0 /* cmp channel */, tcu::Vec4(0.0f) /* border color */, true /* seamless cube map */);
1799*35238bceSAndroid Build Coastguard Worker static const tcu::Sampler samplerShadowMipmap(
1800*35238bceSAndroid Build Coastguard Worker tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::NEAREST_MIPMAP_NEAREST,
1801*35238bceSAndroid Build Coastguard Worker tcu::Sampler::NEAREST, 0.0f /* LOD threshold */, true /* normalized coords */, tcu::Sampler::COMPAREMODE_LESS,
1802*35238bceSAndroid Build Coastguard Worker 0 /* cmp channel */, tcu::Vec4(0.0f) /* border color */, true /* seamless cube map */);
1803*35238bceSAndroid Build Coastguard Worker
1804*35238bceSAndroid Build Coastguard Worker static const tcu::Sampler samplerTexelFetch(
1805*35238bceSAndroid Build Coastguard Worker tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::REPEAT_GL, tcu::Sampler::NEAREST_MIPMAP_NEAREST,
1806*35238bceSAndroid Build Coastguard Worker tcu::Sampler::NEAREST, 0.0f /* LOD threshold */, false /* non-normalized coords */,
1807*35238bceSAndroid Build Coastguard Worker tcu::Sampler::COMPAREMODE_NONE, 0 /* cmp channel */, tcu::Vec4(0.0f) /* border color */,
1808*35238bceSAndroid Build Coastguard Worker true /* seamless cube map */);
1809*35238bceSAndroid Build Coastguard Worker
1810*35238bceSAndroid Build Coastguard Worker // Default textures.
1811*35238bceSAndroid Build Coastguard Worker // Type Format W H D L Sampler
1812*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DFixed(TEXTURETYPE_2D, GL_RGBA8, 256, 256, 1, 1, samplerLinearNoMipmap);
1813*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DFloat(TEXTURETYPE_2D, GL_RGBA16F, 256, 256, 1, 1, samplerLinearNoMipmap);
1814*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DInt(TEXTURETYPE_2D, GL_RGBA8I, 256, 256, 1, 1, samplerNearestNoMipmap);
1815*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DUint(TEXTURETYPE_2D, GL_RGBA8UI, 256, 256, 1, 1, samplerNearestNoMipmap);
1816*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DMipmapFixed(TEXTURETYPE_2D, GL_RGBA8, 256, 256, 1, 9, samplerLinearMipmap);
1817*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DMipmapFloat(TEXTURETYPE_2D, GL_RGBA16F, 256, 256, 1, 9, samplerLinearMipmap);
1818*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DMipmapInt(TEXTURETYPE_2D, GL_RGBA8I, 256, 256, 1, 9, samplerNearestMipmap);
1819*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DMipmapUint(TEXTURETYPE_2D, GL_RGBA8UI, 256, 256, 1, 9, samplerNearestMipmap);
1820*35238bceSAndroid Build Coastguard Worker
1821*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DShadow(TEXTURETYPE_2D, GL_DEPTH_COMPONENT16, 256, 256, 1, 9, samplerShadowNoMipmap);
1822*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DMipmapShadow(TEXTURETYPE_2D, GL_DEPTH_COMPONENT16, 256, 256, 1, 9,
1823*35238bceSAndroid Build Coastguard Worker samplerShadowMipmap);
1824*35238bceSAndroid Build Coastguard Worker
1825*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DTexelFetchFixed(TEXTURETYPE_2D, GL_RGBA8, 256, 256, 1, 9, samplerTexelFetch);
1826*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DTexelFetchFloat(TEXTURETYPE_2D, GL_RGBA16F, 256, 256, 1, 9, samplerTexelFetch);
1827*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DTexelFetchInt(TEXTURETYPE_2D, GL_RGBA8I, 256, 256, 1, 9, samplerTexelFetch);
1828*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DTexelFetchUint(TEXTURETYPE_2D, GL_RGBA8UI, 256, 256, 1, 9, samplerTexelFetch);
1829*35238bceSAndroid Build Coastguard Worker
1830*35238bceSAndroid Build Coastguard Worker static const TextureSpec texCubeFixed(TEXTURETYPE_CUBE_MAP, GL_RGBA8, 256, 256, 1, 1, samplerLinearNoMipmap);
1831*35238bceSAndroid Build Coastguard Worker static const TextureSpec texCubeFloat(TEXTURETYPE_CUBE_MAP, GL_RGBA16F, 256, 256, 1, 1, samplerLinearNoMipmap);
1832*35238bceSAndroid Build Coastguard Worker static const TextureSpec texCubeInt(TEXTURETYPE_CUBE_MAP, GL_RGBA8I, 256, 256, 1, 1, samplerNearestNoMipmap);
1833*35238bceSAndroid Build Coastguard Worker static const TextureSpec texCubeUint(TEXTURETYPE_CUBE_MAP, GL_RGBA8UI, 256, 256, 1, 1, samplerNearestNoMipmap);
1834*35238bceSAndroid Build Coastguard Worker static const TextureSpec texCubeMipmapFixed(TEXTURETYPE_CUBE_MAP, GL_RGBA8, 256, 256, 1, 9, samplerLinearMipmap);
1835*35238bceSAndroid Build Coastguard Worker static const TextureSpec texCubeMipmapFloat(TEXTURETYPE_CUBE_MAP, GL_RGBA16F, 128, 128, 1, 8, samplerLinearMipmap);
1836*35238bceSAndroid Build Coastguard Worker static const TextureSpec texCubeMipmapInt(TEXTURETYPE_CUBE_MAP, GL_RGBA8I, 256, 256, 1, 9, samplerNearestMipmap);
1837*35238bceSAndroid Build Coastguard Worker static const TextureSpec texCubeMipmapUint(TEXTURETYPE_CUBE_MAP, GL_RGBA8UI, 256, 256, 1, 9, samplerNearestMipmap);
1838*35238bceSAndroid Build Coastguard Worker
1839*35238bceSAndroid Build Coastguard Worker static const TextureSpec texCubeShadow(TEXTURETYPE_CUBE_MAP, GL_DEPTH_COMPONENT16, 256, 256, 1, 1,
1840*35238bceSAndroid Build Coastguard Worker samplerShadowNoMipmap);
1841*35238bceSAndroid Build Coastguard Worker static const TextureSpec texCubeMipmapShadow(TEXTURETYPE_CUBE_MAP, GL_DEPTH_COMPONENT16, 256, 256, 1, 9,
1842*35238bceSAndroid Build Coastguard Worker samplerShadowMipmap);
1843*35238bceSAndroid Build Coastguard Worker
1844*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayFixed(TEXTURETYPE_2D_ARRAY, GL_RGBA8, 128, 128, 4, 1, samplerLinearNoMipmap);
1845*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayFloat(TEXTURETYPE_2D_ARRAY, GL_RGBA16F, 128, 128, 4, 1, samplerLinearNoMipmap);
1846*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayInt(TEXTURETYPE_2D_ARRAY, GL_RGBA8I, 128, 128, 4, 1, samplerNearestNoMipmap);
1847*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayUint(TEXTURETYPE_2D_ARRAY, GL_RGBA8UI, 128, 128, 4, 1, samplerNearestNoMipmap);
1848*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayMipmapFixed(TEXTURETYPE_2D_ARRAY, GL_RGBA8, 128, 128, 4, 8, samplerLinearMipmap);
1849*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayMipmapFloat(TEXTURETYPE_2D_ARRAY, GL_RGBA16F, 128, 128, 4, 8,
1850*35238bceSAndroid Build Coastguard Worker samplerLinearMipmap);
1851*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayMipmapInt(TEXTURETYPE_2D_ARRAY, GL_RGBA8I, 128, 128, 4, 8, samplerNearestMipmap);
1852*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayMipmapUint(TEXTURETYPE_2D_ARRAY, GL_RGBA8UI, 128, 128, 4, 8,
1853*35238bceSAndroid Build Coastguard Worker samplerNearestMipmap);
1854*35238bceSAndroid Build Coastguard Worker
1855*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayShadow(TEXTURETYPE_2D_ARRAY, GL_DEPTH_COMPONENT16, 128, 128, 4, 1,
1856*35238bceSAndroid Build Coastguard Worker samplerShadowNoMipmap);
1857*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayMipmapShadow(TEXTURETYPE_2D_ARRAY, GL_DEPTH_COMPONENT16, 128, 128, 4, 8,
1858*35238bceSAndroid Build Coastguard Worker samplerShadowMipmap);
1859*35238bceSAndroid Build Coastguard Worker
1860*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayTexelFetchFixed(TEXTURETYPE_2D_ARRAY, GL_RGBA8, 128, 128, 4, 8,
1861*35238bceSAndroid Build Coastguard Worker samplerTexelFetch);
1862*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayTexelFetchFloat(TEXTURETYPE_2D_ARRAY, GL_RGBA16F, 128, 128, 4, 8,
1863*35238bceSAndroid Build Coastguard Worker samplerTexelFetch);
1864*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayTexelFetchInt(TEXTURETYPE_2D_ARRAY, GL_RGBA8I, 128, 128, 4, 8,
1865*35238bceSAndroid Build Coastguard Worker samplerTexelFetch);
1866*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex2DArrayTexelFetchUint(TEXTURETYPE_2D_ARRAY, GL_RGBA8UI, 128, 128, 4, 8,
1867*35238bceSAndroid Build Coastguard Worker samplerTexelFetch);
1868*35238bceSAndroid Build Coastguard Worker
1869*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex3DFixed(TEXTURETYPE_3D, GL_RGBA8, 64, 32, 32, 1, samplerLinearNoMipmap);
1870*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex3DFloat(TEXTURETYPE_3D, GL_RGBA16F, 64, 32, 32, 1, samplerLinearNoMipmap);
1871*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex3DInt(TEXTURETYPE_3D, GL_RGBA8I, 64, 32, 32, 1, samplerNearestNoMipmap);
1872*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex3DUint(TEXTURETYPE_3D, GL_RGBA8UI, 64, 32, 32, 1, samplerNearestNoMipmap);
1873*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex3DMipmapFixed(TEXTURETYPE_3D, GL_RGBA8, 64, 32, 32, 7, samplerLinearMipmap);
1874*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex3DMipmapFloat(TEXTURETYPE_3D, GL_RGBA16F, 64, 32, 32, 7, samplerLinearMipmap);
1875*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex3DMipmapInt(TEXTURETYPE_3D, GL_RGBA8I, 64, 32, 32, 7, samplerNearestMipmap);
1876*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex3DMipmapUint(TEXTURETYPE_3D, GL_RGBA8UI, 64, 32, 32, 7, samplerNearestMipmap);
1877*35238bceSAndroid Build Coastguard Worker
1878*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex3DTexelFetchFixed(TEXTURETYPE_3D, GL_RGBA8, 64, 32, 32, 7, samplerTexelFetch);
1879*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex3DTexelFetchFloat(TEXTURETYPE_3D, GL_RGBA16F, 64, 32, 32, 7, samplerTexelFetch);
1880*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex3DTexelFetchInt(TEXTURETYPE_3D, GL_RGBA8I, 64, 32, 32, 7, samplerTexelFetch);
1881*35238bceSAndroid Build Coastguard Worker static const TextureSpec tex3DTexelFetchUint(TEXTURETYPE_3D, GL_RGBA8UI, 64, 32, 32, 7, samplerTexelFetch);
1882*35238bceSAndroid Build Coastguard Worker
1883*35238bceSAndroid Build Coastguard Worker // texture() cases
1884*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec textureCases[] = {
1885*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord Bias? MinLod MaxLod Offset? Offset Format EvalFunc Flags
1886*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_fixed, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
1887*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DFixed, evalTexture2D, VERTEX),
1888*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_fixed, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
1889*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DMipmapFixed, evalTexture2D, FRAGMENT),
1890*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_float, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
1891*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DFloat, evalTexture2D, VERTEX),
1892*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_float, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
1893*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DMipmapFloat, evalTexture2D, FRAGMENT),
1894*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), false,
1895*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, false, IVec3(0), tex2DInt, evalTexture2D, VERTEX),
1896*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), false,
1897*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, false, IVec3(0), tex2DMipmapInt, evalTexture2D, FRAGMENT),
1898*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), false,
1899*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, false, IVec3(0), tex2DUint, evalTexture2D, VERTEX),
1900*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), false,
1901*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, false, IVec3(0), tex2DMipmapUint, evalTexture2D, FRAGMENT),
1902*35238bceSAndroid Build Coastguard Worker
1903*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_bias_fixed, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
1904*35238bceSAndroid Build Coastguard Worker true, -2.0f, 2.0f, false, IVec3(0), tex2DMipmapFixed, evalTexture2DBias, FRAGMENT),
1905*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_bias_float, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
1906*35238bceSAndroid Build Coastguard Worker true, -2.0f, 2.0f, false, IVec3(0), tex2DMipmapFloat, evalTexture2DBias, FRAGMENT),
1907*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_bias, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), true,
1908*35238bceSAndroid Build Coastguard Worker -2.0f, 2.0f, false, IVec3(0), tex2DMipmapInt, evalTexture2DBias, FRAGMENT),
1909*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_bias, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), true,
1910*35238bceSAndroid Build Coastguard Worker -2.0f, 2.0f, false, IVec3(0), tex2DMipmapUint, evalTexture2DBias, FRAGMENT),
1911*35238bceSAndroid Build Coastguard Worker
1912*35238bceSAndroid Build Coastguard Worker CASE_SPEC(samplercube_fixed, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, 1.01f, 0.0f), Vec4(1.0f, 1.0f, 1.01f, 0.0f),
1913*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), texCubeFixed, evalTextureCube, VERTEX),
1914*35238bceSAndroid Build Coastguard Worker CASE_SPEC(samplercube_fixed, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, 1.01f, 0.0f), Vec4(1.0f, 1.0f, 1.01f, 0.0f),
1915*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), texCubeMipmapFixed, evalTextureCube, FRAGMENT),
1916*35238bceSAndroid Build Coastguard Worker CASE_SPEC(samplercube_float, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, -1.01f, 0.0f), Vec4(1.0f, 1.0f, -1.01f, 0.0f),
1917*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), texCubeFloat, evalTextureCube, VERTEX),
1918*35238bceSAndroid Build Coastguard Worker CASE_SPEC(samplercube_float, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, -1.01f, 0.0f), Vec4(1.0f, 1.0f, -1.01f, 0.0f),
1919*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), texCubeMipmapFloat, evalTextureCube, FRAGMENT),
1920*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isamplercube, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, 1.01f, 0.0f), Vec4(1.0f, 1.0f, 1.01f, 0.0f), false,
1921*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, false, IVec3(0), texCubeInt, evalTextureCube, VERTEX),
1922*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isamplercube, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, 1.01f, 0.0f), Vec4(1.0f, 1.0f, 1.01f, 0.0f), false,
1923*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, false, IVec3(0), texCubeMipmapInt, evalTextureCube, FRAGMENT),
1924*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usamplercube, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, -1.01f, 0.0f), Vec4(1.0f, 1.0f, -1.01f, 0.0f),
1925*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), texCubeUint, evalTextureCube, VERTEX),
1926*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usamplercube, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, -1.01f, 0.0f), Vec4(1.0f, 1.0f, -1.01f, 0.0f),
1927*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), texCubeMipmapUint, evalTextureCube, FRAGMENT),
1928*35238bceSAndroid Build Coastguard Worker
1929*35238bceSAndroid Build Coastguard Worker CASE_SPEC(samplercube_bias_fixed, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, 1.01f, 0.0f),
1930*35238bceSAndroid Build Coastguard Worker Vec4(1.0f, 1.0f, 1.01f, 0.0f), true, -2.0f, 2.0f, false, IVec3(0), texCubeMipmapFixed,
1931*35238bceSAndroid Build Coastguard Worker evalTextureCubeBias, FRAGMENT),
1932*35238bceSAndroid Build Coastguard Worker CASE_SPEC(samplercube_bias_float, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, -1.01f, 0.0f),
1933*35238bceSAndroid Build Coastguard Worker Vec4(1.0f, 1.0f, -1.01f, 0.0f), true, -2.0f, 2.0f, false, IVec3(0), texCubeMipmapFloat,
1934*35238bceSAndroid Build Coastguard Worker evalTextureCubeBias, FRAGMENT),
1935*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isamplercube_bias, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, 1.01f, 0.0f), Vec4(1.0f, 1.0f, 1.01f, 0.0f),
1936*35238bceSAndroid Build Coastguard Worker true, -2.0f, 2.0f, false, IVec3(0), texCubeMipmapInt, evalTextureCubeBias, FRAGMENT),
1937*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usamplercube_bias, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, -1.01f, 0.0f), Vec4(1.0f, 1.0f, -1.01f, 0.0f),
1938*35238bceSAndroid Build Coastguard Worker true, -2.0f, 2.0f, false, IVec3(0), texCubeMipmapUint, evalTextureCubeBias, FRAGMENT),
1939*35238bceSAndroid Build Coastguard Worker
1940*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_fixed, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
1941*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DArrayFixed, evalTexture2DArray, VERTEX),
1942*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_fixed, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
1943*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DArrayMipmapFixed, evalTexture2DArray, FRAGMENT),
1944*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_float, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
1945*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DArrayFloat, evalTexture2DArray, VERTEX),
1946*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_float, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
1947*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DArrayMipmapFloat, evalTexture2DArray, FRAGMENT),
1948*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2darray, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
1949*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DArrayInt, evalTexture2DArray, VERTEX),
1950*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2darray, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
1951*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DArrayMipmapInt, evalTexture2DArray, FRAGMENT),
1952*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2darray, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
1953*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DArrayUint, evalTexture2DArray, VERTEX),
1954*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2darray, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
1955*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DArrayMipmapUint, evalTexture2DArray, FRAGMENT),
1956*35238bceSAndroid Build Coastguard Worker
1957*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_bias_fixed, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
1958*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), true, -2.0f, 2.0f, false, IVec3(0), tex2DArrayMipmapFixed,
1959*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayBias, FRAGMENT),
1960*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_bias_float, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
1961*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), true, -2.0f, 2.0f, false, IVec3(0), tex2DArrayMipmapFloat,
1962*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayBias, FRAGMENT),
1963*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2darray_bias, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
1964*35238bceSAndroid Build Coastguard Worker true, -2.0f, 2.0f, false, IVec3(0), tex2DArrayMipmapInt, evalTexture2DArrayBias, FRAGMENT),
1965*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2darray_bias, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
1966*35238bceSAndroid Build Coastguard Worker true, -2.0f, 2.0f, false, IVec3(0), tex2DArrayMipmapUint, evalTexture2DArrayBias, FRAGMENT),
1967*35238bceSAndroid Build Coastguard Worker
1968*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
1969*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex3DFixed, evalTexture3D, VERTEX),
1970*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
1971*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex3DMipmapFixed, evalTexture3D, FRAGMENT),
1972*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
1973*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex3DFloat, evalTexture3D, VERTEX),
1974*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
1975*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex3DMipmapFloat, evalTexture3D, FRAGMENT),
1976*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), false,
1977*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, false, IVec3(0), tex3DInt, evalTexture3D, VERTEX),
1978*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), false,
1979*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, false, IVec3(0), tex3DMipmapInt, evalTexture3D, FRAGMENT),
1980*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), false,
1981*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, false, IVec3(0), tex3DUint, evalTexture3D, VERTEX),
1982*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), false,
1983*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, false, IVec3(0), tex3DMipmapUint, evalTexture3D, FRAGMENT),
1984*35238bceSAndroid Build Coastguard Worker
1985*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_bias_fixed, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
1986*35238bceSAndroid Build Coastguard Worker true, -2.0f, 1.0f, false, IVec3(0), tex3DMipmapFixed, evalTexture3DBias, FRAGMENT),
1987*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_bias_float, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
1988*35238bceSAndroid Build Coastguard Worker true, -2.0f, 1.0f, false, IVec3(0), tex3DMipmapFloat, evalTexture3DBias, FRAGMENT),
1989*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d_bias, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), true,
1990*35238bceSAndroid Build Coastguard Worker -2.0f, 2.0f, false, IVec3(0), tex3DMipmapInt, evalTexture3DBias, FRAGMENT),
1991*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d_bias, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), true,
1992*35238bceSAndroid Build Coastguard Worker -2.0f, 2.0f, false, IVec3(0), tex3DMipmapUint, evalTexture3DBias, FRAGMENT),
1993*35238bceSAndroid Build Coastguard Worker
1994*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 1.0f, 0.0f),
1995*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DShadow, evalTexture2DShadow, VERTEX),
1996*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 1.0f, 0.0f),
1997*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DMipmapShadow, evalTexture2DShadow, FRAGMENT),
1998*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow_bias, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 1.0f, 0.0f),
1999*35238bceSAndroid Build Coastguard Worker true, -2.0f, 2.0f, false, IVec3(0), tex2DMipmapShadow, evalTexture2DShadowBias, FRAGMENT),
2000*35238bceSAndroid Build Coastguard Worker
2001*35238bceSAndroid Build Coastguard Worker CASE_SPEC(samplercubeshadow, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, 1.01f, 0.0f), Vec4(1.0f, 1.0f, 1.01f, 1.0f),
2002*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), texCubeShadow, evalTextureCubeShadow, VERTEX),
2003*35238bceSAndroid Build Coastguard Worker CASE_SPEC(samplercubeshadow, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, 1.01f, 0.0f), Vec4(1.0f, 1.0f, 1.01f, 1.0f),
2004*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), texCubeMipmapShadow, evalTextureCubeShadow, FRAGMENT),
2005*35238bceSAndroid Build Coastguard Worker CASE_SPEC(samplercubeshadow_bias, FUNCTION_TEXTURE, Vec4(-1.0f, -1.0f, 1.01f, 0.0f),
2006*35238bceSAndroid Build Coastguard Worker Vec4(1.0f, 1.0f, 1.01f, 1.0f), true, -2.0f, 2.0f, false, IVec3(0), texCubeMipmapShadow,
2007*35238bceSAndroid Build Coastguard Worker evalTextureCubeShadowBias, FRAGMENT),
2008*35238bceSAndroid Build Coastguard Worker
2009*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darrayshadow, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 1.0f),
2010*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DArrayShadow, evalTexture2DArrayShadow, VERTEX),
2011*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darrayshadow, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 1.0f),
2012*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DArrayMipmapShadow, evalTexture2DArrayShadow, FRAGMENT)
2013*35238bceSAndroid Build Coastguard Worker
2014*35238bceSAndroid Build Coastguard Worker // Not in spec.
2015*35238bceSAndroid Build Coastguard Worker // CASE_SPEC(sampler2darrayshadow_bias, (FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4( 1.5f, 2.3f, 3.5f, 1.0f), true, -2.0f, 2.0f, Vec2(0.0f), Vec2(0.0f), false, IVec3(0)), tex2DArrayMipmapShadow, evalTexture2DArrayShadowBias, FRAGMENT)
2016*35238bceSAndroid Build Coastguard Worker };
2017*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "texture", "texture() Tests", textureCases, DE_LENGTH_OF_ARRAY(textureCases));
2018*35238bceSAndroid Build Coastguard Worker
2019*35238bceSAndroid Build Coastguard Worker // textureOffset() cases
2020*35238bceSAndroid Build Coastguard Worker // \note _bias variants are not using mipmap thanks to wide allowed range for LOD computation
2021*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec textureOffsetCases[] = {
2022*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord Bias? MinLod MaxLod Offset? Offset Format EvalFunc Flags
2023*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_fixed, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2024*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DFixed, evalTexture2DOffset, VERTEX),
2025*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_fixed, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2026*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapFixed, evalTexture2DOffset, FRAGMENT),
2027*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_float, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2028*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DFloat, evalTexture2DOffset, VERTEX),
2029*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_float, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2030*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapFloat, evalTexture2DOffset, FRAGMENT),
2031*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), false,
2032*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DInt, evalTexture2DOffset, VERTEX),
2033*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), false,
2034*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapInt, evalTexture2DOffset, FRAGMENT),
2035*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), false,
2036*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DUint, evalTexture2DOffset, VERTEX),
2037*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), false,
2038*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapUint, evalTexture2DOffset, FRAGMENT),
2039*35238bceSAndroid Build Coastguard Worker
2040*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_bias_fixed, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2041*35238bceSAndroid Build Coastguard Worker true, -2.0f, 2.0f, true, IVec3(-8, 7, 0), tex2DFixed, evalTexture2DOffsetBias, FRAGMENT),
2042*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_bias_float, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2043*35238bceSAndroid Build Coastguard Worker true, -2.0f, 2.0f, true, IVec3(7, -8, 0), tex2DFloat, evalTexture2DOffsetBias, FRAGMENT),
2044*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_bias, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), true,
2045*35238bceSAndroid Build Coastguard Worker -2.0f, 2.0f, true, IVec3(-8, 7, 0), tex2DInt, evalTexture2DOffsetBias, FRAGMENT),
2046*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_bias, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), true,
2047*35238bceSAndroid Build Coastguard Worker -2.0f, 2.0f, true, IVec3(7, -8, 0), tex2DUint, evalTexture2DOffsetBias, FRAGMENT),
2048*35238bceSAndroid Build Coastguard Worker
2049*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_fixed, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2050*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DArrayFixed, evalTexture2DArrayOffset, VERTEX),
2051*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_fixed, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2052*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DArrayMipmapFixed, evalTexture2DArrayOffset, FRAGMENT),
2053*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_float, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2054*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DArrayFloat, evalTexture2DArrayOffset, VERTEX),
2055*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_float, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2056*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DArrayMipmapFloat, evalTexture2DArrayOffset, FRAGMENT),
2057*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2darray, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2058*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DArrayInt, evalTexture2DArrayOffset, VERTEX),
2059*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2darray, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2060*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DArrayMipmapInt, evalTexture2DArrayOffset, FRAGMENT),
2061*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2darray, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2062*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DArrayUint, evalTexture2DArrayOffset, VERTEX),
2063*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2darray, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2064*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DArrayMipmapUint, evalTexture2DArrayOffset, FRAGMENT),
2065*35238bceSAndroid Build Coastguard Worker
2066*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_bias_fixed, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2067*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), true, -2.0f, 2.0f, true, IVec3(-8, 7, 0), tex2DArrayFixed,
2068*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayOffsetBias, FRAGMENT),
2069*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_bias_float, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2070*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), true, -2.0f, 2.0f, true, IVec3(7, -8, 0), tex2DArrayFloat,
2071*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayOffsetBias, FRAGMENT),
2072*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2darray_bias, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2073*35238bceSAndroid Build Coastguard Worker true, -2.0f, 2.0f, true, IVec3(-8, 7, 0), tex2DArrayInt, evalTexture2DArrayOffsetBias, FRAGMENT),
2074*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2darray_bias, FUNCTION_TEXTURE, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2075*35238bceSAndroid Build Coastguard Worker true, -2.0f, 2.0f, true, IVec3(7, -8, 0), tex2DArrayUint, evalTexture2DArrayOffsetBias, FRAGMENT),
2076*35238bceSAndroid Build Coastguard Worker
2077*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2078*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 3), tex3DFixed, evalTexture3DOffset, VERTEX),
2079*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2080*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(7, 3, -8), tex3DMipmapFixed, evalTexture3DOffset, FRAGMENT),
2081*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2082*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(3, -8, 7), tex3DFloat, evalTexture3DOffset, VERTEX),
2083*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2084*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 3), tex3DMipmapFloat, evalTexture3DOffset, FRAGMENT),
2085*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), false,
2086*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, true, IVec3(7, 3, -8), tex3DInt, evalTexture3DOffset, VERTEX),
2087*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), false,
2088*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, true, IVec3(3, -8, 7), tex3DMipmapInt, evalTexture3DOffset, FRAGMENT),
2089*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), false,
2090*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, true, IVec3(-8, 7, 3), tex3DUint, evalTexture3DOffset, VERTEX),
2091*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), false,
2092*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, true, IVec3(7, 3, -8), tex3DMipmapUint, evalTexture3DOffset, FRAGMENT),
2093*35238bceSAndroid Build Coastguard Worker
2094*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_bias_fixed, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2095*35238bceSAndroid Build Coastguard Worker true, -2.0f, 1.0f, true, IVec3(-8, 7, 3), tex3DFixed, evalTexture3DOffsetBias, FRAGMENT),
2096*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_bias_float, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2097*35238bceSAndroid Build Coastguard Worker true, -2.0f, 1.0f, true, IVec3(7, 3, -8), tex3DFloat, evalTexture3DOffsetBias, FRAGMENT),
2098*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d_bias, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), true,
2099*35238bceSAndroid Build Coastguard Worker -2.0f, 2.0f, true, IVec3(3, -8, 7), tex3DInt, evalTexture3DOffsetBias, FRAGMENT),
2100*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d_bias, FUNCTION_TEXTURE, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), true,
2101*35238bceSAndroid Build Coastguard Worker -2.0f, 2.0f, true, IVec3(-8, 7, 3), tex3DUint, evalTexture3DOffsetBias, FRAGMENT),
2102*35238bceSAndroid Build Coastguard Worker
2103*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 1.0f, 0.0f),
2104*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DShadow, evalTexture2DShadowOffset, VERTEX),
2105*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 1.0f, 0.0f),
2106*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapShadow, evalTexture2DShadowOffset, FRAGMENT),
2107*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow_bias, FUNCTION_TEXTURE, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 1.0f, 0.0f),
2108*35238bceSAndroid Build Coastguard Worker true, -2.0f, 2.0f, true, IVec3(-8, 7, 0), tex2DShadow, evalTexture2DShadowOffsetBias, FRAGMENT)};
2109*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "textureoffset", "textureOffset() Tests", textureOffsetCases,
2110*35238bceSAndroid Build Coastguard Worker DE_LENGTH_OF_ARRAY(textureOffsetCases));
2111*35238bceSAndroid Build Coastguard Worker
2112*35238bceSAndroid Build Coastguard Worker // textureProj() cases
2113*35238bceSAndroid Build Coastguard Worker // \note Currently uses constant divider!
2114*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec textureProjCases[] = {
2115*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord Bias? MinLod MaxLod Offset? Offset Format EvalFunc Flags
2116*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_fixed, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2117*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, false, IVec3(0), tex2DFixed, evalTexture2DProj3,
2118*35238bceSAndroid Build Coastguard Worker VERTEX),
2119*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_fixed, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2120*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, false, IVec3(0), tex2DMipmapFixed,
2121*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3, FRAGMENT),
2122*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_float, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2123*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, false, IVec3(0), tex2DFloat, evalTexture2DProj3,
2124*35238bceSAndroid Build Coastguard Worker VERTEX),
2125*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_float, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2126*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, false, IVec3(0), tex2DMipmapFloat,
2127*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3, FRAGMENT),
2128*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec3, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2129*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, false, IVec3(0), tex2DInt, evalTexture2DProj3,
2130*35238bceSAndroid Build Coastguard Worker VERTEX),
2131*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec3, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2132*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, false, IVec3(0), tex2DMipmapInt,
2133*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3, FRAGMENT),
2134*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec3, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2135*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, false, IVec3(0), tex2DUint, evalTexture2DProj3,
2136*35238bceSAndroid Build Coastguard Worker VERTEX),
2137*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec3, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2138*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, false, IVec3(0), tex2DMipmapUint,
2139*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3, FRAGMENT),
2140*35238bceSAndroid Build Coastguard Worker
2141*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_bias_fixed, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2142*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), true, -2.0f, 2.0f, false, IVec3(0), tex2DMipmapFixed,
2143*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3Bias, FRAGMENT),
2144*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_bias_float, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2145*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), true, -2.0f, 2.0f, false, IVec3(0), tex2DMipmapFloat,
2146*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3Bias, FRAGMENT),
2147*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec3_bias, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2148*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), true, -2.0f, 2.0f, false, IVec3(0), tex2DMipmapInt,
2149*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3Bias, FRAGMENT),
2150*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec3_bias, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2151*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), true, -2.0f, 2.0f, false, IVec3(0), tex2DMipmapUint,
2152*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3Bias, FRAGMENT),
2153*35238bceSAndroid Build Coastguard Worker
2154*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_fixed, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2155*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, 0.0f, 0.0f, false, IVec3(0), tex2DFixed, evalTexture2DProj,
2156*35238bceSAndroid Build Coastguard Worker VERTEX),
2157*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_fixed, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2158*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, 0.0f, 0.0f, false, IVec3(0), tex2DMipmapFixed,
2159*35238bceSAndroid Build Coastguard Worker evalTexture2DProj, FRAGMENT),
2160*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_float, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2161*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, 0.0f, 0.0f, false, IVec3(0), tex2DFloat, evalTexture2DProj,
2162*35238bceSAndroid Build Coastguard Worker VERTEX),
2163*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_float, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2164*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, 0.0f, 0.0f, false, IVec3(0), tex2DMipmapFloat,
2165*35238bceSAndroid Build Coastguard Worker evalTexture2DProj, FRAGMENT),
2166*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec4, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f), Vec4(2.25f, 3.45f, 0.0f, 1.5f),
2167*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DInt, evalTexture2DProj, VERTEX),
2168*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec4, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f), Vec4(2.25f, 3.45f, 0.0f, 1.5f),
2169*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DMipmapInt, evalTexture2DProj, FRAGMENT),
2170*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec4, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f), Vec4(2.25f, 3.45f, 0.0f, 1.5f),
2171*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DUint, evalTexture2DProj, VERTEX),
2172*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec4, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f), Vec4(2.25f, 3.45f, 0.0f, 1.5f),
2173*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DMipmapUint, evalTexture2DProj, FRAGMENT),
2174*35238bceSAndroid Build Coastguard Worker
2175*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_bias_fixed, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2176*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), true, -2.0f, 2.0f, false, IVec3(0), tex2DMipmapFixed,
2177*35238bceSAndroid Build Coastguard Worker evalTexture2DProjBias, FRAGMENT),
2178*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_bias_float, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2179*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), true, -2.0f, 2.0f, false, IVec3(0), tex2DMipmapFloat,
2180*35238bceSAndroid Build Coastguard Worker evalTexture2DProjBias, FRAGMENT),
2181*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec4_bias, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2182*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), true, -2.0f, 2.0f, false, IVec3(0), tex2DMipmapInt,
2183*35238bceSAndroid Build Coastguard Worker evalTexture2DProjBias, FRAGMENT),
2184*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec4_bias, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2185*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), true, -2.0f, 2.0f, false, IVec3(0), tex2DMipmapUint,
2186*35238bceSAndroid Build Coastguard Worker evalTexture2DProjBias, FRAGMENT),
2187*35238bceSAndroid Build Coastguard Worker
2188*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2189*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, false, IVec3(0), tex3DFixed, evalTexture3DProj,
2190*35238bceSAndroid Build Coastguard Worker VERTEX),
2191*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2192*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, false, IVec3(0), tex3DMipmapFixed,
2193*35238bceSAndroid Build Coastguard Worker evalTexture3DProj, FRAGMENT),
2194*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2195*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, false, IVec3(0), tex3DFloat, evalTexture3DProj,
2196*35238bceSAndroid Build Coastguard Worker VERTEX),
2197*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2198*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, false, IVec3(0), tex3DMipmapFloat,
2199*35238bceSAndroid Build Coastguard Worker evalTexture3DProj, FRAGMENT),
2200*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2201*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, false, IVec3(0), tex3DInt, evalTexture3DProj,
2202*35238bceSAndroid Build Coastguard Worker VERTEX),
2203*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2204*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, false, IVec3(0), tex3DMipmapInt,
2205*35238bceSAndroid Build Coastguard Worker evalTexture3DProj, FRAGMENT),
2206*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2207*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, false, IVec3(0), tex3DUint, evalTexture3DProj,
2208*35238bceSAndroid Build Coastguard Worker VERTEX),
2209*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2210*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, false, IVec3(0), tex3DMipmapUint,
2211*35238bceSAndroid Build Coastguard Worker evalTexture3DProj, FRAGMENT),
2212*35238bceSAndroid Build Coastguard Worker
2213*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_bias_fixed, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2214*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), true, -2.0f, 1.0f, false, IVec3(0), tex3DMipmapFixed,
2215*35238bceSAndroid Build Coastguard Worker evalTexture3DProjBias, FRAGMENT),
2216*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_bias_float, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2217*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), true, -2.0f, 1.0f, false, IVec3(0), tex3DMipmapFloat,
2218*35238bceSAndroid Build Coastguard Worker evalTexture3DProjBias, FRAGMENT),
2219*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d_bias, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2220*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), true, -2.0f, 2.0f, false, IVec3(0), tex3DMipmapInt,
2221*35238bceSAndroid Build Coastguard Worker evalTexture3DProjBias, FRAGMENT),
2222*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d_bias, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2223*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), true, -2.0f, 2.0f, false, IVec3(0), tex3DMipmapUint,
2224*35238bceSAndroid Build Coastguard Worker evalTexture3DProjBias, FRAGMENT),
2225*35238bceSAndroid Build Coastguard Worker
2226*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREPROJ, Vec4(0.2f, 0.6f, 0.0f, 1.5f), Vec4(-2.25f, -3.45f, 1.5f, 1.5f),
2227*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DShadow, evalTexture2DShadowProj, VERTEX),
2228*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREPROJ, Vec4(0.2f, 0.6f, 0.0f, 1.5f), Vec4(-2.25f, -3.45f, 1.5f, 1.5f),
2229*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DMipmapShadow, evalTexture2DShadowProj, FRAGMENT),
2230*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow_bias, FUNCTION_TEXTUREPROJ, Vec4(0.2f, 0.6f, 0.0f, 1.5f),
2231*35238bceSAndroid Build Coastguard Worker Vec4(-2.25f, -3.45f, 1.5f, 1.5f), true, -2.0f, 2.0f, false, IVec3(0), tex2DMipmapShadow,
2232*35238bceSAndroid Build Coastguard Worker evalTexture2DShadowProjBias, FRAGMENT)};
2233*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "textureproj", "textureProj() Tests", textureProjCases, DE_LENGTH_OF_ARRAY(textureProjCases));
2234*35238bceSAndroid Build Coastguard Worker
2235*35238bceSAndroid Build Coastguard Worker // textureProjOffset() cases
2236*35238bceSAndroid Build Coastguard Worker // \note Currently uses constant divider!
2237*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec textureProjOffsetCases[] = {
2238*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord Bias? MinLod MaxLod Offset? Offset Format EvalFunc Flags
2239*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_fixed, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2240*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DFixed,
2241*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3Offset, VERTEX),
2242*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_fixed, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2243*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapFixed,
2244*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3Offset, FRAGMENT),
2245*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_float, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2246*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DFloat,
2247*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3Offset, VERTEX),
2248*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_float, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2249*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapFloat,
2250*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3Offset, FRAGMENT),
2251*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec3, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2252*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DInt,
2253*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3Offset, VERTEX),
2254*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec3, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2255*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapInt,
2256*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3Offset, FRAGMENT),
2257*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec3, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2258*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DUint,
2259*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3Offset, VERTEX),
2260*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec3, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2261*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapUint,
2262*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3Offset, FRAGMENT),
2263*35238bceSAndroid Build Coastguard Worker
2264*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_bias_fixed, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2265*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), true, -2.0f, 2.0f, true, IVec3(-8, 7, 0), tex2DFixed,
2266*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3OffsetBias, FRAGMENT),
2267*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_bias_float, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2268*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), true, -2.0f, 2.0f, true, IVec3(7, -8, 0), tex2DFloat,
2269*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3OffsetBias, FRAGMENT),
2270*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec3_bias, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2271*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), true, -2.0f, 2.0f, true, IVec3(-8, 7, 0), tex2DInt,
2272*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3OffsetBias, FRAGMENT),
2273*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec3_bias, FUNCTION_TEXTUREPROJ3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2274*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), true, -2.0f, 2.0f, true, IVec3(7, -8, 0), tex2DUint,
2275*35238bceSAndroid Build Coastguard Worker evalTexture2DProj3OffsetBias, FRAGMENT),
2276*35238bceSAndroid Build Coastguard Worker
2277*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_fixed, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2278*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DFixed,
2279*35238bceSAndroid Build Coastguard Worker evalTexture2DProjOffset, VERTEX),
2280*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_fixed, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2281*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapFixed,
2282*35238bceSAndroid Build Coastguard Worker evalTexture2DProjOffset, FRAGMENT),
2283*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_float, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2284*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DFloat,
2285*35238bceSAndroid Build Coastguard Worker evalTexture2DProjOffset, VERTEX),
2286*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_float, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2287*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapFloat,
2288*35238bceSAndroid Build Coastguard Worker evalTexture2DProjOffset, FRAGMENT),
2289*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec4, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f), Vec4(2.25f, 3.45f, 0.0f, 1.5f),
2290*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DInt, evalTexture2DProjOffset, VERTEX),
2291*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec4, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f), Vec4(2.25f, 3.45f, 0.0f, 1.5f),
2292*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapInt, evalTexture2DProjOffset, FRAGMENT),
2293*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec4, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f), Vec4(2.25f, 3.45f, 0.0f, 1.5f),
2294*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DUint, evalTexture2DProjOffset, VERTEX),
2295*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec4, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f), Vec4(2.25f, 3.45f, 0.0f, 1.5f),
2296*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapUint, evalTexture2DProjOffset, FRAGMENT),
2297*35238bceSAndroid Build Coastguard Worker
2298*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_bias_fixed, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2299*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), true, -2.0f, 2.0f, true, IVec3(-8, 7, 0), tex2DFixed,
2300*35238bceSAndroid Build Coastguard Worker evalTexture2DProjOffsetBias, FRAGMENT),
2301*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_bias_float, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2302*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), true, -2.0f, 2.0f, true, IVec3(7, -8, 0), tex2DFloat,
2303*35238bceSAndroid Build Coastguard Worker evalTexture2DProjOffsetBias, FRAGMENT),
2304*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec4_bias, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2305*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), true, -2.0f, 2.0f, true, IVec3(-8, 7, 0), tex2DInt,
2306*35238bceSAndroid Build Coastguard Worker evalTexture2DProjOffsetBias, FRAGMENT),
2307*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec4_bias, FUNCTION_TEXTUREPROJ, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2308*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), true, -2.0f, 2.0f, true, IVec3(7, -8, 0), tex2DUint,
2309*35238bceSAndroid Build Coastguard Worker evalTexture2DProjOffsetBias, FRAGMENT),
2310*35238bceSAndroid Build Coastguard Worker
2311*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2312*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, true, IVec3(-8, 7, 3), tex3DFixed,
2313*35238bceSAndroid Build Coastguard Worker evalTexture3DProjOffset, VERTEX),
2314*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2315*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, true, IVec3(7, 3, -8), tex3DMipmapFixed,
2316*35238bceSAndroid Build Coastguard Worker evalTexture3DProjOffset, FRAGMENT),
2317*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2318*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, true, IVec3(3, -8, 7), tex3DFloat,
2319*35238bceSAndroid Build Coastguard Worker evalTexture3DProjOffset, VERTEX),
2320*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2321*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, true, IVec3(-8, 7, 3), tex3DMipmapFloat,
2322*35238bceSAndroid Build Coastguard Worker evalTexture3DProjOffset, FRAGMENT),
2323*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2324*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, true, IVec3(7, 3, -8), tex3DInt,
2325*35238bceSAndroid Build Coastguard Worker evalTexture3DProjOffset, VERTEX),
2326*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2327*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, true, IVec3(3, -8, 7), tex3DMipmapInt,
2328*35238bceSAndroid Build Coastguard Worker evalTexture3DProjOffset, FRAGMENT),
2329*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2330*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, true, IVec3(-8, 7, 3), tex3DUint,
2331*35238bceSAndroid Build Coastguard Worker evalTexture3DProjOffset, VERTEX),
2332*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2333*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, 0.0f, 0.0f, true, IVec3(7, 3, -8), tex3DMipmapUint,
2334*35238bceSAndroid Build Coastguard Worker evalTexture3DProjOffset, FRAGMENT),
2335*35238bceSAndroid Build Coastguard Worker
2336*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_bias_fixed, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2337*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), true, -2.0f, 2.0f, true, IVec3(-8, 7, 3), tex3DFixed,
2338*35238bceSAndroid Build Coastguard Worker evalTexture3DProjOffsetBias, FRAGMENT),
2339*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_bias_float, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2340*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), true, -2.0f, 2.0f, true, IVec3(7, 3, -8), tex3DFloat,
2341*35238bceSAndroid Build Coastguard Worker evalTexture3DProjOffsetBias, FRAGMENT),
2342*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d_bias, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2343*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), true, -2.0f, 2.0f, true, IVec3(3, -8, 7), tex3DInt,
2344*35238bceSAndroid Build Coastguard Worker evalTexture3DProjOffsetBias, FRAGMENT),
2345*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d_bias, FUNCTION_TEXTUREPROJ, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2346*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), true, -2.0f, 2.0f, true, IVec3(-8, 7, 3), tex3DUint,
2347*35238bceSAndroid Build Coastguard Worker evalTexture3DProjOffsetBias, FRAGMENT),
2348*35238bceSAndroid Build Coastguard Worker
2349*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREPROJ, Vec4(0.2f, 0.6f, 0.0f, 1.5f), Vec4(-2.25f, -3.45f, 1.5f, 1.5f),
2350*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DShadow, evalTexture2DShadowProjOffset, VERTEX),
2351*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREPROJ, Vec4(0.2f, 0.6f, 0.0f, 1.5f), Vec4(-2.25f, -3.45f, 1.5f, 1.5f),
2352*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(7, -8, 0), tex2DMipmapShadow, evalTexture2DShadowProjOffset, FRAGMENT),
2353*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow_bias, FUNCTION_TEXTUREPROJ, Vec4(0.2f, 0.6f, 0.0f, 1.5f),
2354*35238bceSAndroid Build Coastguard Worker Vec4(-2.25f, -3.45f, 1.5f, 1.5f), true, -2.0f, 2.0f, true, IVec3(-8, 7, 0), tex2DShadow,
2355*35238bceSAndroid Build Coastguard Worker evalTexture2DShadowProjOffsetBias, FRAGMENT)};
2356*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "textureprojoffset", "textureOffsetProj() Tests", textureProjOffsetCases,
2357*35238bceSAndroid Build Coastguard Worker DE_LENGTH_OF_ARRAY(textureProjOffsetCases));
2358*35238bceSAndroid Build Coastguard Worker
2359*35238bceSAndroid Build Coastguard Worker // textureLod() cases
2360*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec textureLodCases[] = {
2361*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord Bias? MinLod MaxLod Offset? Offset Format EvalFunc Flags
2362*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_fixed, FUNCTION_TEXTURELOD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2363*35238bceSAndroid Build Coastguard Worker false, -1.0f, 9.0f, false, IVec3(0), tex2DMipmapFixed, evalTexture2DLod, BOTH),
2364*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_float, FUNCTION_TEXTURELOD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2365*35238bceSAndroid Build Coastguard Worker false, -1.0f, 9.0f, false, IVec3(0), tex2DMipmapFloat, evalTexture2DLod, BOTH),
2366*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d, FUNCTION_TEXTURELOD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), false,
2367*35238bceSAndroid Build Coastguard Worker -1.0f, 9.0f, false, IVec3(0), tex2DMipmapInt, evalTexture2DLod, BOTH),
2368*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d, FUNCTION_TEXTURELOD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), false,
2369*35238bceSAndroid Build Coastguard Worker -1.0f, 9.0f, false, IVec3(0), tex2DMipmapUint, evalTexture2DLod, BOTH),
2370*35238bceSAndroid Build Coastguard Worker
2371*35238bceSAndroid Build Coastguard Worker CASE_SPEC(samplercube_fixed, FUNCTION_TEXTURELOD, Vec4(-1.0f, -1.0f, 1.01f, 0.0f),
2372*35238bceSAndroid Build Coastguard Worker Vec4(1.0f, 1.0f, 1.01f, 0.0f), false, -1.0f, 9.0f, false, IVec3(0), texCubeMipmapFixed,
2373*35238bceSAndroid Build Coastguard Worker evalTextureCubeLod, BOTH),
2374*35238bceSAndroid Build Coastguard Worker CASE_SPEC(samplercube_float, FUNCTION_TEXTURELOD, Vec4(-1.0f, -1.0f, -1.01f, 0.0f),
2375*35238bceSAndroid Build Coastguard Worker Vec4(1.0f, 1.0f, -1.01f, 0.0f), false, -1.0f, 9.0f, false, IVec3(0), texCubeMipmapFloat,
2376*35238bceSAndroid Build Coastguard Worker evalTextureCubeLod, BOTH),
2377*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isamplercube, FUNCTION_TEXTURELOD, Vec4(-1.0f, -1.0f, 1.01f, 0.0f), Vec4(1.0f, 1.0f, 1.01f, 0.0f),
2378*35238bceSAndroid Build Coastguard Worker false, -1.0f, 9.0f, false, IVec3(0), texCubeMipmapInt, evalTextureCubeLod, BOTH),
2379*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usamplercube, FUNCTION_TEXTURELOD, Vec4(-1.0f, -1.0f, -1.01f, 0.0f), Vec4(1.0f, 1.0f, -1.01f, 0.0f),
2380*35238bceSAndroid Build Coastguard Worker false, -1.0f, 9.0f, false, IVec3(0), texCubeMipmapUint, evalTextureCubeLod, BOTH),
2381*35238bceSAndroid Build Coastguard Worker
2382*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_fixed, FUNCTION_TEXTURELOD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2383*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), false, -1.0f, 8.0f, false, IVec3(0), tex2DArrayMipmapFixed,
2384*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayLod, BOTH),
2385*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_float, FUNCTION_TEXTURELOD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2386*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), false, -1.0f, 8.0f, false, IVec3(0), tex2DArrayMipmapFloat,
2387*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayLod, BOTH),
2388*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2darray, FUNCTION_TEXTURELOD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2389*35238bceSAndroid Build Coastguard Worker false, -1.0f, 8.0f, false, IVec3(0), tex2DArrayMipmapInt, evalTexture2DArrayLod, BOTH),
2390*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2darray, FUNCTION_TEXTURELOD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2391*35238bceSAndroid Build Coastguard Worker false, -1.0f, 8.0f, false, IVec3(0), tex2DArrayMipmapUint, evalTexture2DArrayLod, BOTH),
2392*35238bceSAndroid Build Coastguard Worker
2393*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTURELOD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2394*35238bceSAndroid Build Coastguard Worker false, -1.0f, 7.0f, false, IVec3(0), tex3DMipmapFixed, evalTexture3DLod, BOTH),
2395*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXTURELOD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2396*35238bceSAndroid Build Coastguard Worker false, -1.0f, 7.0f, false, IVec3(0), tex3DMipmapFloat, evalTexture3DLod, BOTH),
2397*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXTURELOD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), false,
2398*35238bceSAndroid Build Coastguard Worker -1.0f, 7.0f, false, IVec3(0), tex3DMipmapInt, evalTexture3DLod, BOTH),
2399*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXTURELOD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), false,
2400*35238bceSAndroid Build Coastguard Worker -1.0f, 7.0f, false, IVec3(0), tex3DMipmapUint, evalTexture3DLod, BOTH),
2401*35238bceSAndroid Build Coastguard Worker
2402*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow, FUNCTION_TEXTURELOD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 1.0f, 0.0f),
2403*35238bceSAndroid Build Coastguard Worker false, -1.0f, 9.0f, false, IVec3(0), tex2DMipmapShadow, evalTexture2DShadowLod, BOTH)};
2404*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "texturelod", "textureLod() Tests", textureLodCases, DE_LENGTH_OF_ARRAY(textureLodCases));
2405*35238bceSAndroid Build Coastguard Worker
2406*35238bceSAndroid Build Coastguard Worker // textureLodOffset() cases
2407*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec textureLodOffsetCases[] = {
2408*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord Bias? MinLod MaxLod Offset? Offset Format EvalFunc Flags
2409*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_fixed, FUNCTION_TEXTURELOD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2410*35238bceSAndroid Build Coastguard Worker false, -1.0f, 9.0f, true, IVec3(-8, 7, 0), tex2DMipmapFixed, evalTexture2DLodOffset, BOTH),
2411*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_float, FUNCTION_TEXTURELOD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2412*35238bceSAndroid Build Coastguard Worker false, -1.0f, 9.0f, true, IVec3(7, -8, 0), tex2DMipmapFloat, evalTexture2DLodOffset, BOTH),
2413*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d, FUNCTION_TEXTURELOD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), false,
2414*35238bceSAndroid Build Coastguard Worker -1.0f, 9.0f, true, IVec3(-8, 7, 0), tex2DMipmapInt, evalTexture2DLodOffset, BOTH),
2415*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d, FUNCTION_TEXTURELOD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f), false,
2416*35238bceSAndroid Build Coastguard Worker -1.0f, 9.0f, true, IVec3(7, -8, 0), tex2DMipmapUint, evalTexture2DLodOffset, BOTH),
2417*35238bceSAndroid Build Coastguard Worker
2418*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_fixed, FUNCTION_TEXTURELOD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2419*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), false, -1.0f, 8.0f, true, IVec3(-8, 7, 0), tex2DArrayMipmapFixed,
2420*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayLodOffset, BOTH),
2421*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_float, FUNCTION_TEXTURELOD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2422*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), false, -1.0f, 8.0f, true, IVec3(7, -8, 0), tex2DArrayMipmapFloat,
2423*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayLodOffset, BOTH),
2424*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2darray, FUNCTION_TEXTURELOD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2425*35238bceSAndroid Build Coastguard Worker false, -1.0f, 8.0f, true, IVec3(-8, 7, 0), tex2DArrayMipmapInt, evalTexture2DArrayLodOffset, BOTH),
2426*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2darray, FUNCTION_TEXTURELOD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f), Vec4(1.5f, 2.3f, 3.5f, 0.0f),
2427*35238bceSAndroid Build Coastguard Worker false, -1.0f, 8.0f, true, IVec3(7, -8, 0), tex2DArrayMipmapUint, evalTexture2DArrayLodOffset, BOTH),
2428*35238bceSAndroid Build Coastguard Worker
2429*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTURELOD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2430*35238bceSAndroid Build Coastguard Worker false, -1.0f, 7.0f, true, IVec3(-8, 7, 3), tex3DMipmapFixed, evalTexture3DLodOffset, BOTH),
2431*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXTURELOD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2432*35238bceSAndroid Build Coastguard Worker false, -1.0f, 7.0f, true, IVec3(7, 3, -8), tex3DMipmapFloat, evalTexture3DLodOffset, BOTH),
2433*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXTURELOD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), false,
2434*35238bceSAndroid Build Coastguard Worker -1.0f, 7.0f, true, IVec3(3, -8, 7), tex3DMipmapInt, evalTexture3DLodOffset, BOTH),
2435*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXTURELOD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f), false,
2436*35238bceSAndroid Build Coastguard Worker -1.0f, 7.0f, true, IVec3(-8, 7, 3), tex3DMipmapUint, evalTexture3DLodOffset, BOTH),
2437*35238bceSAndroid Build Coastguard Worker
2438*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow, FUNCTION_TEXTURELOD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 1.0f, 0.0f),
2439*35238bceSAndroid Build Coastguard Worker false, -1.0f, 9.0f, true, IVec3(-8, 7, 0), tex2DMipmapShadow, evalTexture2DShadowLodOffset, BOTH)};
2440*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "texturelodoffset", "textureLodOffset() Tests", textureLodOffsetCases,
2441*35238bceSAndroid Build Coastguard Worker DE_LENGTH_OF_ARRAY(textureLodOffsetCases));
2442*35238bceSAndroid Build Coastguard Worker
2443*35238bceSAndroid Build Coastguard Worker // textureProjLod() cases
2444*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec textureProjLodCases[] = {
2445*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord Bias? MinLod MaxLod Offset? Offset Format EvalFunc Flags
2446*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_fixed, FUNCTION_TEXTUREPROJLOD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2447*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, -1.0f, 9.0f, false, IVec3(0), tex2DMipmapFixed,
2448*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLod3, BOTH),
2449*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_float, FUNCTION_TEXTUREPROJLOD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2450*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, -1.0f, 9.0f, false, IVec3(0), tex2DMipmapFloat,
2451*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLod3, BOTH),
2452*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec3, FUNCTION_TEXTUREPROJLOD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2453*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, -1.0f, 9.0f, false, IVec3(0), tex2DMipmapInt,
2454*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLod3, BOTH),
2455*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec3, FUNCTION_TEXTUREPROJLOD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2456*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, -1.0f, 9.0f, false, IVec3(0), tex2DMipmapUint,
2457*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLod3, BOTH),
2458*35238bceSAndroid Build Coastguard Worker
2459*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_fixed, FUNCTION_TEXTUREPROJLOD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2460*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, -1.0f, 9.0f, false, IVec3(0), tex2DMipmapFixed,
2461*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLod, BOTH),
2462*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_float, FUNCTION_TEXTUREPROJLOD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2463*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, -1.0f, 9.0f, false, IVec3(0), tex2DMipmapFloat,
2464*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLod, BOTH),
2465*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec4, FUNCTION_TEXTUREPROJLOD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2466*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, -1.0f, 9.0f, false, IVec3(0), tex2DMipmapInt,
2467*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLod, BOTH),
2468*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec4, FUNCTION_TEXTUREPROJLOD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2469*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, -1.0f, 9.0f, false, IVec3(0), tex2DMipmapUint,
2470*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLod, BOTH),
2471*35238bceSAndroid Build Coastguard Worker
2472*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTUREPROJLOD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2473*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, -1.0f, 7.0f, false, IVec3(0), tex3DMipmapFixed,
2474*35238bceSAndroid Build Coastguard Worker evalTexture3DProjLod, BOTH),
2475*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREPROJLOD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2476*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, -1.0f, 7.0f, false, IVec3(0), tex3DMipmapFloat,
2477*35238bceSAndroid Build Coastguard Worker evalTexture3DProjLod, BOTH),
2478*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXTUREPROJLOD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2479*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, -1.0f, 7.0f, false, IVec3(0), tex3DMipmapInt,
2480*35238bceSAndroid Build Coastguard Worker evalTexture3DProjLod, BOTH),
2481*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXTUREPROJLOD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2482*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, -1.0f, 7.0f, false, IVec3(0), tex3DMipmapUint,
2483*35238bceSAndroid Build Coastguard Worker evalTexture3DProjLod, BOTH),
2484*35238bceSAndroid Build Coastguard Worker
2485*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREPROJLOD, Vec4(0.2f, 0.6f, 0.0f, 1.5f),
2486*35238bceSAndroid Build Coastguard Worker Vec4(-2.25f, -3.45f, 1.5f, 1.5f), false, -1.0f, 9.0f, false, IVec3(0), tex2DMipmapShadow,
2487*35238bceSAndroid Build Coastguard Worker evalTexture2DShadowProjLod, BOTH)};
2488*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "textureprojlod", "textureProjLod() Tests", textureProjLodCases,
2489*35238bceSAndroid Build Coastguard Worker DE_LENGTH_OF_ARRAY(textureProjLodCases));
2490*35238bceSAndroid Build Coastguard Worker
2491*35238bceSAndroid Build Coastguard Worker // textureProjLodOffset() cases
2492*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec textureProjLodOffsetCases[] = {
2493*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord Bias? MinLod MaxLod Offset? Offset Format EvalFunc Flags
2494*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_fixed, FUNCTION_TEXTUREPROJLOD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2495*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, -1.0f, 9.0f, true, IVec3(-8, 7, 0), tex2DMipmapFixed,
2496*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLod3Offset, BOTH),
2497*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec3_float, FUNCTION_TEXTUREPROJLOD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2498*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, -1.0f, 9.0f, true, IVec3(7, -8, 0), tex2DMipmapFloat,
2499*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLod3Offset, BOTH),
2500*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec3, FUNCTION_TEXTUREPROJLOD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2501*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, -1.0f, 9.0f, true, IVec3(-8, 7, 0), tex2DMipmapInt,
2502*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLod3Offset, BOTH),
2503*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec3, FUNCTION_TEXTUREPROJLOD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2504*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), false, -1.0f, 9.0f, true, IVec3(7, -8, 0), tex2DMipmapUint,
2505*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLod3Offset, BOTH),
2506*35238bceSAndroid Build Coastguard Worker
2507*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_fixed, FUNCTION_TEXTUREPROJLOD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2508*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, -1.0f, 9.0f, true, IVec3(-8, 7, 0), tex2DMipmapFixed,
2509*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLodOffset, BOTH),
2510*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_vec4_float, FUNCTION_TEXTUREPROJLOD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2511*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, -1.0f, 9.0f, true, IVec3(7, -8, 0), tex2DMipmapFloat,
2512*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLodOffset, BOTH),
2513*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d_vec4, FUNCTION_TEXTUREPROJLOD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2514*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, -1.0f, 9.0f, true, IVec3(-8, 7, 0), tex2DMipmapInt,
2515*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLodOffset, BOTH),
2516*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d_vec4, FUNCTION_TEXTUREPROJLOD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2517*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), false, -1.0f, 9.0f, true, IVec3(7, -8, 0), tex2DMipmapUint,
2518*35238bceSAndroid Build Coastguard Worker evalTexture2DProjLodOffset, BOTH),
2519*35238bceSAndroid Build Coastguard Worker
2520*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTUREPROJLOD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2521*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, -1.0f, 7.0f, true, IVec3(-8, 7, 3), tex3DMipmapFixed,
2522*35238bceSAndroid Build Coastguard Worker evalTexture3DProjLodOffset, BOTH),
2523*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREPROJLOD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2524*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, -1.0f, 7.0f, true, IVec3(7, 3, -8), tex3DMipmapFloat,
2525*35238bceSAndroid Build Coastguard Worker evalTexture3DProjLodOffset, BOTH),
2526*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXTUREPROJLOD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2527*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, -1.0f, 7.0f, true, IVec3(3, -8, 7), tex3DMipmapInt,
2528*35238bceSAndroid Build Coastguard Worker evalTexture3DProjLodOffset, BOTH),
2529*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXTUREPROJLOD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2530*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), false, -1.0f, 7.0f, true, IVec3(-8, 7, 3), tex3DMipmapUint,
2531*35238bceSAndroid Build Coastguard Worker evalTexture3DProjLodOffset, BOTH),
2532*35238bceSAndroid Build Coastguard Worker
2533*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREPROJLOD, Vec4(0.2f, 0.6f, 0.0f, 1.5f),
2534*35238bceSAndroid Build Coastguard Worker Vec4(-2.25f, -3.45f, 1.5f, 1.5f), false, -1.0f, 9.0f, true, IVec3(-8, 7, 0), tex2DMipmapShadow,
2535*35238bceSAndroid Build Coastguard Worker evalTexture2DShadowProjLodOffset, BOTH)};
2536*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "textureprojlodoffset", "textureProjLodOffset() Tests", textureProjLodOffsetCases,
2537*35238bceSAndroid Build Coastguard Worker DE_LENGTH_OF_ARRAY(textureProjLodOffsetCases));
2538*35238bceSAndroid Build Coastguard Worker
2539*35238bceSAndroid Build Coastguard Worker // textureGrad() cases
2540*35238bceSAndroid Build Coastguard Worker // \note Only one of dudx, dudy, dvdx, dvdy is non-zero since spec allows approximating p from derivates by various methods.
2541*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec textureGradCases[] = {
2542*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord MinDx MaxDx MinDy MaxDy Offset? Offset Format EvalFunc Flags
2543*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2d_fixed, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f),
2544*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2545*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex2DMipmapFixed,
2546*35238bceSAndroid Build Coastguard Worker evalTexture2DGrad, BOTH),
2547*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2d_float, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f),
2548*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2549*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex2DMipmapFloat,
2550*35238bceSAndroid Build Coastguard Worker evalTexture2DGrad, BOTH),
2551*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isampler2d, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2552*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f),
2553*35238bceSAndroid Build Coastguard Worker false, IVec3(0), tex2DMipmapInt, evalTexture2DGrad, BOTH),
2554*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler2d, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2555*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f),
2556*35238bceSAndroid Build Coastguard Worker false, IVec3(0), tex2DMipmapUint, evalTexture2DGrad, BOTH),
2557*35238bceSAndroid Build Coastguard Worker
2558*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(samplercube_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, 1.01f, 0.0f),
2559*35238bceSAndroid Build Coastguard Worker Vec4(1.0f, 1.0f, 1.01f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2560*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), texCubeMipmapFixed,
2561*35238bceSAndroid Build Coastguard Worker evalTextureCubeGrad, BOTH),
2562*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(samplercube_float, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, -1.01f, 0.0f),
2563*35238bceSAndroid Build Coastguard Worker Vec4(1.0f, 1.0f, -1.01f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2564*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), texCubeMipmapFloat,
2565*35238bceSAndroid Build Coastguard Worker evalTextureCubeGrad, BOTH),
2566*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isamplercube, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, 1.01f, 0.0f),
2567*35238bceSAndroid Build Coastguard Worker Vec4(1.0f, 1.0f, 1.01f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2568*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), texCubeMipmapInt,
2569*35238bceSAndroid Build Coastguard Worker evalTextureCubeGrad, BOTH),
2570*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usamplercube, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, -1.01f, 0.0f),
2571*35238bceSAndroid Build Coastguard Worker Vec4(1.0f, 1.0f, -1.01f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2572*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f), false, IVec3(0), texCubeMipmapUint,
2573*35238bceSAndroid Build Coastguard Worker evalTextureCubeGrad, BOTH),
2574*35238bceSAndroid Build Coastguard Worker
2575*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2darray_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2576*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2577*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex2DArrayMipmapFixed,
2578*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayGrad, BOTH),
2579*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2darray_float, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2580*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2581*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex2DArrayMipmapFloat,
2582*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayGrad, BOTH),
2583*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isampler2darray, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2584*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2585*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), tex2DArrayMipmapInt,
2586*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayGrad, BOTH),
2587*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler2darray, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2588*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2589*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f), false, IVec3(0), tex2DArrayMipmapUint,
2590*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayGrad, BOTH),
2591*35238bceSAndroid Build Coastguard Worker
2592*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f),
2593*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 2.3f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2594*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex3DMipmapFixed,
2595*35238bceSAndroid Build Coastguard Worker evalTexture3DGrad, BOTH),
2596*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f),
2597*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 2.3f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2598*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex3DMipmapFloat,
2599*35238bceSAndroid Build Coastguard Worker evalTexture3DGrad, VERTEX),
2600*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f),
2601*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 2.3f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.2f),
2602*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex3DMipmapFloat,
2603*35238bceSAndroid Build Coastguard Worker evalTexture3DGrad, FRAGMENT),
2604*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isampler3d, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2605*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f),
2606*35238bceSAndroid Build Coastguard Worker false, IVec3(0), tex3DMipmapInt, evalTexture3DGrad, BOTH),
2607*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler3d, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2608*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f),
2609*35238bceSAndroid Build Coastguard Worker false, IVec3(0), tex3DMipmapUint, evalTexture3DGrad, VERTEX),
2610*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler3d, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2611*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, -0.2f),
2612*35238bceSAndroid Build Coastguard Worker false, IVec3(0), tex3DMipmapUint, evalTexture3DGrad, FRAGMENT),
2613*35238bceSAndroid Build Coastguard Worker
2614*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f),
2615*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 1.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2616*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex2DMipmapShadow,
2617*35238bceSAndroid Build Coastguard Worker evalTexture2DShadowGrad, BOTH),
2618*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(samplercubeshadow, FUNCTION_TEXTUREGRAD, Vec4(-1.0f, -1.0f, 1.01f, 0.0f),
2619*35238bceSAndroid Build Coastguard Worker Vec4(1.0f, 1.0f, 1.01f, 1.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f),
2620*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), texCubeMipmapShadow,
2621*35238bceSAndroid Build Coastguard Worker evalTextureCubeShadowGrad, BOTH),
2622*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2darrayshadow, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2623*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 1.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2624*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f), false, IVec3(0), tex2DArrayMipmapShadow,
2625*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayShadowGrad, VERTEX),
2626*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2darrayshadow, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2627*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 1.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2628*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f), false, IVec3(0), tex2DArrayMipmapShadow,
2629*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayShadowGrad, FRAGMENT)};
2630*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "texturegrad", "textureGrad() Tests", textureGradCases, DE_LENGTH_OF_ARRAY(textureGradCases));
2631*35238bceSAndroid Build Coastguard Worker
2632*35238bceSAndroid Build Coastguard Worker // textureGradOffset() cases
2633*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec textureGradOffsetCases[] = {
2634*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord MinDx MaxDx MinDy MaxDy Offset? Offset Format EvalFunc Flags
2635*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2d_fixed, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f),
2636*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2637*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), tex2DMipmapFixed,
2638*35238bceSAndroid Build Coastguard Worker evalTexture2DGradOffset, BOTH),
2639*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2d_float, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f),
2640*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2641*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(7, -8, 0), tex2DMipmapFloat,
2642*35238bceSAndroid Build Coastguard Worker evalTexture2DGradOffset, BOTH),
2643*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isampler2d, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2644*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f),
2645*35238bceSAndroid Build Coastguard Worker true, IVec3(-8, 7, 0), tex2DMipmapInt, evalTexture2DGradOffset, BOTH),
2646*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler2d, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f), Vec4(1.5f, 2.3f, 0.0f, 0.0f),
2647*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f),
2648*35238bceSAndroid Build Coastguard Worker true, IVec3(7, -8, 0), tex2DMipmapUint, evalTexture2DGradOffset, BOTH),
2649*35238bceSAndroid Build Coastguard Worker
2650*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2darray_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2651*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2652*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), tex2DArrayMipmapFixed,
2653*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayGradOffset, BOTH),
2654*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2darray_float, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2655*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2656*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(7, -8, 0), tex2DArrayMipmapFloat,
2657*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayGradOffset, BOTH),
2658*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isampler2darray, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2659*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2660*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), tex2DArrayMipmapInt,
2661*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayGradOffset, BOTH),
2662*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler2darray, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2663*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2664*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f), true, IVec3(7, -8, 0), tex2DArrayMipmapUint,
2665*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayGradOffset, BOTH),
2666*35238bceSAndroid Build Coastguard Worker
2667*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f),
2668*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 2.3f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2669*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(-8, 7, 3), tex3DMipmapFixed,
2670*35238bceSAndroid Build Coastguard Worker evalTexture3DGradOffset, BOTH),
2671*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f),
2672*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 2.3f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2673*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(7, 3, -8), tex3DMipmapFloat,
2674*35238bceSAndroid Build Coastguard Worker evalTexture3DGradOffset, VERTEX),
2675*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f),
2676*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 2.3f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.2f),
2677*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(3, -8, 7), tex3DMipmapFloat,
2678*35238bceSAndroid Build Coastguard Worker evalTexture3DGradOffset, FRAGMENT),
2679*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isampler3d, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2680*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f),
2681*35238bceSAndroid Build Coastguard Worker true, IVec3(-8, 7, 3), tex3DMipmapInt, evalTexture3DGradOffset, BOTH),
2682*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler3d, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2683*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f),
2684*35238bceSAndroid Build Coastguard Worker true, IVec3(7, 3, -8), tex3DMipmapUint, evalTexture3DGradOffset, VERTEX),
2685*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler3d, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -1.4f, 0.1f, 0.0f), Vec4(1.5f, 2.3f, 2.3f, 0.0f),
2686*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, -0.2f),
2687*35238bceSAndroid Build Coastguard Worker true, IVec3(3, -8, 7), tex3DMipmapUint, evalTexture3DGradOffset, FRAGMENT),
2688*35238bceSAndroid Build Coastguard Worker
2689*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f),
2690*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 1.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2691*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), tex2DMipmapShadow,
2692*35238bceSAndroid Build Coastguard Worker evalTexture2DShadowGradOffset, VERTEX),
2693*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREGRAD, Vec4(-0.2f, -0.4f, 0.0f, 0.0f),
2694*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 1.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f),
2695*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(7, -8, 0), tex2DMipmapShadow,
2696*35238bceSAndroid Build Coastguard Worker evalTexture2DShadowGradOffset, FRAGMENT),
2697*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2darrayshadow, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2698*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 1.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2699*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), tex2DArrayMipmapShadow,
2700*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayShadowGradOffset, VERTEX),
2701*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2darrayshadow, FUNCTION_TEXTUREGRAD, Vec4(-1.2f, -0.4f, -0.5f, 0.0f),
2702*35238bceSAndroid Build Coastguard Worker Vec4(1.5f, 2.3f, 3.5f, 1.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2703*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f), true, IVec3(7, -8, 0), tex2DArrayMipmapShadow,
2704*35238bceSAndroid Build Coastguard Worker evalTexture2DArrayShadowGradOffset, FRAGMENT)};
2705*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "texturegradoffset", "textureGradOffset() Tests", textureGradOffsetCases,
2706*35238bceSAndroid Build Coastguard Worker DE_LENGTH_OF_ARRAY(textureGradOffsetCases));
2707*35238bceSAndroid Build Coastguard Worker
2708*35238bceSAndroid Build Coastguard Worker // textureProjGrad() cases
2709*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec textureProjGradCases[] = {
2710*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord MinDx MaxDx MinDy MaxDy Offset? Offset Format EvalFunc Flags
2711*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2d_vec3_fixed, FUNCTION_TEXTUREPROJGRAD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2712*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2713*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex2DMipmapFixed,
2714*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGrad3, BOTH),
2715*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2d_vec3_float, FUNCTION_TEXTUREPROJGRAD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2716*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2717*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex2DMipmapFloat,
2718*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGrad3, BOTH),
2719*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isampler2d_vec3, FUNCTION_TEXTUREPROJGRAD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2720*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2721*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), tex2DMipmapInt,
2722*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGrad3, BOTH),
2723*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler2d_vec3, FUNCTION_TEXTUREPROJGRAD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2724*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2725*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f), false, IVec3(0), tex2DMipmapUint,
2726*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGrad3, BOTH),
2727*35238bceSAndroid Build Coastguard Worker
2728*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2d_vec4_fixed, FUNCTION_TEXTUREPROJGRAD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2729*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2730*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex2DMipmapFixed,
2731*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGrad, BOTH),
2732*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2d_vec4_float, FUNCTION_TEXTUREPROJGRAD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2733*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2734*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex2DMipmapFloat,
2735*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGrad, BOTH),
2736*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isampler2d_vec4, FUNCTION_TEXTUREPROJGRAD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2737*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2738*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), tex2DMipmapInt,
2739*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGrad, BOTH),
2740*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler2d_vec4, FUNCTION_TEXTUREPROJGRAD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2741*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2742*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f), false, IVec3(0), tex2DMipmapUint,
2743*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGrad, BOTH),
2744*35238bceSAndroid Build Coastguard Worker
2745*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTUREPROJGRAD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2746*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2747*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex3DMipmapFixed,
2748*35238bceSAndroid Build Coastguard Worker evalTexture3DProjGrad, BOTH),
2749*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREPROJGRAD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2750*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2751*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex3DMipmapFloat,
2752*35238bceSAndroid Build Coastguard Worker evalTexture3DProjGrad, VERTEX),
2753*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREPROJGRAD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2754*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.2f),
2755*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex3DMipmapFloat,
2756*35238bceSAndroid Build Coastguard Worker evalTexture3DProjGrad, FRAGMENT),
2757*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isampler3d, FUNCTION_TEXTUREPROJGRAD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2758*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2759*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), false, IVec3(0), tex3DMipmapInt,
2760*35238bceSAndroid Build Coastguard Worker evalTexture3DProjGrad, BOTH),
2761*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler3d, FUNCTION_TEXTUREPROJGRAD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2762*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2763*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f), false, IVec3(0), tex3DMipmapUint,
2764*35238bceSAndroid Build Coastguard Worker evalTexture3DProjGrad, VERTEX),
2765*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler3d, FUNCTION_TEXTUREPROJGRAD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2766*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2767*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, -0.2f), false, IVec3(0), tex3DMipmapUint,
2768*35238bceSAndroid Build Coastguard Worker evalTexture3DProjGrad, FRAGMENT),
2769*35238bceSAndroid Build Coastguard Worker
2770*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREPROJGRAD, Vec4(0.2f, 0.6f, 0.0f, -1.5f),
2771*35238bceSAndroid Build Coastguard Worker Vec4(-2.25f, -3.45f, -1.5f, -1.5f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2772*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), false, IVec3(0), tex2DMipmapShadow,
2773*35238bceSAndroid Build Coastguard Worker evalTexture2DShadowProjGrad, VERTEX),
2774*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREPROJGRAD, Vec4(0.2f, 0.6f, 0.0f, -1.5f),
2775*35238bceSAndroid Build Coastguard Worker Vec4(-2.25f, -3.45f, -1.5f, -1.5f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2776*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f), false, IVec3(0), tex2DMipmapShadow,
2777*35238bceSAndroid Build Coastguard Worker evalTexture2DShadowProjGrad, FRAGMENT)};
2778*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "textureprojgrad", "textureProjGrad() Tests", textureProjGradCases,
2779*35238bceSAndroid Build Coastguard Worker DE_LENGTH_OF_ARRAY(textureProjGradCases));
2780*35238bceSAndroid Build Coastguard Worker
2781*35238bceSAndroid Build Coastguard Worker // textureProjGradOffset() cases
2782*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec textureProjGradOffsetCases[] = {
2783*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord MinDx MaxDx MinDy MaxDy Offset? Offset Format EvalFunc Flags
2784*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2d_vec3_fixed, FUNCTION_TEXTUREPROJGRAD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2785*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2786*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), tex2DMipmapFixed,
2787*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGrad3Offset, BOTH),
2788*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2d_vec3_float, FUNCTION_TEXTUREPROJGRAD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2789*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2790*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(7, -8, 0), tex2DMipmapFloat,
2791*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGrad3Offset, BOTH),
2792*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isampler2d_vec3, FUNCTION_TEXTUREPROJGRAD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2793*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2794*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), tex2DMipmapInt,
2795*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGrad3Offset, BOTH),
2796*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler2d_vec3, FUNCTION_TEXTUREPROJGRAD3, Vec4(-0.3f, -0.6f, 1.5f, 0.0f),
2797*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 1.5f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2798*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f), true, IVec3(7, -8, 0), tex2DMipmapUint,
2799*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGrad3Offset, BOTH),
2800*35238bceSAndroid Build Coastguard Worker
2801*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2d_vec4_fixed, FUNCTION_TEXTUREPROJGRAD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2802*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2803*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), tex2DMipmapFixed,
2804*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGradOffset, BOTH),
2805*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2d_vec4_float, FUNCTION_TEXTUREPROJGRAD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2806*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2807*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(7, -8, 0), tex2DMipmapFloat,
2808*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGradOffset, BOTH),
2809*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isampler2d_vec4, FUNCTION_TEXTUREPROJGRAD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2810*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2811*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), tex2DMipmapInt,
2812*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGradOffset, BOTH),
2813*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler2d_vec4, FUNCTION_TEXTUREPROJGRAD, Vec4(-0.3f, -0.6f, 0.0f, 1.5f),
2814*35238bceSAndroid Build Coastguard Worker Vec4(2.25f, 3.45f, 0.0f, 1.5f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2815*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f), true, IVec3(7, -8, 0), tex2DMipmapUint,
2816*35238bceSAndroid Build Coastguard Worker evalTexture2DProjGradOffset, BOTH),
2817*35238bceSAndroid Build Coastguard Worker
2818*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler3d_fixed, FUNCTION_TEXTUREPROJGRAD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2819*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2820*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(-8, 7, 3), tex3DMipmapFixed,
2821*35238bceSAndroid Build Coastguard Worker evalTexture3DProjGradOffset, BOTH),
2822*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREPROJGRAD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2823*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f),
2824*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(7, 3, -8), tex3DMipmapFloat,
2825*35238bceSAndroid Build Coastguard Worker evalTexture3DProjGradOffset, VERTEX),
2826*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler3d_float, FUNCTION_TEXTUREPROJGRAD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2827*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.2f),
2828*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(3, -8, 7), tex3DMipmapFloat,
2829*35238bceSAndroid Build Coastguard Worker evalTexture3DProjGradOffset, FRAGMENT),
2830*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(isampler3d, FUNCTION_TEXTUREPROJGRAD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2831*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2832*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(-0.2f, 0.0f, 0.0f), true, IVec3(-8, 7, 3), tex3DMipmapInt,
2833*35238bceSAndroid Build Coastguard Worker evalTexture3DProjGradOffset, BOTH),
2834*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler3d, FUNCTION_TEXTUREPROJGRAD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2835*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2836*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.2f, 0.0f), true, IVec3(7, 3, -8), tex3DMipmapUint,
2837*35238bceSAndroid Build Coastguard Worker evalTexture3DProjGradOffset, VERTEX),
2838*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(usampler3d, FUNCTION_TEXTUREPROJGRAD, Vec4(0.9f, 1.05f, -0.08f, -0.75f),
2839*35238bceSAndroid Build Coastguard Worker Vec4(-1.13f, -1.7f, -1.7f, -0.75f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2840*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, -0.2f), true, IVec3(3, -8, 7), tex3DMipmapUint,
2841*35238bceSAndroid Build Coastguard Worker evalTexture3DProjGradOffset, FRAGMENT),
2842*35238bceSAndroid Build Coastguard Worker
2843*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREPROJGRAD, Vec4(0.2f, 0.6f, 0.0f, -1.5f),
2844*35238bceSAndroid Build Coastguard Worker Vec4(-2.25f, -3.45f, -1.5f, -1.5f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.2f, 0.0f, 0.0f),
2845*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), true, IVec3(-8, 7, 0), tex2DMipmapShadow,
2846*35238bceSAndroid Build Coastguard Worker evalTexture2DShadowProjGradOffset, VERTEX),
2847*35238bceSAndroid Build Coastguard Worker GRAD_CASE_SPEC(sampler2dshadow, FUNCTION_TEXTUREPROJGRAD, Vec4(0.2f, 0.6f, 0.0f, -1.5f),
2848*35238bceSAndroid Build Coastguard Worker Vec4(-2.25f, -3.45f, -1.5f, -1.5f), Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f),
2849*35238bceSAndroid Build Coastguard Worker Vec3(0.0f, 0.0f, 0.0f), Vec3(0.0f, -0.2f, 0.0f), true, IVec3(7, -8, 0), tex2DMipmapShadow,
2850*35238bceSAndroid Build Coastguard Worker evalTexture2DShadowProjGradOffset, FRAGMENT)};
2851*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "textureprojgradoffset", "textureProjGradOffset() Tests", textureProjGradOffsetCases,
2852*35238bceSAndroid Build Coastguard Worker DE_LENGTH_OF_ARRAY(textureProjGradOffsetCases));
2853*35238bceSAndroid Build Coastguard Worker
2854*35238bceSAndroid Build Coastguard Worker // texelFetch() cases
2855*35238bceSAndroid Build Coastguard Worker // \note Level is constant across quad
2856*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec texelFetchCases[] = {
2857*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord Bias? MinLod MaxLod Offset? Offset Format EvalFunc Flags
2858*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_fixed, FUNCTION_TEXELFETCH, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(255.9f, 255.9f, 0.0f, 0.0f),
2859*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex2DTexelFetchFixed, evalTexelFetch2D, BOTH),
2860*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_float, FUNCTION_TEXELFETCH, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(127.9f, 127.9f, 0.0f, 0.0f),
2861*35238bceSAndroid Build Coastguard Worker false, 1.0f, 1.0f, false, IVec3(0), tex2DTexelFetchFloat, evalTexelFetch2D, BOTH),
2862*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d, FUNCTION_TEXELFETCH, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(63.9f, 63.9f, 0.0f, 0.0f), false,
2863*35238bceSAndroid Build Coastguard Worker 2.0f, 2.0f, false, IVec3(0), tex2DTexelFetchInt, evalTexelFetch2D, BOTH),
2864*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d, FUNCTION_TEXELFETCH, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(15.9f, 15.9f, 0.0f, 0.0f), false,
2865*35238bceSAndroid Build Coastguard Worker 4.0f, 4.0f, false, IVec3(0), tex2DTexelFetchUint, evalTexelFetch2D, BOTH),
2866*35238bceSAndroid Build Coastguard Worker
2867*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_fixed, FUNCTION_TEXELFETCH, Vec4(0.0f, 0.0f, 0.0f, 0.0f),
2868*35238bceSAndroid Build Coastguard Worker Vec4(127.9f, 127.9f, 3.9f, 0.0f), false, 0.0f, 0.0f, false, IVec3(0), tex2DArrayTexelFetchFixed,
2869*35238bceSAndroid Build Coastguard Worker evalTexelFetch2DArray, BOTH),
2870*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_float, FUNCTION_TEXELFETCH, Vec4(0.0f, 0.0f, 0.0f, 0.0f),
2871*35238bceSAndroid Build Coastguard Worker Vec4(63.9f, 63.9f, 3.9f, 0.0f), false, 1.0f, 1.0f, false, IVec3(0), tex2DArrayTexelFetchFloat,
2872*35238bceSAndroid Build Coastguard Worker evalTexelFetch2DArray, BOTH),
2873*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2darray, FUNCTION_TEXELFETCH, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(31.9f, 31.9f, 3.9f, 0.0f),
2874*35238bceSAndroid Build Coastguard Worker false, 2.0f, 2.0f, false, IVec3(0), tex2DArrayTexelFetchInt, evalTexelFetch2DArray, BOTH),
2875*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2darray, FUNCTION_TEXELFETCH, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(15.9f, 15.9f, 3.9f, 0.0f),
2876*35238bceSAndroid Build Coastguard Worker false, 3.0f, 3.0f, false, IVec3(0), tex2DArrayTexelFetchUint, evalTexelFetch2DArray, BOTH),
2877*35238bceSAndroid Build Coastguard Worker
2878*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXELFETCH, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(63.9f, 31.9f, 31.9f, 0.0f),
2879*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, false, IVec3(0), tex3DTexelFetchFixed, evalTexelFetch3D, BOTH),
2880*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXELFETCH, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(31.9f, 15.9f, 15.9f, 0.0f),
2881*35238bceSAndroid Build Coastguard Worker false, 1.0f, 1.0f, false, IVec3(0), tex3DTexelFetchFloat, evalTexelFetch3D, BOTH),
2882*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXELFETCH, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(15.9f, 7.9f, 7.9f, 0.0f), false,
2883*35238bceSAndroid Build Coastguard Worker 2.0f, 2.0f, false, IVec3(0), tex3DTexelFetchInt, evalTexelFetch3D, BOTH),
2884*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXELFETCH, Vec4(0.0f, 0.0f, 0.0f, 0.0f), Vec4(63.9f, 31.9f, 31.9f, 0.0f), false,
2885*35238bceSAndroid Build Coastguard Worker 0.0f, 0.0f, false, IVec3(0), tex3DTexelFetchUint, evalTexelFetch3D, BOTH)};
2886*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "texelfetch", "texelFetch() Tests", texelFetchCases, DE_LENGTH_OF_ARRAY(texelFetchCases));
2887*35238bceSAndroid Build Coastguard Worker
2888*35238bceSAndroid Build Coastguard Worker // texelFetchOffset() cases
2889*35238bceSAndroid Build Coastguard Worker static const TexFuncCaseSpec texelFetchOffsetCases[] = {
2890*35238bceSAndroid Build Coastguard Worker // Name Function MinCoord MaxCoord Bias? MinLod MaxLod Offset? Offset Format EvalFunc Flags
2891*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_fixed, FUNCTION_TEXELFETCH, Vec4(8.0f, -7.0f, 0.0f, 0.0f), Vec4(263.9f, 248.9f, 0.0f, 0.0f),
2892*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DTexelFetchFixed, evalTexelFetch2D, BOTH),
2893*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2d_float, FUNCTION_TEXELFETCH, Vec4(-7.0f, 8.0f, 0.0f, 0.0f), Vec4(120.9f, 135.9f, 0.0f, 0.0f),
2894*35238bceSAndroid Build Coastguard Worker false, 1.0f, 1.0f, true, IVec3(7, -8, 0), tex2DTexelFetchFloat, evalTexelFetch2D, BOTH),
2895*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2d, FUNCTION_TEXELFETCH, Vec4(8.0f, -7.0f, 0.0f, 0.0f), Vec4(71.9f, 56.9f, 0.0f, 0.0f), false,
2896*35238bceSAndroid Build Coastguard Worker 2.0f, 2.0f, true, IVec3(-8, 7, 0), tex2DTexelFetchInt, evalTexelFetch2D, BOTH),
2897*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2d, FUNCTION_TEXELFETCH, Vec4(-7.0f, 8.0f, 0.0f, 0.0f), Vec4(8.9f, 23.9f, 0.0f, 0.0f), false,
2898*35238bceSAndroid Build Coastguard Worker 4.0f, 4.0f, true, IVec3(7, -8, 0), tex2DTexelFetchUint, evalTexelFetch2D, BOTH),
2899*35238bceSAndroid Build Coastguard Worker
2900*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_fixed, FUNCTION_TEXELFETCH, Vec4(8.0f, -7.0f, 0.0f, 0.0f),
2901*35238bceSAndroid Build Coastguard Worker Vec4(135.9f, 120.9f, 3.9f, 0.0f), false, 0.0f, 0.0f, true, IVec3(-8, 7, 0), tex2DArrayTexelFetchFixed,
2902*35238bceSAndroid Build Coastguard Worker evalTexelFetch2DArray, BOTH),
2903*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler2darray_float, FUNCTION_TEXELFETCH, Vec4(-7.0f, 8.0f, 0.0f, 0.0f),
2904*35238bceSAndroid Build Coastguard Worker Vec4(56.9f, 71.9f, 3.9f, 0.0f), false, 1.0f, 1.0f, true, IVec3(7, -8, 0), tex2DArrayTexelFetchFloat,
2905*35238bceSAndroid Build Coastguard Worker evalTexelFetch2DArray, BOTH),
2906*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler2darray, FUNCTION_TEXELFETCH, Vec4(8.0f, -7.0f, 0.0f, 0.0f), Vec4(39.9f, 24.9f, 3.9f, 0.0f),
2907*35238bceSAndroid Build Coastguard Worker false, 2.0f, 2.0f, true, IVec3(-8, 7, 0), tex2DArrayTexelFetchInt, evalTexelFetch2DArray, BOTH),
2908*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler2darray, FUNCTION_TEXELFETCH, Vec4(-7.0f, 8.0f, 0.0f, 0.0f), Vec4(8.9f, 23.9f, 3.9f, 0.0f),
2909*35238bceSAndroid Build Coastguard Worker false, 3.0f, 3.0f, true, IVec3(7, -8, 0), tex2DArrayTexelFetchUint, evalTexelFetch2DArray, BOTH),
2910*35238bceSAndroid Build Coastguard Worker
2911*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_fixed, FUNCTION_TEXELFETCH, Vec4(8.0f, -7.0f, -3.0f, 0.0f), Vec4(71.9f, 24.9f, 28.9f, 0.0f),
2912*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 3), tex3DTexelFetchFixed, evalTexelFetch3D, BOTH),
2913*35238bceSAndroid Build Coastguard Worker CASE_SPEC(sampler3d_float, FUNCTION_TEXELFETCH, Vec4(-7.0f, -3.0f, 8.0f, 0.0f), Vec4(24.9f, 12.9f, 23.9f, 0.0f),
2914*35238bceSAndroid Build Coastguard Worker false, 1.0f, 1.0f, true, IVec3(7, 3, -8), tex3DTexelFetchFloat, evalTexelFetch3D, BOTH),
2915*35238bceSAndroid Build Coastguard Worker CASE_SPEC(isampler3d, FUNCTION_TEXELFETCH, Vec4(-3.0f, 8.0f, -7.0f, 0.0f), Vec4(12.9f, 15.9f, 0.9f, 0.0f),
2916*35238bceSAndroid Build Coastguard Worker false, 2.0f, 2.0f, true, IVec3(3, -8, 7), tex3DTexelFetchInt, evalTexelFetch3D, BOTH),
2917*35238bceSAndroid Build Coastguard Worker CASE_SPEC(usampler3d, FUNCTION_TEXELFETCH, Vec4(8.0f, -7.0f, -3.0f, 0.0f), Vec4(71.9f, 24.9f, 28.9f, 0.0f),
2918*35238bceSAndroid Build Coastguard Worker false, 0.0f, 0.0f, true, IVec3(-8, 7, 3), tex3DTexelFetchUint, evalTexelFetch3D, BOTH)};
2919*35238bceSAndroid Build Coastguard Worker createCaseGroup(this, "texelfetchoffset", "texelFetchOffset() Tests", texelFetchOffsetCases,
2920*35238bceSAndroid Build Coastguard Worker DE_LENGTH_OF_ARRAY(texelFetchOffsetCases));
2921*35238bceSAndroid Build Coastguard Worker
2922*35238bceSAndroid Build Coastguard Worker // textureSize() cases
2923*35238bceSAndroid Build Coastguard Worker {
2924*35238bceSAndroid Build Coastguard Worker struct TextureSizeCaseSpec
2925*35238bceSAndroid Build Coastguard Worker {
2926*35238bceSAndroid Build Coastguard Worker const char *name;
2927*35238bceSAndroid Build Coastguard Worker const char *samplerName;
2928*35238bceSAndroid Build Coastguard Worker TextureSpec textureSpec;
2929*35238bceSAndroid Build Coastguard Worker } textureSizeCases[] = {
2930*35238bceSAndroid Build Coastguard Worker {"sampler2d_fixed", "sampler2D", tex2DFixed},
2931*35238bceSAndroid Build Coastguard Worker {"sampler2d_float", "sampler2D", tex2DFloat},
2932*35238bceSAndroid Build Coastguard Worker {"isampler2d", "isampler2D", tex2DInt},
2933*35238bceSAndroid Build Coastguard Worker {"usampler2d", "usampler2D", tex2DUint},
2934*35238bceSAndroid Build Coastguard Worker {"sampler2dshadow", "sampler2DShadow", tex2DShadow},
2935*35238bceSAndroid Build Coastguard Worker {"sampler3d_fixed", "sampler3D", tex3DFixed},
2936*35238bceSAndroid Build Coastguard Worker {"sampler3d_float", "sampler3D", tex3DFloat},
2937*35238bceSAndroid Build Coastguard Worker {"isampler3d", "isampler3D", tex3DInt},
2938*35238bceSAndroid Build Coastguard Worker {"usampler3d", "usampler3D", tex3DUint},
2939*35238bceSAndroid Build Coastguard Worker {"samplercube_fixed", "samplerCube", texCubeFixed},
2940*35238bceSAndroid Build Coastguard Worker {"samplercube_float", "samplerCube", texCubeFloat},
2941*35238bceSAndroid Build Coastguard Worker {"isamplercube", "isamplerCube", texCubeInt},
2942*35238bceSAndroid Build Coastguard Worker {"usamplercube", "usamplerCube", texCubeUint},
2943*35238bceSAndroid Build Coastguard Worker {"samplercubeshadow", "samplerCubeShadow", texCubeShadow},
2944*35238bceSAndroid Build Coastguard Worker {"sampler2darray_fixed", "sampler2DArray", tex2DArrayFixed},
2945*35238bceSAndroid Build Coastguard Worker {"sampler2darray_float", "sampler2DArray", tex2DArrayFloat},
2946*35238bceSAndroid Build Coastguard Worker {"isampler2darray", "isampler2DArray", tex2DArrayInt},
2947*35238bceSAndroid Build Coastguard Worker {"usampler2darray", "usampler2DArray", tex2DArrayUint},
2948*35238bceSAndroid Build Coastguard Worker {"sampler2darrayshadow", "sampler2DArrayShadow", tex2DArrayShadow},
2949*35238bceSAndroid Build Coastguard Worker };
2950*35238bceSAndroid Build Coastguard Worker
2951*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *group = new tcu::TestCaseGroup(m_testCtx, "texturesize", "textureSize() Tests");
2952*35238bceSAndroid Build Coastguard Worker addChild(group);
2953*35238bceSAndroid Build Coastguard Worker
2954*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(textureSizeCases); ++ndx)
2955*35238bceSAndroid Build Coastguard Worker {
2956*35238bceSAndroid Build Coastguard Worker group->addChild(
2957*35238bceSAndroid Build Coastguard Worker new TextureSizeCase(m_context, (std::string(textureSizeCases[ndx].name) + "_vertex").c_str(), "",
2958*35238bceSAndroid Build Coastguard Worker textureSizeCases[ndx].samplerName, textureSizeCases[ndx].textureSpec, true));
2959*35238bceSAndroid Build Coastguard Worker group->addChild(
2960*35238bceSAndroid Build Coastguard Worker new TextureSizeCase(m_context, (std::string(textureSizeCases[ndx].name) + "_fragment").c_str(), "",
2961*35238bceSAndroid Build Coastguard Worker textureSizeCases[ndx].samplerName, textureSizeCases[ndx].textureSpec, false));
2962*35238bceSAndroid Build Coastguard Worker }
2963*35238bceSAndroid Build Coastguard Worker }
2964*35238bceSAndroid Build Coastguard Worker
2965*35238bceSAndroid Build Coastguard Worker // Negative cases.
2966*35238bceSAndroid Build Coastguard Worker {
2967*35238bceSAndroid Build Coastguard Worker gls::ShaderLibrary library(m_testCtx, m_context.getRenderContext(), m_context.getContextInfo());
2968*35238bceSAndroid Build Coastguard Worker std::vector<tcu::TestNode *> negativeCases = library.loadShaderFile("shaders/invalid_texture_functions.test");
2969*35238bceSAndroid Build Coastguard Worker
2970*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *group =
2971*35238bceSAndroid Build Coastguard Worker new tcu::TestCaseGroup(m_testCtx, "invalid", "Invalid texture function usage", negativeCases);
2972*35238bceSAndroid Build Coastguard Worker addChild(group);
2973*35238bceSAndroid Build Coastguard Worker }
2974*35238bceSAndroid Build Coastguard Worker }
2975*35238bceSAndroid Build Coastguard Worker
2976*35238bceSAndroid Build Coastguard Worker } // namespace Functional
2977*35238bceSAndroid Build Coastguard Worker } // namespace gles3
2978*35238bceSAndroid Build Coastguard Worker } // namespace deqp
2979