xref: /aosp_15_r20/external/mesa3d/src/freedreno/fdl/freedreno_layout.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2018 Rob Clark <[email protected]>
3  * Copyright © 2018 Google, Inc.
4  * SPDX-License-Identifier: MIT
5  *
6  * Authors:
7  *    Rob Clark <[email protected]>
8  */
9 
10 #include <inttypes.h>
11 #include <stdio.h>
12 
13 #include "freedreno_layout.h"
14 
15 void
fdl_layout_buffer(struct fdl_layout * layout,uint32_t size)16 fdl_layout_buffer(struct fdl_layout *layout, uint32_t size)
17 {
18    layout->width0 = size;
19    layout->height0 = 1;
20    layout->depth0 = 1;
21    layout->cpp = 1;
22    layout->cpp_shift = 0;
23    layout->size = size;
24    layout->format = PIPE_FORMAT_R8_UINT;
25    layout->nr_samples = 1;
26 }
27 
28 const char *
fdl_tile_mode_desc(const struct fdl_layout * layout,int level)29 fdl_tile_mode_desc(const struct fdl_layout *layout, int level)
30 {
31    if (fdl_ubwc_enabled(layout, level))
32       return "UBWC";
33    else if (fdl_tile_mode(layout, level) == 0) /* TILE6_LINEAR and friends */
34       return "linear";
35    else
36       return "tiled";
37 }
38 
39 void
fdl_dump_layout(struct fdl_layout * layout)40 fdl_dump_layout(struct fdl_layout *layout)
41 {
42    for (uint32_t level = 0;
43         level < ARRAY_SIZE(layout->slices) && layout->slices[level].size0;
44         level++) {
45       struct fdl_slice *slice = &layout->slices[level];
46       struct fdl_slice *ubwc_slice = &layout->ubwc_slices[level];
47 
48       fprintf(
49          stderr,
50          "%s: %ux%ux%u@%ux%u:\t%2u: stride=%4u, size=%6u,%6u, "
51          "aligned_height=%3u, offset=0x%x,0x%x, layersz %5" PRIu64 ",%5" PRIu64 " %s\n",
52          util_format_name(layout->format), u_minify(layout->width0, level),
53          u_minify(layout->height0, level), u_minify(layout->depth0, level),
54          layout->cpp, layout->nr_samples, level, fdl_pitch(layout, level),
55          slice->size0, ubwc_slice->size0,
56          slice->size0 / fdl_pitch(layout, level), slice->offset,
57          ubwc_slice->offset, layout->layer_size, layout->ubwc_layer_size,
58          fdl_tile_mode_desc(layout, level));
59    }
60 }
61