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 <ch...@chris-wilson.co.uk> > > Cc: Daniel Vetter <daniel.vet...@ffwll.ch> > > Cc: Kenneth Graunke <kenn...@whitecape.org> > > Cc: Ben Widawsky <b...@bwidawsk.net> > > Cc: Kristian Høgsberg <k...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev