xref: /aosp_15_r20/external/mesa3d/src/intel/isl/isl_drm.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2017 Intel Corporation
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  *  Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker  *  copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker  *  to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker  *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker  *  and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker  *  Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker  *
11*61046927SAndroid Build Coastguard Worker  *  The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker  *  paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker  *  Software.
14*61046927SAndroid Build Coastguard Worker  *
15*61046927SAndroid Build Coastguard Worker  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker  *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker  *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker  *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker  *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*61046927SAndroid Build Coastguard Worker  *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21*61046927SAndroid Build Coastguard Worker  *  IN THE SOFTWARE.
22*61046927SAndroid Build Coastguard Worker  */
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker #include <assert.h>
25*61046927SAndroid Build Coastguard Worker #include <stdlib.h>
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker #include "drm-uapi/drm_fourcc.h"
28*61046927SAndroid Build Coastguard Worker #include "drm-uapi/i915_drm.h"
29*61046927SAndroid Build Coastguard Worker 
30*61046927SAndroid Build Coastguard Worker #include "isl.h"
31*61046927SAndroid Build Coastguard Worker #include "dev/intel_device_info.h"
32*61046927SAndroid Build Coastguard Worker #include "dev/intel_debug.h"
33*61046927SAndroid Build Coastguard Worker 
34*61046927SAndroid Build Coastguard Worker uint32_t
isl_tiling_to_i915_tiling(enum isl_tiling tiling)35*61046927SAndroid Build Coastguard Worker isl_tiling_to_i915_tiling(enum isl_tiling tiling)
36*61046927SAndroid Build Coastguard Worker {
37*61046927SAndroid Build Coastguard Worker    switch (tiling) {
38*61046927SAndroid Build Coastguard Worker    case ISL_TILING_LINEAR:
39*61046927SAndroid Build Coastguard Worker       return I915_TILING_NONE;
40*61046927SAndroid Build Coastguard Worker 
41*61046927SAndroid Build Coastguard Worker    case ISL_TILING_X:
42*61046927SAndroid Build Coastguard Worker       return I915_TILING_X;
43*61046927SAndroid Build Coastguard Worker 
44*61046927SAndroid Build Coastguard Worker    case ISL_TILING_Y0:
45*61046927SAndroid Build Coastguard Worker    case ISL_TILING_HIZ:
46*61046927SAndroid Build Coastguard Worker    case ISL_TILING_CCS:
47*61046927SAndroid Build Coastguard Worker       return I915_TILING_Y;
48*61046927SAndroid Build Coastguard Worker 
49*61046927SAndroid Build Coastguard Worker    case ISL_TILING_W:
50*61046927SAndroid Build Coastguard Worker    case ISL_TILING_SKL_Yf:
51*61046927SAndroid Build Coastguard Worker    case ISL_TILING_SKL_Ys:
52*61046927SAndroid Build Coastguard Worker    case ISL_TILING_ICL_Yf:
53*61046927SAndroid Build Coastguard Worker    case ISL_TILING_ICL_Ys:
54*61046927SAndroid Build Coastguard Worker    case ISL_TILING_4:
55*61046927SAndroid Build Coastguard Worker    case ISL_TILING_64:
56*61046927SAndroid Build Coastguard Worker    case ISL_TILING_64_XE2:
57*61046927SAndroid Build Coastguard Worker       return I915_TILING_NONE;
58*61046927SAndroid Build Coastguard Worker    }
59*61046927SAndroid Build Coastguard Worker 
60*61046927SAndroid Build Coastguard Worker    unreachable("Invalid ISL tiling");
61*61046927SAndroid Build Coastguard Worker }
62*61046927SAndroid Build Coastguard Worker 
63*61046927SAndroid Build Coastguard Worker enum isl_tiling
isl_tiling_from_i915_tiling(uint32_t tiling)64*61046927SAndroid Build Coastguard Worker isl_tiling_from_i915_tiling(uint32_t tiling)
65*61046927SAndroid Build Coastguard Worker {
66*61046927SAndroid Build Coastguard Worker    switch (tiling) {
67*61046927SAndroid Build Coastguard Worker    case I915_TILING_NONE:
68*61046927SAndroid Build Coastguard Worker       return ISL_TILING_LINEAR;
69*61046927SAndroid Build Coastguard Worker 
70*61046927SAndroid Build Coastguard Worker    case I915_TILING_X:
71*61046927SAndroid Build Coastguard Worker       return ISL_TILING_X;
72*61046927SAndroid Build Coastguard Worker 
73*61046927SAndroid Build Coastguard Worker    case I915_TILING_Y:
74*61046927SAndroid Build Coastguard Worker       return ISL_TILING_Y0;
75*61046927SAndroid Build Coastguard Worker    }
76*61046927SAndroid Build Coastguard Worker 
77*61046927SAndroid Build Coastguard Worker    unreachable("Invalid i915 tiling");
78*61046927SAndroid Build Coastguard Worker }
79*61046927SAndroid Build Coastguard Worker 
80*61046927SAndroid Build Coastguard Worker /** Sentinel is DRM_FORMAT_MOD_INVALID. */
81*61046927SAndroid Build Coastguard Worker const struct isl_drm_modifier_info
82*61046927SAndroid Build Coastguard Worker isl_drm_modifier_info_list[] = {
83*61046927SAndroid Build Coastguard Worker    {
84*61046927SAndroid Build Coastguard Worker       .modifier = DRM_FORMAT_MOD_NONE,
85*61046927SAndroid Build Coastguard Worker       .name = "DRM_FORMAT_MOD_NONE",
86*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_LINEAR,
87*61046927SAndroid Build Coastguard Worker    },
88*61046927SAndroid Build Coastguard Worker    {
89*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_X_TILED,
90*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_X_TILED",
91*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_X,
92*61046927SAndroid Build Coastguard Worker    },
93*61046927SAndroid Build Coastguard Worker    {
94*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_Y_TILED,
95*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_Y_TILED",
96*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_Y0,
97*61046927SAndroid Build Coastguard Worker    },
98*61046927SAndroid Build Coastguard Worker    {
99*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_Y_TILED_CCS,
100*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_Y_TILED_CCS",
101*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_Y0,
102*61046927SAndroid Build Coastguard Worker       .supports_render_compression = true,
103*61046927SAndroid Build Coastguard Worker       .supports_clear_color = false,
104*61046927SAndroid Build Coastguard Worker    },
105*61046927SAndroid Build Coastguard Worker    {
106*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS,
107*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS",
108*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_Y0,
109*61046927SAndroid Build Coastguard Worker       .supports_render_compression = true,
110*61046927SAndroid Build Coastguard Worker       .supports_clear_color = false,
111*61046927SAndroid Build Coastguard Worker    },
112*61046927SAndroid Build Coastguard Worker    {
113*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS,
114*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS",
115*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_Y0,
116*61046927SAndroid Build Coastguard Worker       .supports_media_compression = true,
117*61046927SAndroid Build Coastguard Worker       .supports_clear_color = false,
118*61046927SAndroid Build Coastguard Worker    },
119*61046927SAndroid Build Coastguard Worker    {
120*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC,
121*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC",
122*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_Y0,
123*61046927SAndroid Build Coastguard Worker       .supports_render_compression = true,
124*61046927SAndroid Build Coastguard Worker       .supports_clear_color = true,
125*61046927SAndroid Build Coastguard Worker    },
126*61046927SAndroid Build Coastguard Worker    {
127*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_4_TILED,
128*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_4_TILED",
129*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_4,
130*61046927SAndroid Build Coastguard Worker    },
131*61046927SAndroid Build Coastguard Worker    {
132*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_4_TILED_DG2_RC_CCS,
133*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_4_TILED_DG2_RC_CCS",
134*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_4,
135*61046927SAndroid Build Coastguard Worker       .supports_render_compression = true,
136*61046927SAndroid Build Coastguard Worker       .supports_clear_color = false,
137*61046927SAndroid Build Coastguard Worker    },
138*61046927SAndroid Build Coastguard Worker    {
139*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_4_TILED_DG2_MC_CCS,
140*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_4_TILED_DG2_MC_CCS",
141*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_4,
142*61046927SAndroid Build Coastguard Worker       .supports_media_compression = true,
143*61046927SAndroid Build Coastguard Worker       .supports_clear_color = false,
144*61046927SAndroid Build Coastguard Worker    },
145*61046927SAndroid Build Coastguard Worker    {
146*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_4_TILED_DG2_RC_CCS_CC,
147*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_4_TILED_DG2_RC_CCS_CC",
148*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_4,
149*61046927SAndroid Build Coastguard Worker       .supports_render_compression = true,
150*61046927SAndroid Build Coastguard Worker       .supports_clear_color = true,
151*61046927SAndroid Build Coastguard Worker    },
152*61046927SAndroid Build Coastguard Worker    {
153*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_4_TILED_MTL_RC_CCS,
154*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_4_TILED_MTL_RC_CCS",
155*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_4,
156*61046927SAndroid Build Coastguard Worker       .supports_render_compression = true,
157*61046927SAndroid Build Coastguard Worker       .supports_clear_color = false,
158*61046927SAndroid Build Coastguard Worker    },
159*61046927SAndroid Build Coastguard Worker    {
160*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_4_TILED_MTL_RC_CCS_CC,
161*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_4_TILED_MTL_RC_CCS_CC",
162*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_4,
163*61046927SAndroid Build Coastguard Worker       .supports_render_compression = true,
164*61046927SAndroid Build Coastguard Worker       .supports_clear_color = true,
165*61046927SAndroid Build Coastguard Worker    },
166*61046927SAndroid Build Coastguard Worker    {
167*61046927SAndroid Build Coastguard Worker       .modifier = I915_FORMAT_MOD_4_TILED_MTL_MC_CCS,
168*61046927SAndroid Build Coastguard Worker       .name = "I915_FORMAT_MOD_4_TILED_MTL_MC_CCS",
169*61046927SAndroid Build Coastguard Worker       .tiling = ISL_TILING_4,
170*61046927SAndroid Build Coastguard Worker       .supports_media_compression = true,
171*61046927SAndroid Build Coastguard Worker       .supports_clear_color = false,
172*61046927SAndroid Build Coastguard Worker    },
173*61046927SAndroid Build Coastguard Worker    {
174*61046927SAndroid Build Coastguard Worker       .modifier = DRM_FORMAT_MOD_INVALID,
175*61046927SAndroid Build Coastguard Worker    },
176*61046927SAndroid Build Coastguard Worker };
177*61046927SAndroid Build Coastguard Worker 
178*61046927SAndroid Build Coastguard Worker const struct isl_drm_modifier_info *
isl_drm_modifier_get_info(uint64_t modifier)179*61046927SAndroid Build Coastguard Worker isl_drm_modifier_get_info(uint64_t modifier)
180*61046927SAndroid Build Coastguard Worker {
181*61046927SAndroid Build Coastguard Worker    isl_drm_modifier_info_for_each(info) {
182*61046927SAndroid Build Coastguard Worker       if (info->modifier == modifier)
183*61046927SAndroid Build Coastguard Worker          return info;
184*61046927SAndroid Build Coastguard Worker    }
185*61046927SAndroid Build Coastguard Worker 
186*61046927SAndroid Build Coastguard Worker    return NULL;
187*61046927SAndroid Build Coastguard Worker }
188*61046927SAndroid Build Coastguard Worker 
189*61046927SAndroid Build Coastguard Worker uint32_t
isl_drm_modifier_get_score(const struct intel_device_info * devinfo,uint64_t modifier)190*61046927SAndroid Build Coastguard Worker isl_drm_modifier_get_score(const struct intel_device_info *devinfo,
191*61046927SAndroid Build Coastguard Worker                            uint64_t modifier)
192*61046927SAndroid Build Coastguard Worker {
193*61046927SAndroid Build Coastguard Worker    /* We want to know the absence of the debug environment variable
194*61046927SAndroid Build Coastguard Worker     * and don't want to provide a default value either, so we don't
195*61046927SAndroid Build Coastguard Worker     * use debug_get_num_option() here.
196*61046927SAndroid Build Coastguard Worker     */
197*61046927SAndroid Build Coastguard Worker    const char *mod_str = getenv("INTEL_MODIFIER_OVERRIDE");
198*61046927SAndroid Build Coastguard Worker    if (mod_str != NULL) {
199*61046927SAndroid Build Coastguard Worker       return modifier == strtoul(mod_str, NULL, 0);
200*61046927SAndroid Build Coastguard Worker    }
201*61046927SAndroid Build Coastguard Worker    /* FINISHME: Add gfx12 modifiers */
202*61046927SAndroid Build Coastguard Worker    switch (modifier) {
203*61046927SAndroid Build Coastguard Worker    default:
204*61046927SAndroid Build Coastguard Worker       return 0;
205*61046927SAndroid Build Coastguard Worker    case DRM_FORMAT_MOD_LINEAR:
206*61046927SAndroid Build Coastguard Worker       return 1;
207*61046927SAndroid Build Coastguard Worker    case I915_FORMAT_MOD_X_TILED:
208*61046927SAndroid Build Coastguard Worker       return 2;
209*61046927SAndroid Build Coastguard Worker    case I915_FORMAT_MOD_Y_TILED:
210*61046927SAndroid Build Coastguard Worker       /* Gfx12.5 doesn't have Y-tiling. */
211*61046927SAndroid Build Coastguard Worker       if (devinfo->verx10 >= 125)
212*61046927SAndroid Build Coastguard Worker          return 0;
213*61046927SAndroid Build Coastguard Worker 
214*61046927SAndroid Build Coastguard Worker       return 3;
215*61046927SAndroid Build Coastguard Worker    case I915_FORMAT_MOD_Y_TILED_CCS:
216*61046927SAndroid Build Coastguard Worker       /* Not supported before Gfx9 and also Gfx12's CCS layout differs from
217*61046927SAndroid Build Coastguard Worker        * Gfx9-11.
218*61046927SAndroid Build Coastguard Worker        */
219*61046927SAndroid Build Coastguard Worker       if (devinfo->ver <= 8 || devinfo->ver >= 12)
220*61046927SAndroid Build Coastguard Worker          return 0;
221*61046927SAndroid Build Coastguard Worker 
222*61046927SAndroid Build Coastguard Worker       if (INTEL_DEBUG(DEBUG_NO_CCS))
223*61046927SAndroid Build Coastguard Worker          return 0;
224*61046927SAndroid Build Coastguard Worker 
225*61046927SAndroid Build Coastguard Worker       return 4;
226*61046927SAndroid Build Coastguard Worker    case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS:
227*61046927SAndroid Build Coastguard Worker       if (devinfo->verx10 != 120)
228*61046927SAndroid Build Coastguard Worker          return 0;
229*61046927SAndroid Build Coastguard Worker 
230*61046927SAndroid Build Coastguard Worker       if (INTEL_DEBUG(DEBUG_NO_CCS))
231*61046927SAndroid Build Coastguard Worker          return 0;
232*61046927SAndroid Build Coastguard Worker 
233*61046927SAndroid Build Coastguard Worker       return 4;
234*61046927SAndroid Build Coastguard Worker    case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC:
235*61046927SAndroid Build Coastguard Worker       if (devinfo->verx10 != 120)
236*61046927SAndroid Build Coastguard Worker          return 0;
237*61046927SAndroid Build Coastguard Worker 
238*61046927SAndroid Build Coastguard Worker       if (INTEL_DEBUG(DEBUG_NO_CCS) || INTEL_DEBUG(DEBUG_NO_FAST_CLEAR))
239*61046927SAndroid Build Coastguard Worker          return 0;
240*61046927SAndroid Build Coastguard Worker 
241*61046927SAndroid Build Coastguard Worker       return 5;
242*61046927SAndroid Build Coastguard Worker    case I915_FORMAT_MOD_4_TILED:
243*61046927SAndroid Build Coastguard Worker       /* Gfx12.5 introduces Tile4. */
244*61046927SAndroid Build Coastguard Worker       if (devinfo->verx10 < 125)
245*61046927SAndroid Build Coastguard Worker          return 0;
246*61046927SAndroid Build Coastguard Worker 
247*61046927SAndroid Build Coastguard Worker       return 3;
248*61046927SAndroid Build Coastguard Worker    case I915_FORMAT_MOD_4_TILED_DG2_RC_CCS:
249*61046927SAndroid Build Coastguard Worker       if (!intel_device_info_is_dg2(devinfo))
250*61046927SAndroid Build Coastguard Worker          return 0;
251*61046927SAndroid Build Coastguard Worker 
252*61046927SAndroid Build Coastguard Worker       if (INTEL_DEBUG(DEBUG_NO_CCS))
253*61046927SAndroid Build Coastguard Worker          return 0;
254*61046927SAndroid Build Coastguard Worker 
255*61046927SAndroid Build Coastguard Worker       return 4;
256*61046927SAndroid Build Coastguard Worker    case I915_FORMAT_MOD_4_TILED_DG2_RC_CCS_CC:
257*61046927SAndroid Build Coastguard Worker       if (!intel_device_info_is_dg2(devinfo))
258*61046927SAndroid Build Coastguard Worker          return 0;
259*61046927SAndroid Build Coastguard Worker 
260*61046927SAndroid Build Coastguard Worker       if (INTEL_DEBUG(DEBUG_NO_CCS) || INTEL_DEBUG(DEBUG_NO_FAST_CLEAR))
261*61046927SAndroid Build Coastguard Worker          return 0;
262*61046927SAndroid Build Coastguard Worker 
263*61046927SAndroid Build Coastguard Worker       return 5;
264*61046927SAndroid Build Coastguard Worker    case I915_FORMAT_MOD_4_TILED_MTL_RC_CCS:
265*61046927SAndroid Build Coastguard Worker       if (!intel_device_info_is_mtl_or_arl(devinfo))
266*61046927SAndroid Build Coastguard Worker          return 0;
267*61046927SAndroid Build Coastguard Worker 
268*61046927SAndroid Build Coastguard Worker       if (INTEL_DEBUG(DEBUG_NO_CCS))
269*61046927SAndroid Build Coastguard Worker          return 0;
270*61046927SAndroid Build Coastguard Worker 
271*61046927SAndroid Build Coastguard Worker       return 4;
272*61046927SAndroid Build Coastguard Worker    case I915_FORMAT_MOD_4_TILED_MTL_RC_CCS_CC:
273*61046927SAndroid Build Coastguard Worker       if (!intel_device_info_is_mtl_or_arl(devinfo))
274*61046927SAndroid Build Coastguard Worker          return 0;
275*61046927SAndroid Build Coastguard Worker 
276*61046927SAndroid Build Coastguard Worker       if (INTEL_DEBUG(DEBUG_NO_CCS) || INTEL_DEBUG(DEBUG_NO_FAST_CLEAR))
277*61046927SAndroid Build Coastguard Worker          return 0;
278*61046927SAndroid Build Coastguard Worker 
279*61046927SAndroid Build Coastguard Worker       return 5;
280*61046927SAndroid Build Coastguard Worker    }
281*61046927SAndroid Build Coastguard Worker }
282*61046927SAndroid Build Coastguard Worker 
283*61046927SAndroid Build Coastguard Worker uint32_t
isl_drm_modifier_get_plane_count(const struct intel_device_info * devinfo,uint64_t modifier,uint32_t fmt_planes)284*61046927SAndroid Build Coastguard Worker isl_drm_modifier_get_plane_count(const struct intel_device_info *devinfo,
285*61046927SAndroid Build Coastguard Worker                                  uint64_t modifier,
286*61046927SAndroid Build Coastguard Worker                                  uint32_t fmt_planes)
287*61046927SAndroid Build Coastguard Worker {
288*61046927SAndroid Build Coastguard Worker    /* This function could return the wrong value if the modifier is not
289*61046927SAndroid Build Coastguard Worker     * supported by the device.
290*61046927SAndroid Build Coastguard Worker     */
291*61046927SAndroid Build Coastguard Worker    assert(isl_drm_modifier_get_score(devinfo, modifier) > 0);
292*61046927SAndroid Build Coastguard Worker 
293*61046927SAndroid Build Coastguard Worker    /* Planar images don't support clear color. */
294*61046927SAndroid Build Coastguard Worker    if (isl_drm_modifier_get_info(modifier)->supports_clear_color)
295*61046927SAndroid Build Coastguard Worker       assert(fmt_planes == 1);
296*61046927SAndroid Build Coastguard Worker 
297*61046927SAndroid Build Coastguard Worker    if (devinfo->has_flat_ccs) {
298*61046927SAndroid Build Coastguard Worker       if (isl_drm_modifier_get_info(modifier)->supports_clear_color)
299*61046927SAndroid Build Coastguard Worker          return 2 * fmt_planes;
300*61046927SAndroid Build Coastguard Worker       else
301*61046927SAndroid Build Coastguard Worker          return 1 * fmt_planes;
302*61046927SAndroid Build Coastguard Worker    } else {
303*61046927SAndroid Build Coastguard Worker       if (isl_drm_modifier_get_info(modifier)->supports_clear_color)
304*61046927SAndroid Build Coastguard Worker          return 3 * fmt_planes;
305*61046927SAndroid Build Coastguard Worker       else if (isl_drm_modifier_has_aux(modifier))
306*61046927SAndroid Build Coastguard Worker          return 2 * fmt_planes;
307*61046927SAndroid Build Coastguard Worker       else
308*61046927SAndroid Build Coastguard Worker          return 1 * fmt_planes;
309*61046927SAndroid Build Coastguard Worker    }
310*61046927SAndroid Build Coastguard Worker }
311