ext_gpu_shader4: add compiler tests for everything
[piglit.git] / tests / spec / arb_internalformat_query / api-errors.c
blob9f2fc599abbedefe6f20e6c1ff93e4d4d0a40105
1 /*
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
13 * Software.
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
21 * IN THE SOFTWARE.
24 /**
25 * \file api-errors.c
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[] = {
41 GL_RENDERBUFFER,
44 static const GLenum invalid_targets[] = {
45 GL_FRAMEBUFFER,
46 GL_COLOR_ATTACHMENT0,
47 GL_COLOR_ATTACHMENT1,
48 GL_COLOR_ATTACHMENT2,
49 GL_COLOR_ATTACHMENT3,
50 GL_COLOR_ATTACHMENT4,
51 GL_COLOR_ATTACHMENT5,
52 GL_COLOR_ATTACHMENT6,
53 GL_COLOR_ATTACHMENT7,
54 GL_COLOR_ATTACHMENT8,
55 GL_COLOR_ATTACHMENT9,
56 GL_COLOR_ATTACHMENT10,
57 GL_COLOR_ATTACHMENT11,
58 GL_COLOR_ATTACHMENT12,
59 GL_COLOR_ATTACHMENT13,
60 GL_COLOR_ATTACHMENT14,
61 GL_COLOR_ATTACHMENT15,
62 GL_DEPTH_ATTACHMENT,
63 GL_STENCIL_ATTACHMENT,
64 GL_TEXTURE_4D_SGIS,
65 GL_TEXTURE_RENDERBUFFER_NV,
66 GL_TEXTURE_1D,
67 GL_TEXTURE_1D_ARRAY,
68 GL_TEXTURE_2D,
69 GL_TEXTURE_2D_ARRAY,
70 GL_TEXTURE_3D,
71 GL_TEXTURE_CUBE_MAP,
72 GL_TEXTURE_CUBE_MAP_ARRAY,
73 GL_TEXTURE_RECTANGLE,
74 GL_TEXTURE_BUFFER,
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[] = {
83 GL_RGBA,
86 static const GLenum invalid_formats[] = {
87 GL_COMPRESSED_RGB,
88 GL_COMPRESSED_RGBA,
89 GL_COMPRESSED_ALPHA,
90 GL_COMPRESSED_LUMINANCE,
91 GL_COMPRESSED_LUMINANCE_ALPHA,
92 GL_COMPRESSED_INTENSITY,
93 GL_COMPRESSED_SRGB,
94 GL_COMPRESSED_SRGB_ALPHA,
95 GL_COMPRESSED_SLUMINANCE,
96 GL_COMPRESSED_SLUMINANCE_ALPHA,
97 GL_COMPRESSED_RED,
98 GL_COMPRESSED_RG,
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,
121 GL_YCBCR_MESA,
122 GL_GREEN_INTEGER_EXT,
123 GL_BLUE_INTEGER_EXT,
124 GL_ALPHA_INTEGER_EXT,
125 GL_RGB_INTEGER_EXT,
126 GL_RGBA_INTEGER_EXT,
127 GL_BGR_INTEGER_EXT,
128 GL_BGRA_INTEGER_EXT,
129 GL_LUMINANCE_INTEGER_EXT,
130 GL_LUMINANCE_ALPHA_INTEGER_EXT,
133 static const GLenum tex_shared_exponent_formats[] = {
134 GL_RGB9_E5,
137 static const GLenum valid_pnames[] = {
138 GL_SAMPLES,
139 GL_NUM_SAMPLE_COUNTS,
142 static const GLenum invalid_pnames[] = {
143 GL_RED_BITS,
144 GL_GREEN_BITS,
145 GL_BLUE_BITS,
146 GL_ALPHA_BITS,
147 GL_DEPTH_BITS,
148 GL_STENCIL_BITS,
149 GL_MAX_3D_TEXTURE_SIZE,
150 GL_MAX_CUBE_MAP_TEXTURE_SIZE,
151 GL_TEXTURE_INTERNAL_FORMAT,
152 GL_TEXTURE_WIDTH,
153 GL_TEXTURE_HEIGHT,
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,
170 GL_MAX_WIDTH,
171 GL_MAX_HEIGHT,
172 GL_MAX_DEPTH,
173 GL_MAX_LAYERS,
174 GL_MAX_COMBINED_DIMENSIONS,
175 GL_COLOR_COMPONENTS,
176 GL_DEPTH_COMPONENTS,
177 GL_STENCIL_COMPONENTS,
178 GL_COLOR_RENDERABLE,
179 GL_DEPTH_RENDERABLE,
180 GL_STENCIL_RENDERABLE,
181 GL_FRAMEBUFFER_RENDERABLE,
182 GL_FRAMEBUFFER_RENDERABLE_LAYERED,
183 GL_FRAMEBUFFER_BLEND,
184 GL_READ_PIXELS,
185 GL_READ_PIXELS_FORMAT,
186 GL_READ_PIXELS_TYPE,
187 GL_TEXTURE_IMAGE_FORMAT,
188 GL_TEXTURE_IMAGE_TYPE,
189 GL_GET_TEXTURE_IMAGE_FORMAT,
190 GL_GET_TEXTURE_IMAGE_TYPE,
191 GL_MIPMAP,
192 GL_MANUAL_GENERATE_MIPMAP,
193 GL_AUTO_GENERATE_MIPMAP,
194 GL_COLOR_ENCODING,
195 GL_SRGB_READ,
196 GL_SRGB_WRITE,
197 GL_SRGB_DECODE_ARB,
198 GL_FILTER,
199 GL_VERTEX_TEXTURE,
200 GL_TESS_CONTROL_TEXTURE,
201 GL_TESS_EVALUATION_TEXTURE,
202 GL_GEOMETRY_TEXTURE,
203 GL_FRAGMENT_TEXTURE,
204 GL_COMPUTE_TEXTURE,
205 GL_TEXTURE_SHADOW,
206 GL_TEXTURE_GATHER,
207 GL_TEXTURE_GATHER_SHADOW,
208 GL_SHADER_IMAGE_LOAD,
209 GL_SHADER_IMAGE_STORE,
210 GL_SHADER_IMAGE_ATOMIC,
211 GL_IMAGE_TEXEL_SIZE,
212 GL_IMAGE_COMPATIBILITY_CLASS,
213 GL_IMAGE_PIXEL_FORMAT,
214 GL_IMAGE_PIXEL_TYPE,
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,
224 GL_CLEAR_BUFFER,
225 GL_TEXTURE_VIEW,
226 GL_VIEW_COMPATIBILITY_CLASS,
229 enum piglit_result
230 piglit_display(void)
232 return PIGLIT_FAIL;
235 static bool
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)
241 GLint params[64];
242 bool pass = true;
243 unsigned i;
244 unsigned j;
245 unsigned k;
247 for (i = 0; i < num_targets; i++) {
248 for (j = 0; j < num_formats; j++) {
249 for (k = 0; k < num_pnames; k++) {
250 bool this_test;
251 glGetInternalformativ(targets[i],
252 formats[j],
253 pnames[k],
254 ARRAY_SIZE(params),
255 params);
256 this_test =
257 piglit_check_gl_error(expected_error);
259 if (this_test)
260 continue;
262 fprintf(stderr,
263 " Failing case was "
264 "target = %s, format = %s, "
265 "pname = %s\n",
266 piglit_get_gl_enum_name(targets[i]),
267 piglit_get_gl_enum_name(formats[j]),
268 piglit_get_gl_enum_name(pnames[k]));
270 pass = false;
275 return pass;
278 void
279 piglit_init(int argc, char **argv)
281 bool pass = true;
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),
298 GL_INVALID_ENUM)
299 && pass;
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),
308 GL_INVALID_ENUM)
309 && pass;
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."
318 * It also says:
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),
330 GL_INVALID_ENUM)
331 && pass;
334 pass = try(invalid_targets, ARRAY_SIZE(invalid_targets),
335 valid_formats, ARRAY_SIZE(valid_formats),
336 valid_pnames, ARRAY_SIZE(valid_pnames),
337 GL_INVALID_ENUM)
338 && pass;
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),
349 GL_INVALID_ENUM)
350 && pass;
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],
358 valid_formats[0],
359 valid_pnames[0],
360 -1, NULL);
361 pass = piglit_check_gl_error(GL_INVALID_VALUE)
362 && pass;
364 piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);