Commit Graph

377 Commits

Author SHA1 Message Date
Christopher Michael 5fe11b2dbf ecore-drm2: Update printf format to match changed value type
Commit 8e0c4d83ed changed the atomic property value type to be
uint64_t so we need to update the printf's to reflect that
2019-04-18 09:07:17 -04:00
Christopher Michael 2aaca58de0 ecore-drm2: Add API function to set crtc background color
This patch adds a new API function we can be called in order to set
the crtc background color of a given output.

@feature
2019-04-18 07:21:39 -04:00
Christopher Michael edd78d1800 ecore-drm2: Fill in crtc background color (if supported) during atomic
commits

Small patch to add the crtc background_color property (if supported)
to any atomic tests/commits

@feature
2019-04-18 07:21:39 -04:00
Christopher Michael d09664e20e ecore-drm2: Add background_color to crtc atomic properties
This patch adds a new field to the crtc atomic state which will be
used to support crtc background_color property, and also fills in that
state during crtc atomic state fill.

@feature
2019-04-18 07:21:39 -04:00
Christopher Michael 8e0c4d83ed ecore-drm2: Make atomic property values support uint64_t
Some Atomic property values are actually uint64_t, so fix the
structure to reflect that.

@fix
2019-04-18 07:21:39 -04:00
Carsten Haitzler e2b56fe71d ecore drm2 - handle possible NULL fb when doing a flip 2019-04-10 16:49:47 +01:00
Christopher Michael d3a8f0f250 ecore-drm2: Add missing @ingroup for some doxy
Small patch to add missing @ingroup for doxygen comments, and correct
one that was in the wrong group

@fix
2019-04-01 10:31:08 -04:00
Christopher Michael e63c36056e ecore-drm2: Factor in output rotation when getting output info
Summary:
Enlightenment uses this function to get information about a given
output, so we should be accounting for output rotation when returning
width/height values.

ref T7690

@fix

Depends on D8114

Reviewers: raster, cedric, zmike

Reviewed By: cedric

Subscribers: cedric

Tags: #efl, #do_not_merge

Maniphest Tasks: T7690

Differential Revision: https://phab.enlightenment.org/D8115
2019-03-22 12:41:25 -04:00
Christopher Michael 828984393e ecore-drm2: Add API function to return output rotation
Summary:
Small patch to add an API function which can be used to return a given
output's rotation value

ref T7690

@feature

Depends on D8113

Reviewers: raster, cedric, zmike, stefan_schmidt, bu5hm4n

Reviewed By: cedric

Subscribers: cedric

Tags: #efl, #do_not_merge

Maniphest Tasks: T7690

Differential Revision: https://phab.enlightenment.org/D8114
2019-03-22 12:41:21 -04:00
Christopher Michael 9c08fe29d4 ecore-drm2: Set output rotation value
Summary:
When we call ecore_drm2_output_rotation_set we need to store that
value in the Output structure so that it can be checked later when
needed.

ref T7690

Depends on D8112

Reviewers: raster, cedric, zmike

Reviewed By: cedric

Subscribers: cedric

Tags: #efl, #do_not_merge

Maniphest Tasks: T7690

Differential Revision: https://phab.enlightenment.org/D8113
2019-03-22 12:41:17 -04:00
Christopher Michael 3315c0dd1c ecore-drm2: Disable hardware rotation for outputs
Summary:
Setting output primary plane rotation is broken at the moment, so this
commit will disable that for now until this can be investigated

ref T7690

Depends on D8111

Reviewers: raster, cedric, zmike

Subscribers: cedric

Tags: #efl, #do_not_merge

Maniphest Tasks: T7690

Differential Revision: https://phab.enlightenment.org/D8112
2019-03-22 12:41:12 -04:00
Christopher Michael 10474986cc ecore-drm2: Update plane state values based on FB
Summary:
When we are trying to set an FB onto a plane, we need to update the
plane state values to reflect any changes in the FB. Failure to do
this will result in Atomic Commit failures as the plane state values
will not match what the FB is.

ref T7690

@fix

Depends on D8110

Reviewers: raster, cedric, zmike

Reviewed By: cedric

Subscribers: cedric

Tags: #efl, #do_not_merge

Maniphest Tasks: T7690

Differential Revision: https://phab.enlightenment.org/D8111
2019-03-22 12:41:08 -04:00
Christopher Michael 9d301e4e03 ecore-drm2: Don't use AtomicAddProperty for plane rotation
Summary:
Apparently something has been changed recently in libdrm
that causes AtomicAddProperty to fail when trying to set plane rotation. Until
this can be found & fixed, let's just disable trying to rotate
hardware planes with atomic commits.

ref T7690

@fix

Reviewers: raster, cedric, zmike

Subscribers: zmike, cedric

Tags: #efl, #do_not_merge

Maniphest Tasks: T7690

Differential Revision: https://phab.enlightenment.org/D8110
2019-03-22 12:41:03 -04:00
Carsten Haitzler 39f224b3a6 ecore drm2 - work around kms/drm bug seemingly when no flip event comes
so we request a flip so we can do vsync events. the flip event never
comes. i am not sure why it never comes, but we ask and nothing
arrives, and this basically halts all rendering in wayland compositor
mode as we are syncing rendering to vsync (of course). put in a
timeout of 0.05s (50ms) to try ask again if the event never comes and
log the error. this is a pretty useful workaround becauswe having your
entire display freeze is a ... bad thing.

