Commit Graph

825 Commits

Author SHA1 Message Date
Victor Brekenfeld 918241eb31 gles2: Avoid reference cycle in buffer user_data 2021-05-17 19:17:43 +02:00
Victor Brekenfeld 50b1996d57 gles2: Add a proper logger to the renderer 2021-05-17 19:14:20 +02:00
Victor Brekenfeld ae6334d376 gles2: Fix `import_bitmap` resulting in black textures 2021-05-17 19:08:20 +02:00
Victor Brekenfeld 5e1128b973 gles2: Link texture in buffer for caching 2021-05-17 00:40:10 +02:00
Victor Brekenfeld b675b59e3b gles2: Use buffer damage to partially update texture 2021-05-16 23:07:48 +02:00
Victor Brekenfeld 2019be737f gles2: Respect shm buffer offset 2021-05-16 23:06:42 +02:00
Victor Brekenfeld 0025f13adc gles2: Make proper use of formats to avoid unnecessary shaders 2021-05-16 23:05:44 +02:00
Victor Brekenfeld c41cc9828f renderer: Cache textures in SurfaceAttributes 2021-05-16 20:00:45 +02:00
Victor Brekenfeld e4f72f7516
Merge pull request #272 from cmeissl/allow_multiple_egl_platforms
Dynamically select the EGL platform display
2021-05-16 15:27:16 +02:00
Christian Meissl f20ff8a178 reduce severity to error in case...
...no suitable egl platform could be selected
2021-05-16 10:58:29 +02:00
Victor Brekenfeld 62fcd84226 Reverse legacy check order 2021-05-15 23:38:24 +02:00
Christian Meissl 8dc94e0817 ignore eglplatform doc examples 2021-05-15 23:34:50 +02:00
Christian Meissl af66a9c152 add more supported egl platforms 2021-05-15 23:05:26 +02:00
Christian Meissl 2e55501dea dynamically select the EGL platform display 2021-05-15 23:05:26 +02:00
Victor Brekenfeld 5d6fadcea8 cargo fmt 2021-05-15 22:35:44 +02:00
Victor Brekenfeld 524057418e drm: Fixup tty switching 2021-05-15 22:28:39 +02:00
Victor Brekenfeld 3012e87e0e drm: Do support IN_FORMATS on legacy surfaces (mostly for nouveau) 2021-05-15 21:01:44 +02:00
Victor Brekenfeld 4e2afb0f1f drm render: Don't fallback to linear but implicit modifiers 2021-05-15 21:01:44 +02:00
Victor Brekenfeld 4ffa329fe9 drm render: Log Argb8888 formats of plane and renderer 2021-05-15 21:01:44 +02:00
Victor Brekenfeld cedc536033 drm: Do not spam ALL supported plane formats 2021-05-15 21:01:44 +02:00
Victor Brekenfeld beeb810edb egl display: do not spam ALL supported formats 2021-05-15 21:01:44 +02:00
Christian Meissl f7b58b146c fixed formatting in gles2 version.rs 2021-05-15 20:41:48 +02:00
Christian Meissl 3ceff8ec67 check for gl version in gles renderer...
...in case the version is greater or equal 3.0 the
check for GL_EXT_unpack_subimage is not needed
2021-05-15 20:41:44 +02:00
Victor Brekenfeld 149c923876 cargo fmt 2021-05-15 18:17:43 +02:00
Victor Brekenfeld f0e7ff3312 cleanup + docs 2021-05-15 16:12:13 +02:00
Victor Brekenfeld 0b0067a3fd egl: Make EGLBufferReader clonable 2021-05-15 16:12:13 +02:00
Victor Brekenfeld 75b2a2d801 renderer: allow caching resources on WlBuffer
- renderer: Change the renderer api to not import different buffer types directly,
but import any supported wl_buffer
- renderer: Remove destroy_texture call and move responsibility into implementation
- gles2: Cache egl images as well as textures on wl_buffer userdata
- gles2: Implement delayed destruction of textures to avoid leaking or changing global state on drop
2021-05-15 16:12:13 +02:00
Victor Brekenfeld 2200d09841 drm: adjust RenderSurface to swapchain changes and AsDmabuf 2021-05-15 16:12:13 +02:00
Victor Brekenfeld 5cf328a1b8 allocator: Introdce AsDmabuf 2021-05-15 16:12:13 +02:00
Victor Brekenfeld 378f826c26 swapchain: do not convert buffers automatically anymore 2021-05-15 16:12:13 +02:00
Christian Meissl 7016e82bed replace hardcoded type casts...
...with platform types in the gles2 renderer
2021-05-15 16:12:13 +02:00
Victor Brekenfeld 6c25dde36e Fix some missing Debug implementations 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 7e47d648d4 First pass of adding documentation 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 52c01535d0 rustfmt 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 36bf5618ed clippy fixes 2021-05-15 16:12:12 +02:00
Victor Brekenfeld e329adcbd8 fix warnings 2021-05-15 16:12:12 +02:00
Victor Brekenfeld ca6ed6b684 allocator: Expose dumb buffer handle 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 46462b20b6 drm: Fix unnecessary Clone requirement 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 85bef5fec6 renderer: rename Texture to TextureId to better convey nature of the handle 2021-05-15 16:12:12 +02:00
Victor Brekenfeld ab6dd61592 renderer: add destroy_texture function 2021-05-15 16:12:12 +02:00
Victor Brekenfeld cb8d637d38 drm: Fixup missing reexport 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 50b0083269 renderer: Implement import_egl for wl_drm 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 348c63b350 egl: EGLBuffer add accessor for EGLImages, remove old code 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 8e3b0c0b9b egl: Do not expose multi-planar buffers for now 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 1f70aa6a08 egl: Rename EGLImages to EGLBuffer 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 3d8cf0e458 renderer: Add importing bitmaps as textures 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 243afb1030 drm: Introduce RenderSurface for compatibility/ease-of-use 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 73554aaf7f reexports: fixup gbm, remove unused image dependency 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 2c9c150e5e renderer: Remove `Frame` trait and merge into `Renderer`
Tracking of Frames, so that only one unique one can exist at a time
(gles does not allow multiple frames being rendered in parallel)
lead to very unfriendly lifetime-heavy code. A renderer is already
*unique*, just move the code there and add an error variant to catch
misuses.
2021-05-15 16:12:12 +02:00
Victor Brekenfeld 66fbb3eb06 egl: less busy logging 2021-05-15 16:12:12 +02:00
Victor Brekenfeld cb825910a6 drm: fixup test_buffer 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 93edc842b2 drm: allow commit/page_flip calls to *not* trigger an event 2021-05-15 16:12:12 +02:00
Victor Brekenfeld c8b370a030 drm: change logger visibility 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 0414417f3c egl: Allow creation of shared contexts 2021-05-15 16:12:12 +02:00
Victor Brekenfeld c6df50cb67 egl: Rexport EGLContext on toplevel 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 347507fc92 drm/legacy: Assume Argb8888 is at least supported like we used to 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 1f86faf1e6 drm: re-add device_id() to DrmDevice 2021-05-15 16:12:12 +02:00
Victor Brekenfeld c05a7aafdf swapchain: export Error type 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 1bba21bf4f swapchain: allow slots to contain userdata 2021-05-15 16:12:12 +02:00
Victor Brekenfeld c107d42ced drm/renderer: Fixup convertion into SwapBuffersError 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 0180bb6ef5 drm: allow to test if scanning out a buffer would succeed 2021-05-15 16:12:12 +02:00
Victor Brekenfeld d042609dbd swapchain: increase cap for additional queuing (e.g. explicit synchronization) 2021-05-15 16:12:12 +02:00
Victor Brekenfeld bcf6a5c4b9 gbm: allow to import dmabufs 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 58f22afa40 dmabuf's take ownership over their contents -> do not reference original buffer 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 9d021d52a4 drm: expose supported plane formats 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 52d581371c renderer: Allow Bind implementations to expose supported formats 2021-05-15 16:12:12 +02:00
Victor Brekenfeld b7aa4c416b egl: enumerate supported dmabuf formats 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 4d8bd26131 egl: enumerate supported dmabuf formats 2021-05-15 16:12:12 +02:00
Victor Brekenfeld a74aa728f7 swapchain: handle buffer conversion for the user 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 84439e5400 swapchain: fix borked resize logic 2021-05-15 16:12:12 +02:00
Victor Brekenfeld 3a2e4ddf61 Migrate the winit backend to the new egl and renderer apis. 2021-05-15 16:12:12 +02:00
Victor Brekenfeld f3f10242e9 Remove the generic "graphics" module.
- Cursor is not necessary anymore as rendering hardware vs software
  cursors just depends on "where" you render the cursor.
