From b8156a9a86ae4ff087b1b255c68a3ca38ec2d086 Mon Sep 17 00:00:00 2001 From: der richter Date: Sun, 6 Dec 2020 19:06:30 +0100 Subject: vo_gpu: revert 8a09299 and conditionally clear framebuffer again in the original commit, that removed the conditional clearing, an incorrect assumption was made that clearing "should be practically free" and can be done always. though, at least on macOS + intel this can have a performance impact of up to 50% increased usage. it might have an impact on other platforms and setups as well, but this is unconfirmed. the reason for removing the conditional clearing was to partially work around a driver bug on very specific setups, X11 with amdgpu and OpenGL, to clear garbled frames on start. though it still has issues with garbled frames in other situation like fullscreening. there is also an open bug report on the mesa bug tracker about this. setting the radeonsi_zerovram flag works around all of those issues. since the flag works around all these issues and the original fix doesn't work completely we revert it and keep our optimisation. Fixes #8273 --- video/out/gpu/video.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'video') diff --git a/video/out/gpu/video.c b/video/out/gpu/video.c index 851289e281..a99e70270e 100644 --- a/video/out/gpu/video.c +++ b/video/out/gpu/video.c @@ -3246,9 +3246,11 @@ void gl_video_render_frame(struct gl_video *p, struct vo_frame *frame, bool has_frame = !!frame->current; - struct m_color c = p->clear_color; - float clear_color[4] = {c.r / 255.0, c.g / 255.0, c.b / 255.0, c.a / 255.0}; - p->ra->fns->clear(p->ra, fbo.tex, clear_color, &target_rc); + if (!has_frame || !mp_rect_equals(&p->dst_rect, &target_rc)) { + struct m_color c = p->clear_color; + float clear_color[4] = {c.r / 255.0, c.g / 255.0, c.b / 255.0, c.a / 255.0}; + p->ra->fns->clear(p->ra, fbo.tex, clear_color, &target_rc); + } if (p->hwdec_overlay) { if (has_frame) { -- cgit v1.2.3