@fix
2019-02-21 09:52:31 +00:00
Christopher Michael c62bac00cb ecore-drm2: Minor formatting fixes.
NB: No functional changes
2019-02-06 10:07:20 -05:00
Christopher Michael 3999a97579 ecore-drm2: Reduce duplicated code
No need for this line to be there twice as it is going to be called in
either case.

NB: No functional changes
2019-02-06 10:03:02 -05:00
Christopher Michael 65bf9c6e0f ecore-drm2: Remove useless if check
_ecore_drm2_use_atomic is already checked just above this, so there is
no need for this if statement
2019-02-06 10:00:51 -05:00
Michaël Bouchaud (yoz) 72f9a94188 ecore_drm2: Add API to allow settings tap-to-click on pointer device
Summary:
Add a way to configure pointer device with tap-to-click features.

@feature
Depends on D7843

Reviewers: devilhorns

Reviewed By: devilhorns

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7847
2019-01-31 08:41:04 -05:00
Christopher Michael 9dedaddf2d ecore-drm2: Support multiple gpus during vblank
Summary:
When we try to calculate a drm vblank type, we should take into
account the output's pipe value which is used to determine if we are
using multiple gpus (if so, we need to use the high_crtc_mask.

Reviewers: ManMower

Reviewed By: ManMower

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7803
2019-01-28 14:45:23 -05:00
Christopher Michael c6ebe8241e ecore-drm2: Fix formatting
NB: No functional changes
2019-01-17 10:58:43 -05:00
Christopher Michael 8079d6d38a ecore-drm2: Pass output as data to drmModePageFlip and drmModeAtomicCommit
In order to support per-output ticking, the drmModePageFlip and
drmModeAtomicCommit functions need to pass the actual Output as data
to the pageflip callback so that the pageflip callback function can
pass the proper rectangle to ecore_evas_animator_tick

Differential Revision: https://phab.enlightenment.org/D7678
2019-01-17 09:37:33 -06:00
Christopher Michael 6fcffef3ff ecore-drm2: Add support for specifying a particular drm card
Summary:
There are cases where the drm card that we wish to run on is not
always the first card (ie: card1, card2, etc). In our previous code,
we would always start searching at card0 and if found we would always
use that card. This patch allows a card to be specified in the
environment that can be searched for and used. For example, if we
specify ECORE_DRM2_CARD=card1 than that card will be searched and used
if found. This also allows wildcard searches such as
ECORE_DRM2_CARD=card[1-9]* which can be used to skip the first card
(card0).

Reviewers: ManMower

Reviewed By: ManMower

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7530
2019-01-02 10:33:42 -05:00
Christopher Michael bd6d83bee7 ecore-drm2: Fix drmModeSetCrtc call during fb flip
drmModeSetCrtc x & y values are actually offsets into the framebuffer
memory. As such, we should not be sending output position here.

@fix
2019-01-02 10:03:06 -05:00
Christopher Michael cbac8eddb0 ecore-drm2: Minor formatting fixes
NB: No functional changes
2019-01-02 10:01:55 -05:00
Marcel Hollerbach 46d464e5bf here comes meson
a new shiny buildtool that currently completes in the total of ~ 4 min..
1 min. conf time
2:30 min. build time
Where autotools takes:
1:50 min. conf time
3:40 min. build time.

meson was taken because it went quite good for enlightenment, and is a traction gaining system that is also used by other mayor projects. Additionally, the DSL that is defined my meson makes the configuration of the builds a lot easier to read.

Further informations can be gathered from the README.meson

Right now, bindings & windows support are missing.

It is highly recommented to use meson 0.48 due to optimizations in meson
that reduced the time the meson call would need.

Co-authored-by: Mike Blumenkrantz <zmike@samsung.com>

Differential Revision: https://phab.enlightenment.org/D7012
Depends on D7011
2018-10-02 17:22:50 +02:00
Derek Foreman 7d54989f9b ecore_drm2: Fix failure to properly set up new plane
Summary:
When we add a plane we need to add it to the list before doing the atomic
test to ensure we're testing new state that includes the plane, and to
ensure the next screen update includes the plane we just added.

Fix T7066

Reviewers: devilhorns

Subscribers: cedric, #committers, zmike

Tags: #efl

Maniphest Tasks: T7066

Differential Revision: https://phab.enlightenment.org/D6432
2018-06-26 15:28:07 -04:00
Chris Michael ccf064f5ae ecore-drm2: Add API function to retrieve output user data
With the rework of Ecore_Evas drm engine, we need to get the
ecore_evas itself in the pageflip callback so we have to reassign
output->user_data to the ecore_evas which we can then use to retrieve
via this function

This is needed as the pageflip callback will pass us the output on
which the pageflip completed.

@feature

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-02-27 09:31:33 -05:00
Chris Michael 72b192c012 ecore-drm2: Free stringshare for relative output during output_free
When we destroy a given output, we should be freeing the
eina_stringshare for relative.to

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-02-27 09:22:04 -05:00
Chris Michael fc4f66c6c2 ecore-drm2: Add API to get/set which output is relative to another
In order to know which output we should clone, we need a way to
store/retrieve the output which should be cloned. This patch adds a
small api we can use in randr config dialog to get/set that value.

@feature

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-02-27 09:16:00 -05:00
Chris Michael 124c7535bb ecore-drm2: Fix typo when comparing output relative mode
Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-02-20 09:40:14 -05:00
Chris Michael f877f6c09f ecore-drm2: Account for output relative mode when getting cloned value
As an output may have it's relative mode set to clone from the E randr
dialog, we should account for that also when returning output cloned
mode.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-02-20 08:53:59 -05:00
Chris Michael a78dc2d816 ecore-drm2: Add API functions to get/set output relative mode
These API functions will be used inside Enlightenment in order to
determine the proper extended screen size based on outputs relative
position.

@feature

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-02-13 11:44:11 -05:00
Chris Michael e93f7bce30 ecore-drm2: Ensure output changed event is sent for removed outputs
If an output gets disconnected, we would still like to be notified of
that. In the _outputs_update function, we mark an output as
disconnected by setting output->connected and output->enabled to
FALSE. With this line in place (in the output_event_send function) we
would never get notified if an output was disconnected.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-02-06 13:01:25 -05:00
Chris Michael d1a7dd5e42 ecore_drm2: fix seat matching when checking for a device with a null seat
Summary: Check to make sure that the seat from the matching device is still null.

Test Plan: Make sure that devices are not being rejected while on seat1. This depends on another patch

Reviewers: ManMower, devilhorns

Reviewed By: devilhorns

Subscribers: ManMower, devilhorns, cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D5711
2018-01-22 11:26:13 -05:00
Derek Foreman 54fede47a9 ecore_drm2: simplify device selection code
The platform check was added for systems (like ARM) that don't generally
have PCI graphics devices.  However, now we pick a fallback device that
doesn't have a PCI constraint, so the platform check should no longer be
necessary.
2018-01-10 12:54:42 -06:00
Derek Foreman 324c917a20 ecore_drm2: Allow non-pci DRM devices to be selected
Summary: This is a tweak to c264ef264f for D5712 . chosen_dev in the loop was only being set for DRM devices attached to PCI devices. While this is useful for determining if the device is the preferred boot_vga device, There is no apparent requirement (comparing to Weston) for all DRM devices to be attached to a PCI device. (This is considering USB DisplayLink devices. I am not sure how the parent device tree is with these...)

Reviewers: devilhorns, ManMower

Reviewed By: devilhorns, ManMower

Subscribers: cedric, jpeg, #efl

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D5727
2018-01-10 12:23:34 -06:00
Chris Michael 2ac8458238 ecore-drm2: return supported rotations if not using hardware
If we are Not using Atomic/Hardware support for output rotations, we
should return all available rotations as these will still work in
software mode.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-01-09 12:48:25 -05:00
Chris Michael 4aeca75cff ecore-drm2: Fix enabling outputs
Commit 9d583b3fdb broke
ecore_drm2_output_enabled_set function due changing order of setting
output->enabled value. This patch fixes both issues by checking the
'enabled' variable being passed in.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2018-01-09 12:48:07 -05:00
Derek Foreman 0d845ce3aa ecore_drm2: Remove pointless goto
This "out" label probably used to be the target of multiple gotos,
but now it's just being used to jump over a single line of code.
2018-01-05 12:28:36 -06:00
Derek Foreman c264ef264f ecore_drm2: Don't fail if there's no boot_vga device
In a multi-seat configuration it's quite likely that only one
seat will have a boot_vga device.

While we should use the boot_vga device if possible, we shouldn't
fail just because a seat's gpu isn't the boot_vga device.  Fallback
to the last viable drm device we saw.

Reported-by: n3rdopolis
ref D5712
ref T6455
2018-01-05 11:51:22 -06:00
Vincent Torri 4ae6eeb2cf efl: remove _MSC_VER (Visual Studio macro) usage in source code 2018-01-04 12:59:47 -08:00
Chris Michael 9021c752cb ecore-drm2: Fix issue of not being able to set output mode
If we pass in screen geometry here when trying to set an output mode,
we can encounter "out of memory" errors from libdrm with outputs
that have a high resolution. As it turns out, we should be passing 0, 0 for
the x/y values when trying to set an output mode.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-11-01 08:52:03 -04:00
Chris Michael bd2588e72f ecore-drm2: Minor formatting fix
NB: No functional changes

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-09-19 11:45:43 -04:00
Derek Foreman 1848f9a8e6 ecore_drm2: Better handling of blank time checks
On some systems we'll successfully complete the vblank ioctl but get
a reply of 0.  When that happens we can't use that time for ticking
as it will break all of the entire world.

Fixes immediate screen blank on rpi3.

@ref T5977
2017-09-05 12:12:30 -05:00
Chris Michael 474da25165 ecore-drm2: Add API to allow setting pointer acceleration profile
Small patch to allow setting pointer acceleration profile (for
wayland) from within Enlightenment.

ref T4736

@feature

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-08-24 11:42:57 -04:00
Chris Michael b43f6c14dd ecore-drm2: Add API function to allow setting pointer acceleration speed
Small patch to add a new API function which can be called from
Enlightenment in order to allow setting pointer acceleration speed.

ref T4736

@feature

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-08-24 11:32:51 -04:00
Derek Foreman eec565cc0f ecore_drm2: Add query for pending pageflip
We've been tracking this in ecore_evas, but ecore_evas isn't the only
caller, and it doesn't know about flips initiated by the evas engines.
2017-08-11 17:11:12 -05:00
Derek Foreman 9fd0ed736d ecore_drm2: Remove ecore_drm2_output_resolution_get()
No local callers.  Superseded by ecore_drm2_output_info_get()
2017-08-09 14:56:59 -05:00
Derek Foreman 5ecfe6a8b5 ecore_drm2: Remove ecore_drm2_output_crtc_size_get()
Replaced with ecore_drm2_output_info_get()
2017-08-09 14:56:59 -05:00
Derek Foreman 846db0e0e7 ecore_drm2: Remove ecore_drm2_output_geometry_get()
Replaced with ecore_drm2_output_info_get()
2017-08-09 14:56:59 -05:00
Derek Foreman 1b853dcfad ecore_drm2: Add ecore_drm2_output_info_get
We've got too many ways to query output information, so let's add more.
(this will soon replace all of them)
2017-08-09 14:56:59 -05:00
Derek Foreman 70c1ce3be3 ecore_drm2: Remove useless safety checks
Now that the device is opened and found in one operation it's impossible
to have fd == -1, so we can stop testing for it.
2017-08-09 14:56:59 -05:00
Derek Foreman afd65a8a99 ecore_drm2: Merge ecore_drm2_device_free and _close
There's no reason to have them be separate, all callers must do them
back to back, so let's just combine them.
2017-08-09 14:56:58 -05:00
Derek Foreman d8a9b895bb ecore_drm2: Merge ecore_drm2_device_find and ecore_drm2_device_open
There's never a reason to find a device and not open it, so all callers
end up calling these two functions back to back.
2017-08-09 14:56:58 -05:00
Derek Foreman 9b9d704292 ecore_drm2: Remove connector bitfield
This is unreliable - there's no reason to expect these connector ids
will be low enough to sensibly store in a bit field.
2017-08-09 14:56:58 -05:00
Derek Foreman 2f9cb33f0b ecore_drm2: remove unused crtc bitfield
We'll need something like this when multi-head works, but it can't
be implemented this way anyway.  There's no guarantee that crtc
ids will be low enough to fit sensibly in a bitfield.
2017-08-09 14:56:58 -05:00
Derek Foreman 8ff59b2c55 ecore_drm2: Pass Ecore_Drm2_Device instead of fd to most functions
Intended to simplify the upcoming commit that merges device find and
device open into a single function that returns a device.

The fd is something callers shouldn't really need to get their hands on,
right now there are still a few places where it's needed, but those will
be gone soon too.
2017-08-09 14:56:58 -05:00
Derek Foreman bc5ebd0a20 ecore_drm2: Fix linker problems
Accidentally used functions in the library directly instead of through
the sym_* dlsym looked-up variants.

Why this only caused problems in some installations may still be worth
investigating - we may be pulling in libdrm at link time from some
other library?
2017-08-04 12:13:40 -05:00
Derek Foreman acc76cadd3 ecore_drm2: Stop making dumb fbs and mmapping for gbm fds
We were doing this so E could do screenshots in a hackish way,
E has been fixed so this hack here no longer needs to live.
2017-07-31 11:12:05 -05:00
Derek Foreman df658a6d15 ecore_drm2: Remove dead code in blank time get
When I added the fallback block I left an if statement that could
never evaluate to true.  Remove it.
2017-07-31 10:57:56 -05:00
Carsten Haitzler 2c1e2db876 ecore_drm2 - fix startup if edid blob is null.. assume all 0's
this causes a crash when no edid is available. survive and dont crash.
this causes e wayland to not work at all on my baytrail laptop.

@fix
2017-07-30 23:27:56 +09:00
Derek Foreman 0584fc81a2 ecore_drm2: Add a fallback method for vblank waiting
We can't depend on vblank waits being implemented by the driver, but we
can count on page flips functioning, so add a fallback that does a page
flip and waits for it.
2017-07-28 15:35:03 -05:00
Derek Foreman 8e500c6835 ecore_drm2: Allow picking a sequence number for blanktime_get
This lets us do a blocking wait for a vsync.  Something we should try to
do as infrequently as possible, but in some cases we need it one time at
startup to catch graphics driver bugs.
2017-07-28 10:41:11 -05:00
Derek Foreman 414d406b3b ecore_drm2: Ensure device we find can mode set
Some systems have dri devices that can't mode set, and if they're first in
the directory they'll get picked by our code and things fall apart later.

So, open the potential device and ensure it has basic functionality before
selecting it.

This is a little inefficient as it gets the device via elput twice before
it can be used - this will be addressed later as the changes are a little
more invasive to optimize.
2017-07-21 16:46:00 -05:00
Derek Foreman 57e826db69 ecore_drm2: Open elput manager before drm device
We're going to need to access the device as part of the find process,
so we need a manager.
2017-07-21 16:46:00 -05:00
Derek Foreman 20def4da21 ecore_drm2: Add a query for the next vblank time
I guess this is a feature, and we're deep in freeze, but:

a) this is critical for fixing T5462 properly without any side effects.
b) ecore_drm2 is all beta api
c) this should only affect wayland users

