1333 Commits

Author SHA1 Message Date
Sebastian Wick
4cf73fcfed backends/native: Remove unused meta_kms_crtc_has_gamma
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2861>
2023-02-23 17:20:36 +00:00
Sebastian Wick
36aada2164 backends/native: Store supported variants for KMS enum/bitmasks
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2861>
2023-02-23 17:20:36 +00:00
Sebastian Wick
80dd26428b backends/native: Store min/max value for KMS signed range properties
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2861>
2023-02-23 17:20:36 +00:00
Jonas Ådahl
45bda2d969 renderer/native: Detach old onscreens when rebuilding views
With detach meaning having the onscreen stop listening on configuration
changes on the corresponding backing mode setting objects. We need to do
this as there is a time between rebuilding the views, and that the new
mode sets are called, where the old onscreen is kept alive, but the
stage view is gone. At this point in time, if privacy screen or gamma
configuration changes, e.g. by the night light temperature changing, the
onscreen would attempt to schedule an update on the now gone stage view.

This commit also renames the "keep onscreen alive" to "detached
onscreens" to more clearly communicate that it's detached onscreens from
their corresponding mode setting objects.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2621
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2863>
2023-02-22 15:25:25 +00:00
Jonas Ådahl
9434b01998 renderer/native: Don't leak onscreen in error path
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2863>
2023-02-22 15:25:25 +00:00
Jonas Dreßler
d6062baef3 backends/native/seat-impl: Translate touch coords before storing
For the coordinates of pointers or stylii, we translate the ones we store
using the viewport matrix already. For touch events otoh, we store coords
untranslated and translate them later only for event emission.

Let's be consistent here and store the coordinates of touch events
translated, just like we do for pointer events.

This fixes touch window dragging on rotated monitors. MetaWindowDrag calls
clutter_seat_query_state(), which uses those stored coordinates. So in case
of a touch sequence the coords returned by query_state() would be
untranslated.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2859>
2023-02-20 18:00:06 +00:00
Jonas Ådahl
c6b454d00f kms: Prepare shutdown on 'prepare-shutdown' signal
Doing it in dispose means the backend is actively tearing down itself,
meaning various components might or might not be there, depending on how
the tearing down is implemented. Make things a bit more robust by doing
any work that might rely on the backend being there before shutdown is
done in response to the 'prepare-shutdown' signal being emitted by the
backend.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2853>
2023-02-18 10:53:27 +00:00
Jonas Ådahl
5f34d1eae2 kms: Add _in_impl() suffix to some functions
These functions always run in the impl context; make that clearer by
adding a _in_impl() suffix as done elsewhere.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2853>
2023-02-18 10:53:27 +00:00
Jonas Ådahl
d1506fbb78 tests/kms/update: Add test for page flip feedbacks
Only tests the expected success path, i.e. when we receive a page flip
event.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2853>
2023-02-18 10:53:27 +00:00
Jonas Ådahl
e65c6f18b3 tests/kms: Don't leak MetaKmsFeedback
Also start warning if we don't handle the
meta_kms_device_process_update_sync() return value.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2853>
2023-02-18 10:53:27 +00:00
Jonas Ådahl
0b325d64f4 kms/impl-device/atomic: Don't leak drm commit request on error
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2853>
2023-02-18 10:53:27 +00:00
Daniel van Vugt
733aa0e3b7 onscreen/native: Only hold on to scanout buffers in next_fb and current_fb
So we can remove the additional `next_fb` and `current_fb` pointers from
`MetaOnscreenNativeSecondaryGpuState`.

