xref: /aosp_15_r20/external/mesa3d/src/broadcom/common/v3d_debug.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2003 VMware, Inc.
3*61046927SAndroid Build Coastguard Worker  * Copyright © 2006 Intel Corporation
4*61046927SAndroid Build Coastguard Worker  * Copyright © 2017 Broadcom
5*61046927SAndroid Build Coastguard Worker  *
6*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
7*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
8*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
9*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
11*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
12*61046927SAndroid Build Coastguard Worker  *
13*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
14*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
15*61046927SAndroid Build Coastguard Worker  * Software.
16*61046927SAndroid Build Coastguard Worker  *
17*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21*61046927SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22*61046927SAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
23*61046927SAndroid Build Coastguard Worker  * IN THE SOFTWARE.
24*61046927SAndroid Build Coastguard Worker  */
25*61046927SAndroid Build Coastguard Worker 
26*61046927SAndroid Build Coastguard Worker /**
27*61046927SAndroid Build Coastguard Worker  * \file v3d_debug.c
28*61046927SAndroid Build Coastguard Worker  *
29*61046927SAndroid Build Coastguard Worker  * Support for the V3D_DEBUG environment variable, along with other
30*61046927SAndroid Build Coastguard Worker  * miscellaneous debugging code.
31*61046927SAndroid Build Coastguard Worker  */
32*61046927SAndroid Build Coastguard Worker 
33*61046927SAndroid Build Coastguard Worker #include <stdlib.h>
34*61046927SAndroid Build Coastguard Worker 
35*61046927SAndroid Build Coastguard Worker #include "common/v3d_debug.h"
36*61046927SAndroid Build Coastguard Worker #include "util/macros.h"
37*61046927SAndroid Build Coastguard Worker #include "util/u_debug.h"
38*61046927SAndroid Build Coastguard Worker #include "c11/threads.h"
39*61046927SAndroid Build Coastguard Worker 
40*61046927SAndroid Build Coastguard Worker uint32_t v3d_mesa_debug = 0;
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker static const struct debug_named_value debug_control[] = {
43*61046927SAndroid Build Coastguard Worker         { "cl",          V3D_DEBUG_CL,
44*61046927SAndroid Build Coastguard Worker           "Dump command list during creation" },
45*61046927SAndroid Build Coastguard Worker         { "cl_nobin",    V3D_DEBUG_CL_NO_BIN,
46*61046927SAndroid Build Coastguard Worker           "Dump command list during creation, excluding binary resources" },
47*61046927SAndroid Build Coastguard Worker         { "clif",        V3D_DEBUG_CLIF,
48*61046927SAndroid Build Coastguard Worker           "Dump command list (CLIF format) during creation", },
49*61046927SAndroid Build Coastguard Worker         { "qpu",         V3D_DEBUG_QPU,
50*61046927SAndroid Build Coastguard Worker           "Dump generated QPU instructions" },
51*61046927SAndroid Build Coastguard Worker         { "vir",         V3D_DEBUG_VIR,
52*61046927SAndroid Build Coastguard Worker           "Dump VIR during program compile" },
53*61046927SAndroid Build Coastguard Worker         { "nir",         V3D_DEBUG_NIR,
54*61046927SAndroid Build Coastguard Worker           "Dump NIR during program compile" },
55*61046927SAndroid Build Coastguard Worker         { "tgsi",        V3D_DEBUG_TGSI,
56*61046927SAndroid Build Coastguard Worker           "Dump TGSI during program compile (v3d only)" },
57*61046927SAndroid Build Coastguard Worker         /* `shaderdb` is *not* used by shader-db, but is here so that any other
58*61046927SAndroid Build Coastguard Worker          * game/app can dump its stats in the shader-db format, allowing them
59*61046927SAndroid Build Coastguard Worker          * to be compared using shader-db's report.py tool.
60*61046927SAndroid Build Coastguard Worker          */
61*61046927SAndroid Build Coastguard Worker         { "shaderdb",    V3D_DEBUG_SHADERDB,
62*61046927SAndroid Build Coastguard Worker           "Dump program compile information for shader-db analysis" },
63*61046927SAndroid Build Coastguard Worker         { "surface",     V3D_DEBUG_SURFACE,
64*61046927SAndroid Build Coastguard Worker           /* FIXME: evaluate to implement it on v3dv */
65*61046927SAndroid Build Coastguard Worker           "Print resource layout information (v3d only)" },
66*61046927SAndroid Build Coastguard Worker         { "perf",        V3D_DEBUG_PERF,
67*61046927SAndroid Build Coastguard Worker           "Print performance-related events during runtime" },
68*61046927SAndroid Build Coastguard Worker         { "norast",      V3D_DEBUG_NORAST,
69*61046927SAndroid Build Coastguard Worker           /* FIXME: evaluate to implement on v3dv*/
70*61046927SAndroid Build Coastguard Worker           "Skip actual hardware execution of commands (v3d only)" },
71*61046927SAndroid Build Coastguard Worker         { "fs",          V3D_DEBUG_FS,
72*61046927SAndroid Build Coastguard Worker           "Dump fragment shaders" },
73*61046927SAndroid Build Coastguard Worker         { "gs",          V3D_DEBUG_GS,
74*61046927SAndroid Build Coastguard Worker           "Dump geometry shaders" },
75*61046927SAndroid Build Coastguard Worker         { "vs",          V3D_DEBUG_VS,
76*61046927SAndroid Build Coastguard Worker           "Dump vertex shaders" },
77*61046927SAndroid Build Coastguard Worker         { "cs",          V3D_DEBUG_CS,
78*61046927SAndroid Build Coastguard Worker           "Dump computer shaders" },
79*61046927SAndroid Build Coastguard Worker         { "always_flush", V3D_DEBUG_ALWAYS_FLUSH,
80*61046927SAndroid Build Coastguard Worker           "Flush after each draw call" },
81*61046927SAndroid Build Coastguard Worker         { "precompile",  V3D_DEBUG_PRECOMPILE,
82*61046927SAndroid Build Coastguard Worker           "Precompiles shader variant at shader state creation time (v3d only)" },
83*61046927SAndroid Build Coastguard Worker         { "ra",          V3D_DEBUG_RA,
84*61046927SAndroid Build Coastguard Worker           "Dump register allocation failures" },
85*61046927SAndroid Build Coastguard Worker         { "tmu32",  V3D_DEBUG_TMU_32BIT,
86*61046927SAndroid Build Coastguard Worker           "Force 32-bit precision on all TMU operations" },
87*61046927SAndroid Build Coastguard Worker         /* This can lead to incorrect behavior for applications that do
88*61046927SAndroid Build Coastguard Worker          * require full 32-bit precision, but can improve performance
89*61046927SAndroid Build Coastguard Worker          * for those that don't.
90*61046927SAndroid Build Coastguard Worker          */
91*61046927SAndroid Build Coastguard Worker         { "tmu16",  V3D_DEBUG_TMU_16BIT,
92*61046927SAndroid Build Coastguard Worker           "Force 16-bit precision on all TMU operations" },
93*61046927SAndroid Build Coastguard Worker         { "noloopunroll",  V3D_DEBUG_NO_LOOP_UNROLL,
94*61046927SAndroid Build Coastguard Worker           "Disable loop unrolling" },
95*61046927SAndroid Build Coastguard Worker         { "db", V3D_DEBUG_DOUBLE_BUFFER,
96*61046927SAndroid Build Coastguard Worker           "Enable double buffer for Tile Buffer when MSAA is disabled" },
97*61046927SAndroid Build Coastguard Worker #ifdef ENABLE_SHADER_CACHE
98*61046927SAndroid Build Coastguard Worker         { "cache", V3D_DEBUG_CACHE,
99*61046927SAndroid Build Coastguard Worker           "Print on-disk cache events (only with cache enabled)" },
100*61046927SAndroid Build Coastguard Worker #endif
101*61046927SAndroid Build Coastguard Worker         { "no_merge_jobs", V3D_DEBUG_NO_MERGE_JOBS,
102*61046927SAndroid Build Coastguard Worker           "Don't try to merge subpasses in the same job even if they share framebuffer configuration (v3dv only)" },
103*61046927SAndroid Build Coastguard Worker         { "opt_compile_time", V3D_DEBUG_OPT_COMPILE_TIME,
104*61046927SAndroid Build Coastguard Worker           "Don't try to reduce shader spilling, might improve compile times with expensive shaders." },
105*61046927SAndroid Build Coastguard Worker         /* disable_tfu is v3dv only because v3d has some uses of the TFU without alternative codepaths */
106*61046927SAndroid Build Coastguard Worker         { "disable_tfu", V3D_DEBUG_DISABLE_TFU,
107*61046927SAndroid Build Coastguard Worker           "Disable TFU (v3dv only)" },
108*61046927SAndroid Build Coastguard Worker         DEBUG_NAMED_VALUE_END
109*61046927SAndroid Build Coastguard Worker };
110*61046927SAndroid Build Coastguard Worker 
111*61046927SAndroid Build Coastguard Worker DEBUG_GET_ONCE_FLAGS_OPTION(v3d_debug, "V3D_DEBUG", debug_control, 0)
112*61046927SAndroid Build Coastguard Worker 
113*61046927SAndroid Build Coastguard Worker bool
v3d_debug_flag_for_shader_stage(gl_shader_stage stage)114*61046927SAndroid Build Coastguard Worker v3d_debug_flag_for_shader_stage(gl_shader_stage stage)
115*61046927SAndroid Build Coastguard Worker {
116*61046927SAndroid Build Coastguard Worker         uint32_t flags[] = {
117*61046927SAndroid Build Coastguard Worker                 [MESA_SHADER_VERTEX] = V3D_DEBUG_VS,
118*61046927SAndroid Build Coastguard Worker                 [MESA_SHADER_TESS_CTRL] = 0,
119*61046927SAndroid Build Coastguard Worker                 [MESA_SHADER_TESS_EVAL] = 0,
120*61046927SAndroid Build Coastguard Worker                 [MESA_SHADER_GEOMETRY] = V3D_DEBUG_GS,
121*61046927SAndroid Build Coastguard Worker                 [MESA_SHADER_FRAGMENT] = V3D_DEBUG_FS,
122*61046927SAndroid Build Coastguard Worker                 [MESA_SHADER_COMPUTE] = V3D_DEBUG_CS,
123*61046927SAndroid Build Coastguard Worker         };
124*61046927SAndroid Build Coastguard Worker         STATIC_ASSERT(MESA_SHADER_STAGES == 6);
125*61046927SAndroid Build Coastguard Worker         return v3d_mesa_debug & flags[stage];
126*61046927SAndroid Build Coastguard Worker }
127*61046927SAndroid Build Coastguard Worker 
128*61046927SAndroid Build Coastguard Worker void
v3d_process_debug_variable(void)129*61046927SAndroid Build Coastguard Worker v3d_process_debug_variable(void)
130*61046927SAndroid Build Coastguard Worker {
131*61046927SAndroid Build Coastguard Worker         v3d_mesa_debug = debug_get_option_v3d_debug();
132*61046927SAndroid Build Coastguard Worker }
133