[Mesa-dev] [PATCH 1/8] i965: Directly call intel_batchbuffer_flush() after i915 split.

Kenneth Graunke kenneth at whitecape.org
Tue Aug 27 17:00:33 PDT 2013


On 08/27/2013 03:21 PM, Eric Anholt wrote:
> intel_flush() now did nothing except call through (and
> intel_batchbuffer_flush() does the no-op check, too!)
> ---
>   src/mesa/drivers/dri/i965/gen6_blorp.cpp         |  4 +---
>   src/mesa/drivers/dri/i965/intel_buffer_objects.c |  2 +-
>   src/mesa/drivers/dri/i965/intel_context.c        | 17 ++++-------------
>   src/mesa/drivers/dri/i965/intel_context.h        |  3 ---
>   src/mesa/drivers/dri/i965/intel_mipmap_tree.c    |  3 +--
>   src/mesa/drivers/dri/i965/intel_pixel_copy.c     |  3 ++-
>   src/mesa/drivers/dri/i965/intel_syncobj.c        |  2 +-
>   7 files changed, 10 insertions(+), 24 deletions(-)

Series is:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

When running glxgears with INTEL_DEBUG=bat (and batch decoding turned 
off) on master, I see this:

intel_context.c:366: Batchbuffer flush with 5388b (pkt) + 3424b (state) 
= 8812b (26.9%)
intel_screen.c:165: Batchbuffer flush with  748b (pkt) +  448b (state) = 
1196b (3.6%)
gen6_blorp.cpp:57: Batchbuffer flush with   16b (pkt) +    0b (state) = 
   16b (0.0%)
gen6_blorp.cpp:57: Batchbuffer flush with  740b (pkt) +  160b (state) = 
  900b (2.7%)
......repeating......

Which is pretty ridiculous...a 16 byte batch?  Really?  And we have to 
switch to the kernel to execbuffer that.  The others aren't much better.

With this series, we get a single batch per frame:

intel_screen.c:176: Batchbuffer flush with 6940b (pkt) + 4096b (state) = 
11036b (33.7%)
......repeating......

Clearly much better.  Every other application I've looked at sees 
similar benefits - much better batch utilization, much fewer tiny batches.

--Ken


More information about the mesa-dev mailing list