2 * Copyright (C) 2019 Collabora, Ltd.
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:
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
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
24 * Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
28 #include "panfrost-job.h"
29 #include "pan_texture.h"
33 #define _V PIPE_BIND_VERTEX_BUFFER
34 #define _T PIPE_BIND_SAMPLER_VIEW
35 #define _R PIPE_BIND_RENDER_TARGET
36 #define _Z PIPE_BIND_DEPTH_STENCIL
38 #define _VTR (_V | _T | _R)
41 struct panfrost_format panfrost_pipe_format_table
[PIPE_FORMAT_COUNT
] = {
42 [PIPE_FORMAT_ETC1_RGB8
] = { MALI_ETC2_RGB8
, _T
},
43 [PIPE_FORMAT_ETC2_RGB8
] = { MALI_ETC2_RGB8
, _T
},
44 [PIPE_FORMAT_ETC2_SRGB8
] = { MALI_ETC2_RGB8
, _T
},
45 [PIPE_FORMAT_ETC2_R11_UNORM
] = { MALI_ETC2_R11_UNORM
, _T
},
46 [PIPE_FORMAT_ETC2_RGBA8
] = { MALI_ETC2_RGBA8
, _T
},
47 [PIPE_FORMAT_ETC2_SRGBA8
] = { MALI_ETC2_RGBA8
, _T
},
48 [PIPE_FORMAT_ETC2_RG11_UNORM
] = { MALI_ETC2_RG11_UNORM
, _T
},
49 [PIPE_FORMAT_ETC2_R11_SNORM
] = { MALI_ETC2_R11_SNORM
, _T
},
50 [PIPE_FORMAT_ETC2_RG11_SNORM
] = { MALI_ETC2_RG11_SNORM
, _T
},
51 [PIPE_FORMAT_ETC2_RGB8A1
] = { MALI_ETC2_RGB8A1
, _T
},
52 [PIPE_FORMAT_ETC2_SRGB8A1
] = { MALI_ETC2_RGB8A1
, _T
},
54 [PIPE_FORMAT_ASTC_4x4
] = { MALI_ASTC_HDR_SUPP
, _T
},
55 [PIPE_FORMAT_ASTC_5x4
] = { MALI_ASTC_HDR_SUPP
, _T
},
56 [PIPE_FORMAT_ASTC_5x5
] = { MALI_ASTC_HDR_SUPP
, _T
},
57 [PIPE_FORMAT_ASTC_6x5
] = { MALI_ASTC_HDR_SUPP
, _T
},
58 [PIPE_FORMAT_ASTC_6x6
] = { MALI_ASTC_HDR_SUPP
, _T
},
59 [PIPE_FORMAT_ASTC_8x5
] = { MALI_ASTC_HDR_SUPP
, _T
},
60 [PIPE_FORMAT_ASTC_8x6
] = { MALI_ASTC_HDR_SUPP
, _T
},
61 [PIPE_FORMAT_ASTC_8x8
] = { MALI_ASTC_HDR_SUPP
, _T
},
62 [PIPE_FORMAT_ASTC_10x5
] = { MALI_ASTC_HDR_SUPP
, _T
},
63 [PIPE_FORMAT_ASTC_10x6
] = { MALI_ASTC_HDR_SUPP
, _T
},
64 [PIPE_FORMAT_ASTC_10x8
] = { MALI_ASTC_HDR_SUPP
, _T
},
65 [PIPE_FORMAT_ASTC_10x10
] = { MALI_ASTC_HDR_SUPP
, _T
},
66 [PIPE_FORMAT_ASTC_12x10
] = { MALI_ASTC_HDR_SUPP
, _T
},
67 [PIPE_FORMAT_ASTC_12x12
] = { MALI_ASTC_HDR_SUPP
, _T
},
69 [PIPE_FORMAT_ASTC_4x4_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
70 [PIPE_FORMAT_ASTC_5x4_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
71 [PIPE_FORMAT_ASTC_5x5_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
72 [PIPE_FORMAT_ASTC_6x5_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
73 [PIPE_FORMAT_ASTC_6x6_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
74 [PIPE_FORMAT_ASTC_8x5_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
75 [PIPE_FORMAT_ASTC_8x6_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
76 [PIPE_FORMAT_ASTC_8x8_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
77 [PIPE_FORMAT_ASTC_10x5_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
78 [PIPE_FORMAT_ASTC_10x6_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
79 [PIPE_FORMAT_ASTC_10x8_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
80 [PIPE_FORMAT_ASTC_10x10_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
81 [PIPE_FORMAT_ASTC_12x10_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
82 [PIPE_FORMAT_ASTC_12x12_SRGB
] = { MALI_ASTC_SRGB_SUPP
, _T
},
83 [PIPE_FORMAT_B5G6R5_UNORM
] = { MALI_RGB565
, _VTR
},
84 [PIPE_FORMAT_B5G5R5X1_UNORM
] = { MALI_RGB5_X1_UNORM
, _VT
},
85 [PIPE_FORMAT_R5G5B5A1_UNORM
] = { MALI_RGB5_A1_UNORM
, _VTR
},
87 [PIPE_FORMAT_R10G10B10X2_UNORM
] = { MALI_RGB10_A2_UNORM
, _VTR
},
88 [PIPE_FORMAT_B10G10R10X2_UNORM
] = { MALI_RGB10_A2_UNORM
, _VTR
},
89 [PIPE_FORMAT_R10G10B10A2_UNORM
] = { MALI_RGB10_A2_UNORM
, _VTR
},
90 [PIPE_FORMAT_B10G10R10A2_UNORM
] = { MALI_RGB10_A2_UNORM
, _VTR
},
91 [PIPE_FORMAT_R10G10B10X2_SNORM
] = { MALI_RGB10_A2_SNORM
, _VT
},
92 [PIPE_FORMAT_R10G10B10A2_SNORM
] = { MALI_RGB10_A2_SNORM
, _VT
},
93 [PIPE_FORMAT_B10G10R10A2_SNORM
] = { MALI_RGB10_A2_SNORM
, _VT
},
94 [PIPE_FORMAT_R10G10B10A2_UINT
] = { MALI_RGB10_A2UI
, _VTR
},
95 [PIPE_FORMAT_B10G10R10A2_UINT
] = { MALI_RGB10_A2UI
, _VTR
},
96 [PIPE_FORMAT_R10G10B10A2_USCALED
] = { MALI_RGB10_A2UI
, _VTR
},
97 [PIPE_FORMAT_B10G10R10A2_USCALED
] = { MALI_RGB10_A2UI
, _VTR
},
98 [PIPE_FORMAT_R10G10B10A2_SINT
] = { MALI_RGB10_A2I
, _VTR
},
99 [PIPE_FORMAT_B10G10R10A2_SINT
] = { MALI_RGB10_A2I
, _VTR
},
100 [PIPE_FORMAT_R10G10B10A2_SSCALED
] = { MALI_RGB10_A2I
, _VTR
},
101 [PIPE_FORMAT_B10G10R10A2_SSCALED
] = { MALI_RGB10_A2I
, _VTR
},
103 [PIPE_FORMAT_R8_SSCALED
] = { MALI_R8I
, _V
},
104 [PIPE_FORMAT_R8G8_SSCALED
] = { MALI_RG8I
, _V
},
105 [PIPE_FORMAT_R8G8B8_SSCALED
] = { MALI_RGB8I
, _V
},
106 [PIPE_FORMAT_B8G8R8_SSCALED
] = { MALI_RGB8I
, _V
},
107 [PIPE_FORMAT_R8G8B8A8_SSCALED
] = { MALI_RGBA8I
, _V
},
108 [PIPE_FORMAT_B8G8R8A8_SSCALED
] = { MALI_RGBA8I
, _V
},
109 [PIPE_FORMAT_A8B8G8R8_SSCALED
] = { MALI_RGBA8I
, _V
},
111 [PIPE_FORMAT_R3G3B2_UNORM
] = { MALI_RGB332_UNORM
, _VT
},
113 [PIPE_FORMAT_Z24_UNORM_S8_UINT
] = { MALI_Z32_UNORM
, _TZ
},
114 [PIPE_FORMAT_Z24X8_UNORM
] = { MALI_Z32_UNORM
, _TZ
},
115 [PIPE_FORMAT_Z32_UNORM
] = { MALI_Z32_UNORM
, _TZ
},
116 [PIPE_FORMAT_Z32_FLOAT
] = { MALI_R32F
, _TZ
},
117 [PIPE_FORMAT_Z32_FLOAT_S8X24_UINT
] = { MALI_R32F
, _TZ
},
119 [PIPE_FORMAT_R32_FIXED
] = { MALI_R32_FIXED
, _V
},
120 [PIPE_FORMAT_R32G32_FIXED
] = { MALI_RG32_FIXED
, _V
},
121 [PIPE_FORMAT_R32G32B32_FIXED
] = { MALI_RGB32_FIXED
, _V
},
122 [PIPE_FORMAT_R32G32B32A32_FIXED
] = { MALI_RGBA32_FIXED
, _V
},
124 [PIPE_FORMAT_R11G11B10_FLOAT
] = { MALI_R11F_G11F_B10F
, _VTR
},
125 [PIPE_FORMAT_R9G9B9E5_FLOAT
] = { MALI_R9F_G9F_B9F_E5F
, _VT
},
127 [PIPE_FORMAT_R8_SNORM
] = { MALI_R8_SNORM
, _VT
},
128 [PIPE_FORMAT_R16_SNORM
] = { MALI_R16_SNORM
, _VT
},
129 [PIPE_FORMAT_R32_SNORM
] = { MALI_R32_SNORM
, _VT
},
130 [PIPE_FORMAT_R8G8_SNORM
] = { MALI_RG8_SNORM
, _VT
},
131 [PIPE_FORMAT_R16G16_SNORM
] = { MALI_RG16_SNORM
, _VT
},
132 [PIPE_FORMAT_R32G32_SNORM
] = { MALI_RG32_SNORM
, _VT
},
133 [PIPE_FORMAT_R8G8B8_SNORM
] = { MALI_RGB8_SNORM
, _VT
},
134 [PIPE_FORMAT_R16G16B16_SNORM
] = { MALI_RGB16_SNORM
, _VT
},
135 [PIPE_FORMAT_R32G32B32_SNORM
] = { MALI_RGB32_SNORM
, _VT
},
136 [PIPE_FORMAT_R8G8B8A8_SNORM
] = { MALI_RGBA8_SNORM
, _VT
},
137 [PIPE_FORMAT_R16G16B16A16_SNORM
] = { MALI_RGBA16_SNORM
, _VT
},
138 [PIPE_FORMAT_R32G32B32A32_SNORM
] = { MALI_RGBA32_SNORM
, _VT
},
140 [PIPE_FORMAT_A8_SINT
] = { MALI_R8I
, _VTR
},
141 [PIPE_FORMAT_I8_SINT
] = { MALI_R8I
, _VTR
},
142 [PIPE_FORMAT_L8_SINT
] = { MALI_R8I
, _VTR
},
143 [PIPE_FORMAT_L8A8_SINT
] = { MALI_RG8I
, _VTR
},
144 [PIPE_FORMAT_A8_UINT
] = { MALI_R8UI
, _VTR
},
145 [PIPE_FORMAT_I8_UINT
] = { MALI_R8UI
, _VTR
},
146 [PIPE_FORMAT_L8_UINT
] = { MALI_R8UI
, _VTR
},
147 [PIPE_FORMAT_L8A8_UINT
] = { MALI_RG8UI
, _VTR
},
149 [PIPE_FORMAT_A16_SINT
] = { MALI_R16I
, _VTR
},
150 [PIPE_FORMAT_I16_SINT
] = { MALI_R16I
, _VTR
},
151 [PIPE_FORMAT_L16_SINT
] = { MALI_R16I
, _VTR
},
152 [PIPE_FORMAT_L16A16_SINT
] = { MALI_RG16I
, _VTR
},
153 [PIPE_FORMAT_A16_UINT
] = { MALI_R16UI
, _VTR
},
154 [PIPE_FORMAT_I16_UINT
] = { MALI_R16UI
, _VTR
},
155 [PIPE_FORMAT_L16_UINT
] = { MALI_R16UI
, _VTR
},
156 [PIPE_FORMAT_L16A16_UINT
] = { MALI_RG16UI
, _VTR
},
158 [PIPE_FORMAT_A32_SINT
] = { MALI_R32I
, _VTR
},
159 [PIPE_FORMAT_I32_SINT
] = { MALI_R32I
, _VTR
},
160 [PIPE_FORMAT_L32_SINT
] = { MALI_R32I
, _VTR
},
161 [PIPE_FORMAT_L32A32_SINT
] = { MALI_RG32I
, _VTR
},
162 [PIPE_FORMAT_A32_UINT
] = { MALI_R32UI
, _VTR
},
163 [PIPE_FORMAT_I32_UINT
] = { MALI_R32UI
, _VTR
},
164 [PIPE_FORMAT_L32_UINT
] = { MALI_R32UI
, _VTR
},
165 [PIPE_FORMAT_L32A32_UINT
] = { MALI_RG32UI
, _VTR
},
167 [PIPE_FORMAT_B8G8R8_UINT
] = { MALI_RGB8UI
, _VTR
},
168 [PIPE_FORMAT_B8G8R8A8_UINT
] = { MALI_RGBA8UI
, _VTR
},
169 [PIPE_FORMAT_B8G8R8_SINT
] = { MALI_RGB8I
, _VTR
},
170 [PIPE_FORMAT_B8G8R8A8_SINT
] = { MALI_RGBA8I
, _VTR
},
171 [PIPE_FORMAT_A8R8G8B8_UINT
] = { MALI_RGBA8UI
, _VTR
},
172 [PIPE_FORMAT_A8B8G8R8_UINT
] = { MALI_RGBA8UI
, _VTR
},
174 [PIPE_FORMAT_R8_UINT
] = { MALI_R8UI
, _VTR
},
175 [PIPE_FORMAT_R16_UINT
] = { MALI_R16UI
, _VTR
},
176 [PIPE_FORMAT_R32_UINT
] = { MALI_R32UI
, _VTR
},
177 [PIPE_FORMAT_R8G8_UINT
] = { MALI_RG8UI
, _VTR
},
178 [PIPE_FORMAT_R16G16_UINT
] = { MALI_RG16UI
, _VTR
},
179 [PIPE_FORMAT_R32G32_UINT
] = { MALI_RG32UI
, _VTR
},
180 [PIPE_FORMAT_R8G8B8_UINT
] = { MALI_RGB8UI
, _VTR
},
181 [PIPE_FORMAT_R16G16B16_UINT
] = { MALI_RGB16UI
, _VTR
},
182 [PIPE_FORMAT_R32G32B32_UINT
] = { MALI_RGB32UI
, _VTR
},
183 [PIPE_FORMAT_R8G8B8A8_UINT
] = { MALI_RGBA8UI
, _VTR
},
184 [PIPE_FORMAT_R16G16B16A16_UINT
] = { MALI_RGBA16UI
, _VTR
},
185 [PIPE_FORMAT_R32G32B32A32_UINT
] = { MALI_RGBA32UI
, _VTR
},
187 [PIPE_FORMAT_R32_FLOAT
] = { MALI_R32F
, _VTR
},
188 [PIPE_FORMAT_R32G32_FLOAT
] = { MALI_RG32F
, _VTR
},
189 [PIPE_FORMAT_R32G32B32_FLOAT
] = { MALI_RGB32F
, _VTR
},
190 [PIPE_FORMAT_R32G32B32A32_FLOAT
] = { MALI_RGBA32F
, _VTR
},
192 [PIPE_FORMAT_R8_UNORM
] = { MALI_R8_UNORM
, _VTR
},
193 [PIPE_FORMAT_R16_UNORM
] = { MALI_R16_UNORM
, _VTR
},
194 [PIPE_FORMAT_R32_UNORM
] = { MALI_R32_UNORM
, _VTR
},
195 [PIPE_FORMAT_R8G8_UNORM
] = { MALI_RG8_UNORM
, _VTR
},
196 [PIPE_FORMAT_R16G16_UNORM
] = { MALI_RG16_UNORM
, _VTR
},
197 [PIPE_FORMAT_R32G32_UNORM
] = { MALI_RG32_UNORM
, _VTR
},
198 [PIPE_FORMAT_R8G8B8_UNORM
] = { MALI_RGB8_UNORM
, _VTR
},
199 [PIPE_FORMAT_R16G16B16_UNORM
] = { MALI_RGB16_UNORM
, _VTR
},
200 [PIPE_FORMAT_R32G32B32_UNORM
] = { MALI_RGB32_UNORM
, _VTR
},
201 [PIPE_FORMAT_R4G4B4A4_UNORM
] = { MALI_RGBA4_UNORM
, _VTR
},
202 [PIPE_FORMAT_R16G16B16A16_UNORM
] = { MALI_RGBA16_UNORM
, _VTR
},
203 [PIPE_FORMAT_R32G32B32A32_UNORM
] = { MALI_RGBA32_UNORM
, _VTR
},
205 [PIPE_FORMAT_B8G8R8A8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
206 [PIPE_FORMAT_B8G8R8X8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
207 [PIPE_FORMAT_A8R8G8B8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
208 [PIPE_FORMAT_X8R8G8B8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
209 [PIPE_FORMAT_A8B8G8R8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
210 [PIPE_FORMAT_X8B8G8R8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
211 [PIPE_FORMAT_R8G8B8X8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
212 [PIPE_FORMAT_R8G8B8A8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
214 [PIPE_FORMAT_R8G8B8X8_SNORM
] = { MALI_RGBA8_SNORM
, _VT
},
215 [PIPE_FORMAT_R8G8B8X8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
216 [PIPE_FORMAT_R8G8B8X8_UINT
] = { MALI_RGBA8UI
, _VTR
},
217 [PIPE_FORMAT_R8G8B8X8_SINT
] = { MALI_RGBA8I
, _VTR
},
219 [PIPE_FORMAT_L8_UNORM
] = { MALI_R8_UNORM
, _VTR
},
220 [PIPE_FORMAT_A8_UNORM
] = { MALI_R8_UNORM
, _VTR
},
221 [PIPE_FORMAT_I8_UNORM
] = { MALI_R8_UNORM
, _VTR
},
222 [PIPE_FORMAT_L8A8_UNORM
] = { MALI_RG8_UNORM
, _VTR
},
223 [PIPE_FORMAT_L16_UNORM
] = { MALI_R16_UNORM
, _VTR
},
224 [PIPE_FORMAT_A16_UNORM
] = { MALI_R16_UNORM
, _VTR
},
225 [PIPE_FORMAT_I16_UNORM
] = { MALI_R16_UNORM
, _VTR
},
226 [PIPE_FORMAT_L16A16_UNORM
] = { MALI_RG16_UNORM
, _VTR
},
228 [PIPE_FORMAT_L8_SNORM
] = { MALI_R8_SNORM
, _VT
},
229 [PIPE_FORMAT_A8_SNORM
] = { MALI_R8_SNORM
, _VT
},
230 [PIPE_FORMAT_I8_SNORM
] = { MALI_R8_SNORM
, _VT
},
231 [PIPE_FORMAT_L8A8_SNORM
] = { MALI_RG8_SNORM
, _VT
},
232 [PIPE_FORMAT_L16_SNORM
] = { MALI_R16_SNORM
, _VT
},
233 [PIPE_FORMAT_A16_SNORM
] = { MALI_R16_SNORM
, _VT
},
234 [PIPE_FORMAT_I16_SNORM
] = { MALI_R16_SNORM
, _VT
},
235 [PIPE_FORMAT_L16A16_SNORM
] = { MALI_RG16_SNORM
, _VT
},
237 [PIPE_FORMAT_L16_FLOAT
] = { MALI_R16F
, _VTR
},
238 [PIPE_FORMAT_A16_FLOAT
] = { MALI_R16F
, _VTR
},
239 [PIPE_FORMAT_I16_FLOAT
] = { MALI_RG16F
, _VTR
},
240 [PIPE_FORMAT_L16A16_FLOAT
] = { MALI_RG16F
, _VTR
},
242 [PIPE_FORMAT_L8_SRGB
] = { MALI_R8_UNORM
, _VTR
},
243 [PIPE_FORMAT_R8_SRGB
] = { MALI_R8_UNORM
, _VTR
},
244 [PIPE_FORMAT_L8A8_SRGB
] = { MALI_RG8_UNORM
, _VTR
},
245 [PIPE_FORMAT_R8G8_SRGB
] = { MALI_RG8_UNORM
, _VTR
},
246 [PIPE_FORMAT_R8G8B8_SRGB
] = { MALI_RGB8_UNORM
, _VTR
},
247 [PIPE_FORMAT_B8G8R8_SRGB
] = { MALI_RGB8_UNORM
, _VTR
},
248 [PIPE_FORMAT_R8G8B8A8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
249 [PIPE_FORMAT_A8B8G8R8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
250 [PIPE_FORMAT_X8B8G8R8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
251 [PIPE_FORMAT_B8G8R8A8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
252 [PIPE_FORMAT_B8G8R8X8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
253 [PIPE_FORMAT_A8R8G8B8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
254 [PIPE_FORMAT_X8R8G8B8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
256 [PIPE_FORMAT_R8_SINT
] = { MALI_R8I
, _VTR
},
257 [PIPE_FORMAT_R16_SINT
] = { MALI_R16I
, _VTR
},
258 [PIPE_FORMAT_R32_SINT
] = { MALI_R32I
, _VTR
},
259 [PIPE_FORMAT_R16_FLOAT
] = { MALI_R16F
, _VTR
},
260 [PIPE_FORMAT_R8G8_SINT
] = { MALI_RG8I
, _VTR
},
261 [PIPE_FORMAT_R16G16_SINT
] = { MALI_RG16I
, _VTR
},
262 [PIPE_FORMAT_R32G32_SINT
] = { MALI_RG32I
, _VTR
},
263 [PIPE_FORMAT_R16G16_FLOAT
] = { MALI_RG16F
, _VTR
},
264 [PIPE_FORMAT_R8G8B8_SINT
] = { MALI_RGB8I
, _VTR
},
265 [PIPE_FORMAT_R16G16B16_SINT
] = { MALI_RGB16I
, _VTR
},
266 [PIPE_FORMAT_R32G32B32_SINT
] = { MALI_RGB32I
, _VTR
},
267 [PIPE_FORMAT_R16G16B16_FLOAT
] = { MALI_RGB16F
, _VTR
},
268 [PIPE_FORMAT_R8G8B8A8_SINT
] = { MALI_RGBA8I
, _VTR
},
269 [PIPE_FORMAT_R16G16B16A16_SINT
] = { MALI_RGBA16I
, _VTR
},
270 [PIPE_FORMAT_R32G32B32A32_SINT
] = { MALI_RGBA32I
, _VTR
},
271 [PIPE_FORMAT_R16G16B16A16_FLOAT
] = { MALI_RGBA16F
, _VTR
},
273 [PIPE_FORMAT_R16G16B16X16_UNORM
] = { MALI_RGBA16_UNORM
, _VTR
},
274 [PIPE_FORMAT_R16G16B16X16_SNORM
] = { MALI_RGBA16_SNORM
, _VT
},
275 [PIPE_FORMAT_R16G16B16X16_FLOAT
] = { MALI_RGBA16F
, _VTR
},
276 [PIPE_FORMAT_R16G16B16X16_UINT
] = { MALI_RGBA16UI
, _VTR
},
277 [PIPE_FORMAT_R16G16B16X16_SINT
] = { MALI_RGBA16I
, _VTR
},
279 [PIPE_FORMAT_R32G32B32X32_FLOAT
] = { MALI_RGBA32F
, _VTR
},
280 [PIPE_FORMAT_R32G32B32X32_UINT
] = { MALI_RGBA32UI
, _VTR
},
281 [PIPE_FORMAT_R32G32B32X32_SINT
] = { MALI_RGBA32I
, _VTR
},
290 /* Is a format encoded like Z24S8 and therefore compatible for render? */
293 panfrost_is_z24s8_variant(enum pipe_format fmt
)
296 case PIPE_FORMAT_Z24_UNORM_S8_UINT
:
297 case PIPE_FORMAT_Z24X8_UNORM
:
304 /* Translate a PIPE swizzle quad to a 12-bit Mali swizzle code. PIPE
305 * swizzles line up with Mali swizzles for the XYZW01, but PIPE swizzles have
306 * an additional "NONE" field that we have to mask out to zero. Additionally,
307 * PIPE swizzles are sparse but Mali swizzles are packed */
310 panfrost_translate_swizzle_4(const unsigned char swizzle
[4])
314 for (unsigned i
= 0; i
< 4; ++i
) {
315 unsigned translated
= (swizzle
[i
] > PIPE_SWIZZLE_1
) ? PIPE_SWIZZLE_0
: swizzle
[i
];
316 out
|= (translated
<< (3*i
));
323 panfrost_invert_swizzle(const unsigned char *in
, unsigned char *out
)
325 /* First, default to all zeroes to prevent uninitialized junk */
327 for (unsigned c
= 0; c
< 4; ++c
)
328 out
[c
] = PIPE_SWIZZLE_0
;
330 /* Now "do" what the swizzle says */
332 for (unsigned c
= 0; c
< 4; ++c
) {
333 unsigned char i
= in
[c
];
336 assert(PIPE_SWIZZLE_X
== 0);
337 if (i
> PIPE_SWIZZLE_W
)
341 unsigned idx
= i
- PIPE_SWIZZLE_X
;
342 out
[idx
] = PIPE_SWIZZLE_X
+ c
;
347 panfrost_format_to_bifrost_blend(const struct util_format_description
*desc
)
349 enum mali_format format
= panfrost_pipe_format_table
[desc
->format
].hw
;
353 case MALI_RGBA4_UNORM
:
355 case MALI_RGBA8_UNORM
:
356 case MALI_RGB8_UNORM
:
358 case MALI_RGB10_A2_UNORM
:
359 return MALI_RGB10_A2_2
;