- Format is replaced by drm-fourcc and more related to buffers and
  therefor the allocator module anyway.
- GL/Glium are replaced by the renderer module.
- Software was unused and very small anyway and can be implemented
  with the new renderer api.
- SwapBuffersError is (for now) just moved into the top-level backend module.
2021-05-15 16:12:12 +02:00
Victor Brekenfeld 4d5d7afb5a Introduce a new OpenGL renderer
This pulls a lot of code from anvil/src/glium_drawer and replaces glium
as glium has too many assumptions about the backend.
(Mostly that a fixed framebuffer exists, see fix bullet point.)

Depending on how picky glium is, we could try to re-introduce glium support
later with a some workarounds, but for now this is actually more
straight-forward to support and test.

- Add a new GL renderer, that only depends on egl as an initialization platform.
  In particular do not depend on a surface being available.
  Renderers share some basic drawing functions and may bind objects to render upon.
  E.g. surfaces or buffers, textures, etc for the gles2 renderer.
- Be explicit about extensions we require and use. Use some very very common ones
  to make our lives easier (e.g. BGRA and unpack to read in manditory shm formats).
- Enable GL debug output
- Allow more flexible rendering (e.g. 3D compositors) by allowing user-provided
  projection matrices. Also provide helper functions to allow easy-ish handling
  of surface and output transformations.
- Add API for renderers to tell the wayland-frontend about supported buffer-types.
- Also incoperate code from anvil/src/shm_load to handle buffer loading in the renderer
  (as this is a renderer dependant operation).
2021-05-15 16:12:12 +02:00
Victor Brekenfeld d99108a8e6 Simplify egl platform code
- Remove EGLStream code, nvidia support will re-introduced,
  when 470 hopefully lands with GBM support this summer.
- Greately simplify the native code by setting exclusively on
  `EGL_EXT_platform_base` and its extensions for initialization.
- Remove generic parameters for the underlying objects on `EGLDisplay`
  and `EGLSurface` by using trait objects instead.
