Commit Graph

468 Commits

Author SHA1 Message Date
Brian Ashworth 18bbe2d897 Fix atti assert in wlr_egl_init 2018-06-08 20:25:36 -04:00
emersion 457bfcab19
render/egl: only request high priority context on DRM 2018-06-08 00:17:45 +01:00
emersion d425edc96c
render/egl: consistent extension checking 2018-06-08 00:06:34 +01:00
emersion cbfe0e834a
Request a high priority EGL context 2018-06-08 00:06:34 +01:00
NeKit de91c55ea9 Fix GLES2 renderer to use glGetUniformLocations locations
This is needed as uniform locations are driver implementation-specific.
2018-06-07 18:06:31 +03:00
emersion 6b7a55aa3d
Merge pull request #1020 from emersion/remove-check-dmabuf
render: remove wlr_renderer_check_import_dmabuf
2018-05-31 21:49:57 +01:00
emersion 21928cbe61
Merge branch 'master' into screencontent 2018-05-31 12:33:27 +01:00
Genki Sky d1cf9acbd5 cleanup: Use void for zero-parameter functions
Signed-off-by: Genki Sky <sky@genki.is>
2018-05-30 20:19:16 -04:00
emersion 135721118a
render: remove wlr_renderer_check_import_dmabuf
It's possible to implement it outside the renderer, by creating a
texture and destroying it right away. This reduces the API surface
of the renderer.
2018-05-30 17:08:15 +01:00
emersion 28020ff577
Only allow one modifier per DMA-BUF, split attributes struct in render/ 2018-05-30 09:29:12 +01:00
emersion 5ba1a9af56
render: add wlr_texture_to_dmabuf 2018-05-29 18:47:17 +01:00
emersion 6eb4b5b54d
Merge pull request #993 from emersion/bind-wl-drm-in-renderer
render: bind wl_drm in renderer
2018-05-25 13:54:16 +01:00
Ilia Bozhinov 24cf70ae96 backends: implement custom EGL and renderer initialization
Compositors now have more control over how the backend creates its
renderer. Currently all backends create an EGL/GLES2 renderer, so
the necessary attributes for creating the context are passed to a
user-provided callback function. It is responsible for initializing
provided wlr_egl and to return a renderer. On fail, return 0.

Fixes #987
2018-05-25 14:56:52 +03:00
agr 4e89e0fc6c fix server exit: eglMakeCurrent Invalid display 2018-05-23 16:17:29 +02:00
emersion 41130fe54b
render: bind wl_drm in renderer 2018-05-21 19:07:08 +01:00
Ilia Bozhinov 47ffd0e184 gles2: pre-multiply alpha and fix blending function 2018-05-18 20:34:36 +03:00
Brian Ashworth 35e83800d4 Fix alpha for src_rgba and src_rgbx 2018-05-15 22:29:36 -04:00
Alain Greppin b2f8f00ae3 fix check of EGL_WL_bind_wayland_display presence 2018-05-13 15:17:17 +02:00
emersion 5a87712ca8
Log required extension name if unavailable 2018-04-26 11:11:28 +01:00
Drew DeVault fecb971518
Merge pull request #902 from emersion/various-memory-leaks
Various memory leaks
2018-04-26 11:34:49 +02:00
emersion 449f06556a
Destroy wlr_surface with wlr_renderer 2018-04-26 00:11:36 +01:00
emersion 71ca45e2c0
Make sure we don't use others' prefixes 2018-04-25 23:24:58 +01:00
emersion 018b82c01e
render/egl: allow passing NULL to surface and image destructors 2018-04-25 08:28:48 +01:00
emersion eaed6bd03b
render/egl: add wlr_egl_destroy_surface 2018-04-24 23:44:43 +01:00
Rostislav Pehlivanov 12298ce88c Do not advertize *RGB8888 as supported shm formats
They're always available and supported, and are added automatically.
Adding them again just duplicates them.
2018-04-21 14:58:25 +01:00
Drew DeVault b116414bd5
Merge pull request #880 from emersion/advertize-renderer-formats
Advertize supported renderer formats
2018-04-21 14:45:09 +02:00
emersion 1588094b99
Remove a few local prefixed symbols 2018-04-21 10:20:33 +01:00
emersion 70d820be25
Add wlr_renderer_init_wl_shm to advertize supported renderer formats 2018-04-20 23:58:30 +01:00
emersion 1b802d9251
Make wlr_renderer_scissor take normal coords instead of upside-down ones 2018-04-12 19:38:33 -04:00
emersion d2ebbd103c
backend: remove wlr_backend_get_egl 2018-04-08 11:00:56 -04:00
Guido Günther 6a05bd3886 egl: silence dmabuf error when extension is not present
This makes it match 4bf936360d.
2018-04-04 09:28:07 +02:00
emersion f3f61bed3e
Untie wlr_gles2_renderer and wlr_gles2_texture 2018-04-01 16:07:50 -04:00
emersion a7bb48b404
render/egl: add wlr_egl_create_image_from_wl_drm
This allows external renderers and potential future GL-based
renderers to re-use this function.
2018-03-31 23:20:00 -04:00
emersion 33a2eb4b77
Untie wlr_backend from wlr_renderer 2018-03-31 18:49:43 -04:00
Drew DeVault 23d357e371 Downgrade gles2 messages to L_DEBUG
L_INFO is for stuff that's useful to the user
2018-03-31 00:27:30 -04:00
Orestis Floros c9ed6fed59
Fix build error with -O2
../render/gles2/renderer.c: In function ‘gles2_render_texture_with_matrix’:
../render/gles2/renderer.c:140:2: error: ‘target’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
  glBindTexture(target, tex_id);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../render/gles2/renderer.c:145:2: error: ‘prog’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
  glUseProgram(prog);