ref T5462
2017-07-13 18:07:42 -05:00
Derek Foreman 3775a9645d ecore_drm2: fix scanout_on callback firing too often
We need to increase the on scanout count for a buffer only when the
plane it's on makes its transition from pending to visible.

Previously it was firing for every refresh which would break refcounting
for any plane using surface that didn't change every frame.
2017-06-30 10:26:41 -05:00
Derek Foreman 1552f85ede ecore_drm2: Add scanout status callbacks
This generates callbacks when a fb becomes scanned out on a hardware plane
or when it no longer is.
2017-06-23 08:15:41 -05:00
Derek Foreman 5f2d4e75ab ecore_drm2: Add callbacks for plane assign/release
E will need these to gate wayland buffer releases.
2017-06-23 08:15:41 -05:00
Derek Foreman c67da0c869 ecore_drm2: Add Fb deleted event 2017-06-23 08:15:41 -05:00
Derek Foreman 69181cc9e8 ecore_drm2: Track number of times an fb is on scanout
The same fb can be placed in multiple hardware planes, we need to keep
track of the number of planes it's on at any time so we can send events
to a compositor in a later commit.
2017-06-23 08:15:41 -05:00
Derek Foreman bc8b11bd78 ecore_drm2: Track whether an Ecore_Drm2_Plane has ever been on scanout 2017-06-23 08:15:41 -05:00
Derek Foreman a8c7b89cb7 ecore_drm2: Move fb from plane state struct to plane struct
The plane state struct needs the fb id for drm updates, and the plane
state can be updated even if it's pointed to by a dead plane.

