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 bool disable_for_rp : 1; 37 /* Allows to temporary disable LRZ */ 38 bool enabled : 1; 39 bool fast_clear : 1; 40 bool gpu_dir_tracking : 1; 41 /* Continue using old LRZ state (LOAD_OP_LOAD of depth) */ 42 bool reuse_previous_state : 1; 43 enum tu_lrz_direction prev_direction; 44 }; 45 46 template <chip CHIP> 47 void 48 tu6_emit_lrz(struct tu_cmd_buffer *cmd, struct tu_cs *cs); 49 50 template <chip CHIP> 51 void 52 tu_disable_lrz(struct tu_cmd_buffer *cmd, struct tu_cs *cs, 53 struct tu_image *image); 54 55 template <chip CHIP> 56 void 57 tu_disable_lrz_cpu(struct tu_device *device, struct tu_image *image); 58 59 template <chip CHIP> 60 void 61 tu_lrz_clear_depth_image(struct tu_cmd_buffer *cmd, 62 struct tu_image *image, 63 const VkClearDepthStencilValue *pDepthStencil, 64 uint32_t rangeCount, 65 const VkImageSubresourceRange *pRanges); 66 67 template <chip CHIP> 68 void 69 tu_lrz_begin_renderpass(struct tu_cmd_buffer *cmd); 70 71 template <chip CHIP> 72 void 73 tu_lrz_begin_resumed_renderpass(struct tu_cmd_buffer *cmd); 74 75 void 76 tu_lrz_begin_secondary_cmdbuf(struct tu_cmd_buffer *cmd); 77 78 template <chip CHIP> 79 void 80 tu_lrz_tiling_begin(struct tu_cmd_buffer *cmd, struct tu_cs *cs); 81 82 template <chip CHIP> 83 void 84 tu_lrz_before_tile(struct tu_cmd_buffer *cmd, struct tu_cs *cs); 85 86 template <chip CHIP> 87 void 88 tu_lrz_tiling_end(struct tu_cmd_buffer *cmd, struct tu_cs *cs); 89 90 template <chip CHIP> 91 void 92 tu_lrz_sysmem_begin(struct tu_cmd_buffer *cmd, struct tu_cs *cs); 93 94 template <chip CHIP> 95 void 96 tu_lrz_sysmem_end(struct tu_cmd_buffer *cmd, struct tu_cs *cs); 97 98 template <chip CHIP> 99 void 100 tu_lrz_disable_during_renderpass(struct tu_cmd_buffer *cmd, 101 const char *reason); 102 103 template <chip CHIP> 104 void 105 tu_lrz_flush_valid_during_renderpass(struct tu_cmd_buffer *cmd, 106 struct tu_cs *cs); 107 108 #endif /* TU_LRZ_H */ 109