X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Fintel_debug.c;h=19be464a8fe0d2257bb9958c7f940e315e5d54e4;hb=d5a15a89f081bdd23237b8ba5391a2ebea60468b;hp=77f410a6b329175cd153428e9e785e4535564047;hpb=877128505431adaf817dc8069172ebe4a1cdf5d8;p=mesa.git diff --git a/src/mesa/drivers/dri/i965/intel_debug.c b/src/mesa/drivers/dri/i965/intel_debug.c index 77f410a6b32..19be464a8fe 100644 --- a/src/mesa/drivers/dri/i965/intel_debug.c +++ b/src/mesa/drivers/dri/i965/intel_debug.c @@ -32,46 +32,66 @@ #include "brw_context.h" #include "intel_debug.h" #include "utils.h" +#include "util/u_atomic.h" /* for p_atomic_cmpxchg */ -int INTEL_DEBUG = 0; +uint64_t INTEL_DEBUG = 0; static const struct dri_debug_control debug_control[] = { - { "tex", DEBUG_TEXTURE}, - { "state", DEBUG_STATE}, - { "blit", DEBUG_BLIT}, - { "mip", DEBUG_MIPTREE}, - { "fall", DEBUG_PERF}, - { "perf", DEBUG_PERF}, - { "perfmon", DEBUG_PERFMON}, - { "bat", DEBUG_BATCH}, - { "pix", DEBUG_PIXEL}, - { "buf", DEBUG_BUFMGR}, - { "reg", DEBUG_REGION}, - { "fbo", DEBUG_FBO}, - { "fs", DEBUG_WM }, - { "gs", DEBUG_GS}, - { "sync", DEBUG_SYNC}, - { "prim", DEBUG_PRIMS }, - { "vert", DEBUG_VERTS }, - { "dri", DEBUG_DRI }, - { "sf", DEBUG_SF }, - { "stats", DEBUG_STATS }, - { "wm", DEBUG_WM }, - { "urb", DEBUG_URB }, - { "vs", DEBUG_VS }, - { "clip", DEBUG_CLIP }, - { "aub", DEBUG_AUB }, + { "tex", DEBUG_TEXTURE}, + { "state", DEBUG_STATE}, + { "blit", DEBUG_BLIT}, + { "mip", DEBUG_MIPTREE}, + { "fall", DEBUG_PERF}, + { "perf", DEBUG_PERF}, + { "perfmon", DEBUG_PERFMON}, + { "bat", DEBUG_BATCH}, + { "pix", DEBUG_PIXEL}, + { "buf", DEBUG_BUFMGR}, + { "fbo", DEBUG_FBO}, + { "fs", DEBUG_WM }, + { "gs", DEBUG_GS}, + { "sync", DEBUG_SYNC}, + { "prim", DEBUG_PRIMS }, + { "vert", DEBUG_VERTS }, + { "dri", DEBUG_DRI }, + { "sf", DEBUG_SF }, + { "stats", DEBUG_STATS }, + { "wm", DEBUG_WM }, + { "urb", DEBUG_URB }, + { "vs", DEBUG_VS }, + { "clip", DEBUG_CLIP }, + { "aub", DEBUG_AUB }, { "shader_time", DEBUG_SHADER_TIME }, - { "no16", DEBUG_NO16 }, - { "blorp", DEBUG_BLORP }, - { "nodualobj", DEBUG_NO_DUAL_OBJECT_GS }, + { "no16", DEBUG_NO16 }, + { "blorp", DEBUG_BLORP }, + { "nodualobj", DEBUG_NO_DUAL_OBJECT_GS }, + { "optimizer", DEBUG_OPTIMIZER }, + { "ann", DEBUG_ANNOTATION }, + { "no8", DEBUG_NO8 }, + { "vec4vs", DEBUG_VEC4VS }, + { "spill", DEBUG_SPILL }, { NULL, 0 } }; +uint64_t +intel_debug_flag_for_shader_stage(gl_shader_stage stage) +{ + int flags[] = { + [MESA_SHADER_VERTEX] = DEBUG_VS, + [MESA_SHADER_GEOMETRY] = DEBUG_GS, + [MESA_SHADER_FRAGMENT] = DEBUG_WM, + [MESA_SHADER_COMPUTE] = 0, /* no debug flag yet */ + }; + STATIC_ASSERT(MESA_SHADER_STAGES == 4); + return flags[stage]; +} + void brw_process_intel_debug_variable(struct brw_context *brw) { - INTEL_DEBUG = driParseDebugString(getenv("INTEL_DEBUG"), debug_control); + uint64_t intel_debug = driParseDebugString(getenv("INTEL_DEBUG"), debug_control); + (void) p_atomic_cmpxchg(&INTEL_DEBUG, 0, intel_debug); + if (INTEL_DEBUG & DEBUG_BUFMGR) dri_bufmgr_set_debug(brw->bufmgr, true); @@ -87,3 +107,28 @@ brw_process_intel_debug_variable(struct brw_context *brw) if (INTEL_DEBUG & DEBUG_AUB) drm_intel_bufmgr_gem_set_aub_dump(brw->bufmgr, true); } + +/** + * Reads an environment variable and interprets its value as a boolean. + * + * Recognizes 0/false/no and 1/true/yes. Other values result in the default value. + */ +bool +brw_env_var_as_boolean(const char *var_name, bool default_value) +{ + const char *str = getenv(var_name); + if (str == NULL) + return default_value; + + if (strcmp(str, "1") == 0 || + strcasecmp(str, "true") == 0 || + strcasecmp(str, "yes") == 0) { + return true; + } else if (strcmp(str, "0") == 0 || + strcasecmp(str, "false") == 0 || + strcasecmp(str, "no") == 0) { + return false; + } else { + return default_value; + } +}