2018-03-31 01:05:33 +03:00
Tony Crisci 330ee08126
Merge pull request #744 from emersion/texture-redesign
Redesign wlr_texture
2018-03-28 00:14:57 -04:00
Drew DeVault 13edb19a6c Fix issue starting up client EGL on X11 backend 2018-03-27 18:51:38 -04:00
Drew DeVault f444a0d14c Implement layer surface damage 2018-03-27 18:50:32 -04:00
Drew DeVault 4bf936360d Arrange & render layer surfaces 2018-03-27 18:50:09 -04:00
emersion c42fd1018b
render: remove GL calls from wlr_egl 2018-03-27 17:02:48 -04:00
emersion adf4fb08dd
Merge branch 'master' into texture-redesign 2018-03-26 19:13:13 -04:00
emersion 793c3b3047
render: add simple functions to render rectangles and ellipses 2018-03-26 12:41:51 -04:00
emersion c63d94483b
Redesign wlr_texture
- Textures are now immutable (apart from those created from raw
  pixels), no more invalid textures
- Move all wl_drm stuff in wlr_renderer
- Most of wlr_texture fields are now private
- Remove some duplicated DMA-BUF code in the DRM backend
- Add more assertions
- Stride is now always given as bytes rather than pixels
- Drop wl_shm functions

Fun fact: this patch has been written 10,000 meters up in the air.
2018-03-24 23:48:32 -04:00
Guido Günther b1852096c5 linux-dmabuf: Support multi plane formats like NV12 2018-03-23 09:03:31 +01:00
emersion a854c2f246
Merge branch 'master' into gles2-renderer-redesign 2018-03-23 00:55:55 +01:00
emersion b1f93bc5cc
render/egl: use EGL_KHR_debug 2018-03-21 10:42:43 +01:00
emersion 8207f0f081
render/gles2: use gles2_pixel_format::has_alpha for shader selection 2018-03-21 08:53:36 +01:00
emersion cc5ef1d2ff
render/gles2: move list of supported WL formats to pixel_format.c 2018-03-21 08:50:59 +01:00
emersion 3581573bdc
render/gles2: make wlr_renderer_begin take viewport size
This allows raw GL calls outside wlr_renderer to be removed.
2018-03-21 07:37:09 +01:00
emersion 95e86e675a
render/gles2: remove global state, use OpenGL debug extension 2018-03-20 19:14:33 +01:00
Guido Günther 2d01663b25 gles2: Honor alpha in fragment_src_external
By using the same vertex shader and adding alpha to the fragment shader
for external textures we can:

  - use alpha blending
  - have wlr_gles2_render_texture_with_matrix work with
    the GL_TEXTURE_EXTERNAL_OES. So far this failed
    since we passed in alpha which was unknown by fragment_src_external
