2 * Copyright © 2012 Intel Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
26 * Verify a handful of error conditions required by the spec.
28 * None of these subtests is large enough to warrant a separate test case.
31 #include "piglit-util-gl.h"
33 PIGLIT_GL_TEST_CONFIG_BEGIN
35 config
.supports_gl_compat_version
= 10;
36 config
.window_visual
= PIGLIT_GL_VISUAL_RGB
;
38 PIGLIT_GL_TEST_CONFIG_END
40 static const GLenum valid_targets
[] = {
44 static const GLenum invalid_targets
[] = {
56 GL_COLOR_ATTACHMENT10
,
57 GL_COLOR_ATTACHMENT11
,
58 GL_COLOR_ATTACHMENT12
,
59 GL_COLOR_ATTACHMENT13
,
60 GL_COLOR_ATTACHMENT14
,
61 GL_COLOR_ATTACHMENT15
,
63 GL_STENCIL_ATTACHMENT
,
65 GL_TEXTURE_RENDERBUFFER_NV
,
72 GL_TEXTURE_CUBE_MAP_ARRAY
,
77 static const GLenum invalid_targets_without_tms
[] = {
78 GL_TEXTURE_2D_MULTISAMPLE
,
79 GL_TEXTURE_2D_MULTISAMPLE_ARRAY
,
82 static const GLenum valid_formats
[] = {
86 static const GLenum invalid_formats
[] = {
90 GL_COMPRESSED_LUMINANCE
,
91 GL_COMPRESSED_LUMINANCE_ALPHA
,
92 GL_COMPRESSED_INTENSITY
,
94 GL_COMPRESSED_SRGB_ALPHA
,
95 GL_COMPRESSED_SLUMINANCE
,
96 GL_COMPRESSED_SLUMINANCE_ALPHA
,
99 GL_COMPRESSED_RED_RGTC1
,
100 GL_COMPRESSED_SIGNED_RED_RGTC1
,
101 GL_COMPRESSED_RG_RGTC2
,
102 GL_COMPRESSED_SIGNED_RG_RGTC2
,
103 GL_COMPRESSED_RGBA_BPTC_UNORM_ARB
,
104 GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB
,
105 GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB
,
106 GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB
,
107 GL_COMPRESSED_RGB_S3TC_DXT1_EXT
,
108 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
,
109 GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
,
110 GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
,
111 GL_COMPRESSED_RGB_FXT1_3DFX
,
112 GL_COMPRESSED_RGBA_FXT1_3DFX
,
113 GL_COMPRESSED_SRGB_S3TC_DXT1_EXT
,
114 GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT
,
115 GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT
,
116 GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT
,
117 GL_COMPRESSED_LUMINANCE_LATC1_EXT
,
118 GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT
,
119 GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT
,
120 GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT
,
122 GL_GREEN_INTEGER_EXT
,
124 GL_ALPHA_INTEGER_EXT
,
129 GL_LUMINANCE_INTEGER_EXT
,
130 GL_LUMINANCE_ALPHA_INTEGER_EXT
,
133 static const GLenum tex_shared_exponent_formats
[] = {
137 static const GLenum valid_pnames
[] = {
139 GL_NUM_SAMPLE_COUNTS
,
142 static const GLenum invalid_pnames
[] = {
149 GL_MAX_3D_TEXTURE_SIZE
,
150 GL_MAX_CUBE_MAP_TEXTURE_SIZE
,
151 GL_TEXTURE_INTERNAL_FORMAT
,
154 GL_TEXTURE_COMPONENTS
,
155 GL_INTERNALFORMAT_SUPPORTED
,
156 GL_INTERNALFORMAT_PREFERRED
,
157 GL_INTERNALFORMAT_RED_SIZE
,
158 GL_INTERNALFORMAT_GREEN_SIZE
,
159 GL_INTERNALFORMAT_BLUE_SIZE
,
160 GL_INTERNALFORMAT_ALPHA_SIZE
,
161 GL_INTERNALFORMAT_DEPTH_SIZE
,
162 GL_INTERNALFORMAT_STENCIL_SIZE
,
163 GL_INTERNALFORMAT_SHARED_SIZE
,
164 GL_INTERNALFORMAT_RED_TYPE
,
165 GL_INTERNALFORMAT_GREEN_TYPE
,
166 GL_INTERNALFORMAT_BLUE_TYPE
,
167 GL_INTERNALFORMAT_ALPHA_TYPE
,
168 GL_INTERNALFORMAT_DEPTH_TYPE
,
169 GL_INTERNALFORMAT_STENCIL_TYPE
,
174 GL_MAX_COMBINED_DIMENSIONS
,
177 GL_STENCIL_COMPONENTS
,
180 GL_STENCIL_RENDERABLE
,
181 GL_FRAMEBUFFER_RENDERABLE
,
182 GL_FRAMEBUFFER_RENDERABLE_LAYERED
,
183 GL_FRAMEBUFFER_BLEND
,
185 GL_READ_PIXELS_FORMAT
,
187 GL_TEXTURE_IMAGE_FORMAT
,
188 GL_TEXTURE_IMAGE_TYPE
,
189 GL_GET_TEXTURE_IMAGE_FORMAT
,
190 GL_GET_TEXTURE_IMAGE_TYPE
,
192 GL_MANUAL_GENERATE_MIPMAP
,
193 GL_AUTO_GENERATE_MIPMAP
,
200 GL_TESS_CONTROL_TEXTURE
,
201 GL_TESS_EVALUATION_TEXTURE
,
207 GL_TEXTURE_GATHER_SHADOW
,
208 GL_SHADER_IMAGE_LOAD
,
209 GL_SHADER_IMAGE_STORE
,
210 GL_SHADER_IMAGE_ATOMIC
,
212 GL_IMAGE_COMPATIBILITY_CLASS
,
213 GL_IMAGE_PIXEL_FORMAT
,
215 GL_IMAGE_FORMAT_COMPATIBILITY_TYPE
,
216 GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST
,
217 GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST
,
218 GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE
,
219 GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE
,
220 GL_TEXTURE_COMPRESSED
,
221 GL_TEXTURE_COMPRESSED_BLOCK_WIDTH
,
222 GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT
,
223 GL_TEXTURE_COMPRESSED_BLOCK_SIZE
,
226 GL_VIEW_COMPATIBILITY_CLASS
,
236 try(const GLenum
*targets
, unsigned num_targets
,
237 const GLenum
*formats
, unsigned num_formats
,
238 const GLenum
*pnames
, unsigned num_pnames
,
239 GLenum expected_error
)
247 for (i
= 0; i
< num_targets
; i
++) {
248 for (j
= 0; j
< num_formats
; j
++) {
249 for (k
= 0; k
< num_pnames
; k
++) {
251 glGetInternalformativ(targets
[i
],
257 piglit_check_gl_error(expected_error
);
264 "target = %s, format = %s, "
266 piglit_get_gl_enum_name(targets
[i
]),
267 piglit_get_gl_enum_name(formats
[j
]),
268 piglit_get_gl_enum_name(pnames
[k
]));
279 piglit_init(int argc
, char **argv
)
283 piglit_require_extension("GL_ARB_framebuffer_object");
284 piglit_require_extension("GL_ARB_internalformat_query");
285 /* ARB_internalformat_query2 redefines and extend this
286 * extension. That extension have their own tests*/
287 piglit_require_not_extension("GL_ARB_internalformat_query2");
289 /* The GL_ARB_internalformat_query spec says:
291 * "If the <internalformat> parameter to GetInternalformativ is
292 * not color-, depth- or stencil-renderable, then an INVALID_ENUM
293 * error is generated."
295 pass
= try(valid_targets
, ARRAY_SIZE(valid_targets
),
296 invalid_formats
, ARRAY_SIZE(invalid_formats
),
297 valid_pnames
, ARRAY_SIZE(valid_pnames
),
301 /* RGB9_E5 is defined as color-renderable if EXT_texture_shared_exponent
302 * is exposed, otherwise INVALID_ENUM should be returned.
304 if (!piglit_is_extension_supported("GL_EXT_texture_shared_exponent")) {
305 pass
= try(valid_targets
, ARRAY_SIZE(valid_targets
),
306 tex_shared_exponent_formats
, 1,
307 valid_pnames
, ARRAY_SIZE(valid_pnames
),
312 /* The GL_ARB_internalformat_query spec says:
314 * "If the <target> parameter to GetInternalformativ is not one of
315 * TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY or
316 * RENDERBUFFER then an INVALID_ENUM error is generated."
320 * "If OpenGL 3.2 or ARB_texture_multisample is not supported,
321 * then TEXTURE_2D_MULTISAMPLE and TEXTURE_2D_MULTISAMPLE_ARRAY
322 * are not supported <target> parameters to GetInternalformativ."
325 if (!piglit_is_extension_supported("GL_ARB_texture_multisample")) {
326 pass
= try(invalid_targets_without_tms
,
327 ARRAY_SIZE(invalid_targets_without_tms
),
328 valid_formats
, ARRAY_SIZE(valid_formats
),
329 valid_pnames
, ARRAY_SIZE(valid_pnames
),
334 pass
= try(invalid_targets
, ARRAY_SIZE(invalid_targets
),
335 valid_formats
, ARRAY_SIZE(valid_formats
),
336 valid_pnames
, ARRAY_SIZE(valid_pnames
),
340 /* The GL_ARB_internalformat_query spec says:
342 * "If the <pname> parameter to GetInternalformativ is not SAMPLES
343 * or NUM_SAMPLE_COUNTS, then an INVALID_ENUM error is generated."
346 pass
= try(valid_targets
, ARRAY_SIZE(valid_targets
),
347 valid_formats
, ARRAY_SIZE(valid_formats
),
348 invalid_pnames
, ARRAY_SIZE(invalid_pnames
),
352 /* The GL_ARB_internalformat_query spec says:
354 * "If the <bufSize> parameter to GetInternalformativ is negative,
355 * then an INVALID_VALUE error is generated."
357 glGetInternalformativ(valid_targets
[0],
361 pass
= piglit_check_gl_error(GL_INVALID_VALUE
)
364 piglit_report_result(pass
? PIGLIT_PASS
: PIGLIT_FAIL
);