On 04/07/2013 06:42 AM, Paul Berry wrote:
The call to emit_shader_time_end() before the second URB write was conditioned with "if (eot)", but eot is always false in this code path, so emit_shader_time_end() was never being called for vertex shaders that performed 2 URB writes.
I had to look at that code for way to long to convince myself that your patch was correct. I think it might be better to remove both the conditional emit_shader_time_end calls and put this block of code at the very bottom (unless emit_shader_time_end has some side effect that I don't see):
if (inst->eot) { if (INTEL_DEBUG & DEBUG_SHADER_TIME) emit_shader_time_end(); } Or does the last URB write have to be the last instruction?
--- src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp index 8bd2fd8..ca1cfe8 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -2664,10 +2664,8 @@ vec4_visitor::emit_urb_writes() emit_urb_slot(mrf++, c->prog_data.vue_map.slot_to_varying[slot]); } - if (eot) { - if (INTEL_DEBUG & DEBUG_SHADER_TIME) - emit_shader_time_end(); - } + if (INTEL_DEBUG & DEBUG_SHADER_TIME) + emit_shader_time_end(); current_annotation = "URB write"; inst = emit(VS_OPCODE_URB_WRITE);
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev