1 #ifndef _ESEXTCTEXTURECUBEMAPARRAYGENERATEMIPMAP_HPP
2 #define _ESEXTCTEXTURECUBEMAPARRAYGENERATEMIPMAP_HPP
3 /*-------------------------------------------------------------------------
4  * OpenGL Conformance Test Suite
5  * -----------------------------
6  *
7  * Copyright (c) 2014-2016 The Khronos Group Inc.
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  */ /*!
22  * \file
23  * \brief
24  */ /*-------------------------------------------------------------------*/
25 
26 /*!
27  * \file  esextcTextureCubeMapArrayGenerateMipMap.hpp
28  * \brief texture_cube_map_array extenstion - glGenerateMipmap() (Test 7)
29  */ /*-------------------------------------------------------------------*/
30 
31 #include "../esextcTestCaseBase.hpp"
32 #include "gluStrUtil.hpp"
33 #include <vector>
34 
35 namespace glcts
36 {
37 /* Represents a specific texture storage configuration */
38 struct StorageConfig
39 {
40 	glw::GLuint m_depth;
41 	glw::GLuint m_height;
42 	glw::GLuint m_levels;
43 	glw::GLuint m_to_id;
44 	glw::GLuint m_width;
45 };
46 
47 /**  Implementation of the first four paragraphs of Texture Cube Map Array Test 7.
48  *   Description follows:
49  *
50  *   Make sure glGenerateMipmap() works as specified for cube-map array
51  *   textures.
52  *
53  *   Category: Functionality tests, Coverage.
54  *   Priority: Must-have.
55  *
56  *   Make sure that mip-map generation works correctly for cube-map array
57  *   textures. Use texture resolutions:
58  *
59  *         [width x height x depth]
60  *      1)   64   x   64   x  18;
61  *      2)  117   x  117   x   6;
62  *      3)  256   x  256   x   6;
63  *      4)  173   x  173   x  12;
64  *
65  *   Both mutable and immutable textures should be checked (except as noted below).
66  *
67  *   1. For each layer-face, the test should initialize a base mip-map of iteration-
68  *      -specific resolution with a checkerboard pattern filled with two colors.
69  *
70  *      The color pair used for the pattern should be different for each
71  *      layer-face considered. The test should then call glGenerateMipmap().
72  *      This part of the test passes if base mip-map was left unchanged and the
73  *      lowest level mip-map is not set to either of the colors used.
74  **/
75 
76 class TextureCubeMapArrayGenerateMipMapFilterable : public TestCaseBase
77 {
78 public:
79 	/* Public methods */
80 	TextureCubeMapArrayGenerateMipMapFilterable(Context& context, const ExtParameters& extParams, const char* name,
81 												const char* description, STORAGE_TYPE storageType);
82 
~TextureCubeMapArrayGenerateMipMapFilterable(void)83 	virtual ~TextureCubeMapArrayGenerateMipMapFilterable(void)
84 	{
85 	}
86 
87 	void		  deinit(void);
88 	void		  init(void);
89 	IterateResult iterate(void);
90 
91 private:
92 	/* Private method */
93 	void generateTestData(int face, unsigned char* data, int width, int height);
94 	void initTest();
95 
96 	/* Private constants */
97 	static const int		   m_n_colors_per_layer_face = 2;
98 	static const int		   m_n_components			 = 4;
99 	static const int		   m_n_max_faces			 = 18;
100 	static const unsigned char m_layer_face_data[m_n_max_faces][m_n_colors_per_layer_face][m_n_components];
101 
102 	/* Variables for general usage */
103 	glw::GLuint				   m_fbo_id;
104 	std::vector<StorageConfig> m_storage_configs;
105 	STORAGE_TYPE			   m_storage_type;
106 
107 	unsigned char* m_reference_data_ptr;
108 	unsigned char* m_rendered_data_ptr;
109 };
110 
111 /** Implementats the last paragraph of Texture Cube Map Array Test 7.
112  *  Description follows:
113  *
114  *  3. Make sure that GL_INVALID_OPERATION error is generated if the texture
115  *     bound to target is not cube array complete. To check this, configure
116  *     a cube-map array texture object so that its faces use a non-filterable
117  *     internalformat, and the magnification filter parameter for the object
118  *     is set to LINEAR. This test should be executed for both mutable and
119  *     immutable textures.
120  */
121 class TextureCubeMapArrayGenerateMipMapNonFilterable : public TestCaseBase
122 {
123 public:
124 	/* Public methods */
125 	TextureCubeMapArrayGenerateMipMapNonFilterable(Context& context, const ExtParameters& extParams, const char* name,
126 												   const char* description, STORAGE_TYPE storageType);
127 
~TextureCubeMapArrayGenerateMipMapNonFilterable(void)128 	virtual ~TextureCubeMapArrayGenerateMipMapNonFilterable(void)
129 	{
130 	}
131 
132 	void		  deinit(void);
133 	void		  init(void);
134 	void		  initTest(void);
135 	IterateResult iterate(void);
136 
137 private:
138 	/* Private methods */
139 	void generateTestData(int face, unsigned char* data, int size);
140 
141 	/* Variables for general usage */
142 	std::vector<StorageConfig> m_non_filterable_texture_configs;
143 	STORAGE_TYPE			   m_storage_type;
144 };
145 
146 } /* glcts */
147 
148 #endif // _ESEXTCTEXTURECUBEMAPARRAYGENERATEMIPMAP_HPP
149