- Allow creation of `EGLContext`s without a config for surface-less usage.
2021-05-15 16:12:12 +02:00
Victor Brekenfeld d606165088 Restructure drm backend
- Remove the `Device`, `Surface`, `RawDevice` and `RawSurface` traits.
  We are not trying to merge the different responsibilities between...
  - Drm-Surfaces: crtcs and planes for displaying buffers
  - Gbm-Surfaces: allocating and managing front- and back-buffers
  - EGL-Surfaces: Load drawing apis.
  ..anymore.
- Instead unify the legacy and atomic backends into one `DrmDevice` and
  a `DrmSurface`, that under the hood dispatches onto the different modules.
- Do not keep a list of surfaces inside the devices. These are reference-counting
  nightmares and a frequent issue due to the read-only nature of `Rc` and `Arc` and
  thread-safety related problems.
- Surfaces are mostly doing state-tracking independently of each other
  and contain some more helper functions.
- Simplify session code, because we do not need to pass the events
  through three layers of devices and surfaces anymore.
- Each surface now represents a plane. Rendering to a plane is just like
  any other rendering step, including the Cursor-plane.
  (Legacy interfaces only have one to avoid dealing with short-comings of the api).
2021-05-15 16:12:12 +02:00
Victor Brekenfeld c388a502c4 Add allocator module
- Add module that deals with different kinds of buffers (memory and external),
  their allocation and usage for rendering. Also try to properly support modifiers this time.
- Describe gbm functionality as an allocator (instead of a rendering device/surface).
- Also create a quick-and-dirty dumb buffer allocator for tesing / simpler tasks.
- Add a (current untested) wrapper for dmabufs and some code for converting from gbm for now.
- (also untested) Swapchain helper to manage front/backbuffers for surfaceless rendering.
2021-05-15 16:12:12 +02:00
Benjamin Lee 5ac7f7c884 replaced usage of slog_or_stdlog with slog_or_fallback
I think this was missed on a previous refactoring pass, and never got
tested?
2021-05-04 20:24:28 +02:00
Victor Berger 243d2d8b38 libinput: add missing #[cfg()] 2021-04-11 12:59:54 +02:00
Poly d2373fdddd [Debug Trait] Remove unnecessary manual imps 2021-02-23 20:21:20 +01:00
Poly 804a6cb59f [Debug Trait] Add missing comment 2021-02-23 20:20:12 +01:00
Poly 6d76d1c1a2 [Debug Trait] Comments and Cleanup
.
2021-02-22 21:05:00 +01:00
Poly de3dfacee0 [Debug Trait] General cleanup and small fixes 2021-02-22 21:00:49 +01:00
Poly e9eb698dd0 [Debug Trait] wayland
wayland/compositor
wayland/data_device
wayland/dmabuf
wayland/explicit_synchronization
wayland/output
wayland/seat
wayland/shell
wayland/shm
2021-02-22 21:00:49 +01:00
Poly aa2a0523bf [Debug Trait] utils 2021-02-22 21:00:49 +01:00
Poly f96fcee1fd [Debug Trait] backend
backend/libinput
backend/egl
backend/drm
backend/session
2021-02-22 21:00:49 +01:00
Poly bb90631d65 [Debug Trait] signaling.rs 2021-02-22 21:00:49 +01:00
Poly f6a63d351d [Debug Trait] input.rs, udev.rs, winit.rs
smithay/smithay#258
2021-02-22 21:00:49 +01:00
Victor Berger 991eba216d Update most dependencies 2021-02-22 20:27:46 +01:00
Gary Guo 4a065818c4 Document shell approach for Xwayland launching 2021-02-14 21:15:49 +01:00
Gary Guo 4d25153397 Use sh to handle SIGUSR1 and replace fork+exec with spawn 2021-02-14 21:15:49 +01:00
Uli Schlachter a7f18e5deb winit: Allow moving the cursor
It is not necessary to set the cursor position on winit since the
windowing system already updates the position on its own. Instead, doing
this makes the cursor (almost) stuck and unmovable. Thus, this commit
just removes that code from the winit backend.