Some non-scanout buffers also need to be held in the case of GL blitting
which completes in the background. Those are referenced from the scanout
buffers themselves to ensure the source buffers live just as long.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2087>
2023-02-01 16:56:34 +00:00
Jonas Ådahl
a811a93102 onscreen/native: Remove extra semicolon
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
e97c7851d3 onscreen/native: Also track privacy screen KMS state here
As with GAMMA_LUT, track whether privacy screen state has been pushed to
KMS in the onscreen. This leaves MetaOutput and MetaCrtc to be about
configuration, and not application.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
24bdafa220 onscreen/native: Track GAMMA_LUT invalidations here
We only know if changing the GAMMA_LUT has happened if we sent away a
KMS update that succeeded. Concentrate this state tracking to the
onscreen.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
beb6903397 output/kms: Make set privacy screen caller handle the update
As with CRTC GAMMA_LUT, we're moving towards making the entity managing
KMS updates aware if there are any changes to be made, and whether KMS
updates are actually needed or not, and for privacy screen changes, this
means we need to communicate whether the privacy screen state is valid
or not. This allows the caller to create any needed MetaKmsUpdate.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
589c833e5f crtc/kms: Make set gamma caller handle the update
We're moving towards making the entity managing KMS updates aware if
there are any changes to be made, and whether KMS updates are actually
needed or not, and for GAMMA_LUT changes, this means we need to
communicate whether the GAMMA_LUT state is valid or not. This allows the
caller to create any needed MetaKmsUpdate.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
ee91655f7d output/native: Set privacy screen KMS state in prepare-frame
This makes it behave the same as the gamma look up table of CRTCs.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
8e7ada70a5 renderer/native: Make onscreen handle setting gamma
It's state that is part of the onscreen/CRTC, so move it there.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
2f39f759c2 kms/update: Remove API to remove result listener
Its use have been replaced with creating and adding state to an update
only when it's expected to be posted.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Evan Goode
0742170062 Support selecting an acceleration profile for touchpad devices
Signed-off-by: Evan Goode <mail@evangoo.de>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2426>
2023-02-01 03:03:47 +00:00
Jonas Ådahl
49b0a8921c Use g_clear_fd() instead of open coding the same behavior
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2806>
2023-01-30 15:11:26 +00:00
Jonas Ådahl
8b92a00dd1 Use the same prefix for all generated D-Bus boiler plate
A somewhat painful rename, but it'll open up for simplifying the build
script a bit, while at the same time bringing consistency to chaos.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2811>
2023-01-28 12:35:54 +01:00
Carlos Garnacho
8f268f2930 backends/native: Keep general direction when crossing monitors
When the pointer crosses monitors, we account for a single motion event
resulting in the pointer moving across more than 2 monitors, in order
to correctly account each monitor scale and the distance traversed
across each monitor in the resulting relative motion vector.

However, memory on the direction is kept short, each iteration to
find the target view just remembers the direction it came from. This
brings a pathological case with 4 monitors with the same resolution
in a 2x2 grid, and a motion vector that crosses monitors at the
intersection of all 4 in a perfect diagonal. (Say, monitors are
all 1920x1080 and pointer moves from 1920,1080 to 1919,1079).

In that case, the intersection point at the crossing between 4
monitors (say, 1920,1080) will be considered to intersect with 2
edges of each view. Since there is always at least 2 directions to
try, the loop will always find the direction other than the one
it came from, and as a result endlessly jump across all 4 possible
choices.

In order to fix this, consider only the global v/h directions,
we already know if the pointer moves left/right or up/down, so
only consider those directions to jump across monitors.

For the case at hand, this will result in three monitors visited,
(either bottomright/bottomleft/topleft, or bottomright/topright/topleft)
with a total distance of 0,0 in the middle one, effectively
resulting in a correct diagonal motion.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2598
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2803>
2023-01-24 17:30:46 +00:00
Carlos Garnacho
34a9141a6c backends/native: Minor refactor
Refactor code so that variables don't depend the on motion line
content, but the other way around. This makes it clearer what each
vector means.

This has no functional changes.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2803>
2023-01-24 17:30:46 +00:00
Carlos Garnacho
717ee78997 backends/native: Set up keyboard a11y when keyboards are plugged
Commit 4e0ffba5c attempted to fix initialization of keyboard a11y,
but mousekeys do attempt to create a virtual input device at a
time that it is too early to try to create one.

Defer this operation until keyboard devices are added, so that
we are ensured to already have the seat input thread set up.

Fixes: 4e0ffba5c - backends/native: Initialize keyboard a11y on startup
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2778>
2022-12-23 14:51:01 +01:00
Jonas Ådahl
7e974ba6cc backend: Get 'is-stage-views-scaled' from backend
It did, but used the old backend singleton.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2718>
2022-12-17 13:52:51 +00:00
Jonas Ådahl
c390f70edc backend: Set up and use ownership chains
This means objects have an owner, where the chain eventually always
leads to a MetaContext. This also means that all objects can find their
way to other object instances via the chain, instead of scattered global
singletons.

This is a squashed commit originally containing the following:

cursor-tracker: Don't get backend from singleton

idle-manager: Don't get backend from singleton

input-device: Pass pointer to backend during construction

The backend is needed during construction to get the wacom database.

input-mapper: Pass backend when constructing

monitor: Don't get backend from singleton

monitor-manager: Get backend directly from monitor manager

remote: Get backend from manager class

For the remote desktop and screen cast implementations, replace getting
the backend from singletons with getting it via the manager classes.

launcher: Pass backend during construction

device-pool: Pass backend during construction

Instead of passing the (maybe null) launcher, pass the backend, and get
the launcher from there. That way we always have a way to some known
context from the device pool.

