panfrost: Reload framebuffer contents if there's no clear
authorTomeu Vizoso <tomeu.vizoso@collabora.com>
Tue, 14 May 2019 15:28:17 +0000 (17:28 +0200)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 5 Jun 2019 21:35:48 +0000 (14:35 -0700)
commitde5c8829732d6cd74e6985f80eb01fe105464799
tree7d8da7d72d604054f91712c9bb33f44f7c650120
parent2adf35e4f50e0d8439ee12151bbb65427335625e
panfrost: Reload framebuffer contents if there's no clear

If by flush time the client hasn't submitted a clear, add jobs for
reloading the framebuffer contents as the first draw in the frame.

This is required by programs such as Weston which don't do clears and
rely on the previous contents of the framebuffer being there.

Reloading the whole framebuffer on every frame without regards to what
is needed or what is going to be covered is very inefficient, but future
work will introduce support for damage regions and partial updates so we
know what needs to be actually reloaded.

Fixes quite a few tests in dEQP-EGL.functional.buffer_age.*.

[Alyssa: The context is that tilers do an implicit glClear() on every
frame, whether you asked them to or not. If you want a clear, this is
very efficient. But if you don't, you have to explicitly blit the
backbuffer back into tile memory, accomplished by a dummy texturing
draw. This patch generates that draw via u_blitter, although we could do
a bit better ourselves by eliding the vertex job. This fixes "black
rectangles in Weston/sway" as well as "video not displaying when UI
visible in mpv"]

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/gallium/drivers/panfrost/meson.build
src/gallium/drivers/panfrost/pan_context.c
src/gallium/drivers/panfrost/pan_wallpaper.c [deleted file]
src/gallium/drivers/panfrost/pan_wallpaper.h [deleted file]