Fixes: https://github.com/Smithay/smithay/issues/241
Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-02-14 21:08:40 +01:00
Uli Schlachter 4d012e17a0
XWayland: Use a fork helper process to launch Xwayland (#250)
* xwayland: Add LaunchHelper

Calling fork() in a multi-threaded process is a bad idea. I am getting
crashes at exit() and "man fork" says that only async-signal-safe
functions can be called after forking in a multi-threaded process.
exit() is not async-signal safe. Thus, forking needs to happen before
any threads are created.

This commit adds a LaunchHelper to the public API. This is a handle to a
forked child process. So far this does not do much, but the intention is
to use this later instead of fork()ing directly.

Signed-off-by: Uli Schlachter <psychon@znc.in>

* xwayland: Move the fork dance to LaunchHelper

No functional changes intended. This only moves the code over and does
not actually use the LaunchHelper for anything.

Signed-off-by: Uli Schlachter <psychon@znc.in>

* Move checking the launch status to LaunchHelper

This should again have no functional changes, but the error log output
might change slightly, since an IOError instead of a NixError is
returned.

Signed-off-by: Uli Schlachter <psychon@znc.in>

* xwayland: Set $DISPLAY earlier

This way, the WM already gets the correct value of $DISPLAY.

Signed-off-by: Uli Schlachter <psychon@znc.in>

* xwayland: Use the launch helper process

FD passing is now used to give the display number and the sockets to the
launch helper process. That process then forks of the actual process
that spawns Xwayland. Once Xwayland started, this is reported back with
another write on the pipe.

Signed-off-by: Uli Schlachter <psychon@znc.in>

* Add to the comment explaining Xwayland startup

Signed-off-by: Uli Schlachter <psychon@znc.in>

* Please rustfmt

Signed-off-by: Uli Schlachter <psychon@znc.in>

* Make clippy happy

Signed-off-by: Uli Schlachter <psychon@znc.in>
2020-12-29 15:41:29 +01:00
Uli Schlachter 1a2b170606 Make clippy happy
This fixes the following clippy warnings:

error: usage of `Rc<T>` when T is a buffer type
   --> src/wayland/dmabuf/mod.rs:265:14
    |
265 |     formats: Rc<Vec<Format>>,
    |              ^^^^^^^^^^^^^^^ help: try: `Rc<[Format]>`
    |
    = note: `-D clippy::rc-buffer` implied by `-D warnings`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#rc_buffer

error: usage of `Rc<T>` when T is a buffer type
  --> src/wayland/shm/mod.rs:91:14
   |
91 |     formats: Rc<Vec<wl_shm::Format>>,
   |              ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `Rc<[wl_shm::Format]>`
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#rc_buffer

Signed-off-by: Uli Schlachter <psychon@znc.in>
2020-12-29 14:43:56 +01:00
Uli Schlachter 06c44ede55 xwayland: Unlink X11 socket before binding to it
When starting xwayland with smithay, the first time I would get the
following output (do not ask what happens with displays 0, 1, 2. That's
not important right now):

Dec 29 14:13:31.031 DEBG Attempting to aquire an X11 display lock, D: 3, smithay_module: XWayland
Dec 29 14:13:31.032 DEBG X11 lock aquired, D: 3, smithay_module: XWayland
Dec 29 14:13:31.032 INFO Initialization completed, starting the main loop.

When killing the process with ctrl-c and starting it again, this
happened:

Dec 29 14:13:29.138 DEBG Attempting to aquire an X11 display lock, D: 3, smithay_module: XWayland
Dec 29 14:13:29.138 DEBG Failed to acquire lock, D: 3, smithay_module: XWayland
Dec 29 14:13:29.138 DEBG Lock was blocked by a defunct X11 server, trying again, D: 3, smithay_module: XWayland
Dec 29 14:13:29.139 DEBG Attempting to aquire an X11 display lock, D: 3, smithay_module: XWayland
Dec 29 14:13:29.139 DEBG X11 lock aquired, D: 3, smithay_module: XWayland
Dec 29 14:13:29.139 INFO Cleaning up X11 lock., smithay_module: XWayland
Dec 29 14:13:29.139 DEBG Attempting to aquire an X11 display lock, D: 4, smithay_module: XWayland
Dec 29 14:13:29.139 DEBG X11 lock aquired, D: 4, smithay_module: XWayland
Dec 29 14:13:29.139 INFO Initialization completed, starting the main loop.

The reason for the above behaviour is the
smithay::xwayland::x11_sockets::open_x11_sockets_for_display() failed.
The code successfully acquired the lock file, but then could not bind
the sockets. More specifically, the concrete socket in /tmp/.X11-unix/
already existed and thus bind() failed with EADDRINUSE.

(The code in X11Lock::grab() would then drop the already acquired
X11Lock and its Drop impl deleted the socket. Thus, when I started
things again, this time it successfully acquired display 3.)

Fix this removing the socket before trying to bind it.

This is also done by wlroots: In xwayland/sockets.x, the function
open_socket() has the same job as smithay's open_socket() function.
However, for non-abstract sockets, it would first unlink the target
before trying to bind:

        if (addr->sun_path[0]) {
                unlink(addr->sun_path);
        }

Signed-off-by: Uli Schlachter <psychon@znc.in>
2020-12-29 14:42:42 +01:00
Uli Schlachter 0f2faf6e91 Fix a typo in a log message
Signed-off-by: Uli Schlachter <psychon@znc.in>
2020-12-29 14:42:19 +01:00
Uli Schlachter 95fbce096c Fix clippy::unnecessary-lazy-evaluations warnings
Signed-off-by: Uli Schlachter <psychon@znc.in>
2020-12-27 12:32:48 +01:00
Uli Schlachter 9e14e43bd8 Fix writing /tmp/.X{}.lock
Here is a lock file not created by smithay:

$ xxd /tmp/.X0-lock
00000000: 2020 2020 2020 2035 3537 0a                     557.

And this is a lock file created by smithay:

$ xxd /tmp/.X23-lock
00000000: 2020 2020 3130 3733 3332                     107332

As you see, the difference is a trailing newline (0x0a).

Lock files 1 to 22 where also created by smithay, because I started it a
couple of times. Reading these lock files fails, since the code expects
a file with at least 11 bytes of content: It uses read_exact() with a
buffer of length 11 in the Err()-branch of the match that this commit
modifies.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2020-12-26 14:21:29 +01:00
Uli Schlachter e427787353 xwayland: Use pipe instead of signal
Handling SIGUSR1 requires setting a signal handler, which is a global
resource. This can also cause problems in the presence of threads, since
every thread needs to set up a signal handler. This commit instead
changes the code to use a pipe instead (actually a UnixStream). When the
child closes the pipe, the parent wakes up and knows "to do something".

Fixes: https://github.com/Smithay/smithay/issues/246
Signed-off-by: Uli Schlachter <psychon@znc.in>
2020-12-25 22:29:39 +01:00
Victor Berger 36e11284c2 New clippy fixes 2020-11-02 10:24:55 +01:00
Eric Anholt 78d28165c3
Update nix to 0.19 (#237) 2020-10-31 18:33:18 +01:00
Jonas Platte bcc8f13b2b Fix most rustc & clippy warnings 2020-09-16 12:56:32 +02:00
Jonas Platte c4f64489e8 Update wayland-rs to 0.28 2020-09-16 12:56:32 +02:00
Mateus Carmo M de F Barbosa d5931c5957 Add unit tests for SerialCounter 2020-08-27 13:07:01 +02:00
Mateus Carmo M de F Barbosa 2a351d0879 Use Serial type for all serials 2020-08-27 13:07:01 +02:00
Mateus Carmo M de F Barbosa 0a0399a339 Implement Serial type to take wrap-around into account 2020-08-27 13:07:01 +02:00
Victor Berger 49dda88c63 backend.input: keep sub-pixel precision in events
libinput provides sub-pixel precision for pointer motion & touch events.
Keep this precision by switching all coordinates values from input
events to f64 (rather than i32 or u32). Otherwise, values are rounded
and part of the movment is lost.

Potentially fixes #224
2020-07-13 17:56:20 +02:00
Victor Berger 1871b5ddae Make slog-stdlog into an optional dependency
slog-stdlog has a significant dependency tree and is basically unsued if
the downstream crate of Smithay always provides a logger (like anvil),
so it is not really needed.
2020-07-12 16:38:05 +02:00
Victor Brekenfeld 9c3c3d939e cargo fmt & lint 2020-06-28 00:25:15 +02:00
Victor Brekenfeld a1f14cb571 reexports: reexport winit 2020-06-28 00:23:24 +02:00
Victor Brekenfeld 107b18a4c1 logind: do not include dbus code without dbus dependency 2020-06-28 00:23:24 +02:00
Victor Brekenfeld 51b5b39b75 cursor: allow cursor clearing on CursorBackend 2020-06-28 00:23:24 +02:00
Victor Brekenfeld d603a9ccfb egl: Do not store and release WlBuffer for EGLImages 2020-06-28 00:23:24 +02:00
Victor Brekenfeld 9fd8dd9cec anvil: allow draw_windows to take optional output coordinates 2020-06-28 00:05:01 +02:00
Kirill Chibisov 102f41c1e1 wayland.seat: Send modifiers event right after enter event
wl_keyboard.modifiers must be sent after wl_keyboard.enter event,
otherwise it's a protocol violation.
2020-06-14 18:38:08 +02:00
Victor Brekenfeld 7b4459f649 drm: Make surfaces `Send` 2020-06-11 18:57:05 +02:00
Victor Brekenfeld cc67764c23 make clippy happy 2020-06-11 12:16:43 +02:00
Victor Brekenfeld 3c048075f4 docs: Add more explanations to various graphics code 2020-06-07 22:42:33 +02:00
Victor Brekenfeld a3459cda31 docs: Add more explanations to the eglstream-drm-code 2020-06-07 22:42:33 +02:00
Victor Brekenfeld 978415987f docs: Add more explanations to the gbm-drm-code 2020-06-07 22:42:33 +02:00
Victor Brekenfeld dcb3bb79a7 docs: Add more explanations to the atomic-drm-code 2020-06-07 22:42:33 +02:00
Victor Brekenfeld 7e8f6b2955 docs: Add more explanations to the legacy-drm-code 2020-06-07 22:42:33 +02:00
Victor Brekenfeld fa42a0a223 docs: Add a more fleshed out backend::drm module documentation 2020-06-07 22:42:33 +02:00
Victor Berger 05992b9d11 wayland.seat: Send key event before modifier event 2020-05-23 21:37:35 +02:00
Victor Berger a717fa36cd backend.session: Migrate to using Signaler
Change the session backend to rely on Signaler to propagate its
signals. Also introduce the Linkable trait to allow generic composition
of objects needing to listen for signals.
2020-05-23 21:37:22 +02:00
Victor Berger c3859d999b backend.session: use pkg-config to find logind lib
Introduce the `backend_session_elogind` cargo feature which pulls
`backend_session_logind` and makes the logind session backend seek
`libelogind.so` instead of `libsystemd.so`.

Fixes #127
2020-05-23 21:37:22 +02:00
Victor Berger b05c2ccbba backend.session: rework as calloop event sources
Rework the Session Notifiers so that they are calloop event sources
by themselves, allowing them to be inserted by the user without the
`bind_session` dance.

Also update the logind backend to use the current dbus-rs API, rather
than the deprecated one.
2020-05-23 21:37:22 +02:00
Victor Brekenfeld 9acd109a04 fallback: support FallbackDevice<GbmDevice, EglStreamDevice> for automatic nvidia support 2020-05-23 00:29:32 +02:00
Victor Brekenfeld 53f5753943 udev: Add function to query the loaded driver of a device 2020-05-23 00:29:32 +02:00
Victor Brekenfeld 69c1116d82 eglstream: initial backend implementation 2020-05-23 00:29:32 +02:00
Victor Brekenfeld eb1dc5de4f egl: do not fail if desired swap interval cannot be selected 2020-05-23 00:17:19 +02:00
Victor Brekenfeld e8926da56c graphics: Log underlying error of SwapBuffers 2020-05-23 00:17:19 +02:00
Victor Brekenfeld d3a60e03c9 egl: differenciate display creation failures 2020-05-23 00:17:19 +02:00
Victor Brekenfeld 73447bd668 egl: Pass clonable display handle to native-impls 2020-05-23 00:17:19 +02:00
Victor Brekenfeld cc6e3569f0 gbm: Do not try to use eglGetDisplay 2020-05-23 00:17:19 +02:00
Victor Brekenfeld 997895b3c7 drm: allow crate internal impls to access crtc and plane 2020-05-23 00:17:19 +02:00
Victor Brekenfeld f9aef43ac2 egl: move loading into separate function 2020-05-23 00:17:19 +02:00
Victor Brekenfeld 19ef1ed3c0 egl: move eglSwapBuffers call into NativeSurface 2020-05-23 00:17:19 +02:00
Victor Brekenfeld 0565e5fd79 egl: NativeSurface: replace recreate with create 2020-05-23 00:17:19 +02:00
Victor Brekenfeld 0267703e91 egl: move surface creation into `NativeSurface` 2020-05-22 23:19:19 +02:00
Victor Brekenfeld 4647141770 egl: Allow displays to specify surface_type 2020-05-22 23:19:17 +02:00
Victor Brekenfeld 726624cbd8 egl: allow display creation to specify attributes 2020-05-22 23:18:49 +02:00
Victor Brekenfeld 64a57a4cc8 downgrade some recoverable errors to warnings 2020-05-12 20:03:03 +02:00
Victor Brekenfeld 9610f31e44 drm: log initial surface parameters 2020-05-12 20:03:03 +02:00
Victor Brekenfeld 2128f68847 egl: log hidden egl errors 2020-05-12 20:03:03 +02:00
Victor Brekenfeld bf3e8b4d10 egl: check for surface creation failure 2020-05-12 20:03:03 +02:00
Victor Brekenfeld 7c4ca4e524 atomic: do not revert on failing state 2020-05-12 20:03:03 +02:00
Victor Brekenfeld f1c40f7306 lint: fmt & clippy 2020-05-12 20:03:03 +02:00
Victor Brekenfeld 20b373470f drm: permission denied is also temporary 2020-05-12 19:47:16 +02:00
Victor Brekenfeld 25f2610ea6 gbm: Do not unpack drm-rs errors on conversion 2020-05-12 19:47:16 +02:00
Victor Brekenfeld a0c65114fb drm: Do not unpack drm-rs errors on conversion 2020-05-12 19:47:16 +02:00
Victor Brekenfeld 12a57f799a logind: ignore gone events 2020-05-12 19:47:16 +02:00
Victor Brekenfeld 44ebed3446 gbm: only clear recreation state on successful commits 2020-05-12 19:47:16 +02:00
Victor Brekenfeld a6863af496 egl: force surface creation on resume 2020-05-12 19:47:16 +02:00
Victor Brekenfeld 140185f6f5 atomic: clear invalid cursor buffers 2020-05-12 19:47:16 +02:00
Victor Brekenfeld 163533a72a atomic: avoid too excessive trace logging 2020-05-12 19:47:16 +02:00
Victor Brekenfeld b4cbecd369 atomic: do not set current state if commit fails 2020-05-12 19:47:16 +02:00
Victor Brekenfeld f3dabe2cea atomic: clear broken resources on resume 2020-05-12 19:47:16 +02:00
Victor Brekenfeld 9bbd9edb0c egl: track backends 2020-05-12 19:47:16 +02:00
Victor Brekenfeld 7bca463934 atomic: do not cache cursor fb info 2020-05-12 19:47:16 +02:00
Victor Brekenfeld 1a5cc59983 drm: do not ignore events for inactive devices 2020-05-12 19:46:18 +02:00
Victor Brekenfeld 49215f6a3d gbm: do not implicitly restart rendering loop 2020-05-12 19:46:18 +02:00
Victor Brekenfeld 64fc1aa0da gbm: do not block buffer forever if commit/page_flip fails 2020-05-12 19:46:18 +02:00
Victor Brekenfeld 0a716438e3 gbm: split out clear_framebuffers 2020-05-12 19:46:18 +02:00
Victor Brekenfeld eaa3a0ca87 egl: fix broken egl check 2020-05-12 19:46:18 +02:00
Victor Berger 8f543eb597 backend.input: rework libinput as a calloop source 2020-05-12 08:46:34 +02:00
Victor Brekenfeld 28166ce002
Merge pull request #206 from Smithay/fix/drm_connector
Fix drm mode and connector handling
2020-05-01 16:46:36 +02:00
Victor Brekenfeld 26cae39598 lint: clippy 2020-05-01 16:30:11 +02:00
Victor Brekenfeld 9300e35093 lint: fmt 2020-04-30 19:03:02 +02:00
Victor Brekenfeld 31b6d84442 WIP: Rework egl and glium errors 2020-04-30 00:24:35 +02:00
Victor Berger 31f1f4f9e0 backend.udev: rework as an event source 2020-04-28 11:13:25 +02:00
Victor Berger b3aae074e4 Update calloop to 0.6 2020-04-28 11:13:25 +02:00
Victor Brekenfeld 6c4a3817d3 atomic: fix set_connector/mode functions 2020-04-27 21:52:30 +02:00
Victor Brekenfeld 91b03f1e37 drm: Make DRM errors print the actual access error 2020-04-27 19:48:42 +02:00
Victor Brekenfeld b9201cd0b5 atomic: Make screen setting less log spamming 2020-04-27 19:48:42 +02:00
Victor Brekenfeld d1ac9c94db atomic: Remove verbose property mapping from log 2020-04-27 19:48:42 +02:00
Victor Brekenfeld 8a040630a0 fallback: Allow forcing legacy modeset via env-variable 2020-04-27 19:48:42 +02:00
Victor Brekenfeld 5fb73a497e gbm: cleanup session rendering loop restart 2020-04-27 19:48:42 +02:00
Victor Brekenfeld 5e530b8263 drm: better describe add_connector usage 2020-04-27 19:48:42 +02:00
Victor Brekenfeld 1a40ed6079 atomic: fixup rendering loop after tty switch 2020-04-27 19:48:41 +02:00
Victor Brekenfeld 378686611c drm: Let swap_buffers return real error 2020-04-27 19:48:41 +02:00
Victor Brekenfeld e486f7b87c legacy: fixup rendering loop after tty switch 2020-04-27 19:48:41 +02:00
Victor Brekenfeld c7a98cee21 atomic: do not allow removal of the last connector 2020-04-27 00:45:58 +02:00
Victor Brekenfeld da18c3a5f3 atomic: honor dev.active 2020-04-27 00:45:58 +02:00
Victor Brekenfeld 33149b17e2 atomic: disable connectors on surface drop 2020-04-27 00:45:58 +02:00
Victor Brekenfeld c560aef666 legacy: do not allow removal of the last connector 2020-04-27 00:45:58 +02:00
Victor Brekenfeld 4786db633b legacy: disable/enable connectors on remove/add 2020-04-27 00:45:58 +02:00
Victor Brekenfeld 7199640ad9 legacy: honor dev.active 2020-04-27 00:45:58 +02:00
Victor Brekenfeld 3d2e9aeff2 legacy: disable connectors on surface drop 2020-04-27 00:45:58 +02:00
Victor Brekenfeld d6fa2e96cf drm: Require all surfaces to always have a mode set 2020-04-27 00:45:58 +02:00
Victor Brekenfeld b6087bf2d2 legacy: move create_surface into Surface constructor 2020-04-27 00:45:58 +02:00
Victor Brekenfeld 77875f71c6 fallback: add disable_connectors to `FallbackDevice` initialization 2020-04-27 00:45:58 +02:00
Victor Brekenfeld 50f94d013a legacy: disable connectors on device creation 2020-04-27 00:45:58 +02:00
Victor Brekenfeld 8c8f5e0d59 atomic: disable connectors on device creation 2020-04-27 00:45:58 +02:00
Victor Berger 548a929d1c wayland.compositor: Correct frame callback handling 2020-04-22 12:12:57 +02:00
Victor Berger 1736db27b4 anvil: set saner values for key repeat rate 2020-04-21 23:04:23 +02:00
Victor Brekenfeld 260bfd9f86 clippy fixes 2020-04-21 20:18:35 +02:00
Victor Brekenfeld dcd6934d08 legacy: remove outdated comment 2020-04-21 20:18:35 +02:00
Victor Brekenfeld 11bb910224 atomic: flesh out trace logs 2020-04-21 20:18:35 +02:00
Victor Brekenfeld ef05dacc0d atomic: Move out `add/map_props` to `Dev` 2020-04-21 20:18:35 +02:00
Victor Brekenfeld df951b5de7 common: add fallback device/surface types 2020-04-21 20:18:35 +02:00
Victor Brekenfeld 35943fc56a typo: ctrc -> crtc in drm/mod.rs 2020-04-21 20:18:34 +02:00
Victor Brekenfeld 57e5494941 legacy: bugfix, add null-commit to free pipeline 2020-04-21 20:18:34 +02:00
Victor Brekenfeld ea44343315 drm: add set_connectors to Surface 2020-04-21 20:18:34 +02:00
Victor Brekenfeld d3b8563f65 gbm: Try to re-create resources and commit if restarting the rendering loop fails 2020-04-21 20:18:34 +02:00
Victor Brekenfeld d30bd4555e anvil: use atomic modesetting 2020-04-21 20:18:34 +02:00
Victor Brekenfeld 365b7e6496 drm: Add atomic modesetting support 2020-04-21 20:18:34 +02:00
Victor Brekenfeld e8cb940aab drm legacy: small cleanups + additional logging 2020-04-21 20:18:34 +02:00
Victor Brekenfeld 1b259e2deb typo: priviledged -> privileged 2020-04-21 20:18:34 +02:00
Victor Brekenfeld 41696f5364 drm: trigger vblank on commit 2020-04-21 20:18:34 +02:00
Victor Brekenfeld ed257e8991 drm: move legacy::Error into common module 2020-04-21 20:18:34 +02:00
Victor Brekenfeld df27224372 gbm: implement CursorBackend generically 2020-04-21 20:18:34 +02:00
Victor Brekenfeld cde06eb99a cursor: simplify trait by removing barely utilized lifetimes 2020-04-21 20:18:34 +02:00
Sergey Smirnykh ce1b7ae8e4
Fix clippy::cognitive-complexity warning (#198)
Use helper functions in <LibinputInputBackend as InputBackend>::dipatch_new_events
to simplify the code
Move said helper functions to libinput/helpers.rs
Move libinput.rs to libinput/mod.rs
2020-04-21 14:53:59 +02:00
Sergey Smirnykh a5cd2978b3 Fix clippy::unnecessary::filter-map warning 2020-04-21 11:15:26 +02:00
Sergey Smirnykh a774d8c52e Implement Error trait for KeyboardError using thiserror 2020-04-21 11:14:59 +02:00
Victor Brekenfeld 2101f17b7b
Merge pull request #192 from Smithay/fix/primary_gpu
Fix primary_gpu
2020-04-18 18:26:49 +02:00
Victor Brekenfeld bcb2aa3864 Fix egl_to_texture check 2020-04-18 15:03:20 +02:00
Victor Brekenfeld 39500f1d05 Fix primary_gpu 2020-04-18 13:41:54 +02:00
Victor Brekenfeld 8678738d01
Merge pull request #188 from csnewman/egl-refactor
Refactor EGL backend
2020-04-18 13:15:48 +02:00
Chandler Newman 28eb4dd943 Fix vsync attribute 2020-04-16 16:03:10 +01:00
Chandler Newman 4b97ed8eba Reduce choose_config complexity 2020-04-16 16:02:36 +01:00
Chandler Newman f8c97baf1d Prevent display being destroyed until all resources have been dropped 2020-04-16 13:44:32 +01:00
Chandler Newman c4016af67b Add default settings for surface creation 2020-04-16 12:33:28 +01:00
Victor Berger 26b6b3210a Signaling framework 2020-04-15 22:47:51 +02:00
Chandler Newman f7c05fa064 Rename WaylandEGLDisplay to EGLBufferReader 2020-04-15 21:19:20 +01:00
Chandler Newman a4d2043b7e Fix clippy warnings 2020-04-15 12:27:01 +01:00
Chandler Newman 3c6877f094 Fix formatting 2020-04-15 12:24:31 +01:00
Chandler Newman b8df85e744 Mark get_proc_address as safe 2020-04-15 12:16:02 +01:00
Chandler Newman a684f5d8d6 Refactor EGL backend 2020-04-15 12:01:01 +01:00
Victor Berger 8ab34f0081 Update dependencies. 2020-04-15 11:24:50 +02:00
Victor Berger b54d95c15d
Fix most clippy warnings (#185)
* Add missing documentation

* Fix most clippy warnings
2020-04-15 09:28:22 +02:00
Victor Brekenfeld b43c0db115 Update to udev 0.4 2020-04-13 17:07:08 +02:00
Victor Berger 6a7d933553 Replace `failure` and `error-chain` by `thiserror` 2020-04-13 13:20:59 +02:00
Chandler Newman d92aa6dafe
Only listen to removal signal for own session (#182) 2020-04-12 17:00:19 +02:00
Sergey Smirnykh f966e28fe5
Update wayland-client & wayland-egl (#181)
Update wayland-client to 0.25.0
Add wayland-egl 0.25.0
2020-04-12 13:11:10 +02:00
Victor Brekenfeld f6b3d630ce rustfmt 2020-04-10 19:18:58 +02:00
Victor Brekenfeld e8e8667d89 Upgrade to the upcoming drm-rs 0.4 2020-04-10 16:58:49 +02:00
Sergey Smirnykh e798259be9 Calculate pointer location correctly 2020-04-08 15:21:21 +02:00
Sergey Smirnykh 3bc1c728a8 Remove excess type conversions 2020-04-08 15:21:21 +02:00
Sergey Smirnykh 9e1bce7c66 Unhide cursor for now 2020-04-08 15:21:21 +02:00
Sergey Smirnykh 73345375ac Update winit dependency to version 22.0 2020-04-08 15:21:17 +02:00
Dorota Czaplejewicz 178a447394 winit: Don't resize in resize handler
The resize handler with a window resize request causes oscillations between two window sizes (presumably the inner and the outer). While it's not clear what part of the stack causes it, checking `window.get_inner_size()` already presents the correct size.

Either way, changing the same property in its change handler is a recipe for feedback loops as this one and should be avoided whenever possible, and then carefully fortified too.
2020-04-06 10:35:27 +02:00
Victor Berger 1b5537d537 Restore logind as a default feature 2020-04-05 20:03:09 +02:00
Jonas Platte b8c20ebf30
Update wayland-rs to 0.25 (#171)
Update wayland-rs to 0.25 and calloop to 0.5

Co-authored-by: Victor Berger <victor.berger@m4x.org>
2020-04-05 19:01:08 +02:00
Victor Berger 63702a308a backend.libinput: fix tracking of removed devices 2020-04-01 11:03:54 +02:00
Ivan Molodetskikh e42ccc8aee
wayland: fix deadlock in SurfaceData::cleanup (#166) 2020-02-16 16:38:07 +01:00
Ivan Molodetskikh 097445bc20
shell.xdg: fix two copy-paste errors 2020-02-08 13:51:12 +03:00
Ivan Molodetskikh 9eb51b8439
shell.xdg: add XdgRequest::AckConfigure
This will be used for convenient resize state tracking.
2020-02-08 08:47:14 +03:00
Ivan Molodetskikh 33a9e242ed
wayland.shell: implement Clone for toplevels 2020-02-08 08:47:13 +03:00
Victor Berger 7fa7fe03be
Merge pull request #155 from YaLTeR/fix-dimensions
anvil: retrieve buffer dimensions on commit
2020-02-03 14:53:35 +01:00