diff options
author | Jason Ekstrand <[email protected]> | 2018-05-31 17:00:35 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2018-06-04 15:27:29 -0700 |
commit | e99b32d4d6f0cce43ead45fee5d24c882004ba2f (patch) | |
tree | a44e520afe3b2bb96bca96b77d732094f1b3c78d /src/mesa/drivers | |
parent | 6ab9fe7673c77a367ceca3e77d95617b5a2a412f (diff) |
i965: Disable internal CCS for shadows of multi-sampled windows
If window system supports Y-tiling but not CCS_E, we currently create an
internal CCS for any window system buffers and then resolve right before
handing it off to X or Wayland. In the case of the single-sampled
shadow of a multi-sampled window system buffer, this is pointless
because the only thing we do with it is use it as a MSAA resolve target
so we do MSAA resolve -> CCS resolve -> hand to the window system.
Instead, just disable CCS for the shadow and then the MSAA resolve will
write uncompressed directly into it. If the window system supports
CCS_E, we will still use CCS_E, we just won't do internal CCS.
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index bd1e20845f0..9ced230ec14 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -1688,9 +1688,18 @@ intel_update_image_buffer(struct brw_context *intel, if (last_mt && last_mt->bo == buffer->bo) return; + /* Only allow internal compression if samples == 0. For multisampled + * window system buffers, the only thing the single-sampled buffer is used + * for is as a resolve target. If we do any compression beyond what is + * supported by the window system, we will just have to resolve so it's + * probably better to just not bother. + */ + const bool allow_internal_aux = (num_samples == 0); + struct intel_mipmap_tree *mt = intel_miptree_create_for_dri_image(intel, buffer, GL_TEXTURE_2D, - intel_rb_format(rb), true); + intel_rb_format(rb), + allow_internal_aux); if (!mt) return; |