[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