es31cTextureStorageMultisampleDependenciesTests.hpp revision 48087f5f0eb08759ee763f98daf3b34becb74559
1#ifndef _ES31CTEXTURESTORAGEMULTISAMPLEDEPENDENCIESTESTS_HPP
2#define _ES31CTEXTURESTORAGEMULTISAMPLEDEPENDENCIESTESTS_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 */ /*!
28 * \file  es31cTextureStorageMultisampleDependenciesTests.hpp
29 * \brief Declares test classes for testing dependencies of multisample
30 *        textures with other parts of the API (ES3.1 only)
31 */ /*--------------------------------------------------------------------*/
32
33#include "es31cTextureStorageMultisampleTests.hpp"
34
35namespace glcts
36{
37/** Test case: FBOs with multisample texture attachments, whose amount of samples differs
38 *  between attachments, should be considered incomplete (GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE)
39 */
40class MultisampleTextureDependenciesFBOIncompleteness1Test : public glcts::TestCase
41{
42public:
43	/* Public methods */
44	MultisampleTextureDependenciesFBOIncompleteness1Test(Context& context);
45
46	virtual void						 deinit();
47	virtual tcu::TestNode::IterateResult iterate();
48
49private:
50	/* Private variables */
51	glw::GLuint fbo_id;
52	glw::GLuint to_id_multisample_2d_array;
53	glw::GLuint to_ids_multisample_2d[2];
54};
55
56/** Test case: FBOs with multisample texture and normal 2D texture attachments should be
57 *  considered incomplete (GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE)
58 */
59class MultisampleTextureDependenciesFBOIncompleteness2Test : public glcts::TestCase
60{
61public:
62	/* Public methods */
63	MultisampleTextureDependenciesFBOIncompleteness2Test(Context& context);
64
65	virtual void						 deinit();
66	virtual tcu::TestNode::IterateResult iterate();
67
68private:
69	/* Private variables */
70	glw::GLuint fbo_id;
71	glw::GLuint to_id_2d;
72	glw::GLuint to_id_multisample_2d;
73	glw::GLuint to_id_multisample_2d_array;
74};
75
76/** Test case: FBOs with multisample texture attachments of different "fixed sample
77 *             location" settings should be considered incomplete
78 *             (GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE)
79 */
80class MultisampleTextureDependenciesFBOIncompleteness3Test : public glcts::TestCase
81{
82public:
83	/* Public methods */
84	MultisampleTextureDependenciesFBOIncompleteness3Test(Context& context);
85
86	virtual void						 deinit();
87	virtual tcu::TestNode::IterateResult iterate();
88
89private:
90	/* Private variables */
91	glw::GLuint fbo_id;
92	glw::GLuint to_id_2d_multisample_color_1;
93	glw::GLuint to_id_2d_multisample_color_2;
94	glw::GLuint to_id_2d_multisample_depth;
95	glw::GLuint to_id_2d_multisample_depth_stencil;
96};
97
98/** Test case: FBOs with multisample texture attachments of different "fixed sample
99 *             location" settings and with multisampled renderbuffers (of the same amount
100 *             of samples) should be considered incomplete
101 *             (GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE)
102 */
103class MultisampleTextureDependenciesFBOIncompleteness4Test : public glcts::TestCase
104{
105public:
106	/* Public methods */
107	MultisampleTextureDependenciesFBOIncompleteness4Test(Context& context);
108
109	virtual void						 deinit();
110	virtual tcu::TestNode::IterateResult iterate();
111
112private:
113	/* Private variables */
114	glw::GLuint fbo_id;
115	glw::GLuint rbo_id;
116	glw::GLuint to_id_2d_multisample_array_color;
117	glw::GLuint to_id_2d_multisample_color;
118};
119
120/** Test case: FBOs with renderbuffer and multisample texture attachments, where amount
121 *             of samples used for multisample texture attachments differs from the
122 *             amount of samples used for renderbuffer attachments, should be considered
123 *             incomplete (GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE)
124 */
125class MultisampleTextureDependenciesFBOIncompleteness5Test : public glcts::TestCase
126{
127public:
128	/* Public methods */
129	MultisampleTextureDependenciesFBOIncompleteness5Test(Context& context);
130
131	virtual void						 deinit();
132	virtual tcu::TestNode::IterateResult iterate();
133
134private:
135	/* Private variables */
136	glw::GLuint fbo_id;
137	glw::GLuint rbo_id;
138	glw::GLuint to_id_multisample_2d;
139	glw::GLuint to_id_multisample_2d_array;
140};
141
142/** Test case: GL_INVALID_OPERATION error is reported if 2D or cube-map texture target is
143 *             used with a multisample 2D texture for a glFramebufferTexture2D() call.
144 */
145class MultisampleTextureDependenciesInvalidFramebufferTexture2DCalls1Test : public glcts::TestCase
146{
147public:
148	/* Public methods */
149	MultisampleTextureDependenciesInvalidFramebufferTexture2DCalls1Test(Context& context);
150
151	virtual void						 deinit();
152	virtual tcu::TestNode::IterateResult iterate();
153
154private:
155	/* Private methods */
156	void initInternals();
157
158	/* Private variables */
159	glw::GLuint fbo_id;
160	glw::GLuint to_id;
161};
162
163/** Test case: GL_INVALID_VALUE error is reported if a glFramebufferTexture2D() call is
164 *             made with level not equal to zero for a 2D multisample texture.
165 */
166class MultisampleTextureDependenciesInvalidFramebufferTexture2DCalls2Test : public glcts::TestCase
167{
168public:
169	/* Public methods */
170	MultisampleTextureDependenciesInvalidFramebufferTexture2DCalls2Test(Context& context);
171
172	virtual void						 deinit();
173	virtual tcu::TestNode::IterateResult iterate();
174
175private:
176	/* Private methods */
177	void initInternals();
178
179	/* Private variables */
180	glw::GLuint fbo_id;
181	glw::GLuint to_id;
182};
183
184/** Test case: GL_INVALID_OPERATION error is reported if a multisample 2D texture
185 *  is used for a glFramebufferTextureLayer() call.
186 */
187class MultisampleTextureDependenciesInvalidFramebufferTextureLayerCalls1Test : public glcts::TestCase
188{
189public:
190	/* Public methods */
191	MultisampleTextureDependenciesInvalidFramebufferTextureLayerCalls1Test(Context& context);
192
193	virtual void						 deinit();
194	virtual tcu::TestNode::IterateResult iterate();
195
196private:
197	/* Private methods */
198	void initInternals();
199
200	/* Private variables */
201	glw::GLuint fbo_id;
202	glw::GLuint to_id;
203};
204
205/** Test case: GL_INVALID_VALUE error is reported if a glFramebufferTextureLayer() call
206 *             is made with level exceeding amount of layers defined for a 2D multisample
207 *             array texture.
208 */
209class MultisampleTextureDependenciesInvalidFramebufferTextureLayerCalls2Test : public glcts::TestCase
210{
211public:
212	/* Public methods */
213	MultisampleTextureDependenciesInvalidFramebufferTextureLayerCalls2Test(Context& context);
214
215	virtual void						 deinit();
216	virtual tcu::TestNode::IterateResult iterate();
217
218private:
219	/* Private methods */
220	void initInternals();
221
222	/* Private variables */
223	glw::GLuint fbo_id;
224	glw::GLuint to_id;
225};
226
227/** Test case: GL_INVALID_OPERATION error is reported for
228 *             glRenderbufferStorageMultisample() calls, for which samples argument
229 *             exceeds MAX_SAMPLES for non-integer internalformats.
230 */
231class MultisampleTextureDependenciesInvalidRenderbufferStorageMultisampleCalls1Test : public glcts::TestCase
232{
233public:
234	/* Public methods */
235	MultisampleTextureDependenciesInvalidRenderbufferStorageMultisampleCalls1Test(Context& context);
236
237	virtual void						 deinit();
238	virtual tcu::TestNode::IterateResult iterate();
239
240private:
241	/* Private methods */
242	void initInternals();
243
244	/* Private variables */
245	glw::GLuint rbo_id;
246};
247
248/** Test case: GL_INVALID_OPERATION error is reported for
249 *             glRenderbufferStorageMultisample() calls, for which samples argument
250 *             exceeds MAX_INTEGER_SAMPLES for integer internalformats.
251 */
252class MultisampleTextureDependenciesInvalidRenderbufferStorageMultisampleCalls2Test : public glcts::TestCase
253{
254public:
255	/* Public methods */
256	MultisampleTextureDependenciesInvalidRenderbufferStorageMultisampleCalls2Test(Context& context);
257
258	virtual void						 deinit();
259	virtual tcu::TestNode::IterateResult iterate();
260
261private:
262	/* Private methods */
263	void initInternals();
264
265	/* Private variables */
266	glw::GLuint rbo_id;
267};
268
269/** Test case: No error is reported by glFramebufferTexture2D() calls, for
270 *             which GL_TEXTURE_2D_MULTISAMPLE texture target is used.
271 */
272class MultisampleTextureDependenciesNoErrorGeneratedForValidFramebufferTexture2DCallsTest : public glcts::TestCase
273{
274public:
275	/* Public methods */
276	MultisampleTextureDependenciesNoErrorGeneratedForValidFramebufferTexture2DCallsTest(Context& context);
277
278	virtual void						 deinit();
279	virtual tcu::TestNode::IterateResult iterate();
280
281private:
282	/* Private methods */
283	void initInternals();
284
285	/* Private variables */
286	glw::GLuint fbo_id;
287	glw::GLuint to_id;
288};
289
290/** Test case: No error is reported for glRenderbufferStorageMultisample() calls, for
291 *             which samples argument is in 0 < samples <= GL_MAX_SAMPLES range for
292 *             non-integer internalformats, and within 0 < samples <= GL_MAX_INTEGER_SAMPLES
293 *             for integer internalformats.
294 */
295class MultisampleTextureDependenciesNoErrorGeneratedForValidRenderbufferStorageMultisampleCallsTest
296	: public glcts::TestCase
297{
298public:
299	/* Public methods */
300	MultisampleTextureDependenciesNoErrorGeneratedForValidRenderbufferStorageMultisampleCallsTest(Context& context);
301
302	virtual void						 deinit();
303	virtual tcu::TestNode::IterateResult iterate();
304
305private:
306	/* Private methods */
307	void initInternals();
308
309	/* Private variables */
310	glw::GLuint rbo_id;
311};
312
313/** Test case: When used against multisample texture targets, glTexParameter*() should not generate
314 *             any error if GL_TEXTURE_BASE_LEVEL is set to 0. Using any other value should generate
315 *             GL_INVALID_OPERATION.
316 *             Modifying sampler states should generate GL_INVALID_ENUM.
317 */
318class MultisampleTextureDependenciesTexParameterTest : public glcts::TestCase
319{
320public:
321	/* Public methods */
322	MultisampleTextureDependenciesTexParameterTest(Context& context);
323
324	virtual void						 deinit();
325	virtual tcu::TestNode::IterateResult iterate();
326
327private:
328	/* Private methods */
329	void checkAllTexParameterInvocations(glw::GLenum expected_error_code, glw::GLint value, glw::GLenum pname,
330										 glw::GLenum texture_target);
331
332	/* Private variables */
333	glw::GLuint to_id_multisample_2d;
334	glw::GLuint to_id_multisample_2d_array;
335};
336} /* glcts namespace */
337
338#endif // _ES31CTEXTURESTORAGEMULTISAMPLEDEPENDENCIESTESTS_HPP
339