2018-03-20 14:30:30 +01:00
Guido Günther 13e4ba4867 gles2_texture_bind: use texture's target type
Hardcoding GL_TEXTURE_2D leads to rendering errors when using
GL_TEXTURE_EXTERNAL_OES textures.
2018-03-20 14:30:30 +01:00
Guido Günther b3cb5a36c7 gles2: allow to specify texture target type
Allow to set the texture target type when generating/binding the
texture.  This allows us to attach the texture type to the texture so we
don't have to keep the logic elsewhere.
2018-03-20 14:30:30 +01:00
emersion c41de2d1be
render: split render.h into wlr_renderer.h and wlr_texture.h 2018-03-19 23:16:29 +01:00
emersion 6ecb0eefcb
render/gles2: transpose matrices before binding them
Setting glUniformMatrix3fv's transpose parameter to GL_TRUE is
not allowed for OpenGL ES 2.

This adds a wlr_matrix_transpose function.
2018-03-19 20:21:02 +01:00
Drew DeVault 1956d3cedb
Merge pull request #722 from emersion/matrix-redesign
Matrix redesign
2018-03-17 15:22:00 -04:00
Guido Günther 7fd7dff26f egl: print supported dmabuf formats
Useful for debugging dmabuf related problems e.g. when a client requests
a certain and we fail to support it.
2018-03-16 09:47:21 +01:00
emersion f1cbbac636
render/gles2: remove matrix transposition in shaders 2018-03-15 21:30:31 +01:00
emersion 876f07e9f1
renderer: replace wlr_texture_get_matrix by wlr_render_texture 2018-03-15 19:31:02 +01:00
emersion 0e253e0615
render/gles2: don't set inverted_y when EGL_WAYLAND_Y_INVERTED_WL is unsupported 2018-03-15 15:51:15 +01:00
emersion 8b58e1a3ad
Merge branch 'master' into matrix-redesign 2018-03-15 15:48:09 +01:00
emersion 824a95ad19
matrix: use 2D matrices 2018-03-15 15:33:58 +01:00
Guido Günther 653bc282a7 Indent GLSL by two spaces
since this is the most established indentation
2018-03-15 12:40:18 +01:00
Guido Günther 14cdb6153f Add initial linux_dmabuf protocol support
Tested with

    ./weston-simple-dmabuf-drm
    ./weston-simple-dmabuf-drm --import-immediate=1
    ./weston-simple-dmabuf-drm --y-inverted=1
    (and combinations)

Supports only single plane XRGB dmabufs for now.
2018-03-15 12:40:18 +01:00
emersion d26b67cb06
matrix: unify API, don't use array pointers 2018-03-15 11:10:56 +01:00
emersion b6a3f240c7
matrix: move to types/ 2018-03-15 09:11:27 +01:00
Guido Günther 2d0db16942 render: Flip textures in case of inverted_y 2018-03-11 19:02:05 +01:00
emersion d9571f27e6
Merge pull request #691 from agx/egl_ext_match
Avoid false positives on egl extension matching
2018-02-28 21:22:00 +01:00
Guido Günther d9f2e90df6 Avoid false positives on egl extension matching
Due to the strstr prefix match EGL_EXT_foo would be incorrectly matched
if EGL_EXT_foobar would be available but not foo.

This doesn't matter for the currently checked extensions but will matter
for EGL_EXT_image_dma_buf_import_modifiers vs
EGL_EXT_image_dma_buf_import

