[Mesa-dev] [PATCH 25/27] i965: Use partial resolves for CCS buffers being scanned out
Ben Widawsky
ben at bwidawsk.net
Sun Jan 1 23:08:02 UTC 2017
On 16-12-10 16:24:46, Pohjolainen, Topi wrote:
>On Thu, Dec 01, 2016 at 02:10:06PM -0800, Ben Widawsky wrote:
>> From: Ben Widawsky <ben at bwidawsk.net>
>>
>> On Gen9 hardware, the display engine is able to scanout a compressed
>> framebuffer by providing an offset to auxiliary compression information.
>> Unfortunately, the hardware is incapable of doing the same thing for the
>> fast clear color.
>>
>> To mitigate this, the hardware introduced a new resolve type called a
>> partial resolve. The partial resolve will only do a resolve of the fast
>> clear color and leave the rest of the compressed data alone.
>>
>> This patch enables using this resolve type for cases where the
>> framebuffer will be passed along to the kernel for display.
>>
>> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
>> ---
>> src/mesa/drivers/dri/i965/brw_context.c | 3 ++-
>> src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 4 ++--
>> 2 files changed, 4 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
>> index cfd7a54..2bc2e94 100644
>> --- a/src/mesa/drivers/dri/i965/brw_context.c
>> +++ b/src/mesa/drivers/dri/i965/brw_context.c
>> @@ -1359,7 +1359,8 @@ intel_resolve_for_dri2_flush(struct brw_context *brw,
>> if (rb->mt->num_samples <= 1) {
>> assert(rb->mt_layer == 0 && rb->mt_level == 0 &&
>> rb->layer_count == 1);
>> - intel_miptree_resolve_color(brw, rb->mt, 0, 0, 1, 0);
>
>I'm now in a territory that I don't know that well and just need to ask
>random questions. How do we know this is destined for display directly and not
>for non-gpu compositing?
>
I think that's always the case with intel_resolve_for_dri2_flush(). The current
callers are:
intel_flush_front() - from glFlush
and
intel_dri2_flush_with_flags - which is only called for drawables.
I wasn't entirely sure myself, but I assumed it was correct because it passed
all the CTS and piglit tests.
>> + intel_miptree_resolve_color(brw, rb->mt, 0, 0, 1,
>> + INTEL_RESOLVE_HINT_CLEAR_COLOR);
>> } else {
>> intel_renderbuffer_downsample(brw, rb);
>> }
>> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
>> index dd71a06..b79de08 100644
>> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
>> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
>> @@ -2399,8 +2399,8 @@ intel_miptree_make_shareable(struct brw_context *brw,
>> assert(mt->msaa_layout == INTEL_MSAA_LAYOUT_NONE || mt->num_samples <= 1);
>>
>> if (mt->mcs_buf) {
>
>Shouldn't we here at least check for scanout?
>
Hmm. This probably makes sense.
How about:
- intel_miptree_all_slices_resolve_color(brw, mt,
- INTEL_RESOLVE_HINT_CLEAR_COLOR);
+ intel_miptree_all_slices_resolve_color(brw, mt, mt->is_scanout ?
+ INTEL_RESOLVE_HINT_CLEAR_COLOR :
+ INTEL_RESOLVE_HINT_FULL);
>> - intel_miptree_all_slices_resolve_color(brw, mt, 0);
>> - mt->no_ccs = true;
>> + intel_miptree_all_slices_resolve_color(brw, mt,
>> + INTEL_RESOLVE_HINT_CLEAR_COLOR);
>> }
>> }
>>
>> --
>> 2.10.2
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list