Dead planes need to keep their fb so we can properly handle the fb
lifetime.
2017-06-23 08:15:41 -05:00
Derek Foreman be90b91ac1 ecore_drm2: Don't clear plane fb on release
We'll need this later for post-page flip bookkeeping, and nothing will
notice that it's not cleared now anyway.
2017-06-23 08:15:41 -05:00
Derek Foreman 74290490ad ecore_drm2: Remove obsolete per output fb callback api
It's all beta API so I can throw this away now that there are no in-tree
users anymore.
2017-06-23 08:15:40 -05:00
Derek Foreman 0d1082f947 ecore_drm2: Stop using the old per output release callbacks 2017-06-23 08:15:40 -05:00
Derek Foreman a97b1ac006 ecore_drm2: Update buffer release mechanism to send new status information
Begin moving internals over to the new per fb status updates.
2017-06-23 08:15:40 -05:00
Derek Foreman a3eed7865a ecore_drm2: Add ecore_drm2_fb_status_handler_set
The old per output release handler is no longer complicated enough.  In
the near future we'll need to be able to tell an engine that its fb has
been placed on scanout via hardware plane, or removed from a hardware
plane.

It's simpler to provide that information as well as release information
through a single callback.
2017-06-23 08:15:40 -05:00
Mike Blumenkrantz a3d0af0069 ecore-drm2: add ecore_drm2_output_subpixel_get()
@feature
2017-06-16 12:23:08 -04:00
Chris Michael bbd18510d6 ecore-drm2: Remove #ifdef HAVE_ATOMIC_DRM
As we now use static_libs/libdrm for compiling ecore-drm2, we can
remove the atomic #ifdefs as we can run-time check this now.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-06-09 14:20:05 -04:00
Chris Michael a55eafd960 ecore-drm2: Fix drm_mode variables to work with static lib
As we now use static_libs/libdrm to build ecore_drm2, we need to
fix how our drm_mode variables are declared so we can use them.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-06-09 13:50:22 -04:00
Chris Michael 6e37d13a1c ecore-drm2: Use static libdrm to build ecore-drm2
As we will now use static_libs/libdrm to build ecore_drm2, we no
longer need to include the copied code from the libdrm headers so
remove all of the copied code from our source files.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-06-09 13:48:55 -04:00
Chris Michael 05f770a1ab ecore-drm2: Group API functions within their doxy group
NB: No functional changes

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-06-09 12:29:25 -04:00
Chris Michael 0ecf044080 ecore-drm2: Fix potential SIGFPE when adding output mode
If we receive bad crtc info from libdrm, then we could end up with a
SIGFPE here due to division by zero if info h/v total are not set.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-06-08 10:34:29 -04:00
Chris Michael b7c7ce4ce0 ecore-drm2: Add API function to set pointer rotation
This patch adds a new API function which can be used to swap x & y
pointer axis and invert them according to rotation angle. Mouse input
events occur according to canvas coordinates so this can be used when
a canvas is rotated.

