xref: /aosp_15_r20/external/mesa3d/src/freedreno/vulkan/tu_lrz.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2016 Red Hat.
3*61046927SAndroid Build Coastguard Worker  * Copyright © 2016 Bas Nieuwenhuizen
4*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
5*61046927SAndroid Build Coastguard Worker  *
6*61046927SAndroid Build Coastguard Worker  * based in part on anv driver which is:
7*61046927SAndroid Build Coastguard Worker  * Copyright © 2015 Intel Corporation
8*61046927SAndroid Build Coastguard Worker  */
9*61046927SAndroid Build Coastguard Worker 
10*61046927SAndroid Build Coastguard Worker #ifndef TU_LRZ_H
11*61046927SAndroid Build Coastguard Worker #define TU_LRZ_H
12*61046927SAndroid Build Coastguard Worker 
13*61046927SAndroid Build Coastguard Worker #include "tu_common.h"
14*61046927SAndroid Build Coastguard Worker 
15*61046927SAndroid Build Coastguard Worker enum tu_lrz_force_disable_mask {
16*61046927SAndroid Build Coastguard Worker    TU_LRZ_FORCE_DISABLE_LRZ = 1 << 0,
17*61046927SAndroid Build Coastguard Worker    TU_LRZ_FORCE_DISABLE_WRITE = 1 << 1,
18*61046927SAndroid Build Coastguard Worker    TU_LRZ_READS_DEST = 1 << 2,              /* Blend/logicop/colormask, etc */
19*61046927SAndroid Build Coastguard Worker };
20*61046927SAndroid Build Coastguard Worker 
21*61046927SAndroid Build Coastguard Worker enum tu_lrz_direction {
22*61046927SAndroid Build Coastguard Worker    TU_LRZ_UNKNOWN,
23*61046927SAndroid Build Coastguard Worker    /* Depth func less/less-than: */
24*61046927SAndroid Build Coastguard Worker    TU_LRZ_LESS,
25*61046927SAndroid Build Coastguard Worker    /* Depth func greater/greater-than: */
26*61046927SAndroid Build Coastguard Worker    TU_LRZ_GREATER,
27*61046927SAndroid Build Coastguard Worker };
28*61046927SAndroid Build Coastguard Worker 
29*61046927SAndroid Build Coastguard Worker struct tu_lrz_state
30*61046927SAndroid Build Coastguard Worker {
31*61046927SAndroid Build Coastguard Worker    /* Depth/Stencil image currently on use to do LRZ */
32*61046927SAndroid Build Coastguard Worker    const struct tu_image_view *image_view;
33*61046927SAndroid Build Coastguard Worker    VkClearValue depth_clear_value;
34*61046927SAndroid Build Coastguard Worker    /* If LRZ is in invalid state we cannot use it until depth is cleared */
35*61046927SAndroid Build Coastguard Worker    bool valid : 1;
36*61046927SAndroid Build Coastguard Worker    /* Allows to temporary disable LRZ */
37*61046927SAndroid Build Coastguard Worker    bool enabled : 1;
38*61046927SAndroid Build Coastguard Worker    bool fast_clear : 1;
39*61046927SAndroid Build Coastguard Worker    bool gpu_dir_tracking : 1;
40*61046927SAndroid Build Coastguard Worker    /* Continue using old LRZ state (LOAD_OP_LOAD of depth) */
41*61046927SAndroid Build Coastguard Worker    bool reuse_previous_state : 1;
42*61046927SAndroid Build Coastguard Worker    enum tu_lrz_direction prev_direction;
43*61046927SAndroid Build Coastguard Worker };
44*61046927SAndroid Build Coastguard Worker 
45*61046927SAndroid Build Coastguard Worker template <chip CHIP>
46*61046927SAndroid Build Coastguard Worker void
47*61046927SAndroid Build Coastguard Worker tu6_emit_lrz(struct tu_cmd_buffer *cmd, struct tu_cs *cs);
48*61046927SAndroid Build Coastguard Worker 
49*61046927SAndroid Build Coastguard Worker template <chip CHIP>
50*61046927SAndroid Build Coastguard Worker void
51*61046927SAndroid Build Coastguard Worker tu_disable_lrz(struct tu_cmd_buffer *cmd, struct tu_cs *cs,
52*61046927SAndroid Build Coastguard Worker                struct tu_image *image);
53*61046927SAndroid Build Coastguard Worker 
54*61046927SAndroid Build Coastguard Worker template <chip CHIP>
55*61046927SAndroid Build Coastguard Worker void
56*61046927SAndroid Build Coastguard Worker tu_lrz_clear_depth_image(struct tu_cmd_buffer *cmd,
57*61046927SAndroid Build Coastguard Worker                          struct tu_image *image,
58*61046927SAndroid Build Coastguard Worker                          const VkClearDepthStencilValue *pDepthStencil,
59*61046927SAndroid Build Coastguard Worker                          uint32_t rangeCount,
60*61046927SAndroid Build Coastguard Worker                          const VkImageSubresourceRange *pRanges);
61*61046927SAndroid Build Coastguard Worker 
62*61046927SAndroid Build Coastguard Worker template <chip CHIP>
63*61046927SAndroid Build Coastguard Worker void
64*61046927SAndroid Build Coastguard Worker tu_lrz_begin_renderpass(struct tu_cmd_buffer *cmd);
65*61046927SAndroid Build Coastguard Worker 
66*61046927SAndroid Build Coastguard Worker template <chip CHIP>
67*61046927SAndroid Build Coastguard Worker void
68*61046927SAndroid Build Coastguard Worker tu_lrz_begin_resumed_renderpass(struct tu_cmd_buffer *cmd);
69*61046927SAndroid Build Coastguard Worker 
70*61046927SAndroid Build Coastguard Worker void
71*61046927SAndroid Build Coastguard Worker tu_lrz_begin_secondary_cmdbuf(struct tu_cmd_buffer *cmd);
72*61046927SAndroid Build Coastguard Worker 
73*61046927SAndroid Build Coastguard Worker template <chip CHIP>
74*61046927SAndroid Build Coastguard Worker void
75*61046927SAndroid Build Coastguard Worker tu_lrz_tiling_begin(struct tu_cmd_buffer *cmd, struct tu_cs *cs);
76*61046927SAndroid Build Coastguard Worker 
77*61046927SAndroid Build Coastguard Worker template <chip CHIP>
78*61046927SAndroid Build Coastguard Worker void
79*61046927SAndroid Build Coastguard Worker tu_lrz_tiling_end(struct tu_cmd_buffer *cmd, struct tu_cs *cs);
80*61046927SAndroid Build Coastguard Worker 
81*61046927SAndroid Build Coastguard Worker template <chip CHIP>
82*61046927SAndroid Build Coastguard Worker void
83*61046927SAndroid Build Coastguard Worker tu_lrz_sysmem_begin(struct tu_cmd_buffer *cmd, struct tu_cs *cs);
84*61046927SAndroid Build Coastguard Worker 
85*61046927SAndroid Build Coastguard Worker template <chip CHIP>
86*61046927SAndroid Build Coastguard Worker void
87*61046927SAndroid Build Coastguard Worker tu_lrz_sysmem_end(struct tu_cmd_buffer *cmd, struct tu_cs *cs);
88*61046927SAndroid Build Coastguard Worker 
89*61046927SAndroid Build Coastguard Worker template <chip CHIP>
90*61046927SAndroid Build Coastguard Worker void
91*61046927SAndroid Build Coastguard Worker tu_lrz_disable_during_renderpass(struct tu_cmd_buffer *cmd);
92*61046927SAndroid Build Coastguard Worker 
93*61046927SAndroid Build Coastguard Worker #endif /* TU_LRZ_H */
94