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