Code borrowed from weston
2018-02-28 20:03:06 +01:00
Guido Günther 2dc8a35db2 textures: tell us which texture format is unsupported 2018-02-28 18:36:32 +01:00
Guido Günther d928ddc36c wlr_egl_create_image: return NULL when function is missing
This matches the return value of elgCreateImage in case of error.
2018-02-28 08:44:00 +01:00
Guido Günther d08792bfff Add alpha to wlr_render_with_matrix
so we can use the alpha channel to e.g. blend in textures
2018-02-25 13:47:48 +01:00
Drew DeVault 1d9be89e2d
Revert "ELF Visibility" 2018-02-19 18:01:27 -05:00
Scott Anderson 86269052eb Explicitly export EFL symbols 2018-02-19 14:26:40 +13:00
Guido Günther 4d496802dd Log GL and EGL vendor
useful for debugging
2018-02-15 10:40:19 +01:00
Rodrigo Lourenço 168e26489a Add missing dependencies 2018-02-14 18:42:39 +00:00
emersion c2e1474010
Reformat all #include directives 2018-02-12 21:29:23 +01:00
emersion 36ead80cd1
Make wlr_signal_emit_safe private 2018-02-12 19:52:47 +01:00
emersion 5e58d46cc1
Add wlr_signal_emit_safe 2018-02-12 09:12:31 +01:00
emersion bf6d245400
Swap buffers with damage 2018-02-09 22:54:14 +01:00
emersion ddb1779f9f
render: make wlr_renderer_clear take a float[4] for the color 2018-02-03 09:32:02 +01:00
emersion 51c22d39a4
Merge remote-tracking branch 'upstream/master' into output-damage 2018-01-29 23:24:09 +01:00
Tony Crisci ed5b1fdedd
Merge pull request #580 from emersion/screenshooter-renderer-backport
Backport screenshooter fixes from the renderer redesign v1
2018-01-29 17:13:23 -05:00
emersion f34a1b75eb
render/gles2: use format bpp when reading pixels 2018-01-26 23:13:41 +01:00
emersion 6281deb90f
Merge remote-tracking branch 'upstream/master' into output-damage 2018-01-24 14:48:01 +01:00
emersion 4fa90b0511
Backport screenshooter fixes from the renderer redesign v1
This backports some changes to #319 to fix the screenshooter data
format. This also adds wlr_backend_get_renderer which will be
useful to support multiple renderers.
2018-01-23 22:06:54 +01:00
emersion 415a2b7c56
render: add wlr_renderer_clear and wlr_renderer_scissor 2018-01-22 16:42:22 +01:00
Tony Crisci 85a6939cf2 rename matrix model box to project box 2018-01-21 19:03:10 -05:00
Tony Crisci d13114520a move matrix model code to matrix.h 2018-01-21 15:53:42 -05:00
emersion 0365b587f0
output: add damage tracking via buffer age 2018-01-21 00:06:35 +01:00
emersion a0f24b809e
output: add damage event 2018-01-19 13:13:46 +01:00
emersion bde255933e
output: add wlr_output::damage, fixes #572 2018-01-18 19:47:21 +01:00
emersion 5017d7f762
rootston: only draw damaged regions 2018-01-18 14:36:42 +01:00
Tony Crisci 3751a17321 decorate xwayland views 2018-01-16 07:51:10 -05:00
emersion b99d1f4fcc
Refactor wlr_egl_init to accept config_attribs 2017-12-17 23:51:04 +01:00
Drew DeVault 23fb663ea4
Merge pull request #453 from emersion/surface-transform
Add surface transforms support
2017-12-14 14:43:04 -05:00
emersion 18eb1eee3f
Listen to display destroy in xwayland, rename wlr_egl_free 2017-12-08 00:59:37 +01:00
emersion 4a56957a37
Fix inverted flipped-90 and flipped-270 2017-12-01 09:49:32 +01:00
emersion 6a69b4419f
Make wlr_output_transform_* functions public, refactoring 2017-12-01 09:15:33 +01:00
emersion f4754ad1a2
Fix surface transforms 2017-11-30 23:58:12 +01:00
Scott Anderson bc113c16aa Use correct include path for glapi.h 2017-11-30 10:32:55 +13:00
Scott Anderson 02374b945d Change glapi.sh to generate both files 2017-11-22 14:04:29 +13:00
Scott Anderson 37b8a096a9 Pass backend to render 2017-10-22 10:39:23 +13:00
Scott Anderson 9b984253e2 Move egl.h to render/egl.h 2017-10-22 10:36:07 +13:00
Drew DeVault 9e1ff2dce9 Merge pull request #140 from emersion/screenshooter
Add screenshooter
2017-10-08 10:06:41 -04:00
Scott Anderson c0e5feea37 Add GL/EGL extension loader generator 2017-10-08 13:23:41 +13:00
emersion 0ce3135304
Move read_pixels from output to renderer 2017-10-08 02:11:56 +02:00
Versus Void c5df6ca900 Fix memory leaks 2017-10-05 20:01:56 +00:00
Scott Anderson 009c3747a8 Multi-GPU DRM 2017-10-01 22:29:25 +13:00
Scott Anderson 517ba0bc16 Change egl_get_config to always use visual id 2017-09-29 16:15:09 +13:00
Drew DeVault 220a6e9bf6 Add xwayland activate and fix EGL bug 2017-09-28 09:11:16 -04:00
Tony Crisci 00f1686ce5 unset egl current before terminating display
fixes segfault when closing the compositor with an egl window.
2017-09-25 19:25:59 -04:00
Drew DeVault 9fa822c666 Fix minor typos 2017-09-17 18:29:52 -04:00
Tony Crisci 368f74e4df Refactor meson build files
Use tabs for indentation and break up function calls over 80 col.
2017-08-30 14:30:47 -04:00
Dominique Martinet f24b3df980 wlr renderer/texture: rename init to create when it does alloc 2017-08-19 08:33:31 +02:00
Drew DeVault 27c13d621d Merge pull request #88 from 4e554c4c/alloc_crashing
Prevent alloc errors from crashing
2017-08-15 12:21:58 -04:00
Tony Crisci 4f2b1cc930 implement get_buffer_size for egl buffers 2017-08-15 07:58:07 -04:00
Tony Crisci 72a33b736f implement texture get buffer size 2017-08-15 07:36:50 -04:00
Calvin Lee 5cc7342606 Prevent alloc errors from crashing
Resolves #76
2017-08-15 08:04:57 +02:00
nyorain f998bb8299 Fix style issues 2017-08-14 17:09:56 +02:00
Dominique Martinet 4bbf718e7d impl->destroy cleanup:
- remove trivial destroy() function
 - make sure we check impl and impl->destroy before calling
 - always call free if not implemented
