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