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 "vl/vl_video_buffer.h"
29 #include "brw_defines.h"
31 #include "ilo_screen.h"
32 #include "ilo_format.h"
34 /* stolen from classic i965 */
35 struct surface_format_info
{
44 int streamed_output_vb
;
48 /* This macro allows us to write the table almost as it appears in the PRM,
49 * while restructuring it to turn it into the C code we want.
51 #define SF(sampl, filt, shad, ck, rt, ab, vb, so, color, sf) \
52 [sf] = { true, sampl, filt, shad, ck, rt, ab, vb, so, color },
57 * This is the table of support for surface (texture, renderbuffer, and vertex
58 * buffer, but not depthbuffer) formats across the various hardware generations.
60 * The table is formatted to match the documentation, except that the docs have
61 * this ridiculous mapping of Y[*+~^#&] for "supported on DevWhatever". To put
62 * it in our table, here's the mapping:
70 * The abbreviations in the header below are:
71 * smpl - Sampling Engine
72 * filt - Sampling Engine Filtering
73 * shad - Sampling Engine Shadow Map
74 * CK - Sampling Engine Chroma Key
76 * AB - Alpha Blend Render Target
77 * VB - Input Vertex Buffer
78 * SO - Steamed Output Vertex Buffers (transform feedback)
79 * color - Color Processing
81 * See page 88 of the Sandybridge PRM VOL4_Part1 PDF.
83 * As of Ivybridge, the columns are no longer in that table and the
84 * information can be found spread across:
86 * - VOL2_Part1 section 2.5.11 Format Conversion (vertex fetch).
87 * - VOL4_Part1 section 2.12.2.1.2 Sampler Output Channel Mapping.
88 * - VOL4_Part1 section 3.9.11 Render Target Write.
90 const struct surface_format_info surface_formats
[] = {
91 /* smpl filt shad CK RT AB VB SO color */
92 SF( Y
, 50, x
, x
, Y
, Y
, Y
, Y
, x
, BRW_SURFACEFORMAT_R32G32B32A32_FLOAT
)
93 SF( Y
, x
, x
, x
, Y
, x
, Y
, Y
, x
, BRW_SURFACEFORMAT_R32G32B32A32_SINT
)
94 SF( Y
, x
, x
, x
, Y
, x
, Y
, Y
, x
, BRW_SURFACEFORMAT_R32G32B32A32_UINT
)
95 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32G32B32A32_UNORM
)
96 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32G32B32A32_SNORM
)
97 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R64G64_FLOAT
)
98 SF( Y
, 50, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R32G32B32X32_FLOAT
)
99 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32G32B32A32_SSCALED
)
100 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32G32B32A32_USCALED
)
101 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R32G32B32A32_SFIXED
)
102 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R64G64_PASSTHRU
)
103 SF( Y
, 50, x
, x
, x
, x
, Y
, Y
, x
, BRW_SURFACEFORMAT_R32G32B32_FLOAT
)
104 SF( Y
, x
, x
, x
, x
, x
, Y
, Y
, x
, BRW_SURFACEFORMAT_R32G32B32_SINT
)
105 SF( Y
, x
, x
, x
, x
, x
, Y
, Y
, x
, BRW_SURFACEFORMAT_R32G32B32_UINT
)
106 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32G32B32_UNORM
)
107 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32G32B32_SNORM
)
108 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32G32B32_SSCALED
)
109 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32G32B32_USCALED
)
110 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R32G32B32_SFIXED
)
111 SF( Y
, Y
, x
, x
, Y
, 45, Y
, x
, 60, BRW_SURFACEFORMAT_R16G16B16A16_UNORM
)
112 SF( Y
, Y
, x
, x
, Y
, 60, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16B16A16_SNORM
)
113 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16B16A16_SINT
)
114 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16B16A16_UINT
)
115 SF( Y
, Y
, x
, x
, Y
, Y
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16B16A16_FLOAT
)
116 SF( Y
, 50, x
, x
, Y
, Y
, Y
, Y
, x
, BRW_SURFACEFORMAT_R32G32_FLOAT
)
117 SF( Y
, x
, x
, x
, Y
, x
, Y
, Y
, x
, BRW_SURFACEFORMAT_R32G32_SINT
)
118 SF( Y
, x
, x
, x
, Y
, x
, Y
, Y
, x
, BRW_SURFACEFORMAT_R32G32_UINT
)
119 SF( Y
, 50, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS
)
120 SF( Y
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT
)
121 SF( Y
, 50, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L32A32_FLOAT
)
122 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32G32_UNORM
)
123 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32G32_SNORM
)
124 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R64_FLOAT
)
125 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R16G16B16X16_UNORM
)
126 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R16G16B16X16_FLOAT
)
127 SF( Y
, 50, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_A32X32_FLOAT
)
128 SF( Y
, 50, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L32X32_FLOAT
)
129 SF( Y
, 50, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_I32X32_FLOAT
)
130 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16B16A16_SSCALED
)
131 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16B16A16_USCALED
)
132 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32G32_SSCALED
)
133 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32G32_USCALED
)
134 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R32G32_SFIXED
)
135 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R64_PASSTHRU
)
136 SF( Y
, Y
, x
, Y
, Y
, Y
, Y
, x
, 60, BRW_SURFACEFORMAT_B8G8R8A8_UNORM
)
137 SF( Y
, Y
, x
, x
, Y
, Y
, x
, x
, x
, BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB
)
138 /* smpl filt shad CK RT AB VB SO color */
139 SF( Y
, Y
, x
, x
, Y
, Y
, Y
, x
, 60, BRW_SURFACEFORMAT_R10G10B10A2_UNORM
)
140 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, 60, BRW_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB
)
141 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R10G10B10A2_UINT
)
142 SF( Y
, Y
, x
, x
, x
, Y
, Y
, x
, x
, BRW_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM
)
143 SF( Y
, Y
, x
, x
, Y
, Y
, Y
, x
, 60, BRW_SURFACEFORMAT_R8G8B8A8_UNORM
)
144 SF( Y
, Y
, x
, x
, Y
, Y
, x
, x
, 60, BRW_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB
)
145 SF( Y
, Y
, x
, x
, Y
, 60, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8B8A8_SNORM
)
146 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8B8A8_SINT
)
147 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8B8A8_UINT
)
148 SF( Y
, Y
, x
, x
, Y
, 45, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16_UNORM
)
149 SF( Y
, Y
, x
, x
, Y
, 60, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16_SNORM
)
150 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16_SINT
)
151 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16_UINT
)
152 SF( Y
, Y
, x
, x
, Y
, Y
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16_FLOAT
)
153 SF( Y
, Y
, x
, x
, Y
, Y
, x
, x
, 60, BRW_SURFACEFORMAT_B10G10R10A2_UNORM
)
154 SF( Y
, Y
, x
, x
, Y
, Y
, x
, x
, 60, BRW_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB
)
155 SF( Y
, Y
, x
, x
, Y
, Y
, Y
, x
, x
, BRW_SURFACEFORMAT_R11G11B10_FLOAT
)
156 SF( Y
, x
, x
, x
, Y
, x
, Y
, Y
, x
, BRW_SURFACEFORMAT_R32_SINT
)
157 SF( Y
, x
, x
, x
, Y
, x
, Y
, Y
, x
, BRW_SURFACEFORMAT_R32_UINT
)
158 SF( Y
, 50, Y
, x
, Y
, Y
, Y
, Y
, x
, BRW_SURFACEFORMAT_R32_FLOAT
)
159 SF( Y
, 50, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R24_UNORM_X8_TYPELESS
)
160 SF( Y
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_X24_TYPELESS_G8_UINT
)
161 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L16A16_UNORM
)
162 SF( Y
, 50, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_I24X8_UNORM
)
163 SF( Y
, 50, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L24X8_UNORM
)
164 SF( Y
, 50, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_A24X8_UNORM
)
165 SF( Y
, 50, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_I32_FLOAT
)
166 SF( Y
, 50, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L32_FLOAT
)
167 SF( Y
, 50, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_A32_FLOAT
)
168 SF( Y
, Y
, x
, Y
, x
, x
, x
, x
, 60, BRW_SURFACEFORMAT_B8G8R8X8_UNORM
)
169 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB
)
170 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R8G8B8X8_UNORM
)
171 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB
)
172 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP
)
173 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_B10G10R10X2_UNORM
)
174 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L16A16_FLOAT
)
175 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32_UNORM
)
176 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32_SNORM
)
177 /* smpl filt shad CK RT AB VB SO color */
178 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R10G10B10X2_USCALED
)
179 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8B8A8_SSCALED
)
180 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8B8A8_USCALED
)
181 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16_SSCALED
)
182 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16_USCALED
)
183 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32_SSCALED
)
184 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R32_USCALED
)
185 SF( Y
, Y
, x
, Y
, Y
, Y
, x
, x
, x
, BRW_SURFACEFORMAT_B5G6R5_UNORM
)
186 SF( Y
, Y
, x
, x
, Y
, Y
, x
, x
, x
, BRW_SURFACEFORMAT_B5G6R5_UNORM_SRGB
)
187 SF( Y
, Y
, x
, Y
, Y
, Y
, x
, x
, x
, BRW_SURFACEFORMAT_B5G5R5A1_UNORM
)
188 SF( Y
, Y
, x
, x
, Y
, Y
, x
, x
, x
, BRW_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB
)
189 SF( Y
, Y
, x
, Y
, Y
, Y
, x
, x
, x
, BRW_SURFACEFORMAT_B4G4R4A4_UNORM
)
190 SF( Y
, Y
, x
, x
, Y
, Y
, x
, x
, x
, BRW_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB
)
191 SF( Y
, Y
, x
, x
, Y
, Y
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8_UNORM
)
192 SF( Y
, Y
, x
, Y
, Y
, 60, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8_SNORM
)
193 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8_SINT
)
194 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8_UINT
)
195 SF( Y
, Y
, Y
, x
, Y
, 45, Y
, x
, 70, BRW_SURFACEFORMAT_R16_UNORM
)
196 SF( Y
, Y
, x
, x
, Y
, 60, Y
, x
, x
, BRW_SURFACEFORMAT_R16_SNORM
)
197 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16_SINT
)
198 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16_UINT
)
199 SF( Y
, Y
, x
, x
, Y
, Y
, Y
, x
, x
, BRW_SURFACEFORMAT_R16_FLOAT
)
200 SF(50, 50, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_A8P8_UNORM_PALETTE0
)
201 SF(50, 50, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_A8P8_UNORM_PALETTE1
)
202 SF( Y
, Y
, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_I16_UNORM
)
203 SF( Y
, Y
, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L16_UNORM
)
204 SF( Y
, Y
, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_A16_UNORM
)
205 SF( Y
, Y
, x
, Y
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L8A8_UNORM
)
206 SF( Y
, Y
, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_I16_FLOAT
)
207 SF( Y
, Y
, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L16_FLOAT
)
208 SF( Y
, Y
, Y
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_A16_FLOAT
)
209 SF(45, 45, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L8A8_UNORM_SRGB
)
210 SF( Y
, Y
, x
, Y
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R5G5_SNORM_B6_UNORM
)
211 SF( x
, x
, x
, x
, Y
, Y
, x
, x
, x
, BRW_SURFACEFORMAT_B5G5R5X1_UNORM
)
212 SF( x
, x
, x
, x
, Y
, Y
, x
, x
, x
, BRW_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB
)
213 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8_SSCALED
)
214 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8_USCALED
)
215 /* smpl filt shad CK RT AB VB SO color */
216 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16_SSCALED
)
217 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16_USCALED
)
218 SF(50, 50, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_P8A8_UNORM_PALETTE0
)
219 SF(50, 50, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_P8A8_UNORM_PALETTE1
)
220 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_A1B5G5R5_UNORM
)
221 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_A4B4G4R4_UNORM
)
222 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L8A8_UINT
)
223 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L8A8_SINT
)
224 SF( Y
, Y
, x
, 45, Y
, Y
, Y
, x
, x
, BRW_SURFACEFORMAT_R8_UNORM
)
225 SF( Y
, Y
, x
, x
, Y
, 60, Y
, x
, x
, BRW_SURFACEFORMAT_R8_SNORM
)
226 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8_SINT
)
227 SF( Y
, x
, x
, x
, Y
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8_UINT
)
228 SF( Y
, Y
, x
, Y
, Y
, Y
, x
, x
, x
, BRW_SURFACEFORMAT_A8_UNORM
)
229 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_I8_UNORM
)
230 SF( Y
, Y
, x
, Y
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L8_UNORM
)
231 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_P4A4_UNORM
)
232 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_A4P4_UNORM
)
233 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8_SSCALED
)
234 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8_USCALED
)
235 SF(45, 45, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_P8_UNORM_PALETTE0
)
236 SF(45, 45, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L8_UNORM_SRGB
)
237 SF(45, 45, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_P8_UNORM_PALETTE1
)
238 SF(45, 45, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_P4A4_UNORM_PALETTE1
)
239 SF(45, 45, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_A4P4_UNORM_PALETTE1
)
240 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_Y8_SNORM
)
241 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L8_UINT
)
242 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_L8_SINT
)
243 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_I8_UINT
)
244 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_I8_SINT
)
245 SF(45, 45, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_DXT1_RGB_SRGB
)
246 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R1_UINT
)
247 SF( Y
, Y
, x
, Y
, Y
, x
, x
, x
, 60, BRW_SURFACEFORMAT_YCRCB_NORMAL
)
248 SF( Y
, Y
, x
, Y
, Y
, x
, x
, x
, 60, BRW_SURFACEFORMAT_YCRCB_SWAPUVY
)
249 SF(45, 45, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_P2_UNORM_PALETTE0
)
250 SF(45, 45, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_P2_UNORM_PALETTE1
)
251 SF( Y
, Y
, x
, Y
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC1_UNORM
)
252 SF( Y
, Y
, x
, Y
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC2_UNORM
)
253 SF( Y
, Y
, x
, Y
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC3_UNORM
)
254 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC4_UNORM
)
255 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC5_UNORM
)
256 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC1_UNORM_SRGB
)
257 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC2_UNORM_SRGB
)
258 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC3_UNORM_SRGB
)
259 SF( Y
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_MONO8
)
260 SF( Y
, Y
, x
, x
, Y
, x
, x
, x
, 60, BRW_SURFACEFORMAT_YCRCB_SWAPUV
)
261 SF( Y
, Y
, x
, x
, Y
, x
, x
, x
, 60, BRW_SURFACEFORMAT_YCRCB_SWAPY
)
262 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_DXT1_RGB
)
263 /* smpl filt shad CK RT AB VB SO color */
264 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_FXT1
)
265 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8B8_UNORM
)
266 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8B8_SNORM
)
267 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8B8_SSCALED
)
268 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R8G8B8_USCALED
)
269 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R64G64B64A64_FLOAT
)
270 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R64G64B64_FLOAT
)
271 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC4_SNORM
)
272 SF( Y
, Y
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC5_SNORM
)
273 SF(50, 50, x
, x
, x
, x
, 60, x
, x
, BRW_SURFACEFORMAT_R16G16B16_FLOAT
)
274 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16B16_UNORM
)
275 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16B16_SNORM
)
276 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16B16_SSCALED
)
277 SF( x
, x
, x
, x
, x
, x
, Y
, x
, x
, BRW_SURFACEFORMAT_R16G16B16_USCALED
)
278 SF(70, 70, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC6H_SF16
)
279 SF(70, 70, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC7_UNORM
)
280 SF(70, 70, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC7_UNORM_SRGB
)
281 SF(70, 70, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_BC6H_UF16
)
282 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_PLANAR_420_8
)
283 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R8G8B8_UNORM_SRGB
)
284 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_ETC1_RGB8
)
285 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_ETC2_RGB8
)
286 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_EAC_R11
)
287 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_EAC_RG11
)
288 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_EAC_SIGNED_R11
)
289 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_EAC_SIGNED_RG11
)
290 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_ETC2_SRGB8
)
291 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R16G16B16_UINT
)
292 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R16G16B16_SINT
)
293 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R32_SFIXED
)
294 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R10G10B10A2_SNORM
)
295 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R10G10B10A2_USCALED
)
296 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R10G10B10A2_SSCALED
)
297 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R10G10B10A2_SINT
)
298 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_B10G10R10A2_SNORM
)
299 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_B10G10R10A2_USCALED
)
300 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_B10G10R10A2_SSCALED
)
301 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_B10G10R10A2_UINT
)
302 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_B10G10R10A2_SINT
)
303 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R64G64B64A64_PASSTHRU
)
304 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R64G64B64_PASSTHRU
)
305 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_ETC2_RGB8_PTA
)
306 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_ETC2_SRGB8_PTA
)
307 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_ETC2_EAC_RGBA8
)
308 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_ETC2_EAC_SRGB8_A8
)
309 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R8G8B8_UINT
)
310 SF( x
, x
, x
, x
, x
, x
, x
, x
, x
, BRW_SURFACEFORMAT_R8G8B8_SINT
)
315 static const struct surface_format_info
*
316 lookup_surface_format_info(enum pipe_format format
, unsigned bind
)
318 static const struct surface_format_info nonexist
= {
322 .shadow_compare
= 999,
324 .render_target
= 999,
327 .streamed_output_vb
= 999,
328 .color_processing
= 999,
330 const int surfaceformat
= ilo_translate_format(format
, bind
);
332 return (surfaceformat
>= 0 && surfaceformat
< Elements(surface_formats
) &&
333 surface_formats
[surfaceformat
].exists
) ?
334 &surface_formats
[surfaceformat
] : &nonexist
;
338 * Translate a color (non-depth/stencil) pipe format to the matching hardware
339 * format. Return -1 on errors.
342 ilo_translate_color_format(enum pipe_format format
)
344 static const int format_mapping
[PIPE_FORMAT_COUNT
] = {
345 [PIPE_FORMAT_NONE
] = 0,
346 [PIPE_FORMAT_B8G8R8A8_UNORM
] = BRW_SURFACEFORMAT_B8G8R8A8_UNORM
,
347 [PIPE_FORMAT_B8G8R8X8_UNORM
] = BRW_SURFACEFORMAT_B8G8R8X8_UNORM
,
348 [PIPE_FORMAT_A8R8G8B8_UNORM
] = 0,
349 [PIPE_FORMAT_X8R8G8B8_UNORM
] = 0,
350 [PIPE_FORMAT_B5G5R5A1_UNORM
] = BRW_SURFACEFORMAT_B5G5R5A1_UNORM
,
351 [PIPE_FORMAT_B4G4R4A4_UNORM
] = BRW_SURFACEFORMAT_B4G4R4A4_UNORM
,
352 [PIPE_FORMAT_B5G6R5_UNORM
] = BRW_SURFACEFORMAT_B5G6R5_UNORM
,
353 [PIPE_FORMAT_R10G10B10A2_UNORM
] = BRW_SURFACEFORMAT_R10G10B10A2_UNORM
,
354 [PIPE_FORMAT_L8_UNORM
] = BRW_SURFACEFORMAT_L8_UNORM
,
355 [PIPE_FORMAT_A8_UNORM
] = BRW_SURFACEFORMAT_A8_UNORM
,
356 [PIPE_FORMAT_I8_UNORM
] = BRW_SURFACEFORMAT_I8_UNORM
,
357 [PIPE_FORMAT_L8A8_UNORM
] = BRW_SURFACEFORMAT_L8A8_UNORM
,
358 [PIPE_FORMAT_L16_UNORM
] = BRW_SURFACEFORMAT_L16_UNORM
,
359 [PIPE_FORMAT_UYVY
] = BRW_SURFACEFORMAT_YCRCB_SWAPUVY
,
360 [PIPE_FORMAT_YUYV
] = BRW_SURFACEFORMAT_YCRCB_NORMAL
,
361 [PIPE_FORMAT_Z16_UNORM
] = 0,
362 [PIPE_FORMAT_Z32_UNORM
] = 0,
363 [PIPE_FORMAT_Z32_FLOAT
] = 0,
364 [PIPE_FORMAT_Z24_UNORM_S8_UINT
] = 0,
365 [PIPE_FORMAT_S8_UINT_Z24_UNORM
] = 0,
366 [PIPE_FORMAT_Z24X8_UNORM
] = 0,
367 [PIPE_FORMAT_X8Z24_UNORM
] = 0,
368 [PIPE_FORMAT_S8_UINT
] = 0,
369 [PIPE_FORMAT_R64_FLOAT
] = BRW_SURFACEFORMAT_R64_FLOAT
,
370 [PIPE_FORMAT_R64G64_FLOAT
] = BRW_SURFACEFORMAT_R64G64_FLOAT
,
371 [PIPE_FORMAT_R64G64B64_FLOAT
] = BRW_SURFACEFORMAT_R64G64B64_FLOAT
,
372 [PIPE_FORMAT_R64G64B64A64_FLOAT
] = BRW_SURFACEFORMAT_R64G64B64A64_FLOAT
,
373 [PIPE_FORMAT_R32_FLOAT
] = BRW_SURFACEFORMAT_R32_FLOAT
,
374 [PIPE_FORMAT_R32G32_FLOAT
] = BRW_SURFACEFORMAT_R32G32_FLOAT
,
375 [PIPE_FORMAT_R32G32B32_FLOAT
] = BRW_SURFACEFORMAT_R32G32B32_FLOAT
,
376 [PIPE_FORMAT_R32G32B32A32_FLOAT
] = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT
,
377 [PIPE_FORMAT_R32_UNORM
] = BRW_SURFACEFORMAT_R32_UNORM
,
378 [PIPE_FORMAT_R32G32_UNORM
] = BRW_SURFACEFORMAT_R32G32_UNORM
,
379 [PIPE_FORMAT_R32G32B32_UNORM
] = BRW_SURFACEFORMAT_R32G32B32_UNORM
,
380 [PIPE_FORMAT_R32G32B32A32_UNORM
] = BRW_SURFACEFORMAT_R32G32B32A32_UNORM
,
381 [PIPE_FORMAT_R32_USCALED
] = BRW_SURFACEFORMAT_R32_USCALED
,
382 [PIPE_FORMAT_R32G32_USCALED
] = BRW_SURFACEFORMAT_R32G32_USCALED
,
383 [PIPE_FORMAT_R32G32B32_USCALED
] = BRW_SURFACEFORMAT_R32G32B32_USCALED
,
384 [PIPE_FORMAT_R32G32B32A32_USCALED
] = BRW_SURFACEFORMAT_R32G32B32A32_USCALED
,
385 [PIPE_FORMAT_R32_SNORM
] = BRW_SURFACEFORMAT_R32_SNORM
,
386 [PIPE_FORMAT_R32G32_SNORM
] = BRW_SURFACEFORMAT_R32G32_SNORM
,
387 [PIPE_FORMAT_R32G32B32_SNORM
] = BRW_SURFACEFORMAT_R32G32B32_SNORM
,
388 [PIPE_FORMAT_R32G32B32A32_SNORM
] = BRW_SURFACEFORMAT_R32G32B32A32_SNORM
,
389 [PIPE_FORMAT_R32_SSCALED
] = BRW_SURFACEFORMAT_R32_SSCALED
,
390 [PIPE_FORMAT_R32G32_SSCALED
] = BRW_SURFACEFORMAT_R32G32_SSCALED
,
391 [PIPE_FORMAT_R32G32B32_SSCALED
] = BRW_SURFACEFORMAT_R32G32B32_SSCALED
,
392 [PIPE_FORMAT_R32G32B32A32_SSCALED
] = BRW_SURFACEFORMAT_R32G32B32A32_SSCALED
,
393 [PIPE_FORMAT_R16_UNORM
] = BRW_SURFACEFORMAT_R16_UNORM
,
394 [PIPE_FORMAT_R16G16_UNORM
] = BRW_SURFACEFORMAT_R16G16_UNORM
,
395 [PIPE_FORMAT_R16G16B16_UNORM
] = BRW_SURFACEFORMAT_R16G16B16_UNORM
,
396 [PIPE_FORMAT_R16G16B16A16_UNORM
] = BRW_SURFACEFORMAT_R16G16B16A16_UNORM
,
397 [PIPE_FORMAT_R16_USCALED
] = BRW_SURFACEFORMAT_R16_USCALED
,
398 [PIPE_FORMAT_R16G16_USCALED
] = BRW_SURFACEFORMAT_R16G16_USCALED
,
399 [PIPE_FORMAT_R16G16B16_USCALED
] = BRW_SURFACEFORMAT_R16G16B16_USCALED
,
400 [PIPE_FORMAT_R16G16B16A16_USCALED
] = BRW_SURFACEFORMAT_R16G16B16A16_USCALED
,
401 [PIPE_FORMAT_R16_SNORM
] = BRW_SURFACEFORMAT_R16_SNORM
,
402 [PIPE_FORMAT_R16G16_SNORM
] = BRW_SURFACEFORMAT_R16G16_SNORM
,
403 [PIPE_FORMAT_R16G16B16_SNORM
] = BRW_SURFACEFORMAT_R16G16B16_SNORM
,
404 [PIPE_FORMAT_R16G16B16A16_SNORM
] = BRW_SURFACEFORMAT_R16G16B16A16_SNORM
,
405 [PIPE_FORMAT_R16_SSCALED
] = BRW_SURFACEFORMAT_R16_SSCALED
,
406 [PIPE_FORMAT_R16G16_SSCALED
] = BRW_SURFACEFORMAT_R16G16_SSCALED
,
407 [PIPE_FORMAT_R16G16B16_SSCALED
] = BRW_SURFACEFORMAT_R16G16B16_SSCALED
,
408 [PIPE_FORMAT_R16G16B16A16_SSCALED
] = BRW_SURFACEFORMAT_R16G16B16A16_SSCALED
,
409 [PIPE_FORMAT_R8_UNORM
] = BRW_SURFACEFORMAT_R8_UNORM
,
410 [PIPE_FORMAT_R8G8_UNORM
] = BRW_SURFACEFORMAT_R8G8_UNORM
,
411 [PIPE_FORMAT_R8G8B8_UNORM
] = BRW_SURFACEFORMAT_R8G8B8_UNORM
,
412 [PIPE_FORMAT_R8G8B8A8_UNORM
] = BRW_SURFACEFORMAT_R8G8B8A8_UNORM
,
413 [PIPE_FORMAT_X8B8G8R8_UNORM
] = 0,
414 [PIPE_FORMAT_R8_USCALED
] = BRW_SURFACEFORMAT_R8_USCALED
,
415 [PIPE_FORMAT_R8G8_USCALED
] = BRW_SURFACEFORMAT_R8G8_USCALED
,
416 [PIPE_FORMAT_R8G8B8_USCALED
] = BRW_SURFACEFORMAT_R8G8B8_USCALED
,
417 [PIPE_FORMAT_R8G8B8A8_USCALED
] = BRW_SURFACEFORMAT_R8G8B8A8_USCALED
,
418 [PIPE_FORMAT_R8_SNORM
] = BRW_SURFACEFORMAT_R8_SNORM
,
419 [PIPE_FORMAT_R8G8_SNORM
] = BRW_SURFACEFORMAT_R8G8_SNORM
,
420 [PIPE_FORMAT_R8G8B8_SNORM
] = BRW_SURFACEFORMAT_R8G8B8_SNORM
,
421 [PIPE_FORMAT_R8G8B8A8_SNORM
] = BRW_SURFACEFORMAT_R8G8B8A8_SNORM
,
422 [PIPE_FORMAT_R8_SSCALED
] = BRW_SURFACEFORMAT_R8_SSCALED
,
423 [PIPE_FORMAT_R8G8_SSCALED
] = BRW_SURFACEFORMAT_R8G8_SSCALED
,
424 [PIPE_FORMAT_R8G8B8_SSCALED
] = BRW_SURFACEFORMAT_R8G8B8_SSCALED
,
425 [PIPE_FORMAT_R8G8B8A8_SSCALED
] = BRW_SURFACEFORMAT_R8G8B8A8_SSCALED
,
426 [PIPE_FORMAT_R32_FIXED
] = BRW_SURFACEFORMAT_R32_SFIXED
,
427 [PIPE_FORMAT_R32G32_FIXED
] = BRW_SURFACEFORMAT_R32G32_SFIXED
,
428 [PIPE_FORMAT_R32G32B32_FIXED
] = BRW_SURFACEFORMAT_R32G32B32_SFIXED
,
429 [PIPE_FORMAT_R32G32B32A32_FIXED
] = BRW_SURFACEFORMAT_R32G32B32A32_SFIXED
,
430 [PIPE_FORMAT_R16_FLOAT
] = BRW_SURFACEFORMAT_R16_FLOAT
,
431 [PIPE_FORMAT_R16G16_FLOAT
] = BRW_SURFACEFORMAT_R16G16_FLOAT
,
432 [PIPE_FORMAT_R16G16B16_FLOAT
] = BRW_SURFACEFORMAT_R16G16B16_FLOAT
,
433 [PIPE_FORMAT_R16G16B16A16_FLOAT
] = BRW_SURFACEFORMAT_R16G16B16A16_FLOAT
,
434 [PIPE_FORMAT_L8_SRGB
] = BRW_SURFACEFORMAT_L8_UNORM_SRGB
,
435 [PIPE_FORMAT_L8A8_SRGB
] = BRW_SURFACEFORMAT_L8A8_UNORM_SRGB
,
436 [PIPE_FORMAT_R8G8B8_SRGB
] = BRW_SURFACEFORMAT_R8G8B8_UNORM_SRGB
,
437 [PIPE_FORMAT_A8B8G8R8_SRGB
] = 0,
438 [PIPE_FORMAT_X8B8G8R8_SRGB
] = 0,
439 [PIPE_FORMAT_B8G8R8A8_SRGB
] = BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB
,
440 [PIPE_FORMAT_B8G8R8X8_SRGB
] = 0,
441 [PIPE_FORMAT_A8R8G8B8_SRGB
] = 0,
442 [PIPE_FORMAT_X8R8G8B8_SRGB
] = 0,
443 [PIPE_FORMAT_R8G8B8A8_SRGB
] = 0,
444 [PIPE_FORMAT_DXT1_RGB
] = BRW_SURFACEFORMAT_DXT1_RGB
,
445 [PIPE_FORMAT_DXT1_RGBA
] = BRW_SURFACEFORMAT_BC1_UNORM
,
446 [PIPE_FORMAT_DXT3_RGBA
] = BRW_SURFACEFORMAT_BC2_UNORM
,
447 [PIPE_FORMAT_DXT5_RGBA
] = BRW_SURFACEFORMAT_BC3_UNORM
,
448 [PIPE_FORMAT_DXT1_SRGB
] = BRW_SURFACEFORMAT_DXT1_RGB_SRGB
,
449 [PIPE_FORMAT_DXT1_SRGBA
] = BRW_SURFACEFORMAT_BC1_UNORM_SRGB
,
450 [PIPE_FORMAT_DXT3_SRGBA
] = BRW_SURFACEFORMAT_BC2_UNORM_SRGB
,
451 [PIPE_FORMAT_DXT5_SRGBA
] = BRW_SURFACEFORMAT_BC3_UNORM_SRGB
,
452 [PIPE_FORMAT_RGTC1_UNORM
] = BRW_SURFACEFORMAT_BC4_UNORM
,
453 [PIPE_FORMAT_RGTC1_SNORM
] = BRW_SURFACEFORMAT_BC4_SNORM
,
454 [PIPE_FORMAT_RGTC2_UNORM
] = BRW_SURFACEFORMAT_BC5_UNORM
,
455 [PIPE_FORMAT_RGTC2_SNORM
] = BRW_SURFACEFORMAT_BC5_SNORM
,
456 [PIPE_FORMAT_R8G8_B8G8_UNORM
] = 0,
457 [PIPE_FORMAT_G8R8_G8B8_UNORM
] = 0,
458 [PIPE_FORMAT_R8SG8SB8UX8U_NORM
] = 0,
459 [PIPE_FORMAT_R5SG5SB6U_NORM
] = 0,
460 [PIPE_FORMAT_A8B8G8R8_UNORM
] = 0,
461 [PIPE_FORMAT_B5G5R5X1_UNORM
] = BRW_SURFACEFORMAT_B5G5R5X1_UNORM
,
462 [PIPE_FORMAT_R10G10B10A2_USCALED
] = BRW_SURFACEFORMAT_R10G10B10A2_USCALED
,
463 [PIPE_FORMAT_R11G11B10_FLOAT
] = BRW_SURFACEFORMAT_R11G11B10_FLOAT
,
464 [PIPE_FORMAT_R9G9B9E5_FLOAT
] = BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP
,
465 [PIPE_FORMAT_Z32_FLOAT_S8X24_UINT
] = 0,
466 [PIPE_FORMAT_R1_UNORM
] = 0,
467 [PIPE_FORMAT_R10G10B10X2_USCALED
] = BRW_SURFACEFORMAT_R10G10B10X2_USCALED
,
468 [PIPE_FORMAT_R10G10B10X2_SNORM
] = 0,
469 [PIPE_FORMAT_L4A4_UNORM
] = 0,
470 [PIPE_FORMAT_B10G10R10A2_UNORM
] = BRW_SURFACEFORMAT_B10G10R10A2_UNORM
,
471 [PIPE_FORMAT_R10SG10SB10SA2U_NORM
] = 0,
472 [PIPE_FORMAT_R8G8Bx_SNORM
] = 0,
473 [PIPE_FORMAT_R8G8B8X8_UNORM
] = BRW_SURFACEFORMAT_R8G8B8X8_UNORM
,
474 [PIPE_FORMAT_B4G4R4X4_UNORM
] = 0,
475 [PIPE_FORMAT_X24S8_UINT
] = 0,
476 [PIPE_FORMAT_S8X24_UINT
] = 0,
477 [PIPE_FORMAT_X32_S8X24_UINT
] = 0,
478 [PIPE_FORMAT_B2G3R3_UNORM
] = 0,
479 [PIPE_FORMAT_L16A16_UNORM
] = BRW_SURFACEFORMAT_L16A16_UNORM
,
480 [PIPE_FORMAT_A16_UNORM
] = BRW_SURFACEFORMAT_A16_UNORM
,
481 [PIPE_FORMAT_I16_UNORM
] = BRW_SURFACEFORMAT_I16_UNORM
,
482 [PIPE_FORMAT_LATC1_UNORM
] = 0,
483 [PIPE_FORMAT_LATC1_SNORM
] = 0,
484 [PIPE_FORMAT_LATC2_UNORM
] = 0,
485 [PIPE_FORMAT_LATC2_SNORM
] = 0,
486 [PIPE_FORMAT_A8_SNORM
] = 0,
487 [PIPE_FORMAT_L8_SNORM
] = 0,
488 [PIPE_FORMAT_L8A8_SNORM
] = 0,
489 [PIPE_FORMAT_I8_SNORM
] = 0,
490 [PIPE_FORMAT_A16_SNORM
] = 0,
491 [PIPE_FORMAT_L16_SNORM
] = 0,
492 [PIPE_FORMAT_L16A16_SNORM
] = 0,
493 [PIPE_FORMAT_I16_SNORM
] = 0,
494 [PIPE_FORMAT_A16_FLOAT
] = BRW_SURFACEFORMAT_A16_FLOAT
,
495 [PIPE_FORMAT_L16_FLOAT
] = BRW_SURFACEFORMAT_L16_FLOAT
,
496 [PIPE_FORMAT_L16A16_FLOAT
] = BRW_SURFACEFORMAT_L16A16_FLOAT
,
497 [PIPE_FORMAT_I16_FLOAT
] = BRW_SURFACEFORMAT_I16_FLOAT
,
498 [PIPE_FORMAT_A32_FLOAT
] = BRW_SURFACEFORMAT_A32_FLOAT
,
499 [PIPE_FORMAT_L32_FLOAT
] = BRW_SURFACEFORMAT_L32_FLOAT
,
500 [PIPE_FORMAT_L32A32_FLOAT
] = BRW_SURFACEFORMAT_L32A32_FLOAT
,
501 [PIPE_FORMAT_I32_FLOAT
] = BRW_SURFACEFORMAT_I32_FLOAT
,
502 [PIPE_FORMAT_YV12
] = 0,
503 [PIPE_FORMAT_YV16
] = 0,
504 [PIPE_FORMAT_IYUV
] = 0,
505 [PIPE_FORMAT_NV12
] = 0,
506 [PIPE_FORMAT_NV21
] = 0,
507 [PIPE_FORMAT_R4A4_UNORM
] = 0,
508 [PIPE_FORMAT_A4R4_UNORM
] = 0,
509 [PIPE_FORMAT_R8A8_UNORM
] = 0,
510 [PIPE_FORMAT_A8R8_UNORM
] = 0,
511 [PIPE_FORMAT_R10G10B10A2_SSCALED
] = BRW_SURFACEFORMAT_R10G10B10A2_SSCALED
,
512 [PIPE_FORMAT_R10G10B10A2_SNORM
] = BRW_SURFACEFORMAT_R10G10B10A2_SNORM
,
513 [PIPE_FORMAT_B10G10R10A2_USCALED
] = BRW_SURFACEFORMAT_B10G10R10A2_USCALED
,
514 [PIPE_FORMAT_B10G10R10A2_SSCALED
] = BRW_SURFACEFORMAT_B10G10R10A2_SSCALED
,
515 [PIPE_FORMAT_B10G10R10A2_SNORM
] = BRW_SURFACEFORMAT_B10G10R10A2_SNORM
,
516 [PIPE_FORMAT_R8_UINT
] = BRW_SURFACEFORMAT_R8_UINT
,
517 [PIPE_FORMAT_R8G8_UINT
] = BRW_SURFACEFORMAT_R8G8_UINT
,
518 [PIPE_FORMAT_R8G8B8_UINT
] = BRW_SURFACEFORMAT_R8G8B8_UINT
,
519 [PIPE_FORMAT_R8G8B8A8_UINT
] = BRW_SURFACEFORMAT_R8G8B8A8_UINT
,
520 [PIPE_FORMAT_R8_SINT
] = BRW_SURFACEFORMAT_R8_SINT
,
521 [PIPE_FORMAT_R8G8_SINT
] = BRW_SURFACEFORMAT_R8G8_SINT
,
522 [PIPE_FORMAT_R8G8B8_SINT
] = BRW_SURFACEFORMAT_R8G8B8_SINT
,
523 [PIPE_FORMAT_R8G8B8A8_SINT
] = BRW_SURFACEFORMAT_R8G8B8A8_SINT
,
524 [PIPE_FORMAT_R16_UINT
] = BRW_SURFACEFORMAT_R16_UINT
,
525 [PIPE_FORMAT_R16G16_UINT
] = BRW_SURFACEFORMAT_R16G16_UINT
,
526 [PIPE_FORMAT_R16G16B16_UINT
] = BRW_SURFACEFORMAT_R16G16B16_UINT
,
527 [PIPE_FORMAT_R16G16B16A16_UINT
] = BRW_SURFACEFORMAT_R16G16B16A16_UINT
,
528 [PIPE_FORMAT_R16_SINT
] = BRW_SURFACEFORMAT_R16_SINT
,
529 [PIPE_FORMAT_R16G16_SINT
] = BRW_SURFACEFORMAT_R16G16_SINT
,
530 [PIPE_FORMAT_R16G16B16_SINT
] = BRW_SURFACEFORMAT_R16G16B16_SINT
,
531 [PIPE_FORMAT_R16G16B16A16_SINT
] = BRW_SURFACEFORMAT_R16G16B16A16_SINT
,
532 [PIPE_FORMAT_R32_UINT
] = BRW_SURFACEFORMAT_R32_UINT
,
533 [PIPE_FORMAT_R32G32_UINT
] = BRW_SURFACEFORMAT_R32G32_UINT
,
534 [PIPE_FORMAT_R32G32B32_UINT
] = BRW_SURFACEFORMAT_R32G32B32_UINT
,
535 [PIPE_FORMAT_R32G32B32A32_UINT
] = BRW_SURFACEFORMAT_R32G32B32A32_UINT
,
536 [PIPE_FORMAT_R32_SINT
] = BRW_SURFACEFORMAT_R32_SINT
,
537 [PIPE_FORMAT_R32G32_SINT
] = BRW_SURFACEFORMAT_R32G32_SINT
,
538 [PIPE_FORMAT_R32G32B32_SINT
] = BRW_SURFACEFORMAT_R32G32B32_SINT
,
539 [PIPE_FORMAT_R32G32B32A32_SINT
] = BRW_SURFACEFORMAT_R32G32B32A32_SINT
,
540 [PIPE_FORMAT_A8_UINT
] = 0,
541 [PIPE_FORMAT_I8_UINT
] = BRW_SURFACEFORMAT_I8_UINT
,
542 [PIPE_FORMAT_L8_UINT
] = BRW_SURFACEFORMAT_L8_UINT
,
543 [PIPE_FORMAT_L8A8_UINT
] = BRW_SURFACEFORMAT_L8A8_UINT
,
544 [PIPE_FORMAT_A8_SINT
] = 0,
545 [PIPE_FORMAT_I8_SINT
] = BRW_SURFACEFORMAT_I8_SINT
,
546 [PIPE_FORMAT_L8_SINT
] = BRW_SURFACEFORMAT_L8_SINT
,
547 [PIPE_FORMAT_L8A8_SINT
] = BRW_SURFACEFORMAT_L8A8_SINT
,
548 [PIPE_FORMAT_A16_UINT
] = 0,
549 [PIPE_FORMAT_I16_UINT
] = 0,
550 [PIPE_FORMAT_L16_UINT
] = 0,
551 [PIPE_FORMAT_L16A16_UINT
] = 0,
552 [PIPE_FORMAT_A16_SINT
] = 0,
553 [PIPE_FORMAT_I16_SINT
] = 0,
554 [PIPE_FORMAT_L16_SINT
] = 0,
555 [PIPE_FORMAT_L16A16_SINT
] = 0,
556 [PIPE_FORMAT_A32_UINT
] = 0,
557 [PIPE_FORMAT_I32_UINT
] = 0,
558 [PIPE_FORMAT_L32_UINT
] = 0,
559 [PIPE_FORMAT_L32A32_UINT
] = 0,
560 [PIPE_FORMAT_A32_SINT
] = 0,
561 [PIPE_FORMAT_I32_SINT
] = 0,
562 [PIPE_FORMAT_L32_SINT
] = 0,
563 [PIPE_FORMAT_L32A32_SINT
] = 0,
564 [PIPE_FORMAT_B10G10R10A2_UINT
] = BRW_SURFACEFORMAT_B10G10R10A2_UINT
,
565 [PIPE_FORMAT_ETC1_RGB8
] = BRW_SURFACEFORMAT_ETC1_RGB8
,
566 [PIPE_FORMAT_R8G8_R8B8_UNORM
] = 0,
567 [PIPE_FORMAT_G8R8_B8R8_UNORM
] = 0,
568 [PIPE_FORMAT_R8G8B8X8_SNORM
] = 0,
569 [PIPE_FORMAT_R8G8B8X8_SRGB
] = 0,
570 [PIPE_FORMAT_R8G8B8X8_UINT
] = 0,
571 [PIPE_FORMAT_R8G8B8X8_SINT
] = 0,
572 [PIPE_FORMAT_B10G10R10X2_UNORM
] = BRW_SURFACEFORMAT_B10G10R10X2_UNORM
,
573 [PIPE_FORMAT_R16G16B16X16_UNORM
] = BRW_SURFACEFORMAT_R16G16B16X16_UNORM
,
574 [PIPE_FORMAT_R16G16B16X16_SNORM
] = 0,
575 [PIPE_FORMAT_R16G16B16X16_FLOAT
] = BRW_SURFACEFORMAT_R16G16B16X16_FLOAT
,
576 [PIPE_FORMAT_R16G16B16X16_UINT
] = 0,
577 [PIPE_FORMAT_R16G16B16X16_SINT
] = 0,
578 [PIPE_FORMAT_R32G32B32X32_FLOAT
] = BRW_SURFACEFORMAT_R32G32B32X32_FLOAT
,
579 [PIPE_FORMAT_R32G32B32X32_UINT
] = 0,
580 [PIPE_FORMAT_R32G32B32X32_SINT
] = 0,
581 [PIPE_FORMAT_R8A8_SNORM
] = 0,
582 [PIPE_FORMAT_R16A16_UNORM
] = 0,
583 [PIPE_FORMAT_R16A16_SNORM
] = 0,
584 [PIPE_FORMAT_R16A16_FLOAT
] = 0,
585 [PIPE_FORMAT_R32A32_FLOAT
] = 0,
586 [PIPE_FORMAT_R8A8_UINT
] = 0,
587 [PIPE_FORMAT_R8A8_SINT
] = 0,
588 [PIPE_FORMAT_R16A16_UINT
] = 0,
589 [PIPE_FORMAT_R16A16_SINT
] = 0,
590 [PIPE_FORMAT_R32A32_UINT
] = 0,
591 [PIPE_FORMAT_R32A32_SINT
] = 0,
593 int sfmt
= format_mapping
[format
];
595 /* BRW_SURFACEFORMAT_R32G32B32A32_FLOAT happens to be 0 */
596 if (!sfmt
&& format
!= PIPE_FORMAT_R32G32B32A32_FLOAT
)
603 ilo_is_format_supported(struct pipe_screen
*screen
,
604 enum pipe_format format
,
605 enum pipe_texture_target target
,
606 unsigned sample_count
,
609 struct ilo_screen
*is
= ilo_screen(screen
);
610 const int gen
= ILO_GEN_GET_MAJOR(is
->dev
.gen
* 10);
611 const bool is_pure_int
= util_format_is_pure_integer(format
);
612 const struct surface_format_info
*info
;
615 if (!util_format_is_supported(format
, bindings
))
618 /* no MSAA support yet */
619 if (sample_count
> 1)
622 bind
= (bindings
& PIPE_BIND_DEPTH_STENCIL
);
625 case PIPE_FORMAT_Z16_UNORM
:
626 case PIPE_FORMAT_Z24X8_UNORM
:
627 case PIPE_FORMAT_Z32_FLOAT
:
628 case PIPE_FORMAT_Z24_UNORM_S8_UINT
:
629 case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT
:
631 case PIPE_FORMAT_S8_UINT
:
632 /* TODO separate stencil */
638 bind
= (bindings
& PIPE_BIND_RENDER_TARGET
);
640 info
= lookup_surface_format_info(format
, bind
);
642 if (gen
< info
->render_target
)
645 if (!is_pure_int
&& gen
< info
->alpha_blend
)
649 bind
= (bindings
& PIPE_BIND_SAMPLER_VIEW
);
651 info
= lookup_surface_format_info(format
, bind
);
653 if (gen
< info
->sampling
)
656 if (!is_pure_int
&& gen
< info
->filtering
)
660 bind
= (bindings
& PIPE_BIND_VERTEX_BUFFER
);
662 info
= lookup_surface_format_info(format
, bind
);
664 if (gen
< info
->input_vb
)
672 ilo_is_video_format_supported(struct pipe_screen
*screen
,
673 enum pipe_format format
,
674 enum pipe_video_profile profile
,
675 enum pipe_video_entrypoint entrypoint
)
677 return vl_video_buffer_is_format_supported(screen
, format
, profile
, entrypoint
);
681 * Initialize format-related functions.
684 ilo_init_format_functions(struct ilo_screen
*is
)
686 is
->base
.is_format_supported
= ilo_is_format_supported
;
687 is
->base
.is_video_format_supported
= ilo_is_video_format_supported
;