Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4358 | Serge | 1 | /* |
2 | * Copyright © 2011 Intel Corporation |
||
3 | * |
||
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: |
||
10 | * |
||
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. |
||
14 | * |
||
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. |
||
22 | */ |
||
23 | #include "main/context.h" |
||
24 | #include "main/mtypes.h" |
||
25 | |||
26 | #include "brw_context.h" |
||
27 | #include "brw_state.h" |
||
28 | #include "brw_defines.h" |
||
29 | #include "brw_wm.h" |
||
30 | |||
31 | struct surface_format_info { |
||
32 | bool exists; |
||
33 | int sampling; |
||
34 | int filtering; |
||
35 | int shadow_compare; |
||
36 | int chroma_key; |
||
37 | int render_target; |
||
38 | int alpha_blend; |
||
39 | int input_vb; |
||
40 | int streamed_output_vb; |
||
41 | int color_processing; |
||
42 | }; |
||
43 | |||
44 | /* This macro allows us to write the table almost as it appears in the PRM, |
||
45 | * while restructuring it to turn it into the C code we want. |
||
46 | */ |
||
47 | #define SF(sampl, filt, shad, ck, rt, ab, vb, so, color, sf) \ |
||
48 | [sf] = { true, sampl, filt, shad, ck, rt, ab, vb, so, color }, |
||
49 | |||
50 | #define Y 0 |
||
51 | #define x 999 |
||
52 | /** |
||
53 | * This is the table of support for surface (texture, renderbuffer, and vertex |
||
54 | * buffer, but not depthbuffer) formats across the various hardware generations. |
||
55 | * |
||
56 | * The table is formatted to match the documentation, except that the docs have |
||
57 | * this ridiculous mapping of Y[*+~^#&] for "supported on DevWhatever". To put |
||
58 | * it in our table, here's the mapping: |
||
59 | * |
||
60 | * Y*: 45 |
||
61 | * Y+: 45 (g45/gm45) |
||
62 | * Y~: 50 (gen5) |
||
63 | * Y^: 60 (gen6) |
||
64 | * Y#: 70 (gen7) |
||
65 | * |
||
66 | * The abbreviations in the header below are: |
||
67 | * smpl - Sampling Engine |
||
68 | * filt - Sampling Engine Filtering |
||
69 | * shad - Sampling Engine Shadow Map |
||
70 | * CK - Sampling Engine Chroma Key |
||
71 | * RT - Render Target |
||
72 | * AB - Alpha Blend Render Target |
||
73 | * VB - Input Vertex Buffer |
||
74 | * SO - Steamed Output Vertex Buffers (transform feedback) |
||
75 | * color - Color Processing |
||
76 | * |
||
77 | * See page 88 of the Sandybridge PRM VOL4_Part1 PDF. |
||
78 | * |
||
79 | * As of Ivybridge, the columns are no longer in that table and the |
||
80 | * information can be found spread across: |
||
81 | * |
||
82 | * - VOL2_Part1 section 2.5.11 Format Conversion (vertex fetch). |
||
83 | * - VOL4_Part1 section 2.12.2.1.2 Sampler Output Channel Mapping. |
||
84 | * - VOL4_Part1 section 3.9.11 Render Target Write. |
||
85 | */ |
||
86 | const struct surface_format_info surface_formats[] = { |
||
87 | /* smpl filt shad CK RT AB VB SO color */ |
||
88 | SF( Y, 50, x, x, Y, Y, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32A32_FLOAT) |
||
89 | SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32A32_SINT) |
||
90 | SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32A32_UINT) |
||
91 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32A32_UNORM) |
||
92 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32A32_SNORM) |
||
93 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R64G64_FLOAT) |
||
94 | SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R32G32B32X32_FLOAT) |
||
95 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32A32_SSCALED) |
||
96 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32A32_USCALED) |
||
97 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R32G32B32A32_SFIXED) |
||
98 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R64G64_PASSTHRU) |
||
99 | SF( Y, 50, x, x, x, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32_FLOAT) |
||
100 | SF( Y, x, x, x, x, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32_SINT) |
||
101 | SF( Y, x, x, x, x, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32B32_UINT) |
||
102 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32_UNORM) |
||
103 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32_SNORM) |
||
104 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32_SSCALED) |
||
105 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32B32_USCALED) |
||
106 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R32G32B32_SFIXED) |
||
107 | SF( Y, Y, x, x, Y, 45, Y, x, 60, BRW_SURFACEFORMAT_R16G16B16A16_UNORM) |
||
108 | SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_SNORM) |
||
109 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_SINT) |
||
110 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_UINT) |
||
111 | SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_FLOAT) |
||
112 | SF( Y, 50, x, x, Y, Y, Y, Y, x, BRW_SURFACEFORMAT_R32G32_FLOAT) |
||
113 | SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32_SINT) |
||
114 | SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32G32_UINT) |
||
115 | SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS) |
||
116 | SF( Y, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT) |
||
117 | SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L32A32_FLOAT) |
||
118 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32_UNORM) |
||
119 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32_SNORM) |
||
120 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R64_FLOAT) |
||
121 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R16G16B16X16_UNORM) |
||
122 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R16G16B16X16_FLOAT) |
||
123 | SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_A32X32_FLOAT) |
||
124 | SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L32X32_FLOAT) |
||
125 | SF( Y, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_I32X32_FLOAT) |
||
126 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_SSCALED) |
||
127 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16A16_USCALED) |
||
128 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32_SSCALED) |
||
129 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32G32_USCALED) |
||
130 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R32G32_SFIXED) |
||
131 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R64_PASSTHRU) |
||
132 | SF( Y, Y, x, Y, Y, Y, Y, x, 60, BRW_SURFACEFORMAT_B8G8R8A8_UNORM) |
||
133 | SF( Y, Y, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB) |
||
134 | /* smpl filt shad CK RT AB VB SO color */ |
||
135 | SF( Y, Y, x, x, Y, Y, Y, x, 60, BRW_SURFACEFORMAT_R10G10B10A2_UNORM) |
||
136 | SF( Y, Y, x, x, x, x, x, x, 60, BRW_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB) |
||
137 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R10G10B10A2_UINT) |
||
138 | SF( Y, Y, x, x, x, Y, Y, x, x, BRW_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM) |
||
139 | SF( Y, Y, x, x, Y, Y, Y, x, 60, BRW_SURFACEFORMAT_R8G8B8A8_UNORM) |
||
140 | SF( Y, Y, x, x, Y, Y, x, x, 60, BRW_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB) |
||
141 | SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_SNORM) |
||
142 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_SINT) |
||
143 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_UINT) |
||
144 | SF( Y, Y, x, x, Y, 45, Y, x, x, BRW_SURFACEFORMAT_R16G16_UNORM) |
||
145 | SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R16G16_SNORM) |
||
146 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16G16_SINT) |
||
147 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16G16_UINT) |
||
148 | SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R16G16_FLOAT) |
||
149 | SF( Y, Y, x, x, Y, Y, x, x, 60, BRW_SURFACEFORMAT_B10G10R10A2_UNORM) |
||
150 | SF( Y, Y, x, x, Y, Y, x, x, 60, BRW_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB) |
||
151 | SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R11G11B10_FLOAT) |
||
152 | SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32_SINT) |
||
153 | SF( Y, x, x, x, Y, x, Y, Y, x, BRW_SURFACEFORMAT_R32_UINT) |
||
154 | SF( Y, 50, Y, x, Y, Y, Y, Y, x, BRW_SURFACEFORMAT_R32_FLOAT) |
||
155 | SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_R24_UNORM_X8_TYPELESS) |
||
156 | SF( Y, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_X24_TYPELESS_G8_UINT) |
||
157 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L16A16_UNORM) |
||
158 | SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_I24X8_UNORM) |
||
159 | SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_L24X8_UNORM) |
||
160 | SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_A24X8_UNORM) |
||
161 | SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_I32_FLOAT) |
||
162 | SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_L32_FLOAT) |
||
163 | SF( Y, 50, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_A32_FLOAT) |
||
164 | SF( Y, Y, x, Y, x, x, x, x, 60, BRW_SURFACEFORMAT_B8G8R8X8_UNORM) |
||
165 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB) |
||
166 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R8G8B8X8_UNORM) |
||
167 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB) |
||
168 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP) |
||
169 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_B10G10R10X2_UNORM) |
||
170 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L16A16_FLOAT) |
||
171 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32_UNORM) |
||
172 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32_SNORM) |
||
173 | /* smpl filt shad CK RT AB VB SO color */ |
||
174 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R10G10B10X2_USCALED) |
||
175 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_SSCALED) |
||
176 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8A8_USCALED) |
||
177 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16_SSCALED) |
||
178 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16_USCALED) |
||
179 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32_SSCALED) |
||
180 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R32_USCALED) |
||
181 | SF( Y, Y, x, Y, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G6R5_UNORM) |
||
182 | SF( Y, Y, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G6R5_UNORM_SRGB) |
||
183 | SF( Y, Y, x, Y, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G5R5A1_UNORM) |
||
184 | SF( Y, Y, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB) |
||
185 | SF( Y, Y, x, Y, Y, Y, x, x, x, BRW_SURFACEFORMAT_B4G4R4A4_UNORM) |
||
186 | SF( Y, Y, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB) |
||
187 | SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R8G8_UNORM) |
||
188 | SF( Y, Y, x, Y, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R8G8_SNORM) |
||
189 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8G8_SINT) |
||
190 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8G8_UINT) |
||
191 | SF( Y, Y, Y, x, Y, 45, Y, x, 70, BRW_SURFACEFORMAT_R16_UNORM) |
||
192 | SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R16_SNORM) |
||
193 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16_SINT) |
||
194 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R16_UINT) |
||
195 | SF( Y, Y, x, x, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R16_FLOAT) |
||
196 | SF(50, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_A8P8_UNORM_PALETTE0) |
||
197 | SF(50, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_A8P8_UNORM_PALETTE1) |
||
198 | SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_I16_UNORM) |
||
199 | SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_L16_UNORM) |
||
200 | SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_A16_UNORM) |
||
201 | SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_L8A8_UNORM) |
||
202 | SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_I16_FLOAT) |
||
203 | SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_L16_FLOAT) |
||
204 | SF( Y, Y, Y, x, x, x, x, x, x, BRW_SURFACEFORMAT_A16_FLOAT) |
||
205 | SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L8A8_UNORM_SRGB) |
||
206 | SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_R5G5_SNORM_B6_UNORM) |
||
207 | SF( x, x, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G5R5X1_UNORM) |
||
208 | SF( x, x, x, x, Y, Y, x, x, x, BRW_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB) |
||
209 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8_SSCALED) |
||
210 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8_USCALED) |
||
211 | /* smpl filt shad CK RT AB VB SO color */ |
||
212 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16_SSCALED) |
||
213 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16_USCALED) |
||
214 | SF(50, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_P8A8_UNORM_PALETTE0) |
||
215 | SF(50, 50, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_P8A8_UNORM_PALETTE1) |
||
216 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_A1B5G5R5_UNORM) |
||
217 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_A4B4G4R4_UNORM) |
||
218 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L8A8_UINT) |
||
219 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L8A8_SINT) |
||
220 | SF( Y, Y, x, 45, Y, Y, Y, x, x, BRW_SURFACEFORMAT_R8_UNORM) |
||
221 | SF( Y, Y, x, x, Y, 60, Y, x, x, BRW_SURFACEFORMAT_R8_SNORM) |
||
222 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8_SINT) |
||
223 | SF( Y, x, x, x, Y, x, Y, x, x, BRW_SURFACEFORMAT_R8_UINT) |
||
224 | SF( Y, Y, x, Y, Y, Y, x, x, x, BRW_SURFACEFORMAT_A8_UNORM) |
||
225 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_I8_UNORM) |
||
226 | SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_L8_UNORM) |
||
227 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_P4A4_UNORM) |
||
228 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_A4P4_UNORM) |
||
229 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8_SSCALED) |
||
230 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8_USCALED) |
||
231 | SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_P8_UNORM_PALETTE0) |
||
232 | SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L8_UNORM_SRGB) |
||
233 | SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_P8_UNORM_PALETTE1) |
||
234 | SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_P4A4_UNORM_PALETTE1) |
||
235 | SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_A4P4_UNORM_PALETTE1) |
||
236 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_Y8_SNORM) |
||
237 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L8_UINT) |
||
238 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_L8_SINT) |
||
239 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_I8_UINT) |
||
240 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_I8_SINT) |
||
241 | SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_DXT1_RGB_SRGB) |
||
242 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R1_UINT) |
||
243 | SF( Y, Y, x, Y, Y, x, x, x, 60, BRW_SURFACEFORMAT_YCRCB_NORMAL) |
||
244 | SF( Y, Y, x, Y, Y, x, x, x, 60, BRW_SURFACEFORMAT_YCRCB_SWAPUVY) |
||
245 | SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_P2_UNORM_PALETTE0) |
||
246 | SF(45, 45, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_P2_UNORM_PALETTE1) |
||
247 | SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_BC1_UNORM) |
||
248 | SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_BC2_UNORM) |
||
249 | SF( Y, Y, x, Y, x, x, x, x, x, BRW_SURFACEFORMAT_BC3_UNORM) |
||
250 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC4_UNORM) |
||
251 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC5_UNORM) |
||
252 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC1_UNORM_SRGB) |
||
253 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC2_UNORM_SRGB) |
||
254 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC3_UNORM_SRGB) |
||
255 | SF( Y, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_MONO8) |
||
256 | SF( Y, Y, x, x, Y, x, x, x, 60, BRW_SURFACEFORMAT_YCRCB_SWAPUV) |
||
257 | SF( Y, Y, x, x, Y, x, x, x, 60, BRW_SURFACEFORMAT_YCRCB_SWAPY) |
||
258 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_DXT1_RGB) |
||
259 | /* smpl filt shad CK RT AB VB SO color */ |
||
260 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_FXT1) |
||
261 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8_UNORM) |
||
262 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8_SNORM) |
||
263 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8_SSCALED) |
||
264 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R8G8B8_USCALED) |
||
265 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R64G64B64A64_FLOAT) |
||
266 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R64G64B64_FLOAT) |
||
267 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC4_SNORM) |
||
268 | SF( Y, Y, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC5_SNORM) |
||
269 | SF(50, 50, x, x, x, x, 60, x, x, BRW_SURFACEFORMAT_R16G16B16_FLOAT) |
||
270 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16_UNORM) |
||
271 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16_SNORM) |
||
272 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16_SSCALED) |
||
273 | SF( x, x, x, x, x, x, Y, x, x, BRW_SURFACEFORMAT_R16G16B16_USCALED) |
||
274 | SF(70, 70, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC6H_SF16) |
||
275 | SF(70, 70, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC7_UNORM) |
||
276 | SF(70, 70, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC7_UNORM_SRGB) |
||
277 | SF(70, 70, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_BC6H_UF16) |
||
278 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_PLANAR_420_8) |
||
279 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R8G8B8_UNORM_SRGB) |
||
280 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_ETC1_RGB8) |
||
281 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_ETC2_RGB8) |
||
282 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_EAC_R11) |
||
283 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_EAC_RG11) |
||
284 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_EAC_SIGNED_R11) |
||
285 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_EAC_SIGNED_RG11) |
||
286 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_ETC2_SRGB8) |
||
287 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R16G16B16_UINT) |
||
288 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R16G16B16_SINT) |
||
289 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R32_SFIXED) |
||
290 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R10G10B10A2_SNORM) |
||
291 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R10G10B10A2_USCALED) |
||
292 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R10G10B10A2_SSCALED) |
||
293 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R10G10B10A2_SINT) |
||
294 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_B10G10R10A2_SNORM) |
||
295 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_B10G10R10A2_USCALED) |
||
296 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_B10G10R10A2_SSCALED) |
||
297 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_B10G10R10A2_UINT) |
||
298 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_B10G10R10A2_SINT) |
||
299 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R64G64B64A64_PASSTHRU) |
||
300 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R64G64B64_PASSTHRU) |
||
301 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_ETC2_RGB8_PTA) |
||
302 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_ETC2_SRGB8_PTA) |
||
303 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_ETC2_EAC_RGBA8) |
||
304 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_ETC2_EAC_SRGB8_A8) |
||
305 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R8G8B8_UINT) |
||
306 | SF( x, x, x, x, x, x, x, x, x, BRW_SURFACEFORMAT_R8G8B8_SINT) |
||
307 | }; |
||
308 | #undef x |
||
309 | #undef Y |
||
310 | |||
311 | uint32_t |
||
312 | brw_format_for_mesa_format(gl_format mesa_format) |
||
313 | { |
||
314 | /* This table is ordered according to the enum ordering in formats.h. We do |
||
315 | * expect that enum to be extended without our explicit initialization |
||
316 | * staying in sync, so we initialize to 0 even though |
||
317 | * BRW_SURFACEFORMAT_R32G32B32A32_FLOAT happens to also be 0. |
||
318 | */ |
||
319 | static const uint32_t table[MESA_FORMAT_COUNT] = |
||
320 | { |
||
321 | [MESA_FORMAT_RGBA8888] = 0, |
||
322 | [MESA_FORMAT_RGBA8888_REV] = BRW_SURFACEFORMAT_R8G8B8A8_UNORM, |
||
323 | [MESA_FORMAT_ARGB8888] = BRW_SURFACEFORMAT_B8G8R8A8_UNORM, |
||
324 | [MESA_FORMAT_ARGB8888_REV] = 0, |
||
325 | [MESA_FORMAT_RGBX8888] = 0, |
||
326 | [MESA_FORMAT_RGBX8888_REV] = BRW_SURFACEFORMAT_R8G8B8X8_UNORM, |
||
327 | [MESA_FORMAT_XRGB8888] = BRW_SURFACEFORMAT_B8G8R8X8_UNORM, |
||
328 | [MESA_FORMAT_XRGB8888_REV] = 0, |
||
329 | [MESA_FORMAT_RGB888] = 0, |
||
330 | [MESA_FORMAT_BGR888] = BRW_SURFACEFORMAT_R8G8B8_UNORM, |
||
331 | [MESA_FORMAT_RGB565] = BRW_SURFACEFORMAT_B5G6R5_UNORM, |
||
332 | [MESA_FORMAT_RGB565_REV] = 0, |
||
333 | [MESA_FORMAT_ARGB4444] = BRW_SURFACEFORMAT_B4G4R4A4_UNORM, |
||
334 | [MESA_FORMAT_ARGB4444_REV] = 0, |
||
335 | [MESA_FORMAT_RGBA5551] = 0, |
||
336 | [MESA_FORMAT_ARGB1555] = BRW_SURFACEFORMAT_B5G5R5A1_UNORM, |
||
337 | [MESA_FORMAT_ARGB1555_REV] = 0, |
||
338 | [MESA_FORMAT_AL44] = 0, |
||
339 | [MESA_FORMAT_AL88] = BRW_SURFACEFORMAT_L8A8_UNORM, |
||
340 | [MESA_FORMAT_AL88_REV] = 0, |
||
341 | [MESA_FORMAT_AL1616] = BRW_SURFACEFORMAT_L16A16_UNORM, |
||
342 | [MESA_FORMAT_AL1616_REV] = 0, |
||
343 | [MESA_FORMAT_RGB332] = 0, |
||
344 | [MESA_FORMAT_A8] = BRW_SURFACEFORMAT_A8_UNORM, |
||
345 | [MESA_FORMAT_A16] = BRW_SURFACEFORMAT_A16_UNORM, |
||
346 | [MESA_FORMAT_L8] = BRW_SURFACEFORMAT_L8_UNORM, |
||
347 | [MESA_FORMAT_L16] = BRW_SURFACEFORMAT_L16_UNORM, |
||
348 | [MESA_FORMAT_I8] = BRW_SURFACEFORMAT_I8_UNORM, |
||
349 | [MESA_FORMAT_I16] = BRW_SURFACEFORMAT_I16_UNORM, |
||
350 | [MESA_FORMAT_YCBCR_REV] = BRW_SURFACEFORMAT_YCRCB_NORMAL, |
||
351 | [MESA_FORMAT_YCBCR] = BRW_SURFACEFORMAT_YCRCB_SWAPUVY, |
||
352 | [MESA_FORMAT_R8] = BRW_SURFACEFORMAT_R8_UNORM, |
||
353 | [MESA_FORMAT_GR88] = BRW_SURFACEFORMAT_R8G8_UNORM, |
||
354 | [MESA_FORMAT_RG88] = 0, |
||
355 | [MESA_FORMAT_R16] = BRW_SURFACEFORMAT_R16_UNORM, |
||
356 | [MESA_FORMAT_GR1616] = BRW_SURFACEFORMAT_R16G16_UNORM, |
||
357 | [MESA_FORMAT_RG1616] = 0, |
||
358 | [MESA_FORMAT_ARGB2101010] = BRW_SURFACEFORMAT_B10G10R10A2_UNORM, |
||
359 | [MESA_FORMAT_Z24_S8] = 0, |
||
360 | [MESA_FORMAT_S8_Z24] = 0, |
||
361 | [MESA_FORMAT_Z16] = 0, |
||
362 | [MESA_FORMAT_X8_Z24] = 0, |
||
363 | [MESA_FORMAT_Z24_X8] = 0, |
||
364 | [MESA_FORMAT_Z32] = 0, |
||
365 | [MESA_FORMAT_S8] = 0, |
||
366 | |||
367 | [MESA_FORMAT_SRGB8] = 0, |
||
368 | [MESA_FORMAT_SRGBA8] = 0, |
||
369 | [MESA_FORMAT_SARGB8] = BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB, |
||
370 | [MESA_FORMAT_SL8] = BRW_SURFACEFORMAT_L8_UNORM_SRGB, |
||
371 | [MESA_FORMAT_SLA8] = BRW_SURFACEFORMAT_L8A8_UNORM_SRGB, |
||
372 | [MESA_FORMAT_SRGB_DXT1] = BRW_SURFACEFORMAT_DXT1_RGB_SRGB, |
||
373 | [MESA_FORMAT_SRGBA_DXT1] = BRW_SURFACEFORMAT_BC1_UNORM_SRGB, |
||
374 | [MESA_FORMAT_SRGBA_DXT3] = BRW_SURFACEFORMAT_BC2_UNORM_SRGB, |
||
375 | [MESA_FORMAT_SRGBA_DXT5] = BRW_SURFACEFORMAT_BC3_UNORM_SRGB, |
||
376 | |||
377 | [MESA_FORMAT_RGB_FXT1] = BRW_SURFACEFORMAT_FXT1, |
||
378 | [MESA_FORMAT_RGBA_FXT1] = BRW_SURFACEFORMAT_FXT1, |
||
379 | [MESA_FORMAT_RGB_DXT1] = BRW_SURFACEFORMAT_DXT1_RGB, |
||
380 | [MESA_FORMAT_RGBA_DXT1] = BRW_SURFACEFORMAT_BC1_UNORM, |
||
381 | [MESA_FORMAT_RGBA_DXT3] = BRW_SURFACEFORMAT_BC2_UNORM, |
||
382 | [MESA_FORMAT_RGBA_DXT5] = BRW_SURFACEFORMAT_BC3_UNORM, |
||
383 | |||
384 | [MESA_FORMAT_RGBA_FLOAT32] = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT, |
||
385 | [MESA_FORMAT_RGBA_FLOAT16] = BRW_SURFACEFORMAT_R16G16B16A16_FLOAT, |
||
386 | [MESA_FORMAT_RGB_FLOAT32] = BRW_SURFACEFORMAT_R32G32B32_FLOAT, |
||
387 | [MESA_FORMAT_RGB_FLOAT16] = BRW_SURFACEFORMAT_R16G16B16_FLOAT, |
||
388 | [MESA_FORMAT_ALPHA_FLOAT32] = BRW_SURFACEFORMAT_A32_FLOAT, |
||
389 | [MESA_FORMAT_ALPHA_FLOAT16] = BRW_SURFACEFORMAT_A16_FLOAT, |
||
390 | [MESA_FORMAT_LUMINANCE_FLOAT32] = BRW_SURFACEFORMAT_L32_FLOAT, |
||
391 | [MESA_FORMAT_LUMINANCE_FLOAT16] = BRW_SURFACEFORMAT_L16_FLOAT, |
||
392 | [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = BRW_SURFACEFORMAT_L32A32_FLOAT, |
||
393 | [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16] = BRW_SURFACEFORMAT_L16A16_FLOAT, |
||
394 | [MESA_FORMAT_INTENSITY_FLOAT32] = BRW_SURFACEFORMAT_I32_FLOAT, |
||
395 | [MESA_FORMAT_INTENSITY_FLOAT16] = BRW_SURFACEFORMAT_I16_FLOAT, |
||
396 | [MESA_FORMAT_R_FLOAT32] = BRW_SURFACEFORMAT_R32_FLOAT, |
||
397 | [MESA_FORMAT_R_FLOAT16] = BRW_SURFACEFORMAT_R16_FLOAT, |
||
398 | [MESA_FORMAT_RG_FLOAT32] = BRW_SURFACEFORMAT_R32G32_FLOAT, |
||
399 | [MESA_FORMAT_RG_FLOAT16] = BRW_SURFACEFORMAT_R16G16_FLOAT, |
||
400 | |||
401 | [MESA_FORMAT_ALPHA_UINT8] = 0, |
||
402 | [MESA_FORMAT_ALPHA_UINT16] = 0, |
||
403 | [MESA_FORMAT_ALPHA_UINT32] = 0, |
||
404 | [MESA_FORMAT_ALPHA_INT8] = 0, |
||
405 | [MESA_FORMAT_ALPHA_INT16] = 0, |
||
406 | [MESA_FORMAT_ALPHA_INT32] = 0, |
||
407 | |||
408 | [MESA_FORMAT_INTENSITY_UINT8] = 0, |
||
409 | [MESA_FORMAT_INTENSITY_UINT16] = 0, |
||
410 | [MESA_FORMAT_INTENSITY_UINT32] = 0, |
||
411 | [MESA_FORMAT_INTENSITY_INT8] = 0, |
||
412 | [MESA_FORMAT_INTENSITY_INT16] = 0, |
||
413 | [MESA_FORMAT_INTENSITY_INT32] = 0, |
||
414 | |||
415 | [MESA_FORMAT_LUMINANCE_UINT8] = 0, |
||
416 | [MESA_FORMAT_LUMINANCE_UINT16] = 0, |
||
417 | [MESA_FORMAT_LUMINANCE_UINT32] = 0, |
||
418 | [MESA_FORMAT_LUMINANCE_INT8] = 0, |
||
419 | [MESA_FORMAT_LUMINANCE_INT16] = 0, |
||
420 | [MESA_FORMAT_LUMINANCE_INT32] = 0, |
||
421 | |||
422 | [MESA_FORMAT_LUMINANCE_ALPHA_UINT8] = 0, |
||
423 | [MESA_FORMAT_LUMINANCE_ALPHA_UINT16] = 0, |
||
424 | [MESA_FORMAT_LUMINANCE_ALPHA_UINT32] = 0, |
||
425 | [MESA_FORMAT_LUMINANCE_ALPHA_INT8] = 0, |
||
426 | [MESA_FORMAT_LUMINANCE_ALPHA_INT16] = 0, |
||
427 | [MESA_FORMAT_LUMINANCE_ALPHA_INT32] = 0, |
||
428 | |||
429 | [MESA_FORMAT_R_INT8] = BRW_SURFACEFORMAT_R8_SINT, |
||
430 | [MESA_FORMAT_RG_INT8] = BRW_SURFACEFORMAT_R8G8_SINT, |
||
431 | [MESA_FORMAT_RGB_INT8] = BRW_SURFACEFORMAT_R8G8B8_SINT, |
||
432 | [MESA_FORMAT_RGBA_INT8] = BRW_SURFACEFORMAT_R8G8B8A8_SINT, |
||
433 | [MESA_FORMAT_R_INT16] = BRW_SURFACEFORMAT_R16_SINT, |
||
434 | [MESA_FORMAT_RG_INT16] = BRW_SURFACEFORMAT_R16G16_SINT, |
||
435 | [MESA_FORMAT_RGB_INT16] = BRW_SURFACEFORMAT_R16G16B16_SINT, |
||
436 | [MESA_FORMAT_RGBA_INT16] = BRW_SURFACEFORMAT_R16G16B16A16_SINT, |
||
437 | [MESA_FORMAT_R_INT32] = BRW_SURFACEFORMAT_R32_SINT, |
||
438 | [MESA_FORMAT_RG_INT32] = BRW_SURFACEFORMAT_R32G32_SINT, |
||
439 | [MESA_FORMAT_RGB_INT32] = BRW_SURFACEFORMAT_R32G32B32_SINT, |
||
440 | [MESA_FORMAT_RGBA_INT32] = BRW_SURFACEFORMAT_R32G32B32A32_SINT, |
||
441 | |||
442 | [MESA_FORMAT_R_UINT8] = BRW_SURFACEFORMAT_R8_UINT, |
||
443 | [MESA_FORMAT_RG_UINT8] = BRW_SURFACEFORMAT_R8G8_UINT, |
||
444 | [MESA_FORMAT_RGB_UINT8] = BRW_SURFACEFORMAT_R8G8B8_UINT, |
||
445 | [MESA_FORMAT_RGBA_UINT8] = BRW_SURFACEFORMAT_R8G8B8A8_UINT, |
||
446 | [MESA_FORMAT_R_UINT16] = BRW_SURFACEFORMAT_R16_UINT, |
||
447 | [MESA_FORMAT_RG_UINT16] = BRW_SURFACEFORMAT_R16G16_UINT, |
||
448 | [MESA_FORMAT_RGB_UINT16] = BRW_SURFACEFORMAT_R16G16B16_UINT, |
||
449 | [MESA_FORMAT_RGBA_UINT16] = BRW_SURFACEFORMAT_R16G16B16A16_UINT, |
||
450 | [MESA_FORMAT_R_UINT32] = BRW_SURFACEFORMAT_R32_UINT, |
||
451 | [MESA_FORMAT_RG_UINT32] = BRW_SURFACEFORMAT_R32G32_UINT, |
||
452 | [MESA_FORMAT_RGB_UINT32] = BRW_SURFACEFORMAT_R32G32B32_UINT, |
||
453 | [MESA_FORMAT_RGBA_UINT32] = BRW_SURFACEFORMAT_R32G32B32A32_UINT, |
||
454 | |||
455 | [MESA_FORMAT_DUDV8] = BRW_SURFACEFORMAT_R8G8_SNORM, |
||
456 | [MESA_FORMAT_SIGNED_R8] = BRW_SURFACEFORMAT_R8_SNORM, |
||
457 | [MESA_FORMAT_SIGNED_RG88_REV] = BRW_SURFACEFORMAT_R8G8_SNORM, |
||
458 | [MESA_FORMAT_SIGNED_RGBX8888] = 0, |
||
459 | [MESA_FORMAT_SIGNED_RGBA8888] = 0, |
||
460 | [MESA_FORMAT_SIGNED_RGBA8888_REV] = BRW_SURFACEFORMAT_R8G8B8A8_SNORM, |
||
461 | [MESA_FORMAT_SIGNED_R16] = BRW_SURFACEFORMAT_R16_SNORM, |
||
462 | [MESA_FORMAT_SIGNED_GR1616] = BRW_SURFACEFORMAT_R16G16_SNORM, |
||
463 | [MESA_FORMAT_SIGNED_RGB_16] = BRW_SURFACEFORMAT_R16G16B16_SNORM, |
||
464 | [MESA_FORMAT_SIGNED_RGBA_16] = BRW_SURFACEFORMAT_R16G16B16A16_SNORM, |
||
465 | [MESA_FORMAT_RGBA_16] = BRW_SURFACEFORMAT_R16G16B16A16_UNORM, |
||
466 | |||
467 | [MESA_FORMAT_RED_RGTC1] = BRW_SURFACEFORMAT_BC4_UNORM, |
||
468 | [MESA_FORMAT_SIGNED_RED_RGTC1] = BRW_SURFACEFORMAT_BC4_SNORM, |
||
469 | [MESA_FORMAT_RG_RGTC2] = BRW_SURFACEFORMAT_BC5_UNORM, |
||
470 | [MESA_FORMAT_SIGNED_RG_RGTC2] = BRW_SURFACEFORMAT_BC5_SNORM, |
||
471 | |||
472 | [MESA_FORMAT_L_LATC1] = 0, |
||
473 | [MESA_FORMAT_SIGNED_L_LATC1] = 0, |
||
474 | [MESA_FORMAT_LA_LATC2] = 0, |
||
475 | [MESA_FORMAT_SIGNED_LA_LATC2] = 0, |
||
476 | |||
477 | [MESA_FORMAT_ETC1_RGB8] = BRW_SURFACEFORMAT_ETC1_RGB8, |
||
478 | [MESA_FORMAT_ETC2_RGB8] = BRW_SURFACEFORMAT_ETC2_RGB8, |
||
479 | [MESA_FORMAT_ETC2_SRGB8] = BRW_SURFACEFORMAT_ETC2_SRGB8, |
||
480 | [MESA_FORMAT_ETC2_RGBA8_EAC] = BRW_SURFACEFORMAT_ETC2_EAC_RGBA8, |
||
481 | [MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC] = BRW_SURFACEFORMAT_ETC2_EAC_SRGB8_A8, |
||
482 | [MESA_FORMAT_ETC2_R11_EAC] = BRW_SURFACEFORMAT_EAC_R11, |
||
483 | [MESA_FORMAT_ETC2_RG11_EAC] = BRW_SURFACEFORMAT_EAC_RG11, |
||
484 | [MESA_FORMAT_ETC2_SIGNED_R11_EAC] = BRW_SURFACEFORMAT_EAC_SIGNED_R11, |
||
485 | [MESA_FORMAT_ETC2_SIGNED_RG11_EAC] = BRW_SURFACEFORMAT_EAC_SIGNED_RG11, |
||
486 | [MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1] = BRW_SURFACEFORMAT_ETC2_RGB8_PTA, |
||
487 | [MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1] = BRW_SURFACEFORMAT_ETC2_SRGB8_PTA, |
||
488 | |||
489 | [MESA_FORMAT_SIGNED_A8] = 0, |
||
490 | [MESA_FORMAT_SIGNED_L8] = 0, |
||
491 | [MESA_FORMAT_SIGNED_AL88] = 0, |
||
492 | [MESA_FORMAT_SIGNED_I8] = 0, |
||
493 | [MESA_FORMAT_SIGNED_A16] = 0, |
||
494 | [MESA_FORMAT_SIGNED_L16] = 0, |
||
495 | [MESA_FORMAT_SIGNED_AL1616] = 0, |
||
496 | [MESA_FORMAT_SIGNED_I16] = 0, |
||
497 | |||
498 | [MESA_FORMAT_RGB9_E5_FLOAT] = BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP, |
||
499 | [MESA_FORMAT_R11_G11_B10_FLOAT] = BRW_SURFACEFORMAT_R11G11B10_FLOAT, |
||
500 | |||
501 | [MESA_FORMAT_Z32_FLOAT] = 0, |
||
502 | [MESA_FORMAT_Z32_FLOAT_X24S8] = 0, |
||
503 | |||
504 | [MESA_FORMAT_ARGB2101010_UINT] = BRW_SURFACEFORMAT_B10G10R10A2_UINT, |
||
505 | [MESA_FORMAT_ABGR2101010_UINT] = BRW_SURFACEFORMAT_R10G10B10A2_UINT, |
||
506 | |||
507 | [MESA_FORMAT_XRGB4444_UNORM] = 0, |
||
508 | [MESA_FORMAT_XRGB1555_UNORM] = BRW_SURFACEFORMAT_B5G5R5X1_UNORM, |
||
509 | [MESA_FORMAT_XBGR8888_SNORM] = 0, |
||
510 | [MESA_FORMAT_XBGR8888_SRGB] = 0, |
||
511 | [MESA_FORMAT_XBGR8888_UINT] = 0, |
||
512 | [MESA_FORMAT_XBGR8888_SINT] = 0, |
||
513 | [MESA_FORMAT_XRGB2101010_UNORM] = BRW_SURFACEFORMAT_B10G10R10X2_UNORM, |
||
514 | [MESA_FORMAT_XBGR16161616_UNORM] = BRW_SURFACEFORMAT_R16G16B16X16_UNORM, |
||
515 | [MESA_FORMAT_XBGR16161616_SNORM] = 0, |
||
516 | [MESA_FORMAT_XBGR16161616_FLOAT] = BRW_SURFACEFORMAT_R16G16B16X16_FLOAT, |
||
517 | [MESA_FORMAT_XBGR16161616_UINT] = 0, |
||
518 | [MESA_FORMAT_XBGR16161616_SINT] = 0, |
||
519 | [MESA_FORMAT_XBGR32323232_FLOAT] = BRW_SURFACEFORMAT_R32G32B32X32_FLOAT, |
||
520 | [MESA_FORMAT_XBGR32323232_UINT] = 0, |
||
521 | [MESA_FORMAT_XBGR32323232_SINT] = 0, |
||
522 | }; |
||
523 | assert(mesa_format < MESA_FORMAT_COUNT); |
||
524 | return table[mesa_format]; |
||
525 | } |
||
526 | |||
527 | void |
||
528 | brw_init_surface_formats(struct brw_context *brw) |
||
529 | { |
||
530 | struct gl_context *ctx = &brw->ctx; |
||
531 | int gen; |
||
532 | gl_format format; |
||
533 | |||
534 | gen = brw->gen * 10; |
||
535 | if (brw->is_g4x) |
||
536 | gen += 5; |
||
537 | |||
538 | for (format = MESA_FORMAT_NONE + 1; format < MESA_FORMAT_COUNT; format++) { |
||
539 | uint32_t texture, render; |
||
540 | const struct surface_format_info *rinfo, *tinfo; |
||
541 | bool is_integer = _mesa_is_format_integer_color(format); |
||
542 | |||
543 | render = texture = brw_format_for_mesa_format(format); |
||
544 | tinfo = &surface_formats[texture]; |
||
545 | |||
546 | /* The value of BRW_SURFACEFORMAT_R32G32B32A32_FLOAT is 0, so don't skip |
||
547 | * it. |
||
548 | */ |
||
549 | if (texture == 0 && format != MESA_FORMAT_RGBA_FLOAT32) |
||
550 | continue; |
||
551 | |||
552 | if (gen >= tinfo->sampling && (gen >= tinfo->filtering || is_integer)) |
||
553 | ctx->TextureFormatSupported[format] = true; |
||
554 | |||
555 | /* Re-map some render target formats to make them supported when they |
||
556 | * wouldn't be using their format for texturing. |
||
557 | */ |
||
558 | switch (render) { |
||
559 | /* For these formats, we just need to read/write the first |
||
560 | * channel into R, which is to say that we just treat them as |
||
561 | * GL_RED. |
||
562 | */ |
||
563 | case BRW_SURFACEFORMAT_I32_FLOAT: |
||
564 | case BRW_SURFACEFORMAT_L32_FLOAT: |
||
565 | render = BRW_SURFACEFORMAT_R32_FLOAT; |
||
566 | break; |
||
567 | case BRW_SURFACEFORMAT_I16_FLOAT: |
||
568 | case BRW_SURFACEFORMAT_L16_FLOAT: |
||
569 | render = BRW_SURFACEFORMAT_R16_FLOAT; |
||
570 | break; |
||
571 | case BRW_SURFACEFORMAT_B8G8R8X8_UNORM: |
||
572 | /* XRGB is handled as ARGB because the chips in this family |
||
573 | * cannot render to XRGB targets. This means that we have to |
||
574 | * mask writes to alpha (ala glColorMask) and reconfigure the |
||
575 | * alpha blending hardware to use GL_ONE (or GL_ZERO) for |
||
576 | * cases where GL_DST_ALPHA (or GL_ONE_MINUS_DST_ALPHA) is |
||
577 | * used. |
||
578 | */ |
||
579 | render = BRW_SURFACEFORMAT_B8G8R8A8_UNORM; |
||
580 | break; |
||
581 | } |
||
582 | |||
583 | rinfo = &surface_formats[render]; |
||
584 | |||
585 | /* Note that GL_EXT_texture_integer says that blending doesn't occur for |
||
586 | * integer, so we don't need hardware support for blending on it. Other |
||
587 | * than that, GL in general requires alpha blending for render targets, |
||
588 | * even though we don't support it for some formats. |
||
589 | */ |
||
590 | if (gen >= rinfo->render_target && |
||
591 | (gen >= rinfo->alpha_blend || is_integer)) { |
||
592 | brw->render_target_format[format] = render; |
||
593 | brw->format_supported_as_render_target[format] = true; |
||
594 | } |
||
595 | } |
||
596 | |||
597 | /* We will check this table for FBO completeness, but the surface format |
||
598 | * table above only covered color rendering. |
||
599 | */ |
||
600 | brw->format_supported_as_render_target[MESA_FORMAT_S8_Z24] = true; |
||
601 | brw->format_supported_as_render_target[MESA_FORMAT_X8_Z24] = true; |
||
602 | brw->format_supported_as_render_target[MESA_FORMAT_S8] = true; |
||
603 | brw->format_supported_as_render_target[MESA_FORMAT_Z16] = true; |
||
604 | brw->format_supported_as_render_target[MESA_FORMAT_Z32_FLOAT] = true; |
||
605 | brw->format_supported_as_render_target[MESA_FORMAT_Z32_FLOAT_X24S8] = true; |
||
606 | |||
607 | /* We remap depth formats to a supported texturing format in |
||
608 | * translate_tex_format(). |
||
609 | */ |
||
610 | ctx->TextureFormatSupported[MESA_FORMAT_S8_Z24] = true; |
||
611 | ctx->TextureFormatSupported[MESA_FORMAT_X8_Z24] = true; |
||
612 | ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT] = true; |
||
613 | ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8] = true; |
||
614 | |||
615 | /* It appears that Z16 is slower than Z24 (on Intel Ivybridge and newer |
||
616 | * hardware at least), so there's no real reason to prefer it unless you're |
||
617 | * under memory (not memory bandwidth) pressure. Our speculation is that |
||
618 | * this is due to either increased fragment shader execution from |
||
619 | * GL_LEQUAL/GL_EQUAL depth tests at the reduced precision, or due to |
||
620 | * increased depth stalls from a cacheline-based heuristic for detecting |
||
621 | * depth stalls. |
||
622 | * |
||
623 | * However, desktop GL 3.0+ require that you get exactly 16 bits when |
||
624 | * asking for DEPTH_COMPONENT16, so we have to respect that. |
||
625 | */ |
||
626 | if (_mesa_is_desktop_gl(ctx)) |
||
627 | ctx->TextureFormatSupported[MESA_FORMAT_Z16] = true; |
||
628 | |||
629 | /* On hardware that lacks support for ETC1, we map ETC1 to RGBX |
||
630 | * during glCompressedTexImage2D(). See intel_mipmap_tree::wraps_etc1. |
||
631 | */ |
||
632 | ctx->TextureFormatSupported[MESA_FORMAT_ETC1_RGB8] = true; |
||
633 | |||
634 | /* On hardware that lacks support for ETC2, we map ETC2 to a suitable |
||
635 | * MESA_FORMAT during glCompressedTexImage2D(). |
||
636 | * See intel_mipmap_tree::wraps_etc2. |
||
637 | */ |
||
638 | ctx->TextureFormatSupported[MESA_FORMAT_ETC2_RGB8] = true; |
||
639 | ctx->TextureFormatSupported[MESA_FORMAT_ETC2_SRGB8] = true; |
||
640 | ctx->TextureFormatSupported[MESA_FORMAT_ETC2_RGBA8_EAC] = true; |
||
641 | ctx->TextureFormatSupported[MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC] = true; |
||
642 | ctx->TextureFormatSupported[MESA_FORMAT_ETC2_R11_EAC] = true; |
||
643 | ctx->TextureFormatSupported[MESA_FORMAT_ETC2_RG11_EAC] = true; |
||
644 | ctx->TextureFormatSupported[MESA_FORMAT_ETC2_SIGNED_R11_EAC] = true; |
||
645 | ctx->TextureFormatSupported[MESA_FORMAT_ETC2_SIGNED_RG11_EAC] = true; |
||
646 | ctx->TextureFormatSupported[MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1] = true; |
||
647 | ctx->TextureFormatSupported[MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1] = true; |
||
648 | } |
||
649 | |||
650 | bool |
||
651 | brw_render_target_supported(struct brw_context *brw, |
||
652 | struct gl_renderbuffer *rb) |
||
653 | { |
||
654 | gl_format format = rb->Format; |
||
655 | |||
656 | /* Many integer formats are promoted to RGBA (like XRGB8888 is), which means |
||
657 | * we would consider them renderable even though we don't have surface |
||
658 | * support for their alpha behavior and don't have the blending unit |
||
659 | * available to fake it like we do for XRGB8888. Force them to being |
||
660 | * unsupported. |
||
661 | */ |
||
662 | if ((rb->_BaseFormat != GL_RGBA && |
||
663 | rb->_BaseFormat != GL_RG && |
||
664 | rb->_BaseFormat != GL_RED) && _mesa_is_format_integer_color(format)) |
||
665 | return false; |
||
666 | |||
667 | /* Under some conditions, MSAA is not supported for formats whose width is |
||
668 | * more than 64 bits. |
||
669 | */ |
||
670 | if (rb->NumSamples > 0 && _mesa_get_format_bytes(format) > 8) { |
||
671 | /* Gen6: MSAA on >64 bit formats is unsupported. */ |
||
672 | if (brw->gen <= 6) |
||
673 | return false; |
||
674 | |||
675 | /* Gen7: 8x MSAA on >64 bit formats is unsupported. */ |
||
676 | if (rb->NumSamples >= 8) |
||
677 | return false; |
||
678 | } |
||
679 | |||
680 | return brw->format_supported_as_render_target[format]; |
||
681 | } |
||
682 | |||
683 | GLuint |
||
684 | translate_tex_format(struct brw_context *brw, |
||
685 | gl_format mesa_format, |
||
686 | GLenum depth_mode, |
||
687 | GLenum srgb_decode) |
||
688 | { |
||
689 | struct gl_context *ctx = &brw->ctx; |
||
690 | if (srgb_decode == GL_SKIP_DECODE_EXT) |
||
691 | mesa_format = _mesa_get_srgb_format_linear(mesa_format); |
||
692 | |||
693 | switch( mesa_format ) { |
||
694 | |||
695 | case MESA_FORMAT_Z16: |
||
696 | return BRW_SURFACEFORMAT_I16_UNORM; |
||
697 | |||
698 | case MESA_FORMAT_S8_Z24: |
||
699 | case MESA_FORMAT_X8_Z24: |
||
700 | return BRW_SURFACEFORMAT_I24X8_UNORM; |
||
701 | |||
702 | case MESA_FORMAT_Z32_FLOAT: |
||
703 | return BRW_SURFACEFORMAT_I32_FLOAT; |
||
704 | |||
705 | case MESA_FORMAT_Z32_FLOAT_X24S8: |
||
706 | return BRW_SURFACEFORMAT_R32G32_FLOAT; |
||
707 | |||
708 | case MESA_FORMAT_RGBA_FLOAT32: |
||
709 | /* The value of this BRW_SURFACEFORMAT is 0, which tricks the |
||
710 | * assertion below. |
||
711 | */ |
||
712 | return BRW_SURFACEFORMAT_R32G32B32A32_FLOAT; |
||
713 | |||
714 | case MESA_FORMAT_SRGB_DXT1: |
||
715 | if (brw->gen == 4 && !brw->is_g4x) { |
||
716 | /* Work around missing SRGB DXT1 support on original gen4 by just |
||
717 | * skipping SRGB decode. It's not worth not supporting sRGB in |
||
718 | * general to prevent this. |
||
719 | */ |
||
720 | WARN_ONCE(true, "Demoting sRGB DXT1 texture to non-sRGB\n"); |
||
721 | mesa_format = MESA_FORMAT_RGB_DXT1; |
||
722 | } |
||
723 | return brw_format_for_mesa_format(mesa_format); |
||
724 | |||
725 | default: |
||
726 | assert(brw_format_for_mesa_format(mesa_format) != 0); |
||
727 | return brw_format_for_mesa_format(mesa_format); |
||
728 | } |
||
729 | } |
||
730 | |||
731 | /** Can HiZ be enabled on a depthbuffer of the given format? */ |
||
732 | bool |
||
733 | brw_is_hiz_depth_format(struct brw_context *brw, gl_format format) |
||
734 | { |
||
735 | if (!brw->has_hiz) |
||
736 | return false; |
||
737 | |||
738 | switch (format) { |
||
739 | case MESA_FORMAT_Z32_FLOAT: |
||
740 | case MESA_FORMAT_Z32_FLOAT_X24S8: |
||
741 | case MESA_FORMAT_X8_Z24: |
||
742 | case MESA_FORMAT_S8_Z24: |
||
743 | case MESA_FORMAT_Z16: |
||
744 | return true; |
||
745 | default: |
||
746 | return false; |
||
747 | } |
||
748 | }=>>> |