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

Chris Wilson chris at chris-wilson.co.uk
Thu Feb 26 05:24:39 PST 2015


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
-- 
2.1.4



More information about the mesa-dev mailing list