Outbuf shouldn't have to track its hidden status, that should be ecore_evas
problem. Until now we were doing this because our kludgey wayland
ticking made things difficult, but I think it's safe to remove now.
Small patch to compare if the hidden flag being passed in is the same
as the one stored in Outbuf. With the addition of xdg_shell v6
support, we cannot commit a surface with an existing buffer until the
surface has been configured. In order to facilitate this, we will use
the 'hidden' flag so that any surface_post does not actually attach a
buffer unless configure has already been handled on the surface.
ref T5090
Signed-off-by: Chris Michael <cp.michael@samsung.com>
On session recovery the engine needs to be given new copies of the
surface, dmabuf, and shm objects to run in the new connection.
This fixes session recovery breakage introduced when we stopped recreating
the outbuf on reconfigure.
On an engine resize, rather than destroy & recreate the Outbuf
structure (and the associated surface) we can just call the
eng_output_resize function (which in turn will call
outbuf_reconfigure) to update Outbuf with new properties. This saves
us from having to create a whole new Outbuf every time we resize.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
When a canvas gets hidden, we don't need to destroy & recreate the
wl_surface. We can simply attach a NULL wl_buffer to the surface which
achieves the same result. This saves us from having to always destroy
& recreate surfaces when we hide/show.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Software rendered wayland clients will now attempt
to use dmabuf on some platforms. This results in a window
that a compositor may be able to drop into a plane without a copy.
Disable it with the env var EVAS_WAYLAND_SHM_DISABLE_DMABUF
but if you need to disable it, please ping me or file a bug report.
These engines are incredibly similar - by sharing the same engine info
structure we'll be able to simplify the wayland ecore_evas bits and
make them much more maintainable.
In the event that an ecore_evas (using wayland_shm) gets hidden then
the corresponding wl_surface gets destroyed. If evas_norender is
called after that, the outbuf_redraws_clear function follows.
Outbuf_redraw_clear function ends up trying to post updates to the
wl_surface however if that wl_surface is gone, then we end up crashing.
This patch addresses that issue by checking for a valid wl_surface
inside the engine before trying to post updates to that wl_surface.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Now that we have redraws_clear exposed through software generic, we can
use that to do the final buffer swap from the main thread instead of doing
it in outbuf_flush which runs from the render thread.
This becomes more important later when other call sites in the main thread
will perform buffer flips.
Based on 95a00b8e49 by Derek Foreman
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Some engines should using sending surface damage, until now we'd only ever
provided them with buffer damage.
The difference is that surface damage is the damage to the surface the
compositor is displaying, and the buffer damage is the damage to the
buffer the client has rendered. These are different when the client
is using multiple buffers of different ages to render into.
Anything that calls eglSwapBuffersWithDamage, wl_surface_damage() or
wl_surface_damage_buffer() should be using surface damage, and not
buffer damage.
This patch is intended to make no functional change - any flush cb that
used buffer damage before still should. Actual fixes to follow.
Apologies if I broke any engines - it's a bit of a copy and wasteland
out here.
This reverts commit 62ca4486ea.
Honestly, I think the gl_x11 code doesn't make sense either. :)
There's no logical reason that we have to do that, though it may be
hiding some other bug? If that's the case, the bug should be fixed
properly.
This copies the behaviour in opengl_x11 engine, where the buffer
age needs to be continuously the same to be taken into account.
If the age varies, then we fallback to a full redraw.
Apparently this fixes issues on actual devices. I tested this
patch in weston (I didn't have issues before and buffer age is 1).
Coverity reports that this bpp check is actuall dead code due to the
fact that bpp can never be < 0.
Fixes Coverity CID1357144
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
The outbuf code should free the surface structure, not the dmabuf
abstraction or a use after free occurs on fallback.
Re-organize some code to make sure we don't rely on anything that may
have already been freed.
Add a wl_surface_commit() to keep the animation timer alive through
the fallback process.
This adds a separate backend to the "shm" engine that allows allocation
of buffers via libdrm that can be turned into dmabuf handles and used
with the wayland dmabuf extension.
Currently only the intel buffer manager is supported.
The benefit of dmabuf buffers is that they don't require a texture upload
like shm buffers do, and when we have plane support they can be dropped
directly into a plane without a memcpy.
Split this into two parts, one that makes the base surface, one that
calls the potential back ends.
Once the dmabuf backend is added this will allow a fallback path to
re-initialize the surface as wl_shm if dmabuf fails.
This doesn't really care what the buffers were allocated with, so
let's make this chunk of code useful to both the shm method and the
upcoming dmabuf one
Refactor evas_outbuf_setup a bit so there's only one call to
_evas_shm_surface_create.
Also makes the NULL return on unhandled rotation a lot more obvious.
Prior to this fix, window rotation was not operating correctly and the
surface contents would get rendered at the wrong size and position.
This patch fixes the engine so that rotation operates properly now.
NB: Tested with the Window States(2) test in elementary
Thanks to shiin for reporting :)
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
Summary:
wl_surface.damage_buffer() takes surface damage in buffer co-ordinates.
Right now since we don't use wayland's scaling, transforms, or viewports
it's exactly the same as wl_surface.damage(). In the future if we start
using those features it's much easier to do so with damage_buffer().
Reviewers: zmike, devilhorns
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D3457
Following this patch, the correct enum type is now passed to this
function. It's also passing the same value (0), but now from the correct
enum. This doesn't change behaviour, and looks like what was intended.
This fixes the clang warning.
Summary: As we loop the regions of the output buffer and accumulate
changes to post, we should be freeing the rectangles when we are done
with them.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Summary: This fixes a crash which Could occur if no outbuf depth was
given during a call to reconfigure.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>