1 /* Copyright © 2011 Intel Corporation
2  *
3  * Permission is hereby granted, free of charge, to any person obtaining a
4  * copy of this software and associated documentation files (the "Software"),
5  * to deal in the Software without restriction, including without limitation
6  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
7  * and/or sell copies of the Software, and to permit persons to whom the
8  * Software is furnished to do so, subject to the following conditions:
9  *
10  * The above copyright notice and this permission notice (including the next
11  * paragraph) shall be included in all copies or substantial portions of the
12  * Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20  * IN THE SOFTWARE.
21  */
22 
23 /* F=float, UN=unsigned normalized, SN=signed normalized, I=int,
24  * U=uint.
25  *
26  * This list has to match up with the table in sized-internalformats.c.
27  */
28 enum bits_types {
29 	NONE,
30 
31 	UN32,
32 	F32,
33 	I32,
34 	U32,
35 
36 	UN24,
37 
38 	UN16,
39 	SN16,
40 	F16,
41 	I16,
42 	U16,
43 
44 	U10,
45 	U2,
46 
47 	UN12,
48 	UN10,
49 
50 	UN8,
51 	SN8,
52 	I8,
53 	U8,
54 
55 	UN6,
56 	UN5,
57 	UN4,
58 	UN3,
59 	UN2,
60 	UN1,
61 
62 	F11,
63 	F10,
64 	F9,
65 
66 
67 	/* Compressed internalformats get treated specially. */
68 	UCMP,
69 	SCMP,
70 
71 	BITS_MAX,
72 };
73 
74 enum channel {
75 	R,
76 	G,
77 	B,
78 	A,
79 	L,
80 	I,
81 	D,
82 	S,
83 	CHANNELS,
84 };
85 
86 struct sized_internalformat {
87 	GLenum token;
88 	enum bits_types bits[CHANNELS];
89 };
90 
91 struct required_format {
92 	GLenum token;
93 	int version;
94 	bool rb_required;
95 };
96 
97 extern const struct sized_internalformat sized_internalformats[];
98 extern const struct required_format required_formats[];
99 
100 const struct sized_internalformat *
101 get_sized_internalformat(GLenum token);
102 
103 int
104 get_channel_size(const struct sized_internalformat *f, enum channel c);
105 
106 GLenum
107 get_channel_type(const struct sized_internalformat *f, enum channel c);
108 
109 void
110 print_bits(int size, GLenum type);
111 
112 bool
113 valid_for_gl_version(const struct required_format *format, int target_version);
114 
115 void
116 setup_required_size_test(int argc, char **argv,
117 			 struct piglit_gl_test_config *config);
118