2017-08-14 16:22:31 +02:00
Drew DeVault 2facf1df65 Fix software cursors 2017-08-14 08:43:17 -04:00
Drew DeVault de6f32c84e Refactor away wlr_renderer_state 2017-08-14 08:37:50 -04:00
Drew DeVault 94e6e6334b Refactor out wlr_texture_state 2017-08-14 08:25:26 -04:00
Drew DeVault d4b4bfb8bc Fix #64 2017-08-13 08:26:32 -04:00
nyorain f066ff6d02 Fix external shader 2017-08-12 14:48:24 +02:00
Drew DeVault 2d6d2bcef9 Merge pull request #75 from nyorain/egl_image_leak
Fix egl image leak in gles renderer
2017-08-12 08:22:04 -04:00
nyorain 862bc9783f Fix egl image leak in gles renderer 2017-08-12 11:41:40 +02:00
Dominique Martinet c323bfc6a0 GLES2: detach and delete shaders after LinkProgram
Also make sure program linked correctly!
2017-08-12 00:24:30 +02:00
Drew DeVault 62d8b252c0 Refactor meson and move xdg-shell into wlroots 2017-08-11 09:37:09 -04:00
Drew DeVault a6efb90382 s/gen/ensure/ fixes #47 2017-08-11 09:00:26 -04:00
Drew DeVault c24351681f Refactor EGL handling 2017-08-10 22:15:37 -04:00
Drew DeVault 7095274a9e Merge branch 'master' into drm_buffer 2017-08-10 13:19:39 -04:00
Drew DeVault 3c12a32d1f Merge pull request #58 from acrisci/feature/enable-gl-blending
enable gl blending
2017-08-10 08:41:11 -04:00
Tony Crisci 49e97857c7 enable gl blending
This makes transparency work correctly.

