Commit Graph

611 Commits

Author SHA1 Message Date
Derek Foreman 0fc4fa7156 ecore_wl2: Add surface_window_get api
One of the last remaining blockers for compiling dmabuf support as a
plug-in.
2018-01-26 15:54:00 -06:00
Derek Foreman fb3928ec96 ecore_wl2: Add API to remove surface managers
Someone might want to do this I guess.
2018-01-26 15:54:00 -06:00
Derek Foreman 03671c9c20 ecore_wl2: Add a way to register new surface managers
And use it for the existing dmabuf surface manager.
2018-01-26 15:54:00 -06:00
Derek Foreman 83f8db157e ecore_wl2: rename _surface_flush for consistency
It was originally thought that this could be common code for multiple
back-ends, but that doesn't really make sense now, so rename it to match
the other dmabuf functions.
2018-01-26 15:54:00 -06:00
Derek Foreman 07c41f48c4 ecore_wl2: Move private data allocation into back-end code
The backend should allocate its own private data and return it instead
of a bool.

This assumes all back-ends will need some manner of private data, which
is certanly true for the one back-end we provide.
2018-01-26 15:54:00 -06:00
Derek Foreman 044106c8a2 ecore_wl2: Move backend specific members into a private data struct
buffers and current buffers are really specific to the dmabuf backend,
another plug-in might not need them.
2018-01-26 15:54:00 -06:00
Derek Foreman 7c026c52cc ecore_wl2: Move surface size update into generic code
This didn't have to be in backend code in the first place.
2018-01-26 15:54:00 -06:00
Derek Foreman 4d430a98bf ecore_wl2: Add API surface_buffer_create
The specific surface code only needs these generic surface bits to pass
to buffer_create, so make a helper function for that instead of queries
for w, h, and alpha.
2018-01-26 15:54:00 -06:00
Derek Foreman e4122da211 ecore_wl2: Remove force from surface reconfigure
It no longer has any users or need to exist.
2018-01-26 15:53:59 -06:00
Derek Foreman e11bb10a4e ecore_wl2: Move smarts from surface_map to buffer_map
This simplifies the surface code so that it no longer needs access to
buffer structure members.
2018-01-26 15:53:59 -06:00
Derek Foreman 1a5e307f73 ecore_wl2: Add buffer_fit API and use it from surface code
This tries to resize the buffer's useable area to fit the specified size -
this is possible if the stride of the buffer is larger than the current
width.
2018-01-26 15:53:59 -06:00
Derek Foreman 7d81a16cdb ecore_wl2: Add buffer age inc and use it in surface code
Technically not necessary, since we could do this with get and set, but
it's a little more convenient to the user this way.
2018-01-26 15:53:59 -06:00
Derek Foreman dce3fcda86 ecore_wl2: Add buffer_age_set and use it in surface code 2018-01-26 15:53:59 -06:00
Derek Foreman e97a8cefe8 ecore_wl2: Add buffer_age_get API and use it in surface code 2018-01-26 15:53:59 -06:00
Derek Foreman ebcce5aefa ecore_wl2: Add API for setting buffer busy status and use it
Since surfaces will be managed by plug-ins, we need to make sure they
don't rely on internal structures.
2018-01-26 15:53:59 -06:00
Derek Foreman e3a3e02042 ecore_wl2: Add API for querying buffer lock status and use it
Since surfaces will be managed by plug-ins, we need to make sure they
don't rely on internal structures.
2018-01-26 15:53:59 -06:00
Derek Foreman 1c2bb7bda7 ecore_wl2: Make the surface interface a pointer 2018-01-26 15:53:59 -06:00
Derek Foreman b87606775f ecore_wl2: Move surface manager interface into public API
So people can write plug-ins for this stuff.
2018-01-26 15:53:59 -06:00
Derek Foreman 84f703cf67 ecore_wl2: Call check function through a pointer
We'll need this in the function array when we make surface managers
modular.
2018-01-26 15:53:59 -06:00
Derek Foreman bf4b828cb6 ecore_wl2: Move dmabuf surface specific tests into their own function
Refactoring to allow non-dmabuf surface managers.
2018-01-26 15:53:59 -06:00
Derek Foreman 601f9cc484 ecore_wl2: Make session recovery more robust
Clear out the window callback when doing session recovery, and
make sure we have a valid on if we get a double commit.

