2 * Mesa 3-D graphics library
4 * Copyright (C) 2012-2013 LunarG, Inc.
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
25 * Chia-I Wu <olv@lunarg.com>
28 #include "genhw/genhw.h"
29 #include "vl/vl_video_buffer.h"
31 #include "ilo_screen.h"
32 #include "ilo_format.h"
34 /* this idea is taken from i965 */
35 struct ilo_format_info
{
44 int streamed_output_vb
;
48 #define FI_INITIALIZER(exist, sampl, filt, shad, ck, rt, ab, vb, so, color) \
49 { exist, ILO_GEN(sampl), ILO_GEN(filt), ILO_GEN(shad), ILO_GEN(ck), \
50 ILO_GEN(rt), ILO_GEN(ab), ILO_GEN(vb), ILO_GEN(so), ILO_GEN(color) }
52 #define FI_ENTRY(sampl, filt, shad, ck, rt, ab, vb, so, color, sf) \
53 [GEN6_FORMAT_ ## sf] = FI_INITIALIZER(true, \
54 sampl, filt, shad, ck, rt, ab, vb, so, color)
58 static const struct ilo_format_info ilo_format_nonexist
=
59 FI_INITIALIZER(false, X
, X
, X
, X
, X
, X
, X
, X
, X
);
62 * This table is based on:
64 * - the Sandy Bridge PRM, volume 4 part 1, page 88-97
65 * - the Ivy Bridge PRM, volume 2 part 1, page 97-99 and 195
66 * - the Ivy Bridge PRM, volume 4 part 1, page 84-87, 172, and 277-278
67 * - the Haswell PRM, volume 7, page 262-264, 467-470, and 535.
68 * - i965 surface_format_info (for BC6/BC7)
70 static const struct ilo_format_info ilo_format_table
[] = {
71 /* sampl filt shad ck rt ab vb so color */
72 FI_ENTRY( 1, 5, X
, X
, 1, 1, 1, 1, X
, R32G32B32A32_FLOAT
),
73 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, 1, X
, R32G32B32A32_SINT
),
74 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, 1, X
, R32G32B32A32_UINT
),
75 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32G32B32A32_UNORM
),
76 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32G32B32A32_SNORM
),
77 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R64G64_FLOAT
),
78 FI_ENTRY( 1, 5, X
, X
, X
, X
, X
, X
, X
, R32G32B32X32_FLOAT
),
79 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32G32B32A32_SSCALED
),
80 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32G32B32A32_USCALED
),
81 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, R32G32B32A32_SFIXED
),
82 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, R64G64_PASSTHRU
),
83 FI_ENTRY( 1, 5, X
, X
, X
, X
, 1, 1, X
, R32G32B32_FLOAT
),
84 FI_ENTRY( 1, X
, X
, X
, X
, X
, 1, 1, X
, R32G32B32_SINT
),
85 FI_ENTRY( 1, X
, X
, X
, X
, X
, 1, 1, X
, R32G32B32_UINT
),
86 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32G32B32_UNORM
),
87 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32G32B32_SNORM
),
88 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32G32B32_SSCALED
),
89 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32G32B32_USCALED
),
90 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, R32G32B32_SFIXED
),
91 FI_ENTRY( 1, 1, X
, X
, 1, 4.5, 1, X
, 6, R16G16B16A16_UNORM
),
92 FI_ENTRY( 1, 1, X
, X
, 1, 6, 1, X
, X
, R16G16B16A16_SNORM
),
93 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R16G16B16A16_SINT
),
94 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R16G16B16A16_UINT
),
95 FI_ENTRY( 1, 1, X
, X
, 1, 1, 1, X
, X
, R16G16B16A16_FLOAT
),
96 FI_ENTRY( 1, 5, X
, X
, 1, 1, 1, 1, X
, R32G32_FLOAT
),
97 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, 1, X
, R32G32_SINT
),
98 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, 1, X
, R32G32_UINT
),
99 FI_ENTRY( 1, 5, 1, X
, X
, X
, X
, X
, X
, R32_FLOAT_X8X24_TYPELESS
),
100 FI_ENTRY( 1, X
, X
, X
, X
, X
, X
, X
, X
, X32_TYPELESS_G8X24_UINT
),
101 FI_ENTRY( 1, 5, X
, X
, X
, X
, X
, X
, X
, L32A32_FLOAT
),
102 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32G32_UNORM
),
103 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32G32_SNORM
),
104 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R64_FLOAT
),
105 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, R16G16B16X16_UNORM
),
106 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, R16G16B16X16_FLOAT
),
107 FI_ENTRY( 1, 5, X
, X
, X
, X
, X
, X
, X
, A32X32_FLOAT
),
108 FI_ENTRY( 1, 5, X
, X
, X
, X
, X
, X
, X
, L32X32_FLOAT
),
109 FI_ENTRY( 1, 5, X
, X
, X
, X
, X
, X
, X
, I32X32_FLOAT
),
110 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R16G16B16A16_SSCALED
),
111 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R16G16B16A16_USCALED
),
112 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32G32_SSCALED
),
113 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32G32_USCALED
),
114 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, R32G32_SFIXED
),
115 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, R64_PASSTHRU
),
116 FI_ENTRY( 1, 1, X
, 1, 1, 1, 1, X
, 6, B8G8R8A8_UNORM
),
117 FI_ENTRY( 1, 1, X
, X
, 1, 1, X
, X
, X
, B8G8R8A8_UNORM_SRGB
),
118 FI_ENTRY( 1, 1, X
, X
, 1, 1, 1, X
, 6, R10G10B10A2_UNORM
),
119 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, 6, R10G10B10A2_UNORM_SRGB
),
120 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R10G10B10A2_UINT
),
121 FI_ENTRY( 1, 1, X
, X
, X
, X
, 1, X
, X
, R10G10B10_SNORM_A2_UNORM
),
122 FI_ENTRY( 1, 1, X
, X
, 1, 1, 1, X
, 6, R8G8B8A8_UNORM
),
123 FI_ENTRY( 1, 1, X
, X
, 1, 1, X
, X
, 6, R8G8B8A8_UNORM_SRGB
),
124 FI_ENTRY( 1, 1, X
, X
, 1, 6, 1, X
, X
, R8G8B8A8_SNORM
),
125 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R8G8B8A8_SINT
),
126 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R8G8B8A8_UINT
),
127 FI_ENTRY( 1, 1, X
, X
, 1, 4.5, 1, X
, X
, R16G16_UNORM
),
128 FI_ENTRY( 1, 1, X
, X
, 1, 6, 1, X
, X
, R16G16_SNORM
),
129 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R16G16_SINT
),
130 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R16G16_UINT
),
131 FI_ENTRY( 1, 1, X
, X
, 1, 1, 1, X
, X
, R16G16_FLOAT
),
132 FI_ENTRY( 1, 1, X
, X
, 1, 1, 7.5, X
, 6, B10G10R10A2_UNORM
),
133 FI_ENTRY( 1, 1, X
, X
, 1, 1, X
, X
, 6, B10G10R10A2_UNORM_SRGB
),
134 FI_ENTRY( 1, 1, X
, X
, 1, 1, 1, X
, X
, R11G11B10_FLOAT
),
135 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, 1, X
, R32_SINT
),
136 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, 1, X
, R32_UINT
),
137 FI_ENTRY( 1, 5, 1, X
, 1, 1, 1, 1, X
, R32_FLOAT
),
138 FI_ENTRY( 1, 5, 1, X
, X
, X
, X
, X
, X
, R24_UNORM_X8_TYPELESS
),
139 FI_ENTRY( 1, X
, X
, X
, X
, X
, X
, X
, X
, X24_TYPELESS_G8_UINT
),
140 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, L32_UNORM
),
141 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, A32_UNORM
),
142 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, L16A16_UNORM
),
143 FI_ENTRY( 1, 5, 1, X
, X
, X
, X
, X
, X
, I24X8_UNORM
),
144 FI_ENTRY( 1, 5, 1, X
, X
, X
, X
, X
, X
, L24X8_UNORM
),
145 FI_ENTRY( 1, 5, 1, X
, X
, X
, X
, X
, X
, A24X8_UNORM
),
146 FI_ENTRY( 1, 5, 1, X
, X
, X
, X
, X
, X
, I32_FLOAT
),
147 FI_ENTRY( 1, 5, 1, X
, X
, X
, X
, X
, X
, L32_FLOAT
),
148 FI_ENTRY( 1, 5, 1, X
, X
, X
, X
, X
, X
, A32_FLOAT
),
149 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, X8B8_UNORM_G8R8_SNORM
),
150 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, A8X8_UNORM_G8R8_SNORM
),
151 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, B8X8_UNORM_G8R8_SNORM
),
152 FI_ENTRY( 1, 1, X
, 1, X
, X
, X
, X
, 6, B8G8R8X8_UNORM
),
153 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, B8G8R8X8_UNORM_SRGB
),
154 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, R8G8B8X8_UNORM
),
155 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, R8G8B8X8_UNORM_SRGB
),
156 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, R9G9B9E5_SHAREDEXP
),
157 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, B10G10R10X2_UNORM
),
158 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, L16A16_FLOAT
),
159 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32_UNORM
),
160 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32_SNORM
),
161 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R10G10B10X2_USCALED
),
162 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R8G8B8A8_SSCALED
),
163 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R8G8B8A8_USCALED
),
164 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R16G16_SSCALED
),
165 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R16G16_USCALED
),
166 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32_SSCALED
),
167 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R32_USCALED
),
168 FI_ENTRY( 1, 1, X
, 1, 1, 1, X
, X
, X
, B5G6R5_UNORM
),
169 FI_ENTRY( 1, 1, X
, X
, 1, 1, X
, X
, X
, B5G6R5_UNORM_SRGB
),
170 FI_ENTRY( 1, 1, X
, 1, 1, 1, X
, X
, X
, B5G5R5A1_UNORM
),
171 FI_ENTRY( 1, 1, X
, X
, 1, 1, X
, X
, X
, B5G5R5A1_UNORM_SRGB
),
172 FI_ENTRY( 1, 1, X
, 1, 1, 1, X
, X
, X
, B4G4R4A4_UNORM
),
173 FI_ENTRY( 1, 1, X
, X
, 1, 1, X
, X
, X
, B4G4R4A4_UNORM_SRGB
),
174 FI_ENTRY( 1, 1, X
, X
, 1, 1, 1, X
, X
, R8G8_UNORM
),
175 FI_ENTRY( 1, 1, X
, 1, 1, 6, 1, X
, X
, R8G8_SNORM
),
176 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R8G8_SINT
),
177 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R8G8_UINT
),
178 FI_ENTRY( 1, 1, 1, X
, 1, 4.5, 1, X
, 7, R16_UNORM
),
179 FI_ENTRY( 1, 1, X
, X
, 1, 6, 1, X
, X
, R16_SNORM
),
180 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R16_SINT
),
181 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R16_UINT
),
182 FI_ENTRY( 1, 1, X
, X
, 1, 1, 1, X
, X
, R16_FLOAT
),
183 FI_ENTRY( 5, 5, X
, X
, X
, X
, X
, X
, X
, A8P8_UNORM_PALETTE0
),
184 FI_ENTRY( 5, 5, X
, X
, X
, X
, X
, X
, X
, A8P8_UNORM_PALETTE1
),
185 FI_ENTRY( 1, 1, 1, X
, X
, X
, X
, X
, X
, I16_UNORM
),
186 FI_ENTRY( 1, 1, 1, X
, X
, X
, X
, X
, X
, L16_UNORM
),
187 FI_ENTRY( 1, 1, 1, X
, X
, X
, X
, X
, X
, A16_UNORM
),
188 FI_ENTRY( 1, 1, X
, 1, X
, X
, X
, X
, X
, L8A8_UNORM
),
189 FI_ENTRY( 1, 1, 1, X
, X
, X
, X
, X
, X
, I16_FLOAT
),
190 FI_ENTRY( 1, 1, 1, X
, X
, X
, X
, X
, X
, L16_FLOAT
),
191 FI_ENTRY( 1, 1, 1, X
, X
, X
, X
, X
, X
, A16_FLOAT
),
192 FI_ENTRY(4.5, 4.5, X
, X
, X
, X
, X
, X
, X
, L8A8_UNORM_SRGB
),
193 FI_ENTRY( 1, 1, X
, 1, X
, X
, X
, X
, X
, R5G5_SNORM_B6_UNORM
),
194 FI_ENTRY( X
, X
, X
, X
, 1, 1, X
, X
, X
, B5G5R5X1_UNORM
),
195 FI_ENTRY( X
, X
, X
, X
, 1, 1, X
, X
, X
, B5G5R5X1_UNORM_SRGB
),
196 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R8G8_SSCALED
),
197 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R8G8_USCALED
),
198 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R16_SSCALED
),
199 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R16_USCALED
),
200 FI_ENTRY( 5, 5, X
, X
, X
, X
, X
, X
, X
, P8A8_UNORM_PALETTE0
),
201 FI_ENTRY( 5, 5, X
, X
, X
, X
, X
, X
, X
, P8A8_UNORM_PALETTE1
),
202 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, A1B5G5R5_UNORM
),
203 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, A4B4G4R4_UNORM
),
204 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, L8A8_UINT
),
205 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, L8A8_SINT
),
206 FI_ENTRY( 1, 1, X
, 4.5, 1, 1, 1, X
, X
, R8_UNORM
),
207 FI_ENTRY( 1, 1, X
, X
, 1, 6, 1, X
, X
, R8_SNORM
),
208 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R8_SINT
),
209 FI_ENTRY( 1, X
, X
, X
, 1, X
, 1, X
, X
, R8_UINT
),
210 FI_ENTRY( 1, 1, X
, 1, 1, 1, X
, X
, X
, A8_UNORM
),
211 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, I8_UNORM
),
212 FI_ENTRY( 1, 1, X
, 1, X
, X
, X
, X
, X
, L8_UNORM
),
213 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, P4A4_UNORM_PALETTE0
),
214 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, A4P4_UNORM_PALETTE0
),
215 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R8_SSCALED
),
216 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R8_USCALED
),
217 FI_ENTRY(4.5, 4.5, X
, X
, X
, X
, X
, X
, X
, P8_UNORM_PALETTE0
),
218 FI_ENTRY(4.5, 4.5, X
, X
, X
, X
, X
, X
, X
, L8_UNORM_SRGB
),
219 FI_ENTRY(4.5, 4.5, X
, X
, X
, X
, X
, X
, X
, P8_UNORM_PALETTE1
),
220 FI_ENTRY(4.5, 4.5, X
, X
, X
, X
, X
, X
, X
, P4A4_UNORM_PALETTE1
),
221 FI_ENTRY(4.5, 4.5, X
, X
, X
, X
, X
, X
, X
, A4P4_UNORM_PALETTE1
),
222 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, Y8_UNORM
),
223 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, L8_UINT
),
224 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, L8_SINT
),
225 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, I8_UINT
),
226 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, I8_SINT
),
227 FI_ENTRY(4.5, 4.5, X
, X
, X
, X
, X
, X
, X
, DXT1_RGB_SRGB
),
228 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, R1_UNORM
),
229 FI_ENTRY( 1, 1, X
, 1, 1, X
, X
, X
, 6, YCRCB_NORMAL
),
230 FI_ENTRY( 1, 1, X
, 1, 1, X
, X
, X
, 6, YCRCB_SWAPUVY
),
231 FI_ENTRY(4.5, 4.5, X
, X
, X
, X
, X
, X
, X
, P2_UNORM_PALETTE0
),
232 FI_ENTRY(4.5, 4.5, X
, X
, X
, X
, X
, X
, X
, P2_UNORM_PALETTE1
),
233 FI_ENTRY( 1, 1, X
, 1, X
, X
, X
, X
, X
, BC1_UNORM
),
234 FI_ENTRY( 1, 1, X
, 1, X
, X
, X
, X
, X
, BC2_UNORM
),
235 FI_ENTRY( 1, 1, X
, 1, X
, X
, X
, X
, X
, BC3_UNORM
),
236 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, BC4_UNORM
),
237 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, BC5_UNORM
),
238 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, BC1_UNORM_SRGB
),
239 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, BC2_UNORM_SRGB
),
240 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, BC3_UNORM_SRGB
),
241 FI_ENTRY( 1, X
, X
, X
, X
, X
, X
, X
, X
, MONO8
),
242 FI_ENTRY( 1, 1, X
, X
, 1, X
, X
, X
, 6, YCRCB_SWAPUV
),
243 FI_ENTRY( 1, 1, X
, X
, 1, X
, X
, X
, 6, YCRCB_SWAPY
),
244 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, DXT1_RGB
),
245 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, FXT1
),
246 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R8G8B8_UNORM
),
247 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R8G8B8_SNORM
),
248 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R8G8B8_SSCALED
),
249 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R8G8B8_USCALED
),
250 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R64G64B64A64_FLOAT
),
251 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R64G64B64_FLOAT
),
252 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, BC4_SNORM
),
253 FI_ENTRY( 1, 1, X
, X
, X
, X
, X
, X
, X
, BC5_SNORM
),
254 FI_ENTRY( 5, 5, X
, X
, X
, X
, 6, X
, X
, R16G16B16_FLOAT
),
255 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R16G16B16_UNORM
),
256 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R16G16B16_SNORM
),
257 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R16G16B16_SSCALED
),
258 FI_ENTRY( X
, X
, X
, X
, X
, X
, 1, X
, X
, R16G16B16_USCALED
),
259 FI_ENTRY( 7, 7, X
, X
, X
, X
, X
, X
, X
, BC6H_SF16
),
260 FI_ENTRY( 7, 7, X
, X
, X
, X
, X
, X
, X
, BC7_UNORM
),
261 FI_ENTRY( 7, 7, X
, X
, X
, X
, X
, X
, X
, BC7_UNORM_SRGB
),
262 FI_ENTRY( 7, 7, X
, X
, X
, X
, X
, X
, X
, BC6H_UF16
),
263 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, PLANAR_420_8
),
264 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, R8G8B8_UNORM_SRGB
),
265 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, ETC1_RGB8
),
266 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, ETC2_RGB8
),
267 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, EAC_R11
),
268 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, EAC_RG11
),
269 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, EAC_SIGNED_R11
),
270 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, EAC_SIGNED_RG11
),
271 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, ETC2_SRGB8
),
272 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, R16G16B16_UINT
),
273 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, R16G16B16_SINT
),
274 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, R32_SFIXED
),
275 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, R10G10B10A2_SNORM
),
276 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, R10G10B10A2_USCALED
),
277 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, R10G10B10A2_SSCALED
),
278 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, R10G10B10A2_SINT
),
279 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, B10G10R10A2_SNORM
),
280 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, B10G10R10A2_USCALED
),
281 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, B10G10R10A2_SSCALED
),
282 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, B10G10R10A2_UINT
),
283 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, B10G10R10A2_SINT
),
284 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, R64G64B64A64_PASSTHRU
),
285 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, R64G64B64_PASSTHRU
),
286 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, ETC2_RGB8_PTA
),
287 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, ETC2_SRGB8_PTA
),
288 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, ETC2_EAC_RGBA8
),
289 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, ETC2_EAC_SRGB8_A8
),
290 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, R8G8B8_UINT
),
291 FI_ENTRY( X
, X
, X
, X
, X
, X
, 7.5, X
, X
, R8G8B8_SINT
),
292 FI_ENTRY( X
, X
, X
, X
, X
, X
, X
, X
, X
, RAW
),
297 #undef FI_INITIALIZER
299 static const struct ilo_format_info
*
300 lookup_format_info(enum pipe_format format
, unsigned bind
)
302 const int surfaceformat
= ilo_translate_format(format
, bind
);
304 return (surfaceformat
>= 0 && surfaceformat
< Elements(ilo_format_table
) &&
305 ilo_format_table
[surfaceformat
].exists
) ?
306 &ilo_format_table
[surfaceformat
] : &ilo_format_nonexist
;
310 * Translate a color (non-depth/stencil) pipe format to the matching hardware
311 * format. Return -1 on errors.
314 ilo_translate_color_format(enum pipe_format format
)
316 static const int format_mapping
[PIPE_FORMAT_COUNT
] = {
317 [PIPE_FORMAT_NONE
] = 0,
318 [PIPE_FORMAT_B8G8R8A8_UNORM
] = GEN6_FORMAT_B8G8R8A8_UNORM
,
319 [PIPE_FORMAT_B8G8R8X8_UNORM
] = GEN6_FORMAT_B8G8R8X8_UNORM
,
320 [PIPE_FORMAT_A8R8G8B8_UNORM
] = 0,
321 [PIPE_FORMAT_X8R8G8B8_UNORM
] = 0,
322 [PIPE_FORMAT_B5G5R5A1_UNORM
] = GEN6_FORMAT_B5G5R5A1_UNORM
,
323 [PIPE_FORMAT_B4G4R4A4_UNORM
] = GEN6_FORMAT_B4G4R4A4_UNORM
,
324 [PIPE_FORMAT_B5G6R5_UNORM
] = GEN6_FORMAT_B5G6R5_UNORM
,
325 [PIPE_FORMAT_R10G10B10A2_UNORM
] = GEN6_FORMAT_R10G10B10A2_UNORM
,
326 [PIPE_FORMAT_L8_UNORM
] = GEN6_FORMAT_L8_UNORM
,
327 [PIPE_FORMAT_A8_UNORM
] = GEN6_FORMAT_A8_UNORM
,
328 [PIPE_FORMAT_I8_UNORM
] = GEN6_FORMAT_I8_UNORM
,
329 [PIPE_FORMAT_L8A8_UNORM
] = GEN6_FORMAT_L8A8_UNORM
,
330 [PIPE_FORMAT_L16_UNORM
] = GEN6_FORMAT_L16_UNORM
,
331 [PIPE_FORMAT_UYVY
] = GEN6_FORMAT_YCRCB_SWAPUVY
,
332 [PIPE_FORMAT_YUYV
] = GEN6_FORMAT_YCRCB_NORMAL
,
333 [PIPE_FORMAT_Z16_UNORM
] = 0,
334 [PIPE_FORMAT_Z32_UNORM
] = 0,
335 [PIPE_FORMAT_Z32_FLOAT
] = 0,
336 [PIPE_FORMAT_Z24_UNORM_S8_UINT
] = 0,
337 [PIPE_FORMAT_S8_UINT_Z24_UNORM
] = 0,
338 [PIPE_FORMAT_Z24X8_UNORM
] = 0,
339 [PIPE_FORMAT_X8Z24_UNORM
] = 0,
340 [PIPE_FORMAT_S8_UINT
] = 0,
341 [PIPE_FORMAT_R64_FLOAT
] = GEN6_FORMAT_R64_FLOAT
,
342 [PIPE_FORMAT_R64G64_FLOAT
] = GEN6_FORMAT_R64G64_FLOAT
,
343 [PIPE_FORMAT_R64G64B64_FLOAT
] = GEN6_FORMAT_R64G64B64_FLOAT
,
344 [PIPE_FORMAT_R64G64B64A64_FLOAT
] = GEN6_FORMAT_R64G64B64A64_FLOAT
,
345 [PIPE_FORMAT_R32_FLOAT
] = GEN6_FORMAT_R32_FLOAT
,
346 [PIPE_FORMAT_R32G32_FLOAT
] = GEN6_FORMAT_R32G32_FLOAT
,
347 [PIPE_FORMAT_R32G32B32_FLOAT
] = GEN6_FORMAT_R32G32B32_FLOAT
,
348 [PIPE_FORMAT_R32G32B32A32_FLOAT
] = GEN6_FORMAT_R32G32B32A32_FLOAT
,
349 [PIPE_FORMAT_R32_UNORM
] = GEN6_FORMAT_R32_UNORM
,
350 [PIPE_FORMAT_R32G32_UNORM
] = GEN6_FORMAT_R32G32_UNORM
,
351 [PIPE_FORMAT_R32G32B32_UNORM
] = GEN6_FORMAT_R32G32B32_UNORM
,
352 [PIPE_FORMAT_R32G32B32A32_UNORM
] = GEN6_FORMAT_R32G32B32A32_UNORM
,
353 [PIPE_FORMAT_R32_USCALED
] = GEN6_FORMAT_R32_USCALED
,
354 [PIPE_FORMAT_R32G32_USCALED
] = GEN6_FORMAT_R32G32_USCALED
,
355 [PIPE_FORMAT_R32G32B32_USCALED
] = GEN6_FORMAT_R32G32B32_USCALED
,
356 [PIPE_FORMAT_R32G32B32A32_USCALED
] = GEN6_FORMAT_R32G32B32A32_USCALED
,
357 [PIPE_FORMAT_R32_SNORM
] = GEN6_FORMAT_R32_SNORM
,
358 [PIPE_FORMAT_R32G32_SNORM
] = GEN6_FORMAT_R32G32_SNORM
,
359 [PIPE_FORMAT_R32G32B32_SNORM
] = GEN6_FORMAT_R32G32B32_SNORM
,
360 [PIPE_FORMAT_R32G32B32A32_SNORM
] = GEN6_FORMAT_R32G32B32A32_SNORM
,
361 [PIPE_FORMAT_R32_SSCALED
] = GEN6_FORMAT_R32_SSCALED
,
362 [PIPE_FORMAT_R32G32_SSCALED
] = GEN6_FORMAT_R32G32_SSCALED
,
363 [PIPE_FORMAT_R32G32B32_SSCALED
] = GEN6_FORMAT_R32G32B32_SSCALED
,
364 [PIPE_FORMAT_R32G32B32A32_SSCALED
] = GEN6_FORMAT_R32G32B32A32_SSCALED
,
365 [PIPE_FORMAT_R16_UNORM
] = GEN6_FORMAT_R16_UNORM
,
366 [PIPE_FORMAT_R16G16_UNORM
] = GEN6_FORMAT_R16G16_UNORM
,
367 [PIPE_FORMAT_R16G16B16_UNORM
] = GEN6_FORMAT_R16G16B16_UNORM
,
368 [PIPE_FORMAT_R16G16B16A16_UNORM
] = GEN6_FORMAT_R16G16B16A16_UNORM
,
369 [PIPE_FORMAT_R16_USCALED
] = GEN6_FORMAT_R16_USCALED
,
370 [PIPE_FORMAT_R16G16_USCALED
] = GEN6_FORMAT_R16G16_USCALED
,
371 [PIPE_FORMAT_R16G16B16_USCALED
] = GEN6_FORMAT_R16G16B16_USCALED
,
372 [PIPE_FORMAT_R16G16B16A16_USCALED
] = GEN6_FORMAT_R16G16B16A16_USCALED
,
373 [PIPE_FORMAT_R16_SNORM
] = GEN6_FORMAT_R16_SNORM
,
374 [PIPE_FORMAT_R16G16_SNORM
] = GEN6_FORMAT_R16G16_SNORM
,
375 [PIPE_FORMAT_R16G16B16_SNORM
] = GEN6_FORMAT_R16G16B16_SNORM
,
376 [PIPE_FORMAT_R16G16B16A16_SNORM
] = GEN6_FORMAT_R16G16B16A16_SNORM
,
377 [PIPE_FORMAT_R16_SSCALED
] = GEN6_FORMAT_R16_SSCALED
,
378 [PIPE_FORMAT_R16G16_SSCALED
] = GEN6_FORMAT_R16G16_SSCALED
,
379 [PIPE_FORMAT_R16G16B16_SSCALED
] = GEN6_FORMAT_R16G16B16_SSCALED
,
380 [PIPE_FORMAT_R16G16B16A16_SSCALED
] = GEN6_FORMAT_R16G16B16A16_SSCALED
,
381 [PIPE_FORMAT_R8_UNORM
] = GEN6_FORMAT_R8_UNORM
,
382 [PIPE_FORMAT_R8G8_UNORM
] = GEN6_FORMAT_R8G8_UNORM
,
383 [PIPE_FORMAT_R8G8B8_UNORM
] = GEN6_FORMAT_R8G8B8_UNORM
,
384 [PIPE_FORMAT_R8G8B8A8_UNORM
] = GEN6_FORMAT_R8G8B8A8_UNORM
,
385 [PIPE_FORMAT_X8B8G8R8_UNORM
] = 0,
386 [PIPE_FORMAT_R8_USCALED
] = GEN6_FORMAT_R8_USCALED
,
387 [PIPE_FORMAT_R8G8_USCALED
] = GEN6_FORMAT_R8G8_USCALED
,
388 [PIPE_FORMAT_R8G8B8_USCALED
] = GEN6_FORMAT_R8G8B8_USCALED
,
389 [PIPE_FORMAT_R8G8B8A8_USCALED
] = GEN6_FORMAT_R8G8B8A8_USCALED
,
390 [PIPE_FORMAT_R8_SNORM
] = GEN6_FORMAT_R8_SNORM
,
391 [PIPE_FORMAT_R8G8_SNORM
] = GEN6_FORMAT_R8G8_SNORM
,
392 [PIPE_FORMAT_R8G8B8_SNORM
] = GEN6_FORMAT_R8G8B8_SNORM
,
393 [PIPE_FORMAT_R8G8B8A8_SNORM
] = GEN6_FORMAT_R8G8B8A8_SNORM
,
394 [PIPE_FORMAT_R8_SSCALED
] = GEN6_FORMAT_R8_SSCALED
,
395 [PIPE_FORMAT_R8G8_SSCALED
] = GEN6_FORMAT_R8G8_SSCALED
,
396 [PIPE_FORMAT_R8G8B8_SSCALED
] = GEN6_FORMAT_R8G8B8_SSCALED
,
397 [PIPE_FORMAT_R8G8B8A8_SSCALED
] = GEN6_FORMAT_R8G8B8A8_SSCALED
,
398 [PIPE_FORMAT_R32_FIXED
] = GEN6_FORMAT_R32_SFIXED
,
399 [PIPE_FORMAT_R32G32_FIXED
] = GEN6_FORMAT_R32G32_SFIXED
,
400 [PIPE_FORMAT_R32G32B32_FIXED
] = GEN6_FORMAT_R32G32B32_SFIXED
,
401 [PIPE_FORMAT_R32G32B32A32_FIXED
] = GEN6_FORMAT_R32G32B32A32_SFIXED
,
402 [PIPE_FORMAT_R16_FLOAT
] = GEN6_FORMAT_R16_FLOAT
,
403 [PIPE_FORMAT_R16G16_FLOAT
] = GEN6_FORMAT_R16G16_FLOAT
,
404 [PIPE_FORMAT_R16G16B16_FLOAT
] = GEN6_FORMAT_R16G16B16_FLOAT
,
405 [PIPE_FORMAT_R16G16B16A16_FLOAT
] = GEN6_FORMAT_R16G16B16A16_FLOAT
,
406 [PIPE_FORMAT_L8_SRGB
] = GEN6_FORMAT_L8_UNORM_SRGB
,
407 [PIPE_FORMAT_L8A8_SRGB
] = GEN6_FORMAT_L8A8_UNORM_SRGB
,
408 [PIPE_FORMAT_R8G8B8_SRGB
] = GEN6_FORMAT_R8G8B8_UNORM_SRGB
,
409 [PIPE_FORMAT_A8B8G8R8_SRGB
] = 0,
410 [PIPE_FORMAT_X8B8G8R8_SRGB
] = 0,
411 [PIPE_FORMAT_B8G8R8A8_SRGB
] = GEN6_FORMAT_B8G8R8A8_UNORM_SRGB
,
412 [PIPE_FORMAT_B8G8R8X8_SRGB
] = GEN6_FORMAT_B8G8R8X8_UNORM_SRGB
,
413 [PIPE_FORMAT_A8R8G8B8_SRGB
] = 0,
414 [PIPE_FORMAT_X8R8G8B8_SRGB
] = 0,
415 [PIPE_FORMAT_R8G8B8A8_SRGB
] = GEN6_FORMAT_R8G8B8A8_UNORM_SRGB
,
416 [PIPE_FORMAT_DXT1_RGB
] = GEN6_FORMAT_DXT1_RGB
,
417 [PIPE_FORMAT_DXT1_RGBA
] = GEN6_FORMAT_BC1_UNORM
,
418 [PIPE_FORMAT_DXT3_RGBA
] = GEN6_FORMAT_BC2_UNORM
,
419 [PIPE_FORMAT_DXT5_RGBA
] = GEN6_FORMAT_BC3_UNORM
,
420 [PIPE_FORMAT_DXT1_SRGB
] = GEN6_FORMAT_DXT1_RGB_SRGB
,
421 [PIPE_FORMAT_DXT1_SRGBA
] = GEN6_FORMAT_BC1_UNORM_SRGB
,
422 [PIPE_FORMAT_DXT3_SRGBA
] = GEN6_FORMAT_BC2_UNORM_SRGB
,
423 [PIPE_FORMAT_DXT5_SRGBA
] = GEN6_FORMAT_BC3_UNORM_SRGB
,
424 [PIPE_FORMAT_RGTC1_UNORM
] = GEN6_FORMAT_BC4_UNORM
,
425 [PIPE_FORMAT_RGTC1_SNORM
] = GEN6_FORMAT_BC4_SNORM
,
426 [PIPE_FORMAT_RGTC2_UNORM
] = GEN6_FORMAT_BC5_UNORM
,
427 [PIPE_FORMAT_RGTC2_SNORM
] = GEN6_FORMAT_BC5_SNORM
,
428 [PIPE_FORMAT_R8G8_B8G8_UNORM
] = 0,
429 [PIPE_FORMAT_G8R8_G8B8_UNORM
] = 0,
430 [PIPE_FORMAT_R8SG8SB8UX8U_NORM
] = 0,
431 [PIPE_FORMAT_R5SG5SB6U_NORM
] = 0,
432 [PIPE_FORMAT_A8B8G8R8_UNORM
] = 0,
433 [PIPE_FORMAT_B5G5R5X1_UNORM
] = GEN6_FORMAT_B5G5R5X1_UNORM
,
434 [PIPE_FORMAT_R10G10B10A2_USCALED
] = GEN6_FORMAT_R10G10B10A2_USCALED
,
435 [PIPE_FORMAT_R11G11B10_FLOAT
] = GEN6_FORMAT_R11G11B10_FLOAT
,
436 [PIPE_FORMAT_R9G9B9E5_FLOAT
] = GEN6_FORMAT_R9G9B9E5_SHAREDEXP
,
437 [PIPE_FORMAT_Z32_FLOAT_S8X24_UINT
] = 0,
438 [PIPE_FORMAT_R1_UNORM
] = GEN6_FORMAT_R1_UNORM
,
439 [PIPE_FORMAT_R10G10B10X2_USCALED
] = GEN6_FORMAT_R10G10B10X2_USCALED
,
440 [PIPE_FORMAT_R10G10B10X2_SNORM
] = 0,
441 [PIPE_FORMAT_L4A4_UNORM
] = 0,
442 [PIPE_FORMAT_B10G10R10A2_UNORM
] = GEN6_FORMAT_B10G10R10A2_UNORM
,
443 [PIPE_FORMAT_R10SG10SB10SA2U_NORM
] = 0,
444 [PIPE_FORMAT_R8G8Bx_SNORM
] = 0,
445 [PIPE_FORMAT_R8G8B8X8_UNORM
] = GEN6_FORMAT_R8G8B8X8_UNORM
,
446 [PIPE_FORMAT_B4G4R4X4_UNORM
] = 0,
447 [PIPE_FORMAT_X24S8_UINT
] = 0,
448 [PIPE_FORMAT_S8X24_UINT
] = 0,
449 [PIPE_FORMAT_X32_S8X24_UINT
] = 0,
450 [PIPE_FORMAT_B2G3R3_UNORM
] = 0,
451 [PIPE_FORMAT_L16A16_UNORM
] = GEN6_FORMAT_L16A16_UNORM
,
452 [PIPE_FORMAT_A16_UNORM
] = GEN6_FORMAT_A16_UNORM
,
453 [PIPE_FORMAT_I16_UNORM
] = GEN6_FORMAT_I16_UNORM
,
454 [PIPE_FORMAT_LATC1_UNORM
] = 0,
455 [PIPE_FORMAT_LATC1_SNORM
] = 0,
456 [PIPE_FORMAT_LATC2_UNORM
] = 0,
457 [PIPE_FORMAT_LATC2_SNORM
] = 0,
458 [PIPE_FORMAT_A8_SNORM
] = 0,
459 [PIPE_FORMAT_L8_SNORM
] = 0,
460 [PIPE_FORMAT_L8A8_SNORM
] = 0,
461 [PIPE_FORMAT_I8_SNORM
] = 0,
462 [PIPE_FORMAT_A16_SNORM
] = 0,
463 [PIPE_FORMAT_L16_SNORM
] = 0,
464 [PIPE_FORMAT_L16A16_SNORM
] = 0,
465 [PIPE_FORMAT_I16_SNORM
] = 0,
466 [PIPE_FORMAT_A16_FLOAT
] = GEN6_FORMAT_A16_FLOAT
,
467 [PIPE_FORMAT_L16_FLOAT
] = GEN6_FORMAT_L16_FLOAT
,
468 [PIPE_FORMAT_L16A16_FLOAT
] = GEN6_FORMAT_L16A16_FLOAT
,
469 [PIPE_FORMAT_I16_FLOAT
] = GEN6_FORMAT_I16_FLOAT
,
470 [PIPE_FORMAT_A32_FLOAT
] = GEN6_FORMAT_A32_FLOAT
,
471 [PIPE_FORMAT_L32_FLOAT
] = GEN6_FORMAT_L32_FLOAT
,
472 [PIPE_FORMAT_L32A32_FLOAT
] = GEN6_FORMAT_L32A32_FLOAT
,
473 [PIPE_FORMAT_I32_FLOAT
] = GEN6_FORMAT_I32_FLOAT
,
474 [PIPE_FORMAT_YV12
] = 0,
475 [PIPE_FORMAT_YV16
] = 0,
476 [PIPE_FORMAT_IYUV
] = 0,
477 [PIPE_FORMAT_NV12
] = 0,
478 [PIPE_FORMAT_NV21
] = 0,
479 [PIPE_FORMAT_A4R4_UNORM
] = 0,
480 [PIPE_FORMAT_R4A4_UNORM
] = 0,
481 [PIPE_FORMAT_R8A8_UNORM
] = 0,
482 [PIPE_FORMAT_A8R8_UNORM
] = 0,
483 [PIPE_FORMAT_R10G10B10A2_SSCALED
] = GEN6_FORMAT_R10G10B10A2_SSCALED
,
484 [PIPE_FORMAT_R10G10B10A2_SNORM
] = GEN6_FORMAT_R10G10B10A2_SNORM
,
485 [PIPE_FORMAT_B10G10R10A2_USCALED
] = GEN6_FORMAT_B10G10R10A2_USCALED
,
486 [PIPE_FORMAT_B10G10R10A2_SSCALED
] = GEN6_FORMAT_B10G10R10A2_SSCALED
,
487 [PIPE_FORMAT_B10G10R10A2_SNORM
] = GEN6_FORMAT_B10G10R10A2_SNORM
,
488 [PIPE_FORMAT_R8_UINT
] = GEN6_FORMAT_R8_UINT
,
489 [PIPE_FORMAT_R8G8_UINT
] = GEN6_FORMAT_R8G8_UINT
,
490 [PIPE_FORMAT_R8G8B8_UINT
] = GEN6_FORMAT_R8G8B8_UINT
,
491 [PIPE_FORMAT_R8G8B8A8_UINT
] = GEN6_FORMAT_R8G8B8A8_UINT
,
492 [PIPE_FORMAT_R8_SINT
] = GEN6_FORMAT_R8_SINT
,
493 [PIPE_FORMAT_R8G8_SINT
] = GEN6_FORMAT_R8G8_SINT
,
494 [PIPE_FORMAT_R8G8B8_SINT
] = GEN6_FORMAT_R8G8B8_SINT
,
495 [PIPE_FORMAT_R8G8B8A8_SINT
] = GEN6_FORMAT_R8G8B8A8_SINT
,
496 [PIPE_FORMAT_R16_UINT
] = GEN6_FORMAT_R16_UINT
,
497 [PIPE_FORMAT_R16G16_UINT
] = GEN6_FORMAT_R16G16_UINT
,
498 [PIPE_FORMAT_R16G16B16_UINT
] = GEN6_FORMAT_R16G16B16_UINT
,
499 [PIPE_FORMAT_R16G16B16A16_UINT
] = GEN6_FORMAT_R16G16B16A16_UINT
,
500 [PIPE_FORMAT_R16_SINT
] = GEN6_FORMAT_R16_SINT
,
501 [PIPE_FORMAT_R16G16_SINT
] = GEN6_FORMAT_R16G16_SINT
,
502 [PIPE_FORMAT_R16G16B16_SINT
] = GEN6_FORMAT_R16G16B16_SINT
,
503 [PIPE_FORMAT_R16G16B16A16_SINT
] = GEN6_FORMAT_R16G16B16A16_SINT
,
504 [PIPE_FORMAT_R32_UINT
] = GEN6_FORMAT_R32_UINT
,
505 [PIPE_FORMAT_R32G32_UINT
] = GEN6_FORMAT_R32G32_UINT
,
506 [PIPE_FORMAT_R32G32B32_UINT
] = GEN6_FORMAT_R32G32B32_UINT
,
507 [PIPE_FORMAT_R32G32B32A32_UINT
] = GEN6_FORMAT_R32G32B32A32_UINT
,
508 [PIPE_FORMAT_R32_SINT
] = GEN6_FORMAT_R32_SINT
,
509 [PIPE_FORMAT_R32G32_SINT
] = GEN6_FORMAT_R32G32_SINT
,
510 [PIPE_FORMAT_R32G32B32_SINT
] = GEN6_FORMAT_R32G32B32_SINT
,
511 [PIPE_FORMAT_R32G32B32A32_SINT
] = GEN6_FORMAT_R32G32B32A32_SINT
,
512 [PIPE_FORMAT_A8_UINT
] = 0,
513 [PIPE_FORMAT_I8_UINT
] = GEN6_FORMAT_I8_UINT
,
514 [PIPE_FORMAT_L8_UINT
] = GEN6_FORMAT_L8_UINT
,
515 [PIPE_FORMAT_L8A8_UINT
] = GEN6_FORMAT_L8A8_UINT
,
516 [PIPE_FORMAT_A8_SINT
] = 0,
517 [PIPE_FORMAT_I8_SINT
] = GEN6_FORMAT_I8_SINT
,
518 [PIPE_FORMAT_L8_SINT
] = GEN6_FORMAT_L8_SINT
,
519 [PIPE_FORMAT_L8A8_SINT
] = GEN6_FORMAT_L8A8_SINT
,
520 [PIPE_FORMAT_A16_UINT
] = 0,
521 [PIPE_FORMAT_I16_UINT
] = 0,
522 [PIPE_FORMAT_L16_UINT
] = 0,
523 [PIPE_FORMAT_L16A16_UINT
] = 0,
524 [PIPE_FORMAT_A16_SINT
] = 0,
525 [PIPE_FORMAT_I16_SINT
] = 0,
526 [PIPE_FORMAT_L16_SINT
] = 0,
527 [PIPE_FORMAT_L16A16_SINT
] = 0,
528 [PIPE_FORMAT_A32_UINT
] = 0,
529 [PIPE_FORMAT_I32_UINT
] = 0,
530 [PIPE_FORMAT_L32_UINT
] = 0,
531 [PIPE_FORMAT_L32A32_UINT
] = 0,
532 [PIPE_FORMAT_A32_SINT
] = 0,
533 [PIPE_FORMAT_I32_SINT
] = 0,
534 [PIPE_FORMAT_L32_SINT
] = 0,
535 [PIPE_FORMAT_L32A32_SINT
] = 0,
536 [PIPE_FORMAT_B10G10R10A2_UINT
] = GEN6_FORMAT_B10G10R10A2_UINT
,
537 [PIPE_FORMAT_ETC1_RGB8
] = GEN6_FORMAT_ETC1_RGB8
,
538 [PIPE_FORMAT_R8G8_R8B8_UNORM
] = 0,
539 [PIPE_FORMAT_G8R8_B8R8_UNORM
] = 0,
540 [PIPE_FORMAT_R8G8B8X8_SNORM
] = 0,
541 [PIPE_FORMAT_R8G8B8X8_SRGB
] = 0,
542 [PIPE_FORMAT_R8G8B8X8_UINT
] = 0,
543 [PIPE_FORMAT_R8G8B8X8_SINT
] = 0,
544 [PIPE_FORMAT_B10G10R10X2_UNORM
] = GEN6_FORMAT_B10G10R10X2_UNORM
,
545 [PIPE_FORMAT_R16G16B16X16_UNORM
] = GEN6_FORMAT_R16G16B16X16_UNORM
,
546 [PIPE_FORMAT_R16G16B16X16_SNORM
] = 0,
547 [PIPE_FORMAT_R16G16B16X16_FLOAT
] = GEN6_FORMAT_R16G16B16X16_FLOAT
,
548 [PIPE_FORMAT_R16G16B16X16_UINT
] = 0,
549 [PIPE_FORMAT_R16G16B16X16_SINT
] = 0,
550 [PIPE_FORMAT_R32G32B32X32_FLOAT
] = GEN6_FORMAT_R32G32B32X32_FLOAT
,
551 [PIPE_FORMAT_R32G32B32X32_UINT
] = 0,
552 [PIPE_FORMAT_R32G32B32X32_SINT
] = 0,
553 [PIPE_FORMAT_R8A8_SNORM
] = 0,
554 [PIPE_FORMAT_R16A16_UNORM
] = 0,
555 [PIPE_FORMAT_R16A16_SNORM
] = 0,
556 [PIPE_FORMAT_R16A16_FLOAT
] = 0,
557 [PIPE_FORMAT_R32A32_FLOAT
] = 0,
558 [PIPE_FORMAT_R8A8_UINT
] = 0,
559 [PIPE_FORMAT_R8A8_SINT
] = 0,
560 [PIPE_FORMAT_R16A16_UINT
] = 0,
561 [PIPE_FORMAT_R16A16_SINT
] = 0,
562 [PIPE_FORMAT_R32A32_UINT
] = 0,
563 [PIPE_FORMAT_R32A32_SINT
] = 0,
564 [PIPE_FORMAT_R10G10B10A2_UINT
] = GEN6_FORMAT_R10G10B10A2_UINT
,
565 [PIPE_FORMAT_B5G6R5_SRGB
] = GEN6_FORMAT_B5G6R5_UNORM_SRGB
,
567 int sfmt
= format_mapping
[format
];
569 /* GEN6_FORMAT_R32G32B32A32_FLOAT happens to be 0 */
570 if (!sfmt
&& format
!= PIPE_FORMAT_R32G32B32A32_FLOAT
)
577 ilo_is_format_supported(struct pipe_screen
*screen
,
578 enum pipe_format format
,
579 enum pipe_texture_target target
,
580 unsigned sample_count
,
583 struct ilo_screen
*is
= ilo_screen(screen
);
584 const int gen
= is
->dev
.gen
;
585 const bool is_pure_int
= util_format_is_pure_integer(format
);
586 const struct ilo_format_info
*info
;
589 if (!util_format_is_supported(format
, bindings
))
592 /* no MSAA support yet */
593 if (sample_count
> 1)
596 bind
= (bindings
& PIPE_BIND_DEPTH_STENCIL
);
599 case PIPE_FORMAT_Z16_UNORM
:
600 case PIPE_FORMAT_Z24X8_UNORM
:
601 case PIPE_FORMAT_Z32_FLOAT
:
602 case PIPE_FORMAT_Z24_UNORM_S8_UINT
:
603 case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT
:
605 case PIPE_FORMAT_S8_UINT
:
606 /* TODO separate stencil */
612 bind
= (bindings
& PIPE_BIND_RENDER_TARGET
);
614 info
= lookup_format_info(format
, bind
);
616 if (gen
< info
->render_target
)
619 if (!is_pure_int
&& gen
< info
->alpha_blend
)
623 bind
= (bindings
& PIPE_BIND_SAMPLER_VIEW
);
625 info
= lookup_format_info(format
, bind
);
627 if (gen
< info
->sampling
)
630 if (!is_pure_int
&& gen
< info
->filtering
)
634 bind
= (bindings
& PIPE_BIND_VERTEX_BUFFER
);
636 info
= lookup_format_info(format
, bind
);
638 if (gen
< info
->input_vb
)
646 ilo_is_video_format_supported(struct pipe_screen
*screen
,
647 enum pipe_format format
,
648 enum pipe_video_profile profile
,
649 enum pipe_video_entrypoint entrypoint
)
651 return vl_video_buffer_is_format_supported(screen
, format
, profile
, entrypoint
);
655 * Initialize format-related functions.
658 ilo_init_format_functions(struct ilo_screen
*is
)
660 is
->base
.is_format_supported
= ilo_is_format_supported
;
661 is
->base
.is_video_format_supported
= ilo_is_video_format_supported
;