From 2182d2db28e9ae5c276dcbad1309cf3484a4476e Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 7 Nov 2013 16:57:23 -0700 Subject: [PATCH] svga: document magic number of 8 render targets per batch Grab the comments from commit message b84b7f19dfdc0 to explain what the code is doing. --- src/gallium/drivers/svga/svga_state_framebuffer.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/svga/svga_state_framebuffer.c b/src/gallium/drivers/svga/svga_state_framebuffer.c index 8232c32..4254404 100644 --- a/src/gallium/drivers/svga/svga_state_framebuffer.c +++ b/src/gallium/drivers/svga/svga_state_framebuffer.c @@ -33,6 +33,18 @@ #include "svga_debug.h" +/* + * flush our command buffer after the 8th distinct render target + * + * This helps improve the surface cache behaviour in the face of the + * large number of single-use render targets generated by EXA and the xorg + * state tracker. Without this we can reference hundreds of individual + * render targets from a command buffer, which leaves little scope for + * sharing or reuse of those targets. + */ +#define MAX_RT_PER_BATCH 8 + + /*********************************************************************** * Hardware state update */ @@ -56,7 +68,7 @@ emit_framebuffer( struct svga_context *svga, for(i = 0; i < PIPE_MAX_COLOR_BUFS; ++i) { if (curr->cbufs[i] != hw->cbufs[i] || (reemit && hw->cbufs[i])) { - if (svga->curr.nr_fbs++ > 8) + if (svga->curr.nr_fbs++ > MAX_RT_PER_BATCH) return PIPE_ERROR_OUT_OF_MEMORY; ret = SVGA3D_SetRenderTarget(svga->swc, SVGA3D_RT_COLOR0 + i, curr->cbufs[i]); -- 2.7.4