This should stop a session recovery crash, and fix a small leak per
recovery.
2018-01-26 15:51:44 -06:00
Mike Blumenkrantz d555c6c903 ecore-wl2: correctly translate spacebar keyname into key events
fix T6620

@fix
2018-01-22 13:04:15 -05:00
Derek Foreman 520821e432 wayland: Reduce number of unneccessary display flushes
b48781aa6c fixed multiple bugs where the
display wasn't flushed correctly, however it was a little overzealous.

Some of the flushes were added after calls that only updated internal
state, some in internal functions in which the caller was already going
to flush, and some were after wayland protocol calls that are double
buffered anyway and won't do anything until a following commit.

Also, I've removes at least one long standing flush where the recently
added flush is in a better location than the original.
2018-01-19 12:40:40 -06:00
Mike Blumenkrantz b48781aa6c wayland: always flush client display when protocol sends are pending
in the case where a connection was not actively rendering, there was nothing
which would trigger a display flush, leading to applications potentially
deadlocking

@fix
2018-01-17 17:06:13 -05:00
Mike Blumenkrantz ffa276fce3 wayland: add xdg-shell vfinal support for client-side
@feature
2018-01-10 11:39:52 -05:00
Jean-Philippe Andre ff24ac2d6d efl: Reset ecore event types on init
This fixes cycles of init/shutdown/init where ecore event types would
become invalid, since they are now stored in a dynamic array rather than
a statically stored array.