@feature

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-06-08 10:03:36 -04:00
Chris Michael 96347d1ee2 ecore-drm2: Don't use Atomic functions to set DPMS levels
This was initially an experiment in trying to use Atomic properties to
set dpms on/off, however it does not turn off backlight support when
triggered so it is useless.

Fixes T5462

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-06-06 11:06:34 -04:00
Chris Michael 0dc439abbc ecore-drm2: Fix output backlight value type definitions
When we go to set output backlight level we use doubles, so lets just
store these values as doubles in the structure.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-06-06 10:44:55 -04:00
Chris Michael 2f10ce1055 ecore-drm2: Add internal functions to get backlight values
Small patch to add an internal function which can be used to retrieve
backlight values on output creation.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-06-06 10:37:01 -04:00
Derek Foreman e24670b1e2 ecore_drm2: Fix error handling in _output_dpms_atomic_set
This was skipping the error path on failure and setting some state as if
it was successful.  Then the next attempt at a page flip was actually
setting this state.

So _output_dpms_atomic_set (which has always been broken) wasn't actually
the function that successfully disabled dpms.

This is confounding attempts to debug why dpms isn't coming back on
properly.

Now it won't turn *off* either, because it really never should have.

Ref T5462
2017-06-05 16:25:14 -05:00
Derek Foreman 280c82fdd4 ecore_drm2: Don't try to disable all devices when session deactivates
We get this callback after we've lost the drm device to logind, so
deactivating stuff here will just generate a lot of ERR messages
and break our internal book-keeping.

