2 * Copyright © 2015 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
25 * \file texture-compressed-block.c
27 * Verify conditions defined on the spec for the following pnames:
28 * * TEXTURE_COMPRESSED_BLOCK_WIDTH
29 * * TEXTURE_COMPRESSED_BLOCK_HEIGHT
30 * * TEXTURE_COMPRESSED_BLOCK_SIZE
32 * In all those three the spec says :
34 * "If the internal format is not compressed, or the resource is not
35 * supported, 0 is returned."
37 * One could guess which internalformats are compressed, but
38 * TEXTURE_COMPRESSED is already there to know that.
40 * So this test just verifies that if TEXTURE_COMPRESSED or
41 * INTERNALFORMAT_SUPPORTED are false, all those pnames should return
44 * In that sense, this test is generic-pname-checks on those pnames,
45 * plus a TEXTURE_COMPRESSED check.
51 PIGLIT_GL_TEST_CONFIG_BEGIN
53 config
.supports_gl_compat_version
= 10;
54 config
.window_visual
= PIGLIT_GL_VISUAL_RGB
;
55 config
.khr_no_error_support
= PIGLIT_NO_ERRORS
;
57 PIGLIT_GL_TEST_CONFIG_END
65 static const GLenum pnames
[] = {
66 GL_TEXTURE_COMPRESSED_BLOCK_WIDTH
,
67 GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT
,
68 GL_TEXTURE_COMPRESSED_BLOCK_SIZE
,
71 /* As with test_data_check_supported, @data is only used to know if we
72 * are checking the 32 or the 64-bit query. @data content should not
75 test_data_check_compressed(test_data
*data
,
77 const GLenum internalformat
)
80 test_data
*local_data
= test_data_new(test_data_get_testing64(data
), 1);
82 test_data_execute(local_data
, target
, internalformat
,
83 GL_TEXTURE_COMPRESSED
);
85 if (!piglit_check_gl_error(GL_NO_ERROR
))
88 result
= test_data_value_at_index(local_data
, 0) == GL_TRUE
;
90 test_data_clear(&local_data
);
95 /* try_local could be implemented as try_basic (at common.c) with
96 * @possible_values==NULL, and testing that if TEXTURE_COMPRESSED is
97 * false, it should returns zero. Candidate to be refactored */
99 try_local(const GLenum
*targets
, unsigned num_targets
,
100 const GLenum
*internalformats
, unsigned num_internalformats
,
108 for (i
= 0; i
< num_targets
; i
++) {
109 for (j
= 0; j
< num_internalformats
; j
++) {
111 bool value_test
= true;
115 supported
= check_query2_dependencies(pname
, targets
[i
])
116 && test_data_check_supported(data
, targets
[i
],
119 compressed
= test_data_check_compressed(data
, targets
[i
],
122 test_data_execute(data
, targets
[i
], internalformats
[j
],
125 /* If it is supported and compressed, we don't
126 * have a way to verify at this point that the
127 * returned value is correct */
128 if (supported
&& compressed
)
132 piglit_check_gl_error(GL_NO_ERROR
);
135 * "If the internal format is not compressed,
136 * or the resource is not supported, 0 is
139 if (!supported
|| !compressed
)
140 value_test
= test_data_is_unsupported_response(data
, pname
);
142 if (error_test
&& value_test
)
145 /* If we are here, the test is failing */
146 print_failing_case(targets
[i
], internalformats
[j
],
149 if (!supported
&& !value_test
)
150 fprintf(stderr
,"\tInternalformat is not supported, but returned value is not zero\n");
152 if (!compressed
&& !value_test
)
153 fprintf(stderr
,"\tInternalformat is not compressed, but returned value is not zero\n");
163 check_texture_compressed_block(const GLenum
*pnames
, unsigned num_pnames
)
165 bool check_pass
= true;
166 test_data
*data
= test_data_new(0, 1);
170 for (i
= 0; i
< num_pnames
; i
++) {
173 for (testing64
= 0; testing64
<= 1; testing64
++) {
174 test_data_set_testing64(data
, testing64
);
175 pass
= try_local(valid_targets
, ARRAY_SIZE(valid_targets
),
176 valid_internalformats
, num_valid_internalformats
,
181 piglit_report_subtest_result(pass
? PIGLIT_PASS
: PIGLIT_FAIL
,
182 "%s", piglit_get_gl_enum_name(pnames
[i
]));
184 check_pass
= check_pass
&& pass
;
187 test_data_clear(&data
);
193 piglit_init(int argc
, char **argv
)
197 piglit_require_extension("GL_ARB_internalformat_query2");
198 initialize_valid_internalformats();
200 pass
= check_texture_compressed_block(pnames
, ARRAY_SIZE(pnames
))
203 piglit_report_result(pass
? PIGLIT_PASS
: PIGLIT_FAIL
);