drm-buffer/gbm: Get backend via device pool

cursor-renderer: Get backend directly from renderer

input-device: Get backend getter

input-settings: Add backend construct property and getter

input-settings/x11: Don't get backend from singleton

renderer: Get backend from renderer itself

seat-impl: Add backend getter

seat/native: Get backend from instance struct

stage-impl: Get backend from stage impl itself

x11/xkb-a11y: Don't get backend from singleton

backend/x11/nested: Don't get Wayland compositor from singleton

crtc: Add backend property

Adding a link to the GPU isn't enough; the virtual CRTCs of virtual
monitors doesn't have one.

cursor-tracker: Don't get display from singleton

remote: Don't get display from singleton

seat: Don't get display from singleton

backend/x11: Don't get display from singleton

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2718>
2022-12-17 13:52:51 +00:00
Jonas Ådahl
c45ab10c0e Make VT switch API explicitly part of the native backend
It already was, more or less, but make it a bit more in your face.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2718>
2022-12-17 13:52:51 +00:00
Carlos Garnacho
4e0ffba5c1 backends/native: Initialize keyboard a11y on startup
The MetaSeatImpl is tracking changes on keyboard a11y setting changes,
but missing its initialization on startup.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1858
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2750>
2022-12-17 12:03:49 +00:00
Jonas Ådahl
489bc65381 tests/utils: Add helper to flush the input thread
Add a helper function that ensures any queued virtual input events have
been flushed from the input thread. This works by posting a task to the
input thread, which will itself queue another callback back to the main
thread. Once the main thread callback is invoked, the flush call is
unblocked and the function returns. Upon this, any previously emitted
virtual input event should have already passed through the input thread
back into the main thread, however not necessarily fully processed.

For making sure it has been processed, one also have to make sure the
stage has been updated, e.g. via `meta_wait_for_paint()`.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2727>
2022-12-13 18:31:14 +00:00
Jonas Ådahl
8bc375005c kms/connector: Don't query the kernel twice when updating
On hotplug, the events we receive from the kernel are async, and
connectors in the kernel come and go as they please. In practice, this
means that calling drmModeGetConnector() twice more or less directly
after each other, there is no guarantee that the latter call will return
anything if the former did.

When updating the connector in response to hotplugs, we'd first update
the list of existing connectors, and following that, query each and
every one again for their current state, to update our internal
representation; only the former handled drmModeGetConnector() returning
NULL, meaning if unlucky, we'd end up doing a null pointer dereference
when trying to update the state.

Handle this by querying the kernel for the current connector state only
once per connector, updating the list of connectors and their
corresponding state at the same time.

Fixes the following crash:

    #0 meta_kms_connector_read_state at ../src/backends/native/meta-kms-connector.c:684
    #1 meta_kms_connector_update_state at ../src/backends/native/meta-kms-connector.c:767
    #2 meta_kms_impl_device_update_states at ../src/backends/native/meta-kms-impl-device.c:916
    #3 meta_kms_device_update_states_in_impl at ../src/backends/native/meta-kms-device.c:267
    #4 meta_kms_update_states_in_impl at ../src/backends/native/meta-kms.c:604
    #5 update_states_in_impl at ../src/backends/native/meta-kms.c:620
    #6 meta_kms_run_impl_task_sync at ../src/backends/native/meta-kms.c:435
    #7 meta_kms_update_states_sync at ../src/backends/native/meta-kms.c:641
    #8 handle_hotplug_event at ../src/backends/native/meta-kms.c:651
    #9 on_udev_hotplug at ../src/backends/native/meta-kms.c:668

Related: https://bugzilla.redhat.com/show_bug.cgi?id=2131269
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2709>
2022-11-24 16:18:22 +00:00
Jonas Ådahl
990a10fe78 barrier/native: Fix coding style
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2714>
2022-11-24 12:25:29 +00:00
Jonas Ådahl
1645171d4b seat/impl: Wait for pointer constraining when updating viewports
It is generally assumed here and there that the pointer at all point in
time is within some logical monitor, if there is any logical monitor to
be within.

With the input thread, this was for a short amount of time not reliable,
resulting in crashes in combination with hotplugging or suspend/resume,
where monitors come and go quickly.

What happens is that the pointer at first is within a logical monitor,
but when that logical monitor is removed, while the new monitor
viewports are handed to the input thread, the constraining happens
asynchronously, meaning there is a time between between the new
viewports are sent, and before clutter_seat_query_state() starts
reporting the constrained position.

