[Mesa-dev] [PATCH] i965/vs: Fix DEBUG_SHADER_TIME when VS terminates with 2 URB writes.
Ian Romanick
idr at freedesktop.org
Mon Apr 8 10:37:17 PDT 2013
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);
>
More information about the mesa-dev
mailing list