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 Workerfd_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