[Mesa-dev] [PATCH] i965: Throttle rendering to an fbo

Chris Wilson chris at chris-wilson.co.uk
Wed Mar 4 09:52:00 PST 2015


On Wed, Mar 04, 2015 at 09:41:56AM -0800, Chad Versace wrote:
> On 02/26/2015 05:24 AM, Chris Wilson wrote:
> > When rendering to an fbo, even though it may be acting as a winsys
> > frontbuffer or just generally, we never throttle. However, when rendering
> > to an fbo, there is no natural frame boundary. Conventionally we use
> > SwapBuffers and glFinish, but potential callers avoid often glFinish for
> > being too heavy handed (waiting on all outstanding rendering to complete).
> > The kernel provides a soft-throttling option for this case that waits for
> > rendering older than 20ms to be complete (that's a little too lax to be
> > used for swapbuffers, but is here a useful safety net). The remaining
> > choice is then either never to throttle, throttle after every draw call,
> > or at an intermediate user defined point such as glFlush and thus all the
> > implied flushes. This patch opts for the latter.
> > 
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> > Cc: Kenneth Graunke <kenneth at whitecape.org>
> > Cc: Ben Widawsky <ben at bwidawsk.net>
> > Cc: Kristian Høgsberg <krh at bitplanet.net>
> > ---
> >  src/mesa/drivers/dri/i965/brw_context.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
> > index c844888..f190df1 100644
> > --- a/src/mesa/drivers/dri/i965/brw_context.c
> > +++ b/src/mesa/drivers/dri/i965/brw_context.c
> > @@ -229,11 +229,14 @@ static void
> >  intel_glFlush(struct gl_context *ctx)
> >  {
> >     struct brw_context *brw = brw_context(ctx);
> > +   __DRIscreen *psp = brw->intelScreen->driScrnPriv;
> >  
> >     intel_batchbuffer_flush(brw);
> >     intel_flush_front(ctx);
> >     if (brw_is_front_buffer_drawing(ctx->DrawBuffer))
> >        brw->need_throttle = true;
> > +
> > +   drmCommandNone(psp->fd, DRM_I915_GEM_THROTTLE);
> >  }
> >  
> >  static void
> > 
> 
> glFlush should not wait for previous rendering to complete. It's not supposed
> to be a blocking operation.

The manpage for glFlush says

"glFlush can return at any time.  It does not wait until the execution of *all*
previously issued GL commands is complete."

Emphasis mine. In double buffered, and normal frontbuffered (non-fbo),
rendering the throttle is a no-op as there will not be any old rendering
to wait upon.

> Why this patch? What are you trying to fix?
http://patchwork.freedesktop.org/patch/43432/
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the mesa-dev mailing list