Instead, we just turn on DPMS on session activation instead of trying
to go through the output enable path (that will bail if it's already
enabled)

This could potentially result in a display that's enabled and DPMS
off being switched back on during session activation - if that's a real
problem we can restore the previous dpms state instead...

@fix T5483
2017-06-02 15:50:09 -05:00
Derek Foreman 9d583b3fdb ecore_drm2: Fix dpms shutdown while disabling outputs
We need to set output->enabled to disabled *after* dpms takes place or set
it to enabled *before* dpms takes place.  We can't just set it at the
start of the function or one of enable/disable will hit the dpms path
with a disabled display.
2017-06-02 15:50:08 -05:00
Derek Foreman 0df7299526 ecore_drm2: Properly release buffers on output disable
Give back all buffers, and do it through the release mechanism that can
fire a callback into the engine.

Previously we just leaked one and left the rest.
2017-06-02 15:50:08 -05:00
Derek Foreman df0595ebc0 ecore_drm2: Rename _release_buffer and make it private instead of static
Other files in ecore_drm2 need to release buffers too.
2017-06-02 15:50:08 -05:00
Chris Michael dc3da87139 ecore-drm2: Don't free output plane states if not using atomic
If atomic support is not enabled (kernel or env var), then we will not
be filling output plane_states, so no need to free them (if non-atomic).

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-30 15:57:07 -04:00
Chris Michael f2a0e5ae4c ecore-drm2: Minor formatting fix
NB: No functional changes

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-30 15:56:51 -04:00
Chris Michael bd189f69f2 ecore-drm2: Don't fill device atomic state if atomic is disabled
If atomic support is disabled (via kernel or env var), then we do not
need to fill device atomic state as it will not be used anyway.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-30 11:01:22 -04:00
Chris Michael ba4042da1e ecore-drm2: Don't fill output atomic states if not using atomic
If atomic support is not enabled (kernel or env var), then we should
not be filling in output atomic state

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-30 11:00:20 -04:00
Chris Michael ac2c82b871 ecore-drm2: Remove useless return
This 'return' statement here is just useless as the code can fall
through and the function will return 0 anwyay.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-30 10:59:25 -04:00
Mike Blumenkrantz ed4e54ebe2 wayland/drm: create evas_devices and add device pointer to input events
this is still semi-broken if a seat has many pointer-ish type devices since
pointer devices in ecore-evas were never correctly implemented to be 1:1 with
seat:cursor relationships

@feature
2017-05-26 16:27:43 -04:00
Mike Blumenkrantz 737f64b822 ecore-drm2: simplify output name checking on device change
eina_streq handles null and stringshare params
2017-05-26 16:27:43 -04:00
Mike Blumenkrantz b09c6f1f3e elput: start elput_device_ and elput_seat_ namespaces, rename some functions 2017-05-26 16:27:43 -04:00
Mike Blumenkrantz e8fe0bcc47 elput/drm: redo xkb context/keymap setting
context and keymap need to be set at the same time in order to effectively
update keyboard state, and active group should be accessible through api
as well

preserve old function ABI to ensure old binaries don't crash
2017-05-26 16:27:42 -04:00
Chris Michael e0a1e63072 ecore-drm2: Don't call fb_flip until output is enabled
When calling ecore_drm2_output_enabled_set, we cannot initiate a
pageflip until the output has been enabled, so remove call to fb_flip
here. The dpms_set function will handle issueing the pageflip anyway.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-19 11:33:19 -04:00
Chris Michael 851a2c72af ecore-drm2: Cleanup output_enabled_set function code
If we are using atomic, we don't need to set the crtc active values
here as they will be set in output_dpms_set function anyway.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-19 11:32:20 -04:00
Chris Michael 7a3c658759 ecore-drm2: Fix atomic dpms setting (round 2)
As it turns out, we still need to enable/disable the output crtc when
we enable/disable dpms in order for the screen itself to turn off, so
this patch "should" finally fix atomic dpms setting.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-19 11:29:47 -04:00
Chris Michael 76806fda80 ecore-drm2: Update connector state dpms value if setting works
If we successfully set dpms via atomic state, we should also update
the connector state dpms value

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-18 12:22:27 -04:00
Chris Michael 892b58fbf2 ecore-drm2: Fix setting dpms level using atomic state
The property we need to change during an atomic dpms change is
actually from the output connector state (not crtc state). This fix
should make dpms work when using atomic

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-18 12:14:01 -04:00
Derek Foreman 12260dabb9 ecore_drm2: Better handle flip failure round 2
If the buffer being flipped to is the one already on screen then
releasing it on flip failure will leave it on scanout with no
references.  The next time a buffer is queued it will be removed
from scanout and deleted.

