Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5563 | serge | 1 | /* |
2 | * Mesa 3-D graphics library |
||
3 | * |
||
4 | * Copyright (C) 2012-2013 LunarG, Inc. |
||
5 | * |
||
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: |
||
12 | * |
||
13 | * The above copyright notice and this permission notice shall be included |
||
14 | * in all copies or substantial portions of the Software. |
||
15 | * |
||
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. |
||
23 | * |
||
24 | * Authors: |
||
25 | * Chia-I Wu |
||
26 | */ |
||
27 | |||
28 | #include "vl/vl_video_buffer.h" |
||
29 | #include "brw_defines.h" |
||
30 | |||
31 | #include "ilo_screen.h" |
||
32 | #include "ilo_format.h" |
||
33 | |||
34 | /* stolen from classic i965 */ |
||
35 | struct surface_format_info { |
||
36 | bool exists; |
||
37 | int sampling; |
||
38 | int filtering; |
||
39 | int shadow_compare; |
||
40 | int chroma_key; |
||
41 | int render_target; |
||
42 | int alpha_blend; |
||
43 | int input_vb; |
||
44 | int streamed_output_vb; |
||
45 | int color_processing; |
||
46 | }; |
||
47 | |||
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. |
||
50 | */ |
||
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 }, |
||
53 | |||
54 | #define Y 0 |
||
55 | #define x 999 |
||
56 | /** |
||
57 | * This is the table of support for surface (texture, renderbuffer, and vertex |
||
58 | * buffer, but not depthbuffer) formats across the various hardware generations. |
||
59 | * |
||
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: |
||
63 | * |
||
64 | * Y*: 45 |
||
65 | * Y+: 45 (g45/gm45) |
||
66 | * Y~: 50 (gen5) |
||
67 | * Y^: 60 (gen6) |
||
68 | * Y#: 70 (gen7) |
||
69 | * |
||
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 |
||
75 | * RT - Render Target |
||
76 | * AB - Alpha Blend Render Target |
||
77 | * VB - Input Vertex Buffer |
||
78 | * SO - Steamed Output Vertex Buffers (transform feedback) |
||
79 | * color - Color Processing |
||
80 | * |
||
81 | * See page 88 of the Sandybridge PRM VOL4_Part1 PDF. |
||
82 | * |
||
83 | * As of Ivybridge, the columns are no longer in that table and the |
||
84 | * information can be found spread across: |
||
85 | * |
||
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. |
||
89 | */ |
||
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) |
||
311 | }; |
||
312 | #undef x |
||
313 | #undef Y |
||
314 | |||
315 | static const struct surface_format_info * |
||
316 | lookup_surface_format_info(enum pipe_format format, unsigned bind) |
||
317 | { |
||
318 | static const struct surface_format_info nonexist = { |
||
319 | .exists = false, |
||
320 | .sampling = 999, |
||
321 | .filtering = 999, |
||
322 | .shadow_compare = 999, |
||
323 | .chroma_key = 999, |
||
324 | .render_target = 999, |
||
325 | .alpha_blend = 999, |
||
326 | .input_vb = 999, |
||
327 | .streamed_output_vb = 999, |
||
328 | .color_processing = 999, |
||
329 | }; |
||
330 | const int surfaceformat = ilo_translate_format(format, bind); |
||
331 | |||
332 | return (surfaceformat >= 0 && surfaceformat < Elements(surface_formats) && |
||
333 | surface_formats[surfaceformat].exists) ? |
||
334 | &surface_formats[surfaceformat] : &nonexist; |
||
335 | } |
||
336 | |||
337 | /** |
||
338 | * Translate a color (non-depth/stencil) pipe format to the matching hardware |
||
339 | * format. Return -1 on errors. |
||
340 | */ |
||
341 | int |
||
342 | ilo_translate_color_format(enum pipe_format format) |
||
343 | { |
||
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, |
||
592 | }; |
||
593 | int sfmt = format_mapping[format]; |
||
594 | |||
595 | /* BRW_SURFACEFORMAT_R32G32B32A32_FLOAT happens to be 0 */ |
||
596 | if (!sfmt && format != PIPE_FORMAT_R32G32B32A32_FLOAT) |
||
597 | sfmt = -1; |
||
598 | |||
599 | return sfmt; |
||
600 | } |
||
601 | |||
602 | static boolean |
||
603 | ilo_is_format_supported(struct pipe_screen *screen, |
||
604 | enum pipe_format format, |
||
605 | enum pipe_texture_target target, |
||
606 | unsigned sample_count, |
||
607 | unsigned bindings) |
||
608 | { |
||
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; |
||
613 | unsigned bind; |
||
614 | |||
615 | if (!util_format_is_supported(format, bindings)) |
||
616 | return false; |
||
617 | |||
618 | /* no MSAA support yet */ |
||
619 | if (sample_count > 1) |
||
620 | return false; |
||
621 | |||
622 | bind = (bindings & PIPE_BIND_DEPTH_STENCIL); |
||
623 | if (bind) { |
||
624 | switch (format) { |
||
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: |
||
630 | break; |
||
631 | case PIPE_FORMAT_S8_UINT: |
||
632 | /* TODO separate stencil */ |
||
633 | default: |
||
634 | return false; |
||
635 | } |
||
636 | } |
||
637 | |||
638 | bind = (bindings & PIPE_BIND_RENDER_TARGET); |
||
639 | if (bind) { |
||
640 | info = lookup_surface_format_info(format, bind); |
||
641 | |||
642 | if (gen < info->render_target) |
||
643 | return false; |
||
644 | |||
645 | if (!is_pure_int && gen < info->alpha_blend) |
||
646 | return false; |
||
647 | } |
||
648 | |||
649 | bind = (bindings & PIPE_BIND_SAMPLER_VIEW); |
||
650 | if (bind) { |
||
651 | info = lookup_surface_format_info(format, bind); |
||
652 | |||
653 | if (gen < info->sampling) |
||
654 | return false; |
||
655 | |||
656 | if (!is_pure_int && gen < info->filtering) |
||
657 | return false; |
||
658 | } |
||
659 | |||
660 | bind = (bindings & PIPE_BIND_VERTEX_BUFFER); |
||
661 | if (bind) { |
||
662 | info = lookup_surface_format_info(format, bind); |
||
663 | |||
664 | if (gen < info->input_vb) |
||
665 | return false; |
||
666 | } |
||
667 | |||
668 | return true; |
||
669 | } |
||
670 | |||
671 | static boolean |
||
672 | ilo_is_video_format_supported(struct pipe_screen *screen, |
||
673 | enum pipe_format format, |
||
674 | enum pipe_video_profile profile) |
||
675 | { |
||
676 | return vl_video_buffer_is_format_supported(screen, format, profile); |
||
677 | } |
||
678 | |||
679 | /** |
||
680 | * Initialize format-related functions. |
||
681 | */ |
||
682 | void |
||
683 | ilo_init_format_functions(struct ilo_screen *is) |
||
684 | { |
||
685 | is->base.is_format_supported = ilo_is_format_supported; |
||
686 | is->base.is_video_format_supported = ilo_is_video_format_supported; |
||
687 | }>>>>>> |