fixes #56
2017-08-10 08:38:55 -04:00
Drew DeVault 888986b038 Remove excess logging 2017-08-10 08:36:45 -04:00
Drew DeVault 7da43ff8b0 Implement wlr_surface_flush_damage 2017-08-10 08:26:16 -04:00
nyorain 073dff63da Fix style issues 2017-08-10 11:05:18 +02:00
nyorain 67369173aa Implement drm (egl) buffer attaching 2017-08-10 10:59:58 +02:00
Drew DeVault e2b7712302 Use texture->pixel_format instead of re-scanning 2017-08-09 22:56:57 -04:00
Drew DeVault 4de930542f Implement partial texture uploads 2017-08-09 22:17:40 -04:00
Drew DeVault bd2e9a7168 Style cleanup 2017-08-09 17:30:22 -04:00
nyorain e167f41fde Rename wlr_surface -> wlr_texture; attach -> upload 2017-08-08 18:25:16 +02:00
Scott Anderson 1db97a9af9 Updated DRM cursor rendering 2017-08-06 21:38:40 +12:00
Drew DeVault 41b98f21e5 Merge pull request #42 from acrisci/bug/no-switch-active-textures
Remove unnecessary calls to glActiveTexture
2017-08-05 18:26:43 -04:00
nyorain fdab81e1c9 Use meson build system 2017-08-05 22:34:24 +02:00
Tony Crisci 9119be1dd1 Remove unnecessary calls to glActiveTexture
Since wlroots shaders only use one texture at a time (ie there is only one
sampler2D variable in any shader), it is unnecessary to switch between active
texture units at this time.
2017-08-05 10:41:05 -04:00
Tony Crisci effea557bb Implement destroying surfaces
Add a signal for wlr_surface destruction on the wlr_surface that compositors
can listen to to remove the surface from their state.

Implement a listener for this in the example wl_compositor to remove the
surface from its internal list of surfaces.

Destroy the surface in the compositor destroy_surface callback given when the
surface resource was created.

Add a reference to the surface resource to the wlr_surface so a compositor can
find it in its list of resources upon wlr_resource destruction.
2017-08-04 11:53:55 -04:00
Tony Crisci 6610aa7ca7 Implement shm buffer surface attach interface
Implement surface_attach method. This is called when a client attaches an shm
buffer with wl_surface_attach().

Implement the GLES2 interface for attaching shm buffers. This creates an opengl
texture with the shm buffer contents for the surface.

This commit also includes some working code to render the surfaces onto the
screen for demonstration purposes.
2017-08-04 11:41:13 -04:00
Drew DeVault b08aa9fd35 Revert "Merge pull request #27 from ascent12/meson"
This reverts commit 85805da021, reversing
changes made to 8189c64d7f.
2017-07-11 22:16:56 -04:00
Scott Anderson a2ba226ba3 Use subdir 2017-07-11 09:56:54 +12:00
Scott Anderson 924bf0f669 Changed build system to meson 2017-07-11 00:28:56 +12:00
Drew DeVault 8920b5d607 Merge branch 'wlcore' 2017-06-29 16:00:24 -04:00
Scott Anderson 0cd94f0cf0 Added software cursor fallback 2017-06-26 17:34:15 +12:00
Drew DeVault 5a2796266f Support wl_shm pixel formats in gles2 renderer 2017-06-23 14:25:55 -04:00
Drew DeVault 2aafb5dd19 Add wlcore/wl_shm (WIP) 2017-06-23 13:41:07 -04:00
Drew DeVault f252c5a792 Manually transpose matricies in shader
Since GLES2 doesn't do this for us, it seems, on all platforms.
2017-06-23 11:46:09 -04:00
Drew DeVault b18209c904 Switch to GLES2
Closes #13
2017-06-23 11:38:45 -04:00
Drew DeVault f4453d104d Reorganize wlr-common 2017-06-21 12:10:07 -04:00
Drew DeVault c9d5a0b2fb Clean up Wayland backend GL context and such 2017-06-20 15:29:27 -04:00
Drew DeVault 2443a070e7 Add colored quad and ellipse rendering primitives 2017-06-15 15:31:13 -04:00
Drew DeVault 7a25d6c50b Destroy gles3 wlr_surfaces 2017-06-09 10:33:02 -04:00
Drew DeVault 2b909e1729 Add error "handling" to gles3 backend 2017-06-09 10:28:50 -04:00
Drew DeVault cd6a40d816 Further improvements to rendering subsystem 2017-06-08 15:52:42 -04:00
Drew DeVault 83f8864f0a Add wlr_renderer and move quad rendering there 2017-06-08 12:02:51 -04:00
Drew DeVault 211488131f Add wlr_shader to wlr-render 2017-06-08 11:30:38 -04:00
Drew DeVault fc1dc1b5b0 Use constant VBO for quad, add matrix stuff 2017-06-07 21:35:07 -04:00