diff options
author | Chad Versace <[email protected]> | 2012-07-12 13:01:26 -0700 |
---|---|---|
committer | Chad Versace <[email protected]> | 2012-08-07 09:30:33 -0700 |
commit | 61fd6847827048ce9b01b1d164111472ad8bf593 (patch) | |
tree | 9bc0c425a7c6d924c7db3e42b93639bb7bb30b0f /src | |
parent | e88cfbb95f631ca1275a5cef4ccc5aaffb70aaba (diff) |
intel: Downsample on DRI2 flush
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Paul Berry <[email protected]>
Signed-off-by: Chad Versace <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_screen.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c index 9aca4639d25..a3c0140542e 100644 --- a/src/mesa/drivers/dri/intel/intel_screen.c +++ b/src/mesa/drivers/dri/intel/intel_screen.c @@ -150,6 +150,36 @@ static const __DRItexBufferExtension intelTexBufferExtension = { }; static void +intel_downsample_for_dri2_flush(struct intel_context *intel, + __DRIdrawable *drawable) +{ + if (intel->gen < 6) { + /* MSAA is not supported, so don't waste time checking for + * a multisample buffer. + */ + return; + } + + struct gl_framebuffer *fb = drawable->driverPrivate; + struct intel_renderbuffer *rb; + + /* Usually, only the back buffer will need to be downsampled. However, + * the front buffer will also need it if the user has rendered into it. + */ + static const gl_buffer_index buffers[2] = { + BUFFER_BACK_LEFT, + BUFFER_FRONT_LEFT, + }; + + for (int i = 0; i < 2; ++i) { + rb = intel_get_renderbuffer(fb, buffers[i]); + if (rb == NULL || rb->mt == NULL) + continue; + intel_miptree_downsample(intel, rb->mt); + } +} + +static void intelDRI2Flush(__DRIdrawable *drawable) { GET_CURRENT_CONTEXT(ctx); @@ -160,6 +190,7 @@ intelDRI2Flush(__DRIdrawable *drawable) if (intel->gen < 4) INTEL_FIREVERTICES(intel); + intel_downsample_for_dri2_flush(intel, drawable); intel->need_throttle = true; if (intel->batch.used) |