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_DXT1_RGB
] = { MALI_BC1_UNORM
, _T
},
55 [PIPE_FORMAT_DXT1_RGBA
] = { MALI_BC1_UNORM
, _T
},
56 [PIPE_FORMAT_DXT1_SRGB
] = { MALI_BC1_UNORM
, _T
},
57 [PIPE_FORMAT_DXT1_SRGBA
] = { MALI_BC1_UNORM
, _T
},
58 [PIPE_FORMAT_DXT3_RGBA
] = { MALI_BC2_UNORM
, _T
},
59 [PIPE_FORMAT_DXT3_SRGBA
] = { MALI_BC2_UNORM
, _T
},
60 [PIPE_FORMAT_DXT5_RGBA
] = { MALI_BC3_UNORM
, _T
},
61 [PIPE_FORMAT_DXT5_SRGBA
] = { MALI_BC3_UNORM
, _T
},
63 [PIPE_FORMAT_RGTC1_UNORM
] = { MALI_BC4_UNORM
, _T
},
64 [PIPE_FORMAT_RGTC1_SNORM
] = { MALI_BC4_SNORM
, _T
},
65 [PIPE_FORMAT_RGTC2_UNORM
] = { MALI_BC5_UNORM
, _T
},
66 [PIPE_FORMAT_RGTC2_SNORM
] = { MALI_BC5_SNORM
, _T
},
68 [PIPE_FORMAT_BPTC_RGB_FLOAT
] = { MALI_BC6H_SF16
, _T
},
69 [PIPE_FORMAT_BPTC_RGB_UFLOAT
] = { MALI_BC6H_UF16
, _T
},
70 [PIPE_FORMAT_BPTC_RGBA_UNORM
] = { MALI_BC7_UNORM
, _T
},
71 [PIPE_FORMAT_BPTC_SRGBA
] = { MALI_BC7_UNORM
, _T
},
73 [PIPE_FORMAT_ASTC_4x4
] = { MALI_ASTC_2D_HDR
, _T
},
74 [PIPE_FORMAT_ASTC_5x4
] = { MALI_ASTC_2D_HDR
, _T
},
75 [PIPE_FORMAT_ASTC_5x5
] = { MALI_ASTC_2D_HDR
, _T
},
76 [PIPE_FORMAT_ASTC_6x5
] = { MALI_ASTC_2D_HDR
, _T
},
77 [PIPE_FORMAT_ASTC_6x6
] = { MALI_ASTC_2D_HDR
, _T
},
78 [PIPE_FORMAT_ASTC_8x5
] = { MALI_ASTC_2D_HDR
, _T
},
79 [PIPE_FORMAT_ASTC_8x6
] = { MALI_ASTC_2D_HDR
, _T
},
80 [PIPE_FORMAT_ASTC_8x8
] = { MALI_ASTC_2D_HDR
, _T
},
81 [PIPE_FORMAT_ASTC_10x5
] = { MALI_ASTC_2D_HDR
, _T
},
82 [PIPE_FORMAT_ASTC_10x6
] = { MALI_ASTC_2D_HDR
, _T
},
83 [PIPE_FORMAT_ASTC_10x8
] = { MALI_ASTC_2D_HDR
, _T
},
84 [PIPE_FORMAT_ASTC_10x10
] = { MALI_ASTC_2D_HDR
, _T
},
85 [PIPE_FORMAT_ASTC_12x10
] = { MALI_ASTC_2D_HDR
, _T
},
86 [PIPE_FORMAT_ASTC_12x12
] = { MALI_ASTC_2D_HDR
, _T
},
88 [PIPE_FORMAT_ASTC_4x4_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
89 [PIPE_FORMAT_ASTC_5x4_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
90 [PIPE_FORMAT_ASTC_5x5_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
91 [PIPE_FORMAT_ASTC_6x5_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
92 [PIPE_FORMAT_ASTC_6x6_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
93 [PIPE_FORMAT_ASTC_8x5_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
94 [PIPE_FORMAT_ASTC_8x6_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
95 [PIPE_FORMAT_ASTC_8x8_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
96 [PIPE_FORMAT_ASTC_10x5_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
97 [PIPE_FORMAT_ASTC_10x6_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
98 [PIPE_FORMAT_ASTC_10x8_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
99 [PIPE_FORMAT_ASTC_10x10_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
100 [PIPE_FORMAT_ASTC_12x10_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
101 [PIPE_FORMAT_ASTC_12x12_SRGB
] = { MALI_ASTC_2D_LDR
, _T
},
102 [PIPE_FORMAT_B5G6R5_UNORM
] = { MALI_RGB565
, _VTR
},
103 [PIPE_FORMAT_B5G5R5X1_UNORM
] = { MALI_RGB5_X1_UNORM
, _VT
},
104 [PIPE_FORMAT_R5G5B5A1_UNORM
] = { MALI_RGB5_A1_UNORM
, _VTR
},
106 [PIPE_FORMAT_R10G10B10X2_UNORM
] = { MALI_RGB10_A2_UNORM
, _VTR
},
107 [PIPE_FORMAT_B10G10R10X2_UNORM
] = { MALI_RGB10_A2_UNORM
, _VTR
},
108 [PIPE_FORMAT_R10G10B10A2_UNORM
] = { MALI_RGB10_A2_UNORM
, _VTR
},
109 [PIPE_FORMAT_B10G10R10A2_UNORM
] = { MALI_RGB10_A2_UNORM
, _VTR
},
110 [PIPE_FORMAT_R10G10B10X2_SNORM
] = { MALI_RGB10_A2_SNORM
, _VT
},
111 [PIPE_FORMAT_R10G10B10A2_SNORM
] = { MALI_RGB10_A2_SNORM
, _VT
},
112 [PIPE_FORMAT_B10G10R10A2_SNORM
] = { MALI_RGB10_A2_SNORM
, _VT
},
113 [PIPE_FORMAT_R10G10B10A2_UINT
] = { MALI_RGB10_A2UI
, _VTR
},
114 [PIPE_FORMAT_B10G10R10A2_UINT
] = { MALI_RGB10_A2UI
, _VTR
},
115 [PIPE_FORMAT_R10G10B10A2_USCALED
] = { MALI_RGB10_A2UI
, _VTR
},
116 [PIPE_FORMAT_B10G10R10A2_USCALED
] = { MALI_RGB10_A2UI
, _VTR
},
117 [PIPE_FORMAT_R10G10B10A2_SINT
] = { MALI_RGB10_A2I
, _VTR
},
118 [PIPE_FORMAT_B10G10R10A2_SINT
] = { MALI_RGB10_A2I
, _VTR
},
119 [PIPE_FORMAT_R10G10B10A2_SSCALED
] = { MALI_RGB10_A2I
, _VTR
},
120 [PIPE_FORMAT_B10G10R10A2_SSCALED
] = { MALI_RGB10_A2I
, _VTR
},
122 [PIPE_FORMAT_R8_SSCALED
] = { MALI_R8I
, _V
},
123 [PIPE_FORMAT_R8G8_SSCALED
] = { MALI_RG8I
, _V
},
124 [PIPE_FORMAT_R8G8B8_SSCALED
] = { MALI_RGB8I
, _V
},
125 [PIPE_FORMAT_B8G8R8_SSCALED
] = { MALI_RGB8I
, _V
},
126 [PIPE_FORMAT_R8G8B8A8_SSCALED
] = { MALI_RGBA8I
, _V
},
127 [PIPE_FORMAT_B8G8R8A8_SSCALED
] = { MALI_RGBA8I
, _V
},
128 [PIPE_FORMAT_A8B8G8R8_SSCALED
] = { MALI_RGBA8I
, _V
},
130 [PIPE_FORMAT_R8_USCALED
] = { MALI_R8UI
, _V
},
131 [PIPE_FORMAT_R8G8_USCALED
] = { MALI_RG8UI
, _V
},
132 [PIPE_FORMAT_R8G8B8_USCALED
] = { MALI_RGB8UI
, _V
},
133 [PIPE_FORMAT_B8G8R8_USCALED
] = { MALI_RGB8UI
, _V
},
134 [PIPE_FORMAT_R8G8B8A8_USCALED
] = { MALI_RGBA8UI
, _V
},
135 [PIPE_FORMAT_B8G8R8A8_USCALED
] = { MALI_RGBA8UI
, _V
},
136 [PIPE_FORMAT_A8B8G8R8_USCALED
] = { MALI_RGBA8UI
, _V
},
138 [PIPE_FORMAT_R16_USCALED
] = { MALI_R16UI
, _V
},
139 [PIPE_FORMAT_R16G16_USCALED
] = { MALI_RG16UI
, _V
},
140 [PIPE_FORMAT_R16G16B16_USCALED
] = { MALI_RGB16UI
, _V
},
141 [PIPE_FORMAT_R16G16B16A16_USCALED
] = { MALI_RGBA16UI
, _V
},
142 [PIPE_FORMAT_R16_SSCALED
] = { MALI_R16I
, _V
},
143 [PIPE_FORMAT_R16G16_SSCALED
] = { MALI_RG16I
, _V
},
144 [PIPE_FORMAT_R16G16B16_SSCALED
] = { MALI_RGB16I
, _V
},
145 [PIPE_FORMAT_R16G16B16A16_SSCALED
] = { MALI_RGBA16I
, _V
},
147 [PIPE_FORMAT_R32_USCALED
] = { MALI_R32UI
, _V
},
148 [PIPE_FORMAT_R32G32_USCALED
] = { MALI_RG32UI
, _V
},
149 [PIPE_FORMAT_R32G32B32_USCALED
] = { MALI_RGB32UI
, _V
},
150 [PIPE_FORMAT_R32G32B32A32_USCALED
] = { MALI_RGBA32UI
, _V
},
151 [PIPE_FORMAT_R32_SSCALED
] = { MALI_R32I
, _V
},
152 [PIPE_FORMAT_R32G32_SSCALED
] = { MALI_RG32I
, _V
},
153 [PIPE_FORMAT_R32G32B32_SSCALED
] = { MALI_RGB32I
, _V
},
154 [PIPE_FORMAT_R32G32B32A32_SSCALED
] = { MALI_RGBA32I
, _V
},
156 [PIPE_FORMAT_R3G3B2_UNORM
] = { MALI_RGB332_UNORM
, _VT
},
158 [PIPE_FORMAT_Z24_UNORM_S8_UINT
] = { MALI_Z24X8_UNORM
, _TZ
},
159 [PIPE_FORMAT_Z24X8_UNORM
] = { MALI_Z24X8_UNORM
, _TZ
},
160 [PIPE_FORMAT_Z32_FLOAT
] = { MALI_R32F
, _TZ
},
161 [PIPE_FORMAT_Z32_FLOAT_S8X24_UINT
] = { MALI_R32F
, _TZ
},
162 [PIPE_FORMAT_X24S8_UINT
] = { MALI_RGBA8UI
, _TZ
},
163 [PIPE_FORMAT_S8_UINT
] = { MALI_R8UI
, _T
},
165 [PIPE_FORMAT_R32_FIXED
] = { MALI_R32_FIXED
, _V
},
166 [PIPE_FORMAT_R32G32_FIXED
] = { MALI_RG32_FIXED
, _V
},
167 [PIPE_FORMAT_R32G32B32_FIXED
] = { MALI_RGB32_FIXED
, _V
},
168 [PIPE_FORMAT_R32G32B32A32_FIXED
] = { MALI_RGBA32_FIXED
, _V
},
170 [PIPE_FORMAT_R11G11B10_FLOAT
] = { MALI_R11F_G11F_B10F
, _VTR
},
171 [PIPE_FORMAT_R9G9B9E5_FLOAT
] = { MALI_R9F_G9F_B9F_E5F
, _VT
},
173 [PIPE_FORMAT_R8_SNORM
] = { MALI_R8_SNORM
, _VT
},
174 [PIPE_FORMAT_R16_SNORM
] = { MALI_R16_SNORM
, _VT
},
175 [PIPE_FORMAT_R32_SNORM
] = { MALI_R32_SNORM
, _VT
},
176 [PIPE_FORMAT_R8G8_SNORM
] = { MALI_RG8_SNORM
, _VT
},
177 [PIPE_FORMAT_R16G16_SNORM
] = { MALI_RG16_SNORM
, _VT
},
178 [PIPE_FORMAT_R32G32_SNORM
] = { MALI_RG32_SNORM
, _VT
},
179 [PIPE_FORMAT_R8G8B8_SNORM
] = { MALI_RGB8_SNORM
, _VT
},
180 [PIPE_FORMAT_R16G16B16_SNORM
] = { MALI_RGB16_SNORM
, _VT
},
181 [PIPE_FORMAT_R32G32B32_SNORM
] = { MALI_RGB32_SNORM
, _VT
},
182 [PIPE_FORMAT_R8G8B8A8_SNORM
] = { MALI_RGBA8_SNORM
, _VT
},
183 [PIPE_FORMAT_R16G16B16A16_SNORM
] = { MALI_RGBA16_SNORM
, _VT
},
184 [PIPE_FORMAT_R32G32B32A32_SNORM
] = { MALI_RGBA32_SNORM
, _VT
},
186 [PIPE_FORMAT_A8_SINT
] = { MALI_R8I
, _VTR
},
187 [PIPE_FORMAT_I8_SINT
] = { MALI_R8I
, _VTR
},
188 [PIPE_FORMAT_L8_SINT
] = { MALI_R8I
, _VTR
},
189 [PIPE_FORMAT_L8A8_SINT
] = { MALI_RG8I
, _VTR
},
190 [PIPE_FORMAT_A8_UINT
] = { MALI_R8UI
, _VTR
},
191 [PIPE_FORMAT_I8_UINT
] = { MALI_R8UI
, _VTR
},
192 [PIPE_FORMAT_L8_UINT
] = { MALI_R8UI
, _VTR
},
193 [PIPE_FORMAT_L8A8_UINT
] = { MALI_RG8UI
, _VTR
},
195 [PIPE_FORMAT_A16_SINT
] = { MALI_R16I
, _VTR
},
196 [PIPE_FORMAT_I16_SINT
] = { MALI_R16I
, _VTR
},
197 [PIPE_FORMAT_L16_SINT
] = { MALI_R16I
, _VTR
},
198 [PIPE_FORMAT_L16A16_SINT
] = { MALI_RG16I
, _VTR
},
199 [PIPE_FORMAT_A16_UINT
] = { MALI_R16UI
, _VTR
},
200 [PIPE_FORMAT_I16_UINT
] = { MALI_R16UI
, _VTR
},
201 [PIPE_FORMAT_L16_UINT
] = { MALI_R16UI
, _VTR
},
202 [PIPE_FORMAT_L16A16_UINT
] = { MALI_RG16UI
, _VTR
},
204 [PIPE_FORMAT_A32_SINT
] = { MALI_R32I
, _VTR
},
205 [PIPE_FORMAT_I32_SINT
] = { MALI_R32I
, _VTR
},
206 [PIPE_FORMAT_L32_SINT
] = { MALI_R32I
, _VTR
},
207 [PIPE_FORMAT_L32A32_SINT
] = { MALI_RG32I
, _VTR
},
208 [PIPE_FORMAT_A32_UINT
] = { MALI_R32UI
, _VTR
},
209 [PIPE_FORMAT_I32_UINT
] = { MALI_R32UI
, _VTR
},
210 [PIPE_FORMAT_L32_UINT
] = { MALI_R32UI
, _VTR
},
211 [PIPE_FORMAT_L32A32_UINT
] = { MALI_RG32UI
, _VTR
},
213 [PIPE_FORMAT_B8G8R8_UINT
] = { MALI_RGB8UI
, _VTR
},
214 [PIPE_FORMAT_B8G8R8A8_UINT
] = { MALI_RGBA8UI
, _VTR
},
215 [PIPE_FORMAT_B8G8R8_SINT
] = { MALI_RGB8I
, _VTR
},
216 [PIPE_FORMAT_B8G8R8A8_SINT
] = { MALI_RGBA8I
, _VTR
},
217 [PIPE_FORMAT_A8R8G8B8_UINT
] = { MALI_RGBA8UI
, _VTR
},
218 [PIPE_FORMAT_A8B8G8R8_UINT
] = { MALI_RGBA8UI
, _VTR
},
220 [PIPE_FORMAT_R8_UINT
] = { MALI_R8UI
, _VTR
},
221 [PIPE_FORMAT_R16_UINT
] = { MALI_R16UI
, _VTR
},
222 [PIPE_FORMAT_R32_UINT
] = { MALI_R32UI
, _VTR
},
223 [PIPE_FORMAT_R8G8_UINT
] = { MALI_RG8UI
, _VTR
},
224 [PIPE_FORMAT_R16G16_UINT
] = { MALI_RG16UI
, _VTR
},
225 [PIPE_FORMAT_R32G32_UINT
] = { MALI_RG32UI
, _VTR
},
226 [PIPE_FORMAT_R8G8B8_UINT
] = { MALI_RGB8UI
, _VTR
},
227 [PIPE_FORMAT_R16G16B16_UINT
] = { MALI_RGB16UI
, _VTR
},
228 [PIPE_FORMAT_R32G32B32_UINT
] = { MALI_RGB32UI
, _VTR
},
229 [PIPE_FORMAT_R8G8B8A8_UINT
] = { MALI_RGBA8UI
, _VTR
},
230 [PIPE_FORMAT_R16G16B16A16_UINT
] = { MALI_RGBA16UI
, _VTR
},
231 [PIPE_FORMAT_R32G32B32A32_UINT
] = { MALI_RGBA32UI
, _VTR
},
233 [PIPE_FORMAT_R32_FLOAT
] = { MALI_R32F
, _VTR
},
234 [PIPE_FORMAT_R32G32_FLOAT
] = { MALI_RG32F
, _VTR
},
235 [PIPE_FORMAT_R32G32B32_FLOAT
] = { MALI_RGB32F
, _VTR
},
236 [PIPE_FORMAT_R32G32B32A32_FLOAT
] = { MALI_RGBA32F
, _VTR
},
238 [PIPE_FORMAT_R8_UNORM
] = { MALI_R8_UNORM
, _VTR
},
239 [PIPE_FORMAT_R16_UNORM
] = { MALI_R16_UNORM
, _VTR
},
240 [PIPE_FORMAT_R32_UNORM
] = { MALI_R32_UNORM
, _VTR
},
241 [PIPE_FORMAT_R8G8_UNORM
] = { MALI_RG8_UNORM
, _VTR
},
242 [PIPE_FORMAT_R16G16_UNORM
] = { MALI_RG16_UNORM
, _VTR
},
243 [PIPE_FORMAT_R32G32_UNORM
] = { MALI_RG32_UNORM
, _VTR
},
244 [PIPE_FORMAT_R8G8B8_UNORM
] = { MALI_RGB8_UNORM
, _VTR
},
245 [PIPE_FORMAT_R16G16B16_UNORM
] = { MALI_RGB16_UNORM
, _VTR
},
246 [PIPE_FORMAT_R32G32B32_UNORM
] = { MALI_RGB32_UNORM
, _VTR
},
247 [PIPE_FORMAT_R4G4B4A4_UNORM
] = { MALI_RGBA4_UNORM
, _VTR
},
248 [PIPE_FORMAT_R16G16B16A16_UNORM
] = { MALI_RGBA16_UNORM
, _VTR
},
249 [PIPE_FORMAT_R32G32B32A32_UNORM
] = { MALI_RGBA32_UNORM
, _VTR
},
251 [PIPE_FORMAT_B8G8R8A8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
252 [PIPE_FORMAT_B8G8R8X8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
253 [PIPE_FORMAT_A8R8G8B8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
254 [PIPE_FORMAT_X8R8G8B8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
255 [PIPE_FORMAT_A8B8G8R8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
256 [PIPE_FORMAT_X8B8G8R8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
257 [PIPE_FORMAT_R8G8B8X8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
258 [PIPE_FORMAT_R8G8B8A8_UNORM
] = { MALI_RGBA8_UNORM
, _VTR
},
260 [PIPE_FORMAT_R8G8B8X8_SNORM
] = { MALI_RGBA8_SNORM
, _VT
},
261 [PIPE_FORMAT_R8G8B8X8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
262 [PIPE_FORMAT_R8G8B8X8_UINT
] = { MALI_RGBA8UI
, _VTR
},
263 [PIPE_FORMAT_R8G8B8X8_SINT
] = { MALI_RGBA8I
, _VTR
},
265 [PIPE_FORMAT_L8_UNORM
] = { MALI_R8_UNORM
, _VTR
},
266 [PIPE_FORMAT_A8_UNORM
] = { MALI_R8_UNORM
, _VTR
},
267 [PIPE_FORMAT_I8_UNORM
] = { MALI_R8_UNORM
, _VTR
},
268 [PIPE_FORMAT_L8A8_UNORM
] = { MALI_RG8_UNORM
, _VTR
},
269 [PIPE_FORMAT_L16_UNORM
] = { MALI_R16_UNORM
, _VTR
},
270 [PIPE_FORMAT_A16_UNORM
] = { MALI_R16_UNORM
, _VTR
},
271 [PIPE_FORMAT_I16_UNORM
] = { MALI_R16_UNORM
, _VTR
},
272 [PIPE_FORMAT_L16A16_UNORM
] = { MALI_RG16_UNORM
, _VTR
},
274 [PIPE_FORMAT_L8_SNORM
] = { MALI_R8_SNORM
, _VT
},
275 [PIPE_FORMAT_A8_SNORM
] = { MALI_R8_SNORM
, _VT
},
276 [PIPE_FORMAT_I8_SNORM
] = { MALI_R8_SNORM
, _VT
},
277 [PIPE_FORMAT_L8A8_SNORM
] = { MALI_RG8_SNORM
, _VT
},
278 [PIPE_FORMAT_L16_SNORM
] = { MALI_R16_SNORM
, _VT
},
279 [PIPE_FORMAT_A16_SNORM
] = { MALI_R16_SNORM
, _VT
},
280 [PIPE_FORMAT_I16_SNORM
] = { MALI_R16_SNORM
, _VT
},
281 [PIPE_FORMAT_L16A16_SNORM
] = { MALI_RG16_SNORM
, _VT
},
283 [PIPE_FORMAT_L16_FLOAT
] = { MALI_R16F
, _VTR
},
284 [PIPE_FORMAT_A16_FLOAT
] = { MALI_R16F
, _VTR
},
285 [PIPE_FORMAT_I16_FLOAT
] = { MALI_RG16F
, _VTR
},
286 [PIPE_FORMAT_L16A16_FLOAT
] = { MALI_RG16F
, _VTR
},
288 [PIPE_FORMAT_L8_SRGB
] = { MALI_R8_UNORM
, _VTR
},
289 [PIPE_FORMAT_R8_SRGB
] = { MALI_R8_UNORM
, _VTR
},
290 [PIPE_FORMAT_L8A8_SRGB
] = { MALI_RG8_UNORM
, _VTR
},
291 [PIPE_FORMAT_R8G8_SRGB
] = { MALI_RG8_UNORM
, _VTR
},
292 [PIPE_FORMAT_R8G8B8_SRGB
] = { MALI_RGB8_UNORM
, _VTR
},
293 [PIPE_FORMAT_B8G8R8_SRGB
] = { MALI_RGB8_UNORM
, _VTR
},
294 [PIPE_FORMAT_R8G8B8A8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
295 [PIPE_FORMAT_A8B8G8R8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
296 [PIPE_FORMAT_X8B8G8R8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
297 [PIPE_FORMAT_B8G8R8A8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
298 [PIPE_FORMAT_B8G8R8X8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
299 [PIPE_FORMAT_A8R8G8B8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
300 [PIPE_FORMAT_X8R8G8B8_SRGB
] = { MALI_RGBA8_UNORM
, _VTR
},
302 [PIPE_FORMAT_R8_SINT
] = { MALI_R8I
, _VTR
},
303 [PIPE_FORMAT_R16_SINT
] = { MALI_R16I
, _VTR
},
304 [PIPE_FORMAT_R32_SINT
] = { MALI_R32I
, _VTR
},
305 [PIPE_FORMAT_R16_FLOAT
] = { MALI_R16F
, _VTR
},
306 [PIPE_FORMAT_R8G8_SINT
] = { MALI_RG8I
, _VTR
},
307 [PIPE_FORMAT_R16G16_SINT
] = { MALI_RG16I
, _VTR
},
308 [PIPE_FORMAT_R32G32_SINT
] = { MALI_RG32I
, _VTR
},
309 [PIPE_FORMAT_R16G16_FLOAT
] = { MALI_RG16F
, _VTR
},
310 [PIPE_FORMAT_R8G8B8_SINT
] = { MALI_RGB8I
, _VTR
},
311 [PIPE_FORMAT_R16G16B16_SINT
] = { MALI_RGB16I
, _VTR
},
312 [PIPE_FORMAT_R32G32B32_SINT
] = { MALI_RGB32I
, _VTR
},
313 [PIPE_FORMAT_R16G16B16_FLOAT
] = { MALI_RGB16F
, _VTR
},
314 [PIPE_FORMAT_R8G8B8A8_SINT
] = { MALI_RGBA8I
, _VTR
},
315 [PIPE_FORMAT_R16G16B16A16_SINT
] = { MALI_RGBA16I
, _VTR
},
316 [PIPE_FORMAT_R32G32B32A32_SINT
] = { MALI_RGBA32I
, _VTR
},
317 [PIPE_FORMAT_R16G16B16A16_FLOAT
] = { MALI_RGBA16F
, _VTR
},
319 [PIPE_FORMAT_R16G16B16X16_UNORM
] = { MALI_RGBA16_UNORM
, _VTR
},
320 [PIPE_FORMAT_R16G16B16X16_SNORM
] = { MALI_RGBA16_SNORM
, _VT
},
321 [PIPE_FORMAT_R16G16B16X16_FLOAT
] = { MALI_RGBA16F
, _VTR
},
322 [PIPE_FORMAT_R16G16B16X16_UINT
] = { MALI_RGBA16UI
, _VTR
},
323 [PIPE_FORMAT_R16G16B16X16_SINT
] = { MALI_RGBA16I
, _VTR
},
325 [PIPE_FORMAT_R32G32B32X32_FLOAT
] = { MALI_RGBA32F
, _VTR
},
326 [PIPE_FORMAT_R32G32B32X32_UINT
] = { MALI_RGBA32UI
, _VTR
},
327 [PIPE_FORMAT_R32G32B32X32_SINT
] = { MALI_RGBA32I
, _VTR
},
336 /* Is a format encoded like Z24S8 and therefore compatible for render? */
339 panfrost_is_z24s8_variant(enum pipe_format fmt
)
342 case PIPE_FORMAT_Z24_UNORM_S8_UINT
:
343 case PIPE_FORMAT_Z24X8_UNORM
:
350 /* Translate a PIPE swizzle quad to a 12-bit Mali swizzle code. PIPE
351 * swizzles line up with Mali swizzles for the XYZW01, but PIPE swizzles have
352 * an additional "NONE" field that we have to mask out to zero. Additionally,
353 * PIPE swizzles are sparse but Mali swizzles are packed */
356 panfrost_translate_swizzle_4(const unsigned char swizzle
[4])
360 for (unsigned i
= 0; i
< 4; ++i
) {
361 unsigned translated
= (swizzle
[i
] > PIPE_SWIZZLE_1
) ? PIPE_SWIZZLE_0
: swizzle
[i
];
362 out
|= (translated
<< (3*i
));
369 panfrost_invert_swizzle(const unsigned char *in
, unsigned char *out
)
371 /* First, default to all zeroes to prevent uninitialized junk */
373 for (unsigned c
= 0; c
< 4; ++c
)
374 out
[c
] = PIPE_SWIZZLE_0
;
376 /* Now "do" what the swizzle says */
378 for (unsigned c
= 0; c
< 4; ++c
) {
379 unsigned char i
= in
[c
];
382 assert(PIPE_SWIZZLE_X
== 0);
383 if (i
> PIPE_SWIZZLE_W
)
387 unsigned idx
= i
- PIPE_SWIZZLE_X
;
388 out
[idx
] = PIPE_SWIZZLE_X
+ c
;
393 panfrost_format_to_bifrost_blend(const struct util_format_description
*desc
)
395 enum mali_format format
= panfrost_pipe_format_table
[desc
->format
].hw
;
399 case MALI_RGBA4_UNORM
:
401 case MALI_RGBA8_UNORM
:
402 case MALI_RGB8_UNORM
:
404 case MALI_RGB10_A2_UNORM
:
405 return MALI_RGB10_A2_2
;