If a new client mapped a maximized window during this short time frame,
we'd crash with

    #0 meta_window_place at ../src/core/place.c:883
    #1 place_window_if_needed at ../src/core/constraints.c:562
    #2 meta_window_constrain at ../src/core/constraints.c:310
    #3 meta_window_move_resize_internal at ../src/core/window.c:3869
    #4 meta_window_force_placement at ../src/core/window.c:2120
    #5 xdg_toplevel_set_maximized at ../src/wayland/meta-wayland-xdg-shell.c:429
    #6 ffi_call_unix64 at ../src/x86/unix64.S:105
    #7 ffi_call_int at ../src/x86/ffi64.c:672
    #8 wl_closure_invoke at ../src/connection.c:1025
    #9 wl_client_connection_data at ../src/wayland-server.c:437

The fix for this is to make sure that the viewports are updated and
pointers constrained synchronously, i.e. the main thread will wait until
after the input thread is done constraining before continuing.

Related: https://bugzilla.redhat.com/show_bug.cgi?id=2147502
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2711>
2022-11-24 11:28:55 +01:00
Bilal Elmoussaoui
bb5af3a6bd g-i: Drop unneeded since/stability annotations
They are no longer useful since the merge of cogl inside mutter

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2708>
2022-11-22 13:32:52 +01:00
Jonas Ådahl
22d08501a8 cursor-renderer/native: Fix cursor sprite CRTC scale
The CRTC cursor sprite scale was incorrectly assumed to be always 1.0
when using the default not-scale-monitor-framebuffer mode. This is
harmless in most cases, as most clients provide HiDPI capable cursors,
but for the ones that didn't, we'd end up drawing their cursors
unscaled, when using the cursor planes.

Fix this by using the "texture scale" which is what is intended for
this.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2477
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2698>
2022-11-18 11:26:30 +00:00
Jonas Ådahl
a1d14a6176 cursor-renderer/native: Don't put opaque buffers in cursor plane
Cursor planes tend to be ARGB8888 and support no other format (ideally
we should not hard code this, but un-hard-coding that is for another
day), and if we put e.g. a XRGB8888 buffer in there, it'll either result
in the gbm_bo allocation failing (it doesn't allow USE_CURSOR with any
other format) or mode setting failing if using  dumb buffers directly.
In the former case, we'll fall back to OpenGL indefinitely, and in the
latter, we'll have failed mode sets as long as we try to set the invalid
cursor buffer as the cursor plane.

Change things to process all buffers that are not ARGB8888 using the
scale/rotate machinery we already have, turning XRGB8888 into ARGB8888.

