Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5564 | serge | 1 | /* |
2 | * Copyright (C) 2013 Rob Clark |
||
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 FROM, |
||
20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||
21 | * SOFTWARE. |
||
22 | * |
||
23 | */ |
||
24 | |||
25 | #include "pipe/p_defines.h" |
||
26 | #include "util/u_format.h" |
||
27 | |||
28 | #include "fd3_format.h" |
||
29 | |||
30 | /* Specifies the table of all the formats and their features. Also supplies |
||
31 | * the helpers that look up various data in those tables. |
||
32 | */ |
||
33 | |||
34 | struct fd3_format { |
||
35 | enum a3xx_vtx_fmt vtx; |
||
36 | enum a3xx_tex_fmt tex; |
||
37 | enum a3xx_color_fmt rb; |
||
38 | enum a3xx_color_swap swap; |
||
39 | boolean present; |
||
40 | }; |
||
41 | |||
42 | #define RB_NONE ~0 |
||
43 | |||
44 | /* vertex + texture */ |
||
45 | #define VT(pipe, fmt, rbfmt, swapfmt) \ |
||
46 | [PIPE_FORMAT_ ## pipe] = { \ |
||
47 | .present = 1, \ |
||
48 | .vtx = VFMT_ ## fmt, \ |
||
49 | .tex = TFMT_ ## fmt, \ |
||
50 | .rb = RB_ ## rbfmt, \ |
||
51 | .swap = swapfmt \ |
||
52 | } |
||
53 | |||
54 | /* texture-only */ |
||
55 | #define _T(pipe, fmt, rbfmt, swapfmt) \ |
||
56 | [PIPE_FORMAT_ ## pipe] = { \ |
||
57 | .present = 1, \ |
||
58 | .vtx = ~0, \ |
||
59 | .tex = TFMT_ ## fmt, \ |
||
60 | .rb = RB_ ## rbfmt, \ |
||
61 | .swap = swapfmt \ |
||
62 | } |
||
63 | |||
64 | /* vertex-only */ |
||
65 | #define V_(pipe, fmt, rbfmt, swapfmt) \ |
||
66 | [PIPE_FORMAT_ ## pipe] = { \ |
||
67 | .present = 1, \ |
||
68 | .vtx = VFMT_ ## fmt, \ |
||
69 | .tex = ~0, \ |
||
70 | .rb = RB_ ## rbfmt, \ |
||
71 | .swap = swapfmt \ |
||
72 | } |
||
73 | |||
74 | static struct fd3_format formats[PIPE_FORMAT_COUNT] = { |
||
75 | /* 8-bit */ |
||
76 | VT(R8_UNORM, 8_UNORM, R8_UNORM, WZYX), |
||
77 | VT(R8_SNORM, 8_SNORM, NONE, WZYX), |
||
78 | VT(R8_UINT, 8_UINT, R8_UINT, WZYX), |
||
79 | VT(R8_SINT, 8_SINT, R8_SINT, WZYX), |
||
80 | V_(R8_USCALED, 8_UINT, NONE, WZYX), |
||
81 | V_(R8_SSCALED, 8_UINT, NONE, WZYX), |
||
82 | |||
83 | _T(A8_UNORM, 8_UNORM, A8_UNORM, WZYX), |
||
84 | _T(L8_UNORM, 8_UNORM, R8_UNORM, WZYX), |
||
85 | _T(I8_UNORM, 8_UNORM, NONE, WZYX), |
||
86 | |||
87 | _T(A8_UINT, 8_UINT, NONE, WZYX), |
||
88 | _T(A8_SINT, 8_SINT, NONE, WZYX), |
||
89 | _T(L8_UINT, 8_UINT, NONE, WZYX), |
||
90 | _T(L8_SINT, 8_SINT, NONE, WZYX), |
||
91 | _T(I8_UINT, 8_UINT, NONE, WZYX), |
||
92 | _T(I8_SINT, 8_SINT, NONE, WZYX), |
||
93 | |||
94 | _T(S8_UINT, 8_UINT, R8_UNORM, WZYX), |
||
95 | |||
96 | /* 16-bit */ |
||
97 | VT(R16_UNORM, 16_UNORM, NONE, WZYX), |
||
98 | VT(R16_SNORM, 16_SNORM, NONE, WZYX), |
||
99 | VT(R16_UINT, 16_UINT, R16_UINT, WZYX), |
||
100 | VT(R16_SINT, 16_SINT, R16_SINT, WZYX), |
||
101 | V_(R16_USCALED, 16_UINT, NONE, WZYX), |
||
102 | V_(R16_SSCALED, 16_UINT, NONE, WZYX), |
||
103 | VT(R16_FLOAT, 16_FLOAT, R16_FLOAT,WZYX), |
||
104 | |||
105 | _T(A16_UINT, 16_UINT, NONE, WZYX), |
||
106 | _T(A16_SINT, 16_SINT, NONE, WZYX), |
||
107 | _T(L16_UINT, 16_UINT, NONE, WZYX), |
||
108 | _T(L16_SINT, 16_SINT, NONE, WZYX), |
||
109 | _T(I16_UINT, 16_UINT, NONE, WZYX), |
||
110 | _T(I16_SINT, 16_SINT, NONE, WZYX), |
||
111 | |||
112 | VT(R8G8_UNORM, 8_8_UNORM, R8G8_UNORM, WZYX), |
||
113 | VT(R8G8_SNORM, 8_8_SNORM, R8G8_SNORM, WZYX), |
||
114 | VT(R8G8_UINT, 8_8_UINT, NONE, WZYX), |
||
115 | VT(R8G8_SINT, 8_8_SINT, NONE, WZYX), |
||
116 | V_(R8G8_USCALED, 8_8_UINT, NONE, WZYX), |
||
117 | V_(R8G8_SSCALED, 8_8_SINT, NONE, WZYX), |
||
118 | |||
119 | _T(L8A8_UINT, 8_8_UINT, NONE, WZYX), |
||
120 | _T(L8A8_SINT, 8_8_SINT, NONE, WZYX), |
||
121 | |||
122 | _T(Z16_UNORM, Z16_UNORM, R8G8_UNORM, WZYX), |
||
123 | _T(B5G6R5_UNORM, 5_6_5_UNORM, R5G6B5_UNORM, WXYZ), |
||
124 | _T(B5G5R5A1_UNORM, 5_5_5_1_UNORM, R5G5B5A1_UNORM, WXYZ), |
||
125 | _T(B5G5R5X1_UNORM, 5_5_5_1_UNORM, R5G5B5A1_UNORM, WXYZ), |
||
126 | _T(B4G4R4A4_UNORM, 4_4_4_4_UNORM, R4G4B4A4_UNORM, WXYZ), |
||
127 | |||
128 | /* 24-bit */ |
||
129 | V_(R8G8B8_UNORM, 8_8_8_UNORM, NONE, WZYX), |
||
130 | V_(R8G8B8_SNORM, 8_8_8_SNORM, NONE, WZYX), |
||
131 | V_(R8G8B8_UINT, 8_8_8_UINT, NONE, WZYX), |
||
132 | V_(R8G8B8_SINT, 8_8_8_SINT, NONE, WZYX), |
||
133 | V_(R8G8B8_USCALED, 8_8_8_UINT, NONE, WZYX), |
||
134 | V_(R8G8B8_SSCALED, 8_8_8_SINT, NONE, WZYX), |
||
135 | |||
136 | /* 32-bit */ |
||
137 | VT(R32_UINT, 32_UINT, R32_UINT, WZYX), |
||
138 | VT(R32_SINT, 32_SINT, R32_SINT, WZYX), |
||
139 | V_(R32_USCALED, 32_UINT, NONE, WZYX), |
||
140 | V_(R32_SSCALED, 32_UINT, NONE, WZYX), |
||
141 | VT(R32_FLOAT, 32_FLOAT, R32_FLOAT,WZYX), |
||
142 | V_(R32_FIXED, 32_FIXED, NONE, WZYX), |
||
143 | |||
144 | _T(A32_UINT, 32_UINT, NONE, WZYX), |
||
145 | _T(A32_SINT, 32_SINT, NONE, WZYX), |
||
146 | _T(L32_UINT, 32_UINT, NONE, WZYX), |
||
147 | _T(L32_SINT, 32_SINT, NONE, WZYX), |
||
148 | _T(I32_UINT, 32_UINT, NONE, WZYX), |
||
149 | _T(I32_SINT, 32_SINT, NONE, WZYX), |
||
150 | |||
151 | VT(R16G16_UNORM, 16_16_UNORM, NONE, WZYX), |
||
152 | VT(R16G16_SNORM, 16_16_SNORM, NONE, WZYX), |
||
153 | VT(R16G16_UINT, 16_16_UINT, R16G16_UINT, WZYX), |
||
154 | VT(R16G16_SINT, 16_16_SINT, R16G16_SINT, WZYX), |
||
155 | V_(R16G16_USCALED, 16_16_UINT, NONE, WZYX), |
||
156 | V_(R16G16_SSCALED, 16_16_SINT, NONE, WZYX), |
||
157 | VT(R16G16_FLOAT, 16_16_FLOAT, R16G16_FLOAT,WZYX), |
||
158 | |||
159 | _T(L16A16_UINT, 16_16_UINT, NONE, WZYX), |
||
160 | _T(L16A16_SINT, 16_16_SINT, NONE, WZYX), |
||
161 | |||
162 | VT(R8G8B8A8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX), |
||
163 | _T(R8G8B8X8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX), |
||
164 | _T(R8G8B8A8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX), |
||
165 | _T(R8G8B8X8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX), |
||
166 | VT(R8G8B8A8_SNORM, 8_8_8_8_SNORM, R8G8B8A8_SNORM, WZYX), |
||
167 | VT(R8G8B8A8_UINT, 8_8_8_8_UINT, R8G8B8A8_UINT, WZYX), |
||
168 | VT(R8G8B8A8_SINT, 8_8_8_8_SINT, R8G8B8A8_SINT, WZYX), |
||
169 | V_(R8G8B8A8_USCALED, 8_8_8_8_UINT, NONE, WZYX), |
||
170 | V_(R8G8B8A8_SSCALED, 8_8_8_8_SINT, NONE, WZYX), |
||
171 | |||
172 | VT(B8G8R8A8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WXYZ), |
||
173 | _T(B8G8R8X8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WXYZ), |
||
174 | VT(B8G8R8A8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WXYZ), |
||
175 | _T(B8G8R8X8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WXYZ), |
||
176 | |||
177 | VT(A8B8G8R8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, XYZW), |
||
178 | _T(X8B8G8R8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, XYZW), |
||
179 | _T(A8B8G8R8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, XYZW), |
||
180 | _T(X8B8G8R8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, XYZW), |
||
181 | |||
182 | VT(A8R8G8B8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, ZYXW), |
||
183 | _T(X8R8G8B8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, ZYXW), |
||
184 | _T(A8R8G8B8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, ZYXW), |
||
185 | _T(X8R8G8B8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, ZYXW), |
||
186 | |||
187 | VT(R10G10B10A2_UNORM, 10_10_10_2_UNORM, R10G10B10A2_UNORM, WZYX), |
||
188 | VT(B10G10R10A2_UNORM, 10_10_10_2_UNORM, R10G10B10A2_UNORM, WXYZ), |
||
189 | _T(B10G10R10X2_UNORM, 10_10_10_2_UNORM, R10G10B10A2_UNORM, WXYZ), |
||
190 | V_(R10G10B10A2_SNORM, 10_10_10_2_SNORM, NONE, WZYX), |
||
191 | V_(R10G10B10A2_UINT, 10_10_10_2_UINT, NONE, WZYX), |
||
192 | V_(R10G10B10A2_USCALED, 10_10_10_2_UINT, NONE, WZYX), |
||
193 | V_(R10G10B10A2_SSCALED, 10_10_10_2_SINT, NONE, WZYX), |
||
194 | |||
195 | _T(R11G11B10_FLOAT, 11_11_10_FLOAT, R11G11B10_FLOAT, WZYX), |
||
196 | _T(R9G9B9E5_FLOAT, 9_9_9_E5_FLOAT, NONE, WZYX), |
||
197 | |||
198 | _T(Z24X8_UNORM, X8Z24_UNORM, R8G8B8A8_UNORM, WZYX), |
||
199 | _T(Z24_UNORM_S8_UINT, X8Z24_UNORM, R8G8B8A8_UNORM, WZYX), |
||
200 | _T(Z32_FLOAT, Z32_FLOAT, R8G8B8A8_UNORM, WZYX), |
||
201 | _T(Z32_FLOAT_S8X24_UINT, Z32_FLOAT,R8G8B8A8_UNORM, WZYX), |
||
202 | |||
203 | /* 48-bit */ |
||
204 | V_(R16G16B16_UNORM, 16_16_16_UNORM, NONE, WZYX), |
||
205 | V_(R16G16B16_SNORM, 16_16_16_SNORM, NONE, WZYX), |
||
206 | V_(R16G16B16_UINT, 16_16_16_UINT, NONE, WZYX), |
||
207 | V_(R16G16B16_SINT, 16_16_16_SINT, NONE, WZYX), |
||
208 | V_(R16G16B16_USCALED, 16_16_16_UINT, NONE, WZYX), |
||
209 | V_(R16G16B16_SSCALED, 16_16_16_SINT, NONE, WZYX), |
||
210 | V_(R16G16B16_FLOAT, 16_16_16_FLOAT, NONE, WZYX), |
||
211 | |||
212 | /* 64-bit */ |
||
213 | VT(R16G16B16A16_UNORM, 16_16_16_16_UNORM, NONE, WZYX), |
||
214 | VT(R16G16B16A16_SNORM, 16_16_16_16_SNORM, NONE, WZYX), |
||
215 | VT(R16G16B16A16_UINT, 16_16_16_16_UINT, R16G16B16A16_UINT, WZYX), |
||
216 | _T(R16G16B16X16_UINT, 16_16_16_16_UINT, R16G16B16A16_UINT, WZYX), |
||
217 | VT(R16G16B16A16_SINT, 16_16_16_16_SINT, R16G16B16A16_SINT, WZYX), |
||
218 | _T(R16G16B16X16_SINT, 16_16_16_16_SINT, R16G16B16A16_SINT, WZYX), |
||
219 | V_(R16G16B16A16_USCALED, 16_16_16_16_UINT, NONE, WZYX), |
||
220 | V_(R16G16B16A16_SSCALED, 16_16_16_16_SINT, NONE, WZYX), |
||
221 | VT(R16G16B16A16_FLOAT, 16_16_16_16_FLOAT, R16G16B16A16_FLOAT, WZYX), |
||
222 | _T(R16G16B16X16_FLOAT, 16_16_16_16_FLOAT, R16G16B16A16_FLOAT, WZYX), |
||
223 | |||
224 | VT(R32G32_UINT, 32_32_UINT, R32G32_UINT, WZYX), |
||
225 | VT(R32G32_SINT, 32_32_SINT, R32G32_SINT, WZYX), |
||
226 | V_(R32G32_USCALED, 32_32_UINT, NONE, WZYX), |
||
227 | V_(R32G32_SSCALED, 32_32_SINT, NONE, WZYX), |
||
228 | VT(R32G32_FLOAT, 32_32_FLOAT, R32G32_FLOAT,WZYX), |
||
229 | V_(R32G32_FIXED, 32_32_FIXED, NONE, WZYX), |
||
230 | |||
231 | _T(L32A32_UINT, 32_32_UINT, NONE, WZYX), |
||
232 | _T(L32A32_SINT, 32_32_SINT, NONE, WZYX), |
||
233 | |||
234 | /* 96-bit */ |
||
235 | V_(R32G32B32_UINT, 32_32_32_UINT, NONE, WZYX), |
||
236 | V_(R32G32B32_SINT, 32_32_32_SINT, NONE, WZYX), |
||
237 | V_(R32G32B32_USCALED, 32_32_32_UINT, NONE, WZYX), |
||
238 | V_(R32G32B32_SSCALED, 32_32_32_SINT, NONE, WZYX), |
||
239 | V_(R32G32B32_FLOAT, 32_32_32_FLOAT, NONE, WZYX), |
||
240 | V_(R32G32B32_FIXED, 32_32_32_FIXED, NONE, WZYX), |
||
241 | |||
242 | /* 128-bit */ |
||
243 | VT(R32G32B32A32_UINT, 32_32_32_32_UINT, R32G32B32A32_UINT, WZYX), |
||
244 | _T(R32G32B32X32_UINT, 32_32_32_32_UINT, R32G32B32A32_UINT, WZYX), |
||
245 | VT(R32G32B32A32_SINT, 32_32_32_32_SINT, R32G32B32A32_SINT, WZYX), |
||
246 | _T(R32G32B32X32_SINT, 32_32_32_32_SINT, R32G32B32A32_SINT, WZYX), |
||
247 | V_(R32G32B32A32_USCALED, 32_32_32_32_UINT, NONE, WZYX), |
||
248 | V_(R32G32B32A32_SSCALED, 32_32_32_32_SINT, NONE, WZYX), |
||
249 | VT(R32G32B32A32_FLOAT, 32_32_32_32_FLOAT, R32G32B32A32_FLOAT, WZYX), |
||
250 | _T(R32G32B32X32_FLOAT, 32_32_32_32_FLOAT, R32G32B32A32_FLOAT, WZYX), |
||
251 | V_(R32G32B32A32_FIXED, 32_32_32_32_FIXED, NONE, WZYX), |
||
252 | |||
253 | /* compressed */ |
||
254 | _T(ETC1_RGB8, ETC1, NONE, WZYX), |
||
255 | _T(ETC2_RGB8, ETC2_RGB8, NONE, WZYX), |
||
256 | _T(ETC2_SRGB8, ETC2_RGB8, NONE, WZYX), |
||
257 | _T(ETC2_RGB8A1, ETC2_RGB8A1, NONE, WZYX), |
||
258 | _T(ETC2_SRGB8A1, ETC2_RGB8A1, NONE, WZYX), |
||
259 | _T(ETC2_RGBA8, ETC2_RGBA8, NONE, WZYX), |
||
260 | _T(ETC2_SRGBA8, ETC2_RGBA8, NONE, WZYX), |
||
261 | _T(ETC2_R11_UNORM, ETC2_R11_UNORM, NONE, WZYX), |
||
262 | _T(ETC2_R11_SNORM, ETC2_R11_SNORM, NONE, WZYX), |
||
263 | _T(ETC2_RG11_UNORM, ETC2_RG11_UNORM, NONE, WZYX), |
||
264 | _T(ETC2_RG11_SNORM, ETC2_RG11_SNORM, NONE, WZYX), |
||
265 | }; |
||
266 | |||
267 | enum a3xx_vtx_fmt |
||
268 | fd3_pipe2vtx(enum pipe_format format) |
||
269 | { |
||
270 | if (!formats[format].present) |
||
271 | return ~0; |
||
272 | return formats[format].vtx; |
||
273 | } |
||
274 | |||
275 | enum a3xx_tex_fmt |
||
276 | fd3_pipe2tex(enum pipe_format format) |
||
277 | { |
||
278 | if (!formats[format].present) |
||
279 | return ~0; |
||
280 | return formats[format].tex; |
||
281 | } |
||
282 | |||
283 | enum a3xx_color_fmt |
||
284 | fd3_pipe2color(enum pipe_format format) |
||
285 | { |
||
286 | if (!formats[format].present) |
||
287 | return ~0; |
||
288 | return formats[format].rb; |
||
289 | } |
||
290 | |||
291 | enum a3xx_color_swap |
||
292 | fd3_pipe2swap(enum pipe_format format) |
||
293 | { |
||
294 | if (!formats[format].present) |
||
295 | return WZYX; |
||
296 | return formats[format].swap; |
||
297 | } |
||
298 | |||
299 | enum a3xx_tex_fetchsize |
||
300 | fd3_pipe2fetchsize(enum pipe_format format) |
||
301 | { |
||
302 | if (format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT) |
||
303 | format = PIPE_FORMAT_Z32_FLOAT; |
||
304 | switch (util_format_get_blocksizebits(format)) { |
||
305 | case 8: return TFETCH_1_BYTE; |
||
306 | case 16: return TFETCH_2_BYTE; |
||
307 | case 32: return TFETCH_4_BYTE; |
||
308 | case 64: return TFETCH_8_BYTE; |
||
309 | case 128: return TFETCH_16_BYTE; |
||
310 | default: |
||
311 | debug_printf("Unknown block size for format %s: %d\n", |
||
312 | util_format_name(format), |
||
313 | util_format_get_blocksizebits(format)); |
||
314 | return TFETCH_DISABLE; |
||
315 | } |
||
316 | } |
||
317 | |||
318 | /* we need to special case a bit the depth/stencil restore, because we are |
||
319 | * using the texture sampler to blit into the depth/stencil buffer, *not* |
||
320 | * into a color buffer. Otherwise fd3_tex_swiz() will do the wrong thing, |
||
321 | * as it is assuming that you are sampling into normal render target.. |
||
322 | */ |
||
323 | enum pipe_format |
||
324 | fd3_gmem_restore_format(enum pipe_format format) |
||
325 | { |
||
326 | switch (format) { |
||
327 | case PIPE_FORMAT_Z24X8_UNORM: |
||
328 | case PIPE_FORMAT_Z24_UNORM_S8_UINT: |
||
329 | return PIPE_FORMAT_R8G8B8A8_UNORM; |
||
330 | case PIPE_FORMAT_Z16_UNORM: |
||
331 | return PIPE_FORMAT_R8G8_UNORM; |
||
332 | case PIPE_FORMAT_S8_UINT: |
||
333 | return PIPE_FORMAT_R8_UNORM; |
||
334 | default: |
||
335 | return format; |
||
336 | } |
||
337 | } |
||
338 | |||
339 | enum a3xx_color_fmt |
||
340 | fd3_fs_output_format(enum pipe_format format) |
||
341 | { |
||
342 | if (util_format_is_srgb(format)) |
||
343 | return RB_R16G16B16A16_FLOAT; |
||
344 | switch (format) { |
||
345 | case PIPE_FORMAT_R16_FLOAT: |
||
346 | case PIPE_FORMAT_R16G16_FLOAT: |
||
347 | case PIPE_FORMAT_R11G11B10_FLOAT: |
||
348 | return RB_R16G16B16A16_FLOAT; |
||
349 | default: |
||
350 | return fd3_pipe2color(format); |
||
351 | } |
||
352 | } |
||
353 | |||
354 | static inline enum a3xx_tex_swiz |
||
355 | tex_swiz(unsigned swiz) |
||
356 | { |
||
357 | switch (swiz) { |
||
358 | default: |
||
359 | case PIPE_SWIZZLE_RED: return A3XX_TEX_X; |
||
360 | case PIPE_SWIZZLE_GREEN: return A3XX_TEX_Y; |
||
361 | case PIPE_SWIZZLE_BLUE: return A3XX_TEX_Z; |
||
362 | case PIPE_SWIZZLE_ALPHA: return A3XX_TEX_W; |
||
363 | case PIPE_SWIZZLE_ZERO: return A3XX_TEX_ZERO; |
||
364 | case PIPE_SWIZZLE_ONE: return A3XX_TEX_ONE; |
||
365 | } |
||
366 | } |
||
367 | |||
368 | uint32_t |
||
369 | fd3_tex_swiz(enum pipe_format format, unsigned swizzle_r, unsigned swizzle_g, |
||
370 | unsigned swizzle_b, unsigned swizzle_a) |
||
371 | { |
||
372 | const struct util_format_description *desc = |
||
373 | util_format_description(format); |
||
374 | unsigned char swiz[4] = { |
||
375 | swizzle_r, swizzle_g, swizzle_b, swizzle_a, |
||
376 | }, rswiz[4]; |
||
377 | |||
378 | util_format_compose_swizzles(desc->swizzle, swiz, rswiz); |
||
379 | |||
380 | return A3XX_TEX_CONST_0_SWIZ_X(tex_swiz(rswiz[0])) | |
||
381 | A3XX_TEX_CONST_0_SWIZ_Y(tex_swiz(rswiz[1])) | |
||
382 | A3XX_TEX_CONST_0_SWIZ_Z(tex_swiz(rswiz[2])) | |
||
383 | A3XX_TEX_CONST_0_SWIZ_W(tex_swiz(rswiz[3])); |
||
384 | } |