diff options
author | Kenneth Graunke <[email protected]> | 2019-04-15 21:59:50 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2019-04-16 09:01:15 -0700 |
commit | fad7801afd194c504bd945c497741ecaf04e2cdd (patch) | |
tree | 552a1266c996048a4f900f333a54fb0b8bffb473 /src/mesa/drivers/dri/i965/brw_vs.c | |
parent | 4f715868a94b2c43656b3574b876bd254757521b (diff) |
i965: Move program key debugging to the compiler.
The i965 driver has a bunch of code to compare two sets of program keys
and print out the differences. This can be useful for debugging why a
shader needed to be recompiled on the fly due to non-orthogonal state
dependencies. anv doesn't do recompiles, so we didn't need to share
this in the past - but I'd like to use it in iris.
This moves the bulk of the code to the compiler where it can be reused.
To make that possible, we need to decouple it from i965 - we can't get
at the brw program cache directly, nor use brw_context to print things.
Instead, we use compiler->shader_perf_log(), and simply pass in keys.
We put all of this debugging code in brw_debug_recompile.c, and only
export a single function, for simplicity. I also tidied the code a
bit while moving it, now that it all lives in one file.
Reviewed-by: Jordan Justen <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_vs.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vs.c | 44 |
1 files changed, 2 insertions, 42 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c index 01ddf9a4851..12ab05c67c4 100644 --- a/src/mesa/drivers/dri/i965/brw_vs.c +++ b/src/mesa/drivers/dri/i965/brw_vs.c @@ -111,47 +111,6 @@ brw_vs_outputs_written(struct brw_context *brw, struct brw_vs_prog_key *key, return outputs_written; } -static void -brw_vs_debug_recompile(struct brw_context *brw, struct gl_program *prog, - const struct brw_vs_prog_key *key) -{ - perf_debug("Recompiling vertex shader for program %d\n", prog->Id); - - bool found = false; - const struct brw_vs_prog_key *old_key = - brw_find_previous_compile(&brw->cache, BRW_CACHE_VS_PROG, - key->program_string_id); - - if (!old_key) { - perf_debug(" Didn't find previous compile in the shader cache for " - "debug\n"); - return; - } - - for (unsigned int i = 0; i < VERT_ATTRIB_MAX; i++) { - found |= key_debug(brw, "Vertex attrib w/a flags", - old_key->gl_attrib_wa_flags[i], - key->gl_attrib_wa_flags[i]); - } - - found |= key_debug(brw, "legacy user clipping", - old_key->nr_userclip_plane_consts, - key->nr_userclip_plane_consts); - - found |= key_debug(brw, "copy edgeflag", - old_key->copy_edgeflag, key->copy_edgeflag); - found |= key_debug(brw, "PointCoord replace", - old_key->point_coord_replace, key->point_coord_replace); - found |= key_debug(brw, "vertex color clamping", - old_key->clamp_vertex_color, key->clamp_vertex_color); - - found |= brw_debug_recompile_sampler_key(brw, &old_key->tex, &key->tex); - - if (!found) { - perf_debug(" Something else\n"); - } -} - static bool brw_codegen_vs_prog(struct brw_context *brw, struct brw_program *vp, @@ -237,7 +196,8 @@ brw_codegen_vs_prog(struct brw_context *brw, if (unlikely(brw->perf_debug)) { if (vp->compiled_once) { - brw_vs_debug_recompile(brw, &vp->program, key); + brw_debug_recompile(brw, MESA_SHADER_VERTEX, vp->program.Id, + key->program_string_id, key); } if (start_busy && !brw_bo_busy(brw->batch.last_bo)) { perf_debug("VS compile took %.03f ms and stalled the GPU\n", |