• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*-------------------------------------------------------------------------
2  * OpenGL Conformance Test Suite
3  * -----------------------------
4  *
5  * Copyright (c) 2014-2016 The Khronos Group Inc.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */ /*!
20  * \file
21  * \brief
22  */ /*-------------------------------------------------------------------*/
23 
24 /*!
25  * \file esextcTextureBorderClampBase.cpp
26  * \brief Base Class for Texture Border Clamp extension tests 1-6.
27  */ /*-------------------------------------------------------------------*/
28 
29 #include "esextcTextureBorderClampBase.hpp"
30 #include "gluContextInfo.hpp"
31 #include "gluDefs.hpp"
32 #include "glwEnums.hpp"
33 #include "glwFunctions.hpp"
34 #include "tcuTestLog.hpp"
35 
36 namespace glcts
37 {
38 
39 /** Constructor
40  *
41  *  @param context     Test context
42  *  @param name        Test case's name
43  *  @param description Test case's description
44  **/
TextureBorderClampBase(Context & context,const ExtParameters & extParams,const char * name,const char * description)45 TextureBorderClampBase::TextureBorderClampBase(Context& context, const ExtParameters& extParams, const char* name,
46 											   const char* description)
47 	: TestCaseBase(context, extParams, name, description)
48 	, m_texture_2D_array_id(0)
49 	, m_texture_2D_id(0)
50 	, m_texture_2D_multisample_array_id(0)
51 	, m_texture_2D_multisample_id(0)
52 	, m_texture_3D_id(0)
53 	, m_texture_buffer_id(0)
54 	, m_texture_cube_map_id(0)
55 	, m_texture_cube_map_array_id(0)
56 {
57 	/* Left blank on purpose */
58 }
59 
60 /** Deinitializes GLES objects created during the tests.
61  *
62  */
deinit(void)63 void TextureBorderClampBase::deinit(void)
64 {
65 	deinitAllTextures();
66 
67 	/* Deinitializes base class */
68 	TestCaseBase::deinit();
69 }
70 
71 /** Initializes GLES objects used during the tests.
72  *
73  */
initTest(void)74 void TextureBorderClampBase::initTest(void)
75 {
76 	initAllTextures();
77 }
78 
79 /** Deinitializes all texture objects */
deinitAllTextures(void)80 void TextureBorderClampBase::deinitAllTextures(void)
81 {
82 	const glw::Functions& gl = m_context.getRenderContext().getFunctions();
83 
84 	gl.bindTexture(GL_TEXTURE_2D, 0);
85 	gl.bindTexture(GL_TEXTURE_3D, 0);
86 	gl.bindTexture(GL_TEXTURE_2D_ARRAY, 0);
87 	gl.bindTexture(GL_TEXTURE_CUBE_MAP, 0);
88 
89 	if (m_is_texture_storage_multisample_supported)
90 	{
91 		gl.bindTexture(GL_TEXTURE_2D_MULTISAMPLE, 0);
92 	}
93 
94 	if (m_is_texture_storage_multisample_2d_array_supported)
95 	{
96 		gl.bindTexture(GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES, 0);
97 	}
98 
99 	if (m_is_texture_cube_map_array_supported)
100 	{
101 		gl.bindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, 0);
102 	}
103 
104 	if (m_is_texture_buffer_supported)
105 	{
106 		gl.bindBuffer(m_glExtTokens.TEXTURE_BUFFER, 0);
107 	}
108 
109 	if (0 != m_texture_2D_id)
110 	{
111 		gl.deleteTextures(1, &m_texture_2D_id);
112 
113 		m_texture_2D_id = 0;
114 	}
115 
116 	if (0 != m_texture_3D_id)
117 	{
118 		gl.deleteTextures(1, &m_texture_3D_id);
119 
120 		m_texture_3D_id = 0;
121 	}
122 
123 	if (0 != m_texture_2D_array_id)
124 	{
125 		gl.deleteTextures(1, &m_texture_2D_array_id);
126 
127 		m_texture_2D_array_id = 0;
128 	}
129 
130 	if (0 != m_texture_cube_map_id)
131 	{
132 		gl.deleteTextures(1, &m_texture_cube_map_id);
133 
134 		m_texture_cube_map_id = 0;
135 	}
136 
137 	if (0 != m_texture_cube_map_array_id)
138 	{
139 		gl.deleteTextures(1, &m_texture_cube_map_array_id);
140 
141 		m_texture_cube_map_array_id = 0;
142 	}
143 
144 	if (0 != m_texture_2D_multisample_id)
145 	{
146 		gl.deleteTextures(1, &m_texture_2D_multisample_id);
147 
148 		m_texture_2D_multisample_id = 0;
149 	}
150 
151 	if (0 != m_texture_2D_multisample_array_id)
152 	{
153 		gl.deleteTextures(1, &m_texture_2D_multisample_array_id);
154 
155 		m_texture_2D_multisample_array_id = 0;
156 	}
157 
158 	if (0 != m_texture_buffer_id)
159 	{
160 		gl.deleteBuffers(1, &m_texture_buffer_id);
161 
162 		m_texture_buffer_id = 0;
163 	}
164 }
165 
166 /** Initializes all texture objects */
initAllTextures(void)167 void TextureBorderClampBase::initAllTextures(void)
168 {
169 	const glw::Functions& gl = m_context.getRenderContext().getFunctions();
170 
171 	/* Create and bind a 2D texture object */
172 	gl.genTextures(1, &m_texture_2D_id);
173 	GLU_EXPECT_NO_ERROR(gl.getError(), "Error generating a texture object");
174 
175 	gl.bindTexture(GL_TEXTURE_2D, m_texture_2D_id);
176 	GLU_EXPECT_NO_ERROR(gl.getError(), "Error binding a texture object to GL_TEXTURE_2D texture target");
177 
178 	m_texture_target_list.push_back(GL_TEXTURE_2D);
179 
180 	/* Create and bind a 3D texture object */
181 	gl.genTextures(1, &m_texture_3D_id);
182 	GLU_EXPECT_NO_ERROR(gl.getError(), "Error generating a texture object");
183 
184 	gl.bindTexture(GL_TEXTURE_3D, m_texture_3D_id);
185 	GLU_EXPECT_NO_ERROR(gl.getError(), "Error binding a texture object to GL_TEXTURE_3D texture target");
186 
187 	m_texture_target_list.push_back(GL_TEXTURE_3D);
188 
189 	/* Create and bind a 2D array texture object */
190 	gl.genTextures(1, &m_texture_2D_array_id);
191 	GLU_EXPECT_NO_ERROR(gl.getError(), "Error generating a texture object");
192 
193 	gl.bindTexture(GL_TEXTURE_2D_ARRAY, m_texture_2D_array_id);
194 	GLU_EXPECT_NO_ERROR(gl.getError(), "Error binding a texture object to GL_TEXTURE_2D_ARRAY texture target");
195 
196 	m_texture_target_list.push_back(GL_TEXTURE_2D_ARRAY);
197 
198 	/* Create and bind a cube map texture object */
199 	gl.genTextures(1, &m_texture_cube_map_id);
200 	GLU_EXPECT_NO_ERROR(gl.getError(), "Error generating a texture object");
201 
202 	gl.bindTexture(GL_TEXTURE_CUBE_MAP, m_texture_cube_map_id);
203 	GLU_EXPECT_NO_ERROR(gl.getError(), "Error binding a texture object to GL_TEXTURE_CUBE_MAP texture target");
204 
205 	m_texture_target_list.push_back(GL_TEXTURE_CUBE_MAP);
206 
207 	if (m_is_texture_cube_map_array_supported)
208 	{
209 		/* Create and bind a cube map array texture object */
210 		gl.genTextures(1, &m_texture_cube_map_array_id);
211 		GLU_EXPECT_NO_ERROR(gl.getError(), "Error generating a texture object");
212 
213 		gl.bindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, m_texture_cube_map_array_id);
214 		GLU_EXPECT_NO_ERROR(gl.getError(),
215 							"Error binding a texture object to GL_TEXTURE_CUBE_MAP_ARRAY_EXT texture target");
216 
217 		m_texture_target_list.push_back(GL_TEXTURE_CUBE_MAP_ARRAY);
218 	}
219 
220 	if (m_is_texture_storage_multisample_supported)
221 	{
222 		/* Create and bind a 2D multisample texture object */
223 		gl.genTextures(1, &m_texture_2D_multisample_id);
224 		GLU_EXPECT_NO_ERROR(gl.getError(), "Error generating a texture object");
225 
226 		gl.bindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_texture_2D_multisample_id);
227 		GLU_EXPECT_NO_ERROR(gl.getError(),
228 							"Error binding a texture object to GL_TEXTURE_2D_MULTISAMPLE texture target");
229 
230 		m_texture_target_list.push_back(GL_TEXTURE_2D_MULTISAMPLE);
231 	}
232 
233 	if (m_is_texture_storage_multisample_2d_array_supported)
234 	{
235 		/* Create and bind a 2D multisample array texture object */
236 		gl.genTextures(1, &m_texture_2D_multisample_array_id);
237 		GLU_EXPECT_NO_ERROR(gl.getError(), "Error generating a texture object");
238 
239 		gl.bindTexture(GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES, m_texture_2D_multisample_array_id);
240 		GLU_EXPECT_NO_ERROR(gl.getError(),
241 							"Error binding a texture object to GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES texture target");
242 
243 		m_texture_target_list.push_back(GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES);
244 	}
245 
246 	if (m_is_texture_buffer_supported)
247 	{
248 		/* Create and bind a buffer texture object */
249 		gl.genBuffers(1, &m_texture_buffer_id);
250 		GLU_EXPECT_NO_ERROR(gl.getError(), "Error generating a texture object");
251 
252 		gl.bindBuffer(m_glExtTokens.TEXTURE_BUFFER, m_texture_buffer_id);
253 		GLU_EXPECT_NO_ERROR(gl.getError(), "Error binding a texture object to GL_TEXTURE_BUFFER_EXT texture target");
254 	}
255 }
256 
257 /** Returns "texture border clamp"-specific pname as literals.
258  *
259  * @param  pname GL property name.
260  *
261  * @return pointer to literal with pname
262  */
getPNameString(glw::GLenum pname)263 const char* TextureBorderClampBase::getPNameString(glw::GLenum pname)
264 {
265 	static const char* str_GL_TEXTURE_BASE_LEVEL		 = "GL_TEXTURE_BASE_LEVEL";
266 	static const char* str_GL_TEXTURE_BORDER_COLOR_EXT   = "GL_TEXTURE_BORDER_COLOR_EXT";
267 	static const char* str_GL_TEXTURE_MIN_FILTER		 = "GL_TEXTURE_MIN_FILTER";
268 	static const char* str_GL_TEXTURE_IMMUTABLE_FORMAT   = "GL_TEXTURE_IMMUTABLE_FORMAT";
269 	static const char* str_GL_TEXTURE_COMPARE_MODE		 = "GL_TEXTURE_COMPARE_MODE";
270 	static const char* str_GL_TEXTURE_COMPARE_FUNC		 = "GL_TEXTURE_COMPARE_FUNC";
271 	static const char* str_GL_TEXTURE_MAG_FILTER		 = "GL_TEXTURE_MAG_FILTER";
272 	static const char* str_GL_TEXTURE_MAX_LEVEL			 = "GL_TEXTURE_MAX_LEVEL";
273 	static const char* str_GL_TEXTURE_SWIZZLE_R			 = "GL_TEXTURE_SWIZZLE_R";
274 	static const char* str_GL_TEXTURE_SWIZZLE_G			 = "GL_TEXTURE_SWIZZLE_G";
275 	static const char* str_GL_TEXTURE_SWIZZLE_B			 = "GL_TEXTURE_SWIZZLE_B";
276 	static const char* str_GL_TEXTURE_SWIZZLE_A			 = "GL_TEXTURE_SWIZZLE_A";
277 	static const char* str_GL_TEXTURE_WRAP_S			 = "GL_TEXTURE_WRAP_S";
278 	static const char* str_GL_TEXTURE_WRAP_T			 = "GL_TEXTURE_WRAP_T";
279 	static const char* str_GL_TEXTURE_WRAP_R			 = "GL_TEXTURE_WRAP_R";
280 	static const char* str_GL_DEPTH_STENCIL_TEXTURE_MODE = "GL_DEPTH_STENCIL_TEXTURE_MODE";
281 	static const char* str_GL_TEXTURE_IMMUTABLE_LEVELS   = "GL_TEXTURE_IMMUTABLE_LEVELS";
282 	static const char* str_GL_TEXTURE_MAX_LOD			 = "GL_TEXTURE_MAX_LOD";
283 	static const char* str_GL_TEXTURE_MIN_LOD			 = "GL_TEXTURE_MIN_LOD";
284 	static const char* str_UNKNOWN						 = "UNKNOWN";
285 
286 	if (pname == m_glExtTokens.TEXTURE_BORDER_COLOR)
287 	{
288 		return str_GL_TEXTURE_BORDER_COLOR_EXT;
289 	}
290 
291 	switch (pname)
292 	{
293 	case GL_TEXTURE_BASE_LEVEL:
294 		return str_GL_TEXTURE_BASE_LEVEL;
295 	case GL_TEXTURE_MIN_FILTER:
296 		return str_GL_TEXTURE_MIN_FILTER;
297 	case GL_TEXTURE_IMMUTABLE_FORMAT:
298 		return str_GL_TEXTURE_IMMUTABLE_FORMAT;
299 	case GL_TEXTURE_COMPARE_MODE:
300 		return str_GL_TEXTURE_COMPARE_MODE;
301 	case GL_TEXTURE_COMPARE_FUNC:
302 		return str_GL_TEXTURE_COMPARE_FUNC;
303 	case GL_TEXTURE_MAG_FILTER:
304 		return str_GL_TEXTURE_MAG_FILTER;
305 	case GL_TEXTURE_MAX_LEVEL:
306 		return str_GL_TEXTURE_MAX_LEVEL;
307 	case GL_TEXTURE_SWIZZLE_R:
308 		return str_GL_TEXTURE_SWIZZLE_R;
309 	case GL_TEXTURE_SWIZZLE_G:
310 		return str_GL_TEXTURE_SWIZZLE_G;
311 	case GL_TEXTURE_SWIZZLE_B:
312 		return str_GL_TEXTURE_SWIZZLE_B;
313 	case GL_TEXTURE_SWIZZLE_A:
314 		return str_GL_TEXTURE_SWIZZLE_A;
315 	case GL_TEXTURE_WRAP_S:
316 		return str_GL_TEXTURE_WRAP_S;
317 	case GL_TEXTURE_WRAP_T:
318 		return str_GL_TEXTURE_WRAP_T;
319 	case GL_TEXTURE_WRAP_R:
320 		return str_GL_TEXTURE_WRAP_R;
321 	case GL_DEPTH_STENCIL_TEXTURE_MODE:
322 		return str_GL_DEPTH_STENCIL_TEXTURE_MODE;
323 	case GL_TEXTURE_IMMUTABLE_LEVELS:
324 		return str_GL_TEXTURE_IMMUTABLE_LEVELS;
325 	case GL_TEXTURE_MAX_LOD:
326 		return str_GL_TEXTURE_MAX_LOD;
327 	case GL_TEXTURE_MIN_LOD:
328 		return str_GL_TEXTURE_MIN_LOD;
329 	default:
330 		return str_UNKNOWN;
331 	}
332 }
333 
334 /** Returns texture target as literals.
335  *
336  * @param  target ES texture target.
337  *
338  * @return requested literal
339  */
getTexTargetString(glw::GLenum target)340 const char* TextureBorderClampBase::getTexTargetString(glw::GLenum target)
341 {
342 	static const char* str_GL_TEXTURE_2D					   = "GL_TEXTURE_2D";
343 	static const char* str_GL_TEXTURE_2D_ARRAY				   = "GL_TEXTURE_2D_ARRAY";
344 	static const char* str_GL_TEXTURE_2D_MULTISAMPLE		   = "GL_TEXTURE_2D_MULTISAMPLE";
345 	static const char* str_GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES = "GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES";
346 	static const char* str_GL_TEXTURE_3D					   = "GL_TEXTURE_3D";
347 	static const char* str_GL_TEXTURE_BUFFER_EXT			   = "GL_TEXTURE_BUFFER_EXT";
348 	static const char* str_GL_TEXTURE_CUBE_MAP				   = "GL_TEXTURE_CUBE_MAP";
349 	static const char* str_GL_TEXTURE_CUBE_MAP_ARRAY_EXT	   = "GL_TEXTURE_CUBE_MAP_ARRAY_EXT";
350 	static const char* str_GL_TEXTURE_CUBE_MAP_POSITIVE_X	  = "GL_TEXTURE_CUBE_MAP_POSITIVE_X";
351 	static const char* str_UNKNOWN							   = "UNKNOWN";
352 
353 	if (target == m_glExtTokens.TEXTURE_BORDER_COLOR)
354 	{
355 		return str_GL_TEXTURE_BUFFER_EXT;
356 	}
357 
358 	switch (target)
359 	{
360 	case GL_TEXTURE_2D:
361 		return str_GL_TEXTURE_2D;
362 	case GL_TEXTURE_3D:
363 		return str_GL_TEXTURE_3D;
364 	case GL_TEXTURE_2D_ARRAY:
365 		return str_GL_TEXTURE_2D_ARRAY;
366 	case GL_TEXTURE_CUBE_MAP:
367 		return str_GL_TEXTURE_CUBE_MAP;
368 	case GL_TEXTURE_2D_MULTISAMPLE:
369 		return str_GL_TEXTURE_2D_MULTISAMPLE;
370 	case GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES:
371 		return str_GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES;
372 	case GL_TEXTURE_CUBE_MAP_ARRAY:
373 		return str_GL_TEXTURE_CUBE_MAP_ARRAY_EXT;
374 	case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
375 		return str_GL_TEXTURE_CUBE_MAP_POSITIVE_X;
376 	default:
377 		return str_UNKNOWN;
378 	}
379 }
380 
381 } // namespace glcts
382