xref: /aosp_15_r20/external/mesa3d/src/panfrost/lib/pan_props.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright (C) 2019 Collabora, Ltd.
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker  *
11*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker  * Software.
14*61046927SAndroid Build Coastguard Worker  *
15*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20*61046927SAndroid Build Coastguard Worker  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21*61046927SAndroid Build Coastguard Worker  * SOFTWARE.
22*61046927SAndroid Build Coastguard Worker  *
23*61046927SAndroid Build Coastguard Worker  * Authors:
24*61046927SAndroid Build Coastguard Worker  *   Alyssa Rosenzweig <[email protected]>
25*61046927SAndroid Build Coastguard Worker  */
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker #ifndef PAN_PROPS_H
28*61046927SAndroid Build Coastguard Worker #define PAN_PROPS_H
29*61046927SAndroid Build Coastguard Worker 
30*61046927SAndroid Build Coastguard Worker #include <stdbool.h>
31*61046927SAndroid Build Coastguard Worker #include <stdint.h>
32*61046927SAndroid Build Coastguard Worker 
33*61046927SAndroid Build Coastguard Worker struct pan_kmod_dev;
34*61046927SAndroid Build Coastguard Worker struct pan_kmod_dev_props;
35*61046927SAndroid Build Coastguard Worker 
36*61046927SAndroid Build Coastguard Worker /** Implementation-defined tiler features */
37*61046927SAndroid Build Coastguard Worker struct panfrost_tiler_features {
38*61046927SAndroid Build Coastguard Worker    /** Number of bytes per tiler bin */
39*61046927SAndroid Build Coastguard Worker    unsigned bin_size;
40*61046927SAndroid Build Coastguard Worker 
41*61046927SAndroid Build Coastguard Worker    /** Maximum number of levels that may be simultaneously enabled.
42*61046927SAndroid Build Coastguard Worker     * Invariant: bitcount(hierarchy_mask) <= max_levels */
43*61046927SAndroid Build Coastguard Worker    unsigned max_levels;
44*61046927SAndroid Build Coastguard Worker };
45*61046927SAndroid Build Coastguard Worker 
46*61046927SAndroid Build Coastguard Worker struct panfrost_model {
47*61046927SAndroid Build Coastguard Worker    /* GPU ID */
48*61046927SAndroid Build Coastguard Worker    uint32_t gpu_id;
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker    /* GPU variant. */
51*61046927SAndroid Build Coastguard Worker    uint32_t gpu_variant;
52*61046927SAndroid Build Coastguard Worker 
53*61046927SAndroid Build Coastguard Worker    /* Marketing name for the GPU, used as the GL_RENDERER */
54*61046927SAndroid Build Coastguard Worker    const char *name;
55*61046927SAndroid Build Coastguard Worker 
56*61046927SAndroid Build Coastguard Worker    /* Set of associated performance counters */
57*61046927SAndroid Build Coastguard Worker    const char *performance_counters;
58*61046927SAndroid Build Coastguard Worker 
59*61046927SAndroid Build Coastguard Worker    /* Minimum GPU revision required for anisotropic filtering. ~0 and 0
60*61046927SAndroid Build Coastguard Worker     * means "no revisions support anisotropy" and "all revisions support
61*61046927SAndroid Build Coastguard Worker     * anistropy" respectively -- so checking for anisotropy is simply
62*61046927SAndroid Build Coastguard Worker     * comparing the reivsion.
63*61046927SAndroid Build Coastguard Worker     */
64*61046927SAndroid Build Coastguard Worker    uint32_t min_rev_anisotropic;
65*61046927SAndroid Build Coastguard Worker 
66*61046927SAndroid Build Coastguard Worker    /* Default tilebuffer size in bytes for the model. */
67*61046927SAndroid Build Coastguard Worker    unsigned tilebuffer_size;
68*61046927SAndroid Build Coastguard Worker 
69*61046927SAndroid Build Coastguard Worker    struct {
70*61046927SAndroid Build Coastguard Worker       /* The GPU lacks the capability for hierarchical tiling, without
71*61046927SAndroid Build Coastguard Worker        * an "Advanced Tiling Unit", instead requiring a single bin
72*61046927SAndroid Build Coastguard Worker        * size for the entire framebuffer be selected by the driver
73*61046927SAndroid Build Coastguard Worker        */
74*61046927SAndroid Build Coastguard Worker       bool no_hierarchical_tiling;
75*61046927SAndroid Build Coastguard Worker    } quirks;
76*61046927SAndroid Build Coastguard Worker };
77*61046927SAndroid Build Coastguard Worker 
78*61046927SAndroid Build Coastguard Worker const struct panfrost_model *panfrost_get_model(uint32_t gpu_id,
79*61046927SAndroid Build Coastguard Worker                                                 uint32_t gpu_variant);
80*61046927SAndroid Build Coastguard Worker 
81*61046927SAndroid Build Coastguard Worker unsigned panfrost_query_l2_slices(const struct pan_kmod_dev_props *props);
82*61046927SAndroid Build Coastguard Worker 
83*61046927SAndroid Build Coastguard Worker struct panfrost_tiler_features
84*61046927SAndroid Build Coastguard Worker panfrost_query_tiler_features(const struct pan_kmod_dev_props *props);
85*61046927SAndroid Build Coastguard Worker 
86*61046927SAndroid Build Coastguard Worker unsigned
87*61046927SAndroid Build Coastguard Worker panfrost_query_thread_tls_alloc(const struct pan_kmod_dev_props *props);
88*61046927SAndroid Build Coastguard Worker 
89*61046927SAndroid Build Coastguard Worker uint32_t
90*61046927SAndroid Build Coastguard Worker panfrost_query_compressed_formats(const struct pan_kmod_dev_props *props);
91*61046927SAndroid Build Coastguard Worker 
92*61046927SAndroid Build Coastguard Worker unsigned panfrost_query_core_count(const struct pan_kmod_dev_props *props,
93*61046927SAndroid Build Coastguard Worker                                    unsigned *core_id_range);
94*61046927SAndroid Build Coastguard Worker 
95*61046927SAndroid Build Coastguard Worker bool panfrost_query_afbc(const struct pan_kmod_dev_props *props);
96*61046927SAndroid Build Coastguard Worker 
97*61046927SAndroid Build Coastguard Worker bool panfrost_query_afrc(const struct pan_kmod_dev_props *props);
98*61046927SAndroid Build Coastguard Worker 
99*61046927SAndroid Build Coastguard Worker unsigned panfrost_query_optimal_tib_size(const struct panfrost_model *model);
100*61046927SAndroid Build Coastguard Worker 
101*61046927SAndroid Build Coastguard Worker uint64_t panfrost_clamp_to_usable_va_range(const struct pan_kmod_dev *dev,
102*61046927SAndroid Build Coastguard Worker                                            uint64_t va);
103*61046927SAndroid Build Coastguard Worker 
104*61046927SAndroid Build Coastguard Worker unsigned
105*61046927SAndroid Build Coastguard Worker panfrost_compute_max_thread_count(const struct pan_kmod_dev_props *props,
106*61046927SAndroid Build Coastguard Worker                                   unsigned work_reg_count);
107*61046927SAndroid Build Coastguard Worker 
108*61046927SAndroid Build Coastguard Worker /* Returns the architecture version given a GPU ID, either from a table for
109*61046927SAndroid Build Coastguard Worker  * old-style Midgard versions or directly for new-style Bifrost/Valhall
110*61046927SAndroid Build Coastguard Worker  * versions */
111*61046927SAndroid Build Coastguard Worker 
112*61046927SAndroid Build Coastguard Worker static inline unsigned
pan_arch(unsigned gpu_id)113*61046927SAndroid Build Coastguard Worker pan_arch(unsigned gpu_id)
114*61046927SAndroid Build Coastguard Worker {
115*61046927SAndroid Build Coastguard Worker    switch (gpu_id) {
116*61046927SAndroid Build Coastguard Worker    case 0x600:
117*61046927SAndroid Build Coastguard Worker    case 0x620:
118*61046927SAndroid Build Coastguard Worker    case 0x720:
119*61046927SAndroid Build Coastguard Worker       return 4;
120*61046927SAndroid Build Coastguard Worker    case 0x750:
121*61046927SAndroid Build Coastguard Worker    case 0x820:
122*61046927SAndroid Build Coastguard Worker    case 0x830:
123*61046927SAndroid Build Coastguard Worker    case 0x860:
124*61046927SAndroid Build Coastguard Worker    case 0x880:
125*61046927SAndroid Build Coastguard Worker       return 5;
126*61046927SAndroid Build Coastguard Worker    default:
127*61046927SAndroid Build Coastguard Worker       return gpu_id >> 12;
128*61046927SAndroid Build Coastguard Worker    }
129*61046927SAndroid Build Coastguard Worker }
130*61046927SAndroid Build Coastguard Worker 
131*61046927SAndroid Build Coastguard Worker #endif
132