diff options
author | Eric Anholt <[email protected]> | 2013-03-19 15:14:20 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2013-03-28 11:46:23 -0700 |
commit | 47e795d8612e5fde70740450d02370514ecc79e3 (patch) | |
tree | 77cdbc39db853cf43ac062b7331940e45efef43c | |
parent | 5c5218ea6163f694a256562df1d73a108396e40d (diff) |
i965/fs: Include everything but the final FB write in shader_time.
Previously, if you just wrote a constant color to the render target, no
time got noted at all. This is convenient for doing single-instruction
timings, but not so much for actual program analysis.
Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.cpp | 3 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 17 |
2 files changed, 15 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 9ea7339f581..273761b0d22 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -2784,9 +2784,6 @@ fs_visitor::run() if (failed) return false; - if (INTEL_DEBUG & DEBUG_SHADER_TIME) - emit_shader_time_end(); - emit_fb_writes(); split_virtual_grfs(); diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index 735a33d856b..857f956232e 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -2263,6 +2263,9 @@ fs_visitor::emit_fb_writes() inst->saturate = c->key.clamp_fragment_color; } + if (INTEL_DEBUG & DEBUG_SHADER_TIME) + emit_shader_time_end(); + fs_inst *inst = emit(FS_OPCODE_FB_WRITE); inst->target = 0; inst->base_mrf = base_mrf; @@ -2297,6 +2300,14 @@ fs_visitor::emit_fb_writes() for (unsigned i = 0; i < this->output_components[target]; i++) emit_color_write(target, i, write_color_mrf); + bool eot = false; + if (target == c->key.nr_color_regions - 1) { + eot = true; + + if (INTEL_DEBUG & DEBUG_SHADER_TIME) + emit_shader_time_end(); + } + fs_inst *inst = emit(FS_OPCODE_FB_WRITE); inst->target = target; inst->base_mrf = base_mrf; @@ -2304,8 +2315,7 @@ fs_visitor::emit_fb_writes() inst->mlen = nr - base_mrf - reg_width; else inst->mlen = nr - base_mrf; - if (target == c->key.nr_color_regions - 1) - inst->eot = true; + inst->eot = eot; inst->header_present = header_present; } @@ -2316,6 +2326,9 @@ fs_visitor::emit_fb_writes() */ emit_color_write(0, 3, color_mrf); + if (INTEL_DEBUG & DEBUG_SHADER_TIME) + emit_shader_time_end(); + fs_inst *inst = emit(FS_OPCODE_FB_WRITE); inst->base_mrf = base_mrf; inst->mlen = nr - base_mrf; |