Not good.

Fix T5462
2017-05-17 17:31:13 -05:00
Derek Foreman 2c58d77ba9 ecore_drm2: Better handle flip failure
We need to release the buffer we couldn't flip to when a flip fails.

This makes whatever bug is causing a page flip to happen right after
dpms blanks the screen, which was leading to a failure to ever wake
from dpms because the flip left a pending buffer that never completed.

Fix T5462
2017-05-17 15:01:54 -05:00
Derek Foreman 88f328efd2 ecore_drm2: Clear next fb if we use it
Fixes a race that's either really hard to hit if you're a developer
or really easy to hit if you're a user.

Thanks to ApB for the debug assistance.

Fix T5484
2017-05-15 16:22:12 -05:00
Derek Foreman 51f5f43d43 ecore_drm2: Fix use after free
In trying to clean up some code and fix a hypothetical buffer leak, I added
a use after free error that can break rendering on the drm and gl_drm
evas engines.

Coverity did the heavy lifting for me on this one.

Fix Coverity CID 1375047
Fix T5484
2017-05-14 13:13:34 -05:00
Derek Foreman 44b57b5dfa ecore_drm2: Add some safety checks for accessing dead fbs
Accessing an fb after discarding it is bad karma, so we should log something
if it ever happens.
2017-05-12 17:51:34 -05:00
Derek Foreman edcbff59b7 ecore_drm2: refcount fbs
Removes the previous "busy" flag, as now we might have an fb attached to
multiple outputs at once, and need to be careful to destroy them only
after they've been removed from all outputs.

Removed the old "busy_set" API which nothing used, and renames fb_destroy
to fb_discard to make it more clear that it's not immediately destroyed.

It's all beta api, so I can do this.
2017-05-12 17:51:34 -05:00
Chris Michael af587c01cb ecore-drm2: Add start of refcounting for FB objects
Small patch which starts to implement refcounting on framebuffer
objects. This will be needed so that we do not free FB objects while
they are on the screen.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-09 11:47:04 -04:00
Derek Foreman 544cffaa19 ecore_drm2: Move test for atomic_req into atomic flip path
We ended up doing an occasional atomic ioctl when we shouldn't.
This should be a harmless failure, but it's also a pointless one.
2017-05-09 10:34:33 -05:00
Derek Foreman 8067b0146a ecore_drm2: Fix dmabuf fb destroy
I missed the fact that it'd run through the existing non-gbm path on
destroy, resulting in a (probably harmless) bad ioctl
2017-05-09 10:34:33 -05:00
Derek Foreman 18af247ab2 ecore_drm2: Add checks for using a plane after death
We keep planes on the plane list to ensure a released plane is removed
from display - however this means that if a caller starts messing with
a plane after release, that it could potentially reposition a plane it
doesn't own anymore.

Use EINA_SAFETY macros to prevent this.
2017-05-05 12:53:25 -05:00
Derek Foreman c722466a60 ecore_drm2: Replace plane state release flag with plane dead flag
The release flag is actually less useful than the existing in_use flag
for determining if a plane is unused.  If a new plane is assigned before
the next flip cleans up released planes, then it can point to a released
plane state, and both it and the previous user will be freed on the next
commit, leaking a plane.

Putting the flag in the plane structure fixes this while still allowing us
to keep released planes around to ensure a recently released plane is
cleared from atomic state.
2017-05-05 12:53:25 -05:00
Derek Foreman 1071c9f3a8 ecore_drm2: Call flip test in plane release
If we don't do a flip test, the atomic state isn't updated.  This fixes
a potential problem where the last operation in state preparation is
a release - the following commit wouldn't include state from the release.
2017-05-05 12:53:25 -05:00
Derek Foreman 7628977fbf ecore_drm2: Fix flip test error handling
We need to free the atomic req if commit fails, so let's merge these
failure paths and simplify code a bit.
2017-05-05 12:53:25 -05:00
Derek Foreman 699ed066ea ecore_drm2: Require x and y value in plane assign
Saves us a flip test, and gaurantees that we're always testing with a
reasonable x, y and not something leftover from a previous assignment.
2017-05-05 12:53:25 -05:00
Chris Michael 1d3ad70888 ecore-drm2: Release any marked planes during atomic commit
This patch fixes plane_state values during atomic flip test for any
planes marked for release. When the fb_flip actually completes, we
will remove the marked plane(s) from the output.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-05 12:53:24 -05:00
Chris Michael 0c0f525d9a ecore-drm2: Add 'release' flag for planes
As we cannot immediately remove a plane from an output, due to needing
an atomic commit to actually remove the plane from screen, we can use
a 'release' flag to indicate that a given plane needs removal from the
screen during our next atomic commit.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-05 12:53:24 -05:00
Chris Michael bd4ccfa0f5 ecore-drm2: Don't remove plane from output list on release
As we need to be able to commit a new plane state for any released
planes, we should not be removing them from the output list just yet.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-05 12:53:24 -05:00
Chris Michael 7a50010536 ecore-drm2: Fix formatting
NB: No functional changes

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-05 12:53:24 -05:00
Chris Michael 373e4b0684 ecore-drm2: Don't assign plane to output list if test fails
There is little point in assigning a plane to the output list if the
atomic flip test fails.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2017-05-05 12:53:24 -05:00
Derek Foreman 0aac2db93a ecore_drm2: Use stricter cursor plane size check
Unfortunately the plane sized returned from the cursor plane query isn't
a limit, it's an exact size.  Sometimes you can use a different size,
but that's completely hardware dependent - so stick to the advertised
size.
2017-05-05 12:53:24 -05:00
Derek Foreman ab8ec5ed5f ecore_drm2: Add API to update the fb for a plane 2017-05-05 12:53:23 -05:00
Derek Foreman c98a9b06c6 ecore_drm2: Rebuild atomic state from plane_destination_set
Call a test commit to rebuild the atomic_req
2017-05-05 12:53:23 -05:00
Derek Foreman 6b9a6a8bed ecore_drm2: Fix atomic flip with no new buffer
We don't have an atomic state, so we need to create one before the flip
2017-05-05 12:53:23 -05:00
Derek Foreman 9223b0d535 ecore_drm2: Pass user data to atomic flip
We need the user_data to come back to us in the flip handler like it does
in the non atomic flip.
2017-05-05 12:53:23 -05:00
Derek Foreman b6f67124e4 ecore_drm2: Add some atomic state tracking
I think we're now at the point where the two paths are merged.

