xref: /aosp_15_r20/external/mesa3d/src/freedreno/common/freedreno_lrz.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2024 Igalia S.L.
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #ifndef __FREEDRENO_LRZ_H__
7*61046927SAndroid Build Coastguard Worker #define __FREEDRENO_LRZ_H__
8*61046927SAndroid Build Coastguard Worker 
9*61046927SAndroid Build Coastguard Worker #include "adreno_common.xml.h"
10*61046927SAndroid Build Coastguard Worker 
11*61046927SAndroid Build Coastguard Worker enum fd_lrz_gpu_dir : uint8_t {
12*61046927SAndroid Build Coastguard Worker    FD_LRZ_GPU_DIR_DISABLED = 0,
13*61046927SAndroid Build Coastguard Worker    FD_LRZ_GPU_DIR_LESS = 1,
14*61046927SAndroid Build Coastguard Worker    FD_LRZ_GPU_DIR_GREATER = 2,
15*61046927SAndroid Build Coastguard Worker    FD_LRZ_GPU_DIR_NOT_SET = 3,
16*61046927SAndroid Build Coastguard Worker };
17*61046927SAndroid Build Coastguard Worker 
18*61046927SAndroid Build Coastguard Worker UNUSED static const char *
fd_lrz_gpu_dir_to_str(enum fd_lrz_gpu_dir dir)19*61046927SAndroid Build Coastguard Worker fd_lrz_gpu_dir_to_str(enum fd_lrz_gpu_dir dir)
20*61046927SAndroid Build Coastguard Worker {
21*61046927SAndroid Build Coastguard Worker    switch (dir) {
22*61046927SAndroid Build Coastguard Worker    case FD_LRZ_GPU_DIR_DISABLED:
23*61046927SAndroid Build Coastguard Worker       return "DISABLED";
24*61046927SAndroid Build Coastguard Worker    case FD_LRZ_GPU_DIR_LESS:
25*61046927SAndroid Build Coastguard Worker       return "DIR_LESS";
26*61046927SAndroid Build Coastguard Worker    case FD_LRZ_GPU_DIR_GREATER:
27*61046927SAndroid Build Coastguard Worker       return "DIR_GREATER";
28*61046927SAndroid Build Coastguard Worker    case FD_LRZ_GPU_DIR_NOT_SET:
29*61046927SAndroid Build Coastguard Worker       return "DIR_NOT_SET";
30*61046927SAndroid Build Coastguard Worker    default:
31*61046927SAndroid Build Coastguard Worker       return "INVALID";
32*61046927SAndroid Build Coastguard Worker    }
33*61046927SAndroid Build Coastguard Worker }
34*61046927SAndroid Build Coastguard Worker 
35*61046927SAndroid Build Coastguard Worker /* Layout of LRZ fast-clear buffer templated on the generation, the
36*61046927SAndroid Build Coastguard Worker  * members are as follows:
37*61046927SAndroid Build Coastguard Worker  * - fc1: The first FC buffer, always present. This may contain multiple
38*61046927SAndroid Build Coastguard Worker  *        sub-buffers with _a/_b suffixes for concurrent binning which
39*61046927SAndroid Build Coastguard Worker  *        can be checked using HAS_CB.
40*61046927SAndroid Build Coastguard Worker  * - fc2: The second FC buffer, used for bidirectional LRZ and only present
41*61046927SAndroid Build Coastguard Worker  *        when HAS_BIDIR set. It has suffixes for CB like fc1.
42*61046927SAndroid Build Coastguard Worker  * - metadata: Metadata buffer for LRZ fast-clear. The contents are not
43*61046927SAndroid Build Coastguard Worker  *             always known, since they're handled by the hardware.
44*61046927SAndroid Build Coastguard Worker  */
45*61046927SAndroid Build Coastguard Worker template <chip CHIP>
46*61046927SAndroid Build Coastguard Worker struct fd_lrzfc_layout;
47*61046927SAndroid Build Coastguard Worker 
48*61046927SAndroid Build Coastguard Worker template <>
49*61046927SAndroid Build Coastguard Worker struct PACKED fd_lrzfc_layout<A6XX> {
50*61046927SAndroid Build Coastguard Worker    static const bool HAS_BIDIR = false;
51*61046927SAndroid Build Coastguard Worker    static const bool HAS_CB = false;
52*61046927SAndroid Build Coastguard Worker    static const size_t FC_SIZE = 512;
53*61046927SAndroid Build Coastguard Worker 
54*61046927SAndroid Build Coastguard Worker    uint8_t fc1[FC_SIZE];
55*61046927SAndroid Build Coastguard Worker    union {
56*61046927SAndroid Build Coastguard Worker       struct {
57*61046927SAndroid Build Coastguard Worker          enum fd_lrz_gpu_dir dir_track;
58*61046927SAndroid Build Coastguard Worker          uint8_t _pad_;
59*61046927SAndroid Build Coastguard Worker          uint32_t gras_lrz_depth_view;
60*61046927SAndroid Build Coastguard Worker       };
61*61046927SAndroid Build Coastguard Worker       uint8_t metadata[6];
62*61046927SAndroid Build Coastguard Worker    };
63*61046927SAndroid Build Coastguard Worker };
64*61046927SAndroid Build Coastguard Worker 
65*61046927SAndroid Build Coastguard Worker template <>
66*61046927SAndroid Build Coastguard Worker struct PACKED fd_lrzfc_layout<A7XX> {
67*61046927SAndroid Build Coastguard Worker    static const bool HAS_BIDIR = true;
68*61046927SAndroid Build Coastguard Worker    static const bool HAS_CB = true;
69*61046927SAndroid Build Coastguard Worker    static const size_t FC_SIZE = 1024;
70*61046927SAndroid Build Coastguard Worker 
71*61046927SAndroid Build Coastguard Worker    union {
72*61046927SAndroid Build Coastguard Worker       struct {
73*61046927SAndroid Build Coastguard Worker          uint8_t fc1_a[FC_SIZE];
74*61046927SAndroid Build Coastguard Worker          uint8_t fc1_b[FC_SIZE];
75*61046927SAndroid Build Coastguard Worker       };
76*61046927SAndroid Build Coastguard Worker       uint8_t fc1[FC_SIZE * 2];
77*61046927SAndroid Build Coastguard Worker    };
78*61046927SAndroid Build Coastguard Worker    union {
79*61046927SAndroid Build Coastguard Worker       struct {
80*61046927SAndroid Build Coastguard Worker          enum fd_lrz_gpu_dir dir_track;
81*61046927SAndroid Build Coastguard Worker          uint8_t _pad_;
82*61046927SAndroid Build Coastguard Worker          uint32_t gras_lrz_depth_view;
83*61046927SAndroid Build Coastguard Worker       };
84*61046927SAndroid Build Coastguard Worker       uint8_t metadata[512];
85*61046927SAndroid Build Coastguard Worker    };
86*61046927SAndroid Build Coastguard Worker    union {
87*61046927SAndroid Build Coastguard Worker       struct {
88*61046927SAndroid Build Coastguard Worker          uint8_t fc2_a[FC_SIZE];
89*61046927SAndroid Build Coastguard Worker          uint8_t fc2_b[FC_SIZE];
90*61046927SAndroid Build Coastguard Worker       };
91*61046927SAndroid Build Coastguard Worker       uint8_t fc2[FC_SIZE * 2];
92*61046927SAndroid Build Coastguard Worker    };
93*61046927SAndroid Build Coastguard Worker };
94*61046927SAndroid Build Coastguard Worker 
95*61046927SAndroid Build Coastguard Worker #endif
96