| /* |
| * Copyright © 2016 Red Hat. |
| * Copyright © 2016 Bas Nieuwenhuizen |
| * SPDX-License-Identifier: MIT |
| * |
| * based in part on anv driver which is: |
| * Copyright © 2015 Intel Corporation |
| */ |
| |
| #ifndef TU_LRZ_H |
| #define TU_LRZ_H |
| |
| #include "tu_common.h" |
| |
| enum tu_lrz_force_disable_mask { |
| TU_LRZ_FORCE_DISABLE_LRZ = 1 << 0, |
| TU_LRZ_FORCE_DISABLE_WRITE = 1 << 1, |
| }; |
| |
| enum tu_lrz_direction { |
| TU_LRZ_UNKNOWN, |
| /* Depth func less/less-than: */ |
| TU_LRZ_LESS, |
| /* Depth func greater/greater-than: */ |
| TU_LRZ_GREATER, |
| }; |
| |
| struct tu_lrz_state |
| { |
| /* Depth/Stencil image currently on use to do LRZ */ |
| const struct tu_image_view *image_view; |
| VkClearValue depth_clear_value; |
| /* If LRZ is in invalid state we cannot use it until depth is cleared */ |
| bool valid : 1; |
| /* Allows to temporary disable LRZ */ |
| bool enabled : 1; |
| bool fast_clear : 1; |
| bool gpu_dir_tracking : 1; |
| /* Continue using old LRZ state (LOAD_OP_LOAD of depth) */ |
| bool reuse_previous_state : 1; |
| enum tu_lrz_direction prev_direction; |
| }; |
| |
| void |
| tu6_emit_lrz(struct tu_cmd_buffer *cmd, struct tu_cs *cs); |
| |
| void |
| tu_disable_lrz(struct tu_cmd_buffer *cmd, struct tu_cs *cs, |
| struct tu_image *image); |
| |
| void |
| tu_lrz_clear_depth_image(struct tu_cmd_buffer *cmd, |
| struct tu_image *image, |
| const VkClearDepthStencilValue *pDepthStencil, |
| uint32_t rangeCount, |
| const VkImageSubresourceRange *pRanges); |
| |
| void |
| tu_lrz_begin_renderpass(struct tu_cmd_buffer *cmd, |
| const VkClearValue *clear_values); |
| |
| void |
| tu_lrz_begin_resumed_renderpass(struct tu_cmd_buffer *cmd, |
| const VkClearValue *clear_values); |
| |
| void |
| tu_lrz_begin_secondary_cmdbuf(struct tu_cmd_buffer *cmd); |
| |
| void |
| tu_lrz_tiling_begin(struct tu_cmd_buffer *cmd, struct tu_cs *cs); |
| |
| void |
| tu_lrz_tiling_end(struct tu_cmd_buffer *cmd, struct tu_cs *cs); |
| |
| void |
| tu_lrz_sysmem_begin(struct tu_cmd_buffer *cmd, struct tu_cs *cs); |
| |
| void |
| tu_lrz_sysmem_end(struct tu_cmd_buffer *cmd, struct tu_cs *cs); |
| |
| void |
| tu_lrz_disable_during_renderpass(struct tu_cmd_buffer *cmd); |
| |
| #endif /* TU_LRZ_H */ |