Related: https://gitlab.gnome.org/GNOME/mutter/-/issues/2477
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2698>
2022-11-18 11:26:30 +00:00
Jonas Ådahl
b15be5e287 backend/native: Don't assume passed error points to anything
It's common practice to not require a non-NULL error passed to `GError
**error` arguments, so do not make that assumption here.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2699>
2022-11-17 10:25:37 +00:00
Carlos Garnacho
21fb6cc412 backends/native: Implement get_dimensions() in native devices
We already poked the libinput device size, so use that.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2617>
2022-11-09 10:46:55 +00:00
Carlos Garnacho
7dd25b62ed backends/native: Avoid direct udev usage in MetaInputSettingsNative
Use device capabilities to figure out whether configuration applies to
a device or not.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2617>
2022-11-09 10:46:55 +00:00
Carlos Garnacho
d274d4359f backends/native: Set up trackball/trackpoint capabilities
Use udev to detect these features in input devices.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2617>
2022-11-09 10:46:55 +00:00
Łukasz Spintzyk
c57a500ccb backend/native: Create MetaRenderDevice on_gpu_added when it does not exists
Fixes GNOME/mutter#2481

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2676>
2022-11-01 11:13:38 +01:00
José Expósito
5fa1a8cf42 backends/native: Send lores scroll in the middle of the detent
Some mice send a value slightly lower than 120 for some detents. The
current approach waits until a value of 120 is reached before sending a
low-resolution scroll event.

For example, the MX Master 3 sends a value of 112 in some detents:

              detent                   detent
    |                        |                       |
                        ^    ^                    ^
                        112  REL_WHEEL            224

As illustrated, only one event was sent but two were expected. However,
sending the low-resolution scroll event in the middle plus the existing
heuristics to reset the accumulator solve this issue:

              detent                   detent
    |                        |                       |
                ^          ^             ^          ^
                REL_WHEEL  112           REL_WHEEL  224

Send low-resolution scroll events in the middle of the detent to solve
this problem.

Fix https://gitlab.gnome.org/GNOME/mutter/-/issues/2469

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2668>
2022-10-18 17:28:32 +00:00
José Expósito
92a90774a4 virtual-input-device/native: Emit discrete scroll when the source is a wheel
Previously, when scroll was received in a remote session, it was handled
as continuous scroll.

This generated issues with clients without high-resolution scroll
support as the code path in charge of accumulating scroll until 120 is
reached was not used and therefore discrete scroll events were not being
generated.

Handle scroll generated in a remote session as discrete scroll when the
source is CLUTTER_SCROLL_SOURCE_WHEEL to fix this issue.

Fix https://gitlab.gnome.org/GNOME/mutter/-/issues/2473

Fixes: 9dd6268d13d5 ("wayland/pointer: Send high-resolution scroll data")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2664>
2022-10-18 08:16:11 +00:00
Daniel van Vugt
100c02e514 drm-buffer: Clarify misleading error message on drmModeAddFB2 failure
The real error is more likely to do with the drmModeAddFB2 failure than
the format not being compatible with drmModeAddFB.

Related: https://gitlab.gnome.org/GNOME/mutter/-/issues/2379
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2656>
2022-10-13 16:06:57 +08:00
Jonas Ådahl
2c8adb1966 output/kms: Don't attemp to add common modes on connectors without modes
We have no way to sanely add safe modes if there are no modes we can
compare with, thus don't try.

Fixes the following crash:

 #0 are_all_modes_equally_sized at ../src/backends/native/meta-output-kms.c:284
 #1 maybe_add_fallback_modes at ../src/backends/native/meta-output-kms.c:310
 #2 init_output_modes at ../src/backends/native/meta-output-kms.c:347
 #3 meta_output_kms_new at ../src/backends/native/meta-output-kms.c:414
 #4 init_outputs at ../src/backends/native/meta-gpu-kms.c:332
 #5 meta_gpu_kms_read_current at ../src/backends/native/meta-gpu-kms.c:368
 #6 meta_gpu_kms_new at ../src/backends/native/meta-gpu-kms.c:403
 #7 create_gpu_from_udev_device at ../src/backends/native/meta-backend-native.c:461
 #8 init_gpus at ../src/backends/native/meta-backend-native.c:551
 #9 meta_backend_native_initable_init at ../src/backends/native/meta-backend-native.c:632

Fixes: 877cc3eb7d44e2886395151f763ec09bea350444
Related: https://bugzilla.redhat.com/show_bug.cgi?id=2127801
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2646>
2022-09-29 14:29:43 +00:00
Michel Dänzer
efc4fa333c backend/native: Sending modifiers to clients can be disabled via udev
Using the new udev tag "mutter-device-disable-client-modifiers".

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2637>
2022-09-22 08:32:02 +00:00
Michel Dänzer
00ffe0b454 kms/device: Add flag to disable sending DRM modifiers to clients
So far the new flag can only be set via the new environment variable
MUTTER_DEBUG_SEND_KMS_MODIFIERS, and doesn't have any effect yet.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2637>
2022-09-22 08:32:02 +00:00
Jonas Ådahl
fc8a4afc45 Remove meta_is_stage_views_enabled()
This is an old relic from when ClutterStageView was being added, and
tests were somewhat prepared to be able to test the "X11 style" of
things, with the nested backend some how managing to emulate that.

Lets drop that stuff, it isn't used by the test suite, and isn't useful
anyway; if we want to test X11 configurations, we should use the actual
X11 backend, which didn't make use of this anyway.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2619>
2022-09-19 14:46:01 +00:00
Jonas Ådahl
be4e6484ae render-device: Unmake the EGLContext after checking whether hw accelerated
When creating a render device, we create a temporary EGLContext where we
then query the `GL_RENDERER` string to check whether the renderer is any
of the known software renderers. After we're done, we destroy the
context and move on.

This should be fine as according to specification eglDestroyContext(),
with the context being actually destroyed a bit later when it's no
longer current, but mesa, when running RK3399 (Pinebook Pro), this
results in a crash in a future eglMakeCurrent():

  #0 in dri_unbind_context () at ../src/gallium/frontends/dri/dri_context.c:266
  #1 in driUnbindContext () at ../src/gallium/frontends/dri/dri_util.c:763
  #2 in dri2_make_current () at ../src/egl/drivers/dri2/egl_dri2.c:1814
  #3 in eglMakeCurrent () at ../src/egl/main/eglapi.c:907
  ...

We can avoid this, however, by calling eglMakeCurrent() with
EGL_NO_CONTEXT on the EGLDisplay, prior to destroying, effectively
avoiding the crash, so lets do that.

Related: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7194
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2414
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2612>
2022-09-03 18:34:49 +02:00