Still no atomic functionality because nothing assigned the primary plane,
so we have no atomic state to commit.  The machinery should be in place
though.
2017-05-05 12:53:23 -05:00
Derek Foreman ba4d41ff63 ecore_drm2: Handle atomic state in _release_buffer
Further merging of atomic and non-atomic paths
2017-05-05 12:53:23 -05:00
Derek Foreman b902ef7c69 ecore_drm2: Make _release_buffer take a state struct instead of fb
Lets us push the NULL set into _release_buffer for some clean up
2017-05-05 12:53:23 -05:00
Derek Foreman 89630ddeb1 ecore_drm2: Refactor common code from non-atomic path
We'll need to perform all this for atomic operations as well.
2017-05-05 12:53:23 -05:00
Derek Foreman 8d72a2cf46 ecore_drm2: Fix typo in comment 2017-05-05 12:53:23 -05:00
Derek Foreman e7a494ba87 ecore_drm2: treat atomic flip without a req as an error
We should use the safety macro here instead of silently continuing so we
can get something in the log if this happens.
2017-05-05 12:53:22 -05:00
Derek Foreman 9da0f52642 ecore_drm2: remove fb parameter from _fb_flip()
Time to start smashing the atomic and non-atomic paths together.
2017-05-05 12:53:22 -05:00
Derek Foreman 8143abff2c ecore_drm2: Replace output fbs with state structs
next, pending, and current are going to have to deal with atomic state
instead of just fbs soon
2017-05-05 12:53:22 -05:00
Derek Foreman 63dbf061a9 ecore_drm2: Move atomic state into an output state struct
This should make it easier to share code paths between atomic and non
atomic operations.
2017-05-05 12:53:22 -05:00
Derek Foreman 6482367aa2 ecore_drm2: Perform test flip during plane assignment
Make sure we can commit that plane at assign time so when we hook up to
the scene graph it knows when it can safely use a plane.
2017-05-05 12:53:22 -05:00
Derek Foreman 8d42d7d50a ecore_drm2: Drop static from _fb_atomic_flip_test()
We're going to need this one in plane assign to test commits
2017-05-05 12:53:22 -05:00
Derek Foreman f1d779da06 ecore_drm2: remove flip test from commit path
We'll be doing tests as we build up plane state assignment.  it's too late
to do anything about it if we fail here - failed tests will block plane
assignment in the first place so the scene graph knows it still has to
render those visual elements.
2017-05-05 12:53:22 -05:00
Derek Foreman ba2275b7ec ecore_drm2: Add ecore_drm2_plane_release to release planes
Opposite of plane assign.
2017-05-05 12:53:22 -05:00
Derek Foreman 014e84d8fa ecore_drm2: Store output in plane structure
This will simplify a bunch of API that would otherwise have to pass in
both output and plane - and in some cases we might not have the output
handy anyway.
2017-05-05 12:53:21 -05:00
Derek Foreman aae1c50dd3 ecore_drm2: Remove next, current, pending from plane state
These will be output state eventually
2017-05-05 12:53:21 -05:00
Derek Foreman 308a11cfd6 ecore_drm2: Assign planes in ecore_drm2_plane_assign
Don't just test, allocate the resource, and then prevent further
assignments from trying to use it as well.
2017-05-05 12:53:21 -05:00
Derek Foreman 7dd8d6d163 ecore_drm2: Don't use drmModeAtomicMerge
We're creating the entire state from scratch already - trying to merge
with the old state will likely bring in state we just tried to replace.
2017-05-05 12:53:21 -05:00
Derek Foreman eb305727d0 ecore_drm2: Remove extra #ifdef
It's the same as the previous one, so combine them.
2017-05-05 12:53:21 -05:00
Derek Foreman 63bc30dd5b ecore_drm2: Fix typo in error message
Stop printing "commit test failed" from non-test commits.
2017-05-05 12:53:21 -05:00