The risk here is that if a module of EFL tends to init/shutdown in a
"normal" scenario then the event type array will grow in a leaking
manner. This could be fixed by resetting those event ID's only when the
loop actually exits (EFL_EVENT_DEL on the main loop). I'm not using
EFL_EVENT_DEL in this patch as this would add too many event callbacks
to the main loop object, which may result in slightly slower event calls
to it, affecting the overall performance.
2017-12-19 11:14:37 +09:00
Derek Foreman 51599fe86c ecore_wl2: Better handling of extra commit
Discard the old callback so it can't fire later - which can happen after
the window's deleted in certain cases.
2017-12-13 16:34:10 -06:00
Jean-Philippe Andre b867b6aa24 ecore_wl2: Fix a warning 2017-12-05 15:06:34 +09:00
Derek Foreman 7658fc101f ecore_wl2: Add API ecore_wl2_window_surface_flush
This allows something that only has the Ecore_Wl2_Window (ie: something
that isn't engine code) to force dropping of all the buffers.

This should be safe to call at any time as the buffer handling logic
will properly cleanup the buffers when async render is done with them
or the compositor releases them.

This will eventually be used when a wayland client receives a
wl_output.leave events to indicate it isn't displayed on any outputs.
2017-12-01 10:59:51 -06:00
Derek Foreman c48ca81026 ecore_wl2: Add ecore_wl2_surface_flush
This removes all buffers from a surface.
2017-12-01 10:58:44 -06:00
Derek Foreman fdd05f8028 ecore_wl2: add Ecore_Wl2_Surface to Ecore_Wl2_Window
Track the surface of a window and only allow one.

Eventually this might be worthwhile to apply to subsurfaces, but for today
lazy is the way.
2017-12-01 10:58:44 -06:00
Derek Foreman 4f63f327b0 ecore_wl2: Make Ecore_Wl2_Buffer struct private
Nothing needs these members anymore.  If need arises in the future then
proper getter/setter functions can be added.
2017-12-01 10:58:44 -06:00
Derek Foreman 8a3b983c53 ecore_wl2 wayland_shm: Move surface functions into ecore_wl2
Finish pushing these all into ecore_wl2
2017-12-01 10:58:44 -06:00
Derek Foreman 5b4b18836a wayland_shm: Remove struct _Dmabuf_Surface
It's all piled into Surface now.
2017-12-01 10:58:44 -06:00
Derek Foreman f3dd394b85 ecore_wl2: Return NULL from ecore_wl2_window_display_get during recovery
This should save us from having to set the window to in the engine info
NULL and then back during/after recovery.
2017-12-01 10:58:44 -06:00
Chris Michael 83c292ffc4 ecore-wl2: Fix resource leak
Coverity detected a resource leak here because we were not freeing the
malloc'd 'obo' variable.

Fixes Coverity CID1382907

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-11-26 12:12:53 -05:00
Derek Foreman cf605549c5 ecore_wl2: Add dmabuf allocations for vc4
This should theoretically be better for software rendering on rpi3 since
it allows the compositor to use our sw rendered buffers as a texture.
2017-11-21 16:31:23 -06:00
Derek Foreman 9f3edead9d ecore_wl2: Fix buffer manager refcounting
commit 0cf806005e correctly fixed a
leaked buffer.  However, other code was already accounting for the
leaked reference to the buffer manager, so an extra deref happened
and broke the universe - but only on hardware that no developer
has access to for testing.
2017-11-21 10:11:47 -06:00
Chris Michael 0cf806005e ecore-wl2: Destroy buffer before we exit the buffer_test function
Small patch to destroy our test buffer before we exit the
_ecore_wl2_buffer_test function so that we do not leak here.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-11-20 11:27:15 -05:00
Derek Foreman 796de8cb86 wayland_shm: Don't use a fixed number of buffers
We no longer allocate 3 buffers at startup, we now allocate only as needed.

Trimming the queue will come later, as there are some situations where we
might need 3 buffers and later drop down to 2 (when on a hardware plane)

Most clients will only ever need 2 buffers, so this is a reasonable RAM
savings.
2017-11-17 14:33:36 -06:00
Derek Foreman 04ce069cba ecore_wl2: Properly handle buffer test failure during buffer_init
The buffer manager is already cleaned up at this point, don't try to
do it again.
2017-11-17 14:32:50 -06:00
Derek Foreman 1bd513305e ecore_wl2: fix user pointer for dmabuf param listener
Proving once again that those that defeat type safety usually get what
they deserve.
2017-11-16 13:18:48 -06:00
Derek Foreman 925be86f9e ecore_wl2: Fix dmabuf test failure
We need to destroy the buffer manager on fail, since it will exist but
only be able to create buffers we can't actually use.
2017-11-16 13:18:48 -06:00
Derek Foreman c08920820b ecore_wl2: Don't try to close drm_fd if we never opened it
derp.
2017-11-16 13:13:38 -06:00
Derek Foreman fcdbc07fe3 ecore_wl2: Don't open rendernode if we're not going to use it
We should only open this when actually testing dmabuf.  Otherwise we're
just wasting time and adding an opportunity to fail shm init over
unrelated issues.
2017-11-15 11:54:37 -06:00
Derek Foreman 23f5b41176 ecore_wl2: Reset buffer_manager to NULL on failure
Calling this multiple times even after it fails the first time is a legit
thing now.  We'll be doing that when we want to test dmabuf at connection
start.
2017-11-15 11:54:37 -06:00
Derek Foreman 517f929aa5 ecore_wl2: Send a dmabuf non-immediate create at startup
We use immediate mode dmabuf creation at runtime, but this can result in
clients being killed with no option to fallback if the buffers can't be
consumed by the compositor.

This test should catch when a system can allocate a dmabuf buffer and the
compositor claims to accept dmabuf, but the buffer can't actually be used
for whatever reason.  We'll then use wl_shm at runtime instead of dmabuf.
2017-11-15 11:54:37 -06:00
Derek Foreman 3ac556f2e1 ecore_wl2: factor out part of buffer creation
So we can use it to make a non-immediate mode buffer test.
2017-11-15 11:54:37 -06:00
Derek Foreman 04cebba623 ecore_wl2: Filter buffer types by compositor capabilities
It does us no good to be able to allocate dmabuf capable memory if the
compositor can't handle it.  This should fix failures on systems where
allocation is possible but the compositor doesn't advertise dmabuf.
2017-11-15 11:54:37 -06:00
Derek Foreman 579b6d69b3 ecore_wl2: Add a second sync for dmabuf formats
While we don't yet use these, we should, so let's make sure they're
available before we start making windows.
2017-11-15 11:54:37 -06:00