Simon Ser
3fd8098881
render/gles2: require GL_EXT_unpack_subimage
...
We implicitly depended on this extension.
2020-12-15 14:55:18 +01:00
Simon Ser
1dbcfdaf81
render/gles2: remove gles2_procs
...
Move the global into wlr_gles2_renderer. This removes global state and
allows us to have multiple renderers with different GL loaders.
2020-07-28 06:59:07 -06:00
Simon Ser
62da61716f
render/gles2: make push/pop debug functions take a wlr_renderer
2020-07-28 06:59:07 -06:00
Simon Ser
e8872d9ed7
render/gles2: keep ref to wlr_gles2_renderer in wlr_gles2_texture
2020-07-28 06:59:07 -06:00
Simon Ser
26af316b3b
render/gles2: make wlr_gles2_texture_from_* private
...
These functions are unused by compositors (see e.g. [1]) and prevent
wlr_gles2_texture from accessing wlr_gles2_renderer state. This is an
issue for proper teardown [2] and for accessing GLES2 extensions.
[1]: https://github.com/swaywm/wlroots/pull/1962#issuecomment-569511830
[2]: https://github.com/swaywm/wlroots/pull/1962
2020-07-28 06:59:07 -06:00
Simon Ser
a3ba82885c
render: choose DMA-BUF texture target via eglQueryDmaBufModifiersEXT
...
EGL_EXT_image_dma_buf_import_modifiers tells us whether we should use
GL_TEXTURE_2D or GL_TEXTURE_EXTERNAL_OES. Using the right texture target
can fix some failures and/or improve performance on some drivers.
This does the same as a Weston commit [1].
[1]: https://gitlab.freedesktop.org/wayland/weston/commit/40c519a3e613
Closes: https://github.com/swaywm/wlroots/issues/2173
2020-06-06 08:59:38 +02:00
Simon Ser
1edc42157b
render/egl: introduce wlr_egl_unset_current
...
This function can be called after wlr_egl_make_current to cleanup the
EGL context. This avoids having lingering EGL contexts that make things
work by chance.
Closes: https://github.com/swaywm/wlroots/issues/2197
2020-05-19 14:56:20 +02:00
Simon Ser
06f4c3945d
render/texture: add width and height fields
...
Instead of requiring compositors to call wlr_texture_get_size each time
they want to access the texture's size, expose this information as
wlr_texture fields.
2020-04-28 21:45:14 +02:00
Simon Ser
6d3f3b9300
render/gles2: unbind textures after use
...
Keeping textures bound results in hard-to-debug situations where some GL
operations incorrectly affect the texture.
2020-01-13 07:52:30 -07:00
Simon Ser
515679e4fe
Refactor EGL/GL API loading
...
Remove glapi.sh code generation, replace it with hand-written loading
code that checks extension strings before calling eglGetProcAddress.
The GLES2 renderer still uses global state because of:
- {PUSH,POP}_GLES2_DEBUG macros
- wlr_gles2_texture_from_* taking a wlr_egl instead of the renderer
2019-12-20 01:03:34 +00:00
Simon Ser
16e5e9541b
Add -Wmissing-prototypes
...
This requires functions without a prototype definition to be static.
This allows to detect dead code, export less symbols and put shared
functions in headers.
2019-11-20 02:05:03 +00:00
Simon Ser
447835afc1
render/gles2: provide public API to access GL texture
...
Prior to this commit, compositors needed to render the texture to an
intermediate off-screen buffer using wlr_renderer APIs if they wanted to
use a custom rendering path (e.g. render to a 3D scene).
A new wlr_gles2_texture_get_attribs exposes the GL texture target and ID
so that compositors can render wlr_textures with their own shaders. An
example of a compositor doing so is available at [1].
[1]: 3db905b784/src/render.c (L227)
2019-11-07 14:24:03 -05:00
Scott Anderson
85a2ee6d30
render/gles: Simplify textures a bit
...
We don't need our own enum for types. Instead we just use
GL_TEXTURE_{2D,EXTERNAL_OES}, which already describes usage.
Also fixes a situation where we were using GL_TEXTURE_2D in a situation
we should not have. wl_drm buffers are always GL_TEXTURE_EXTERNAL_OES,
no matter if they're RGB or any other format.
2019-11-06 09:46:01 +01:00
Simon Ser
6bb7639a0f
render/gles2: don't unset the current EGL surface when destroying texture
...
When a texture is destroyed between wlr_egl_make_current and
wlr_egl_swap_buffers, it resets the current EGL surface to NULL. This
makes wlr_egl_swap_buffers fail.
If the EGL context is already current, there's no need to reset it.
2019-10-16 09:40:26 -04:00
emersion
75371d2c88
Require libdrm >= 2.4.95
2019-01-29 19:33:38 +01:00
nyorain
cb03a41a3b
Use enum wl_shm_format for gles2 texture formats
...
Also rephrase the write_pixels comment.
2018-10-16 09:35:28 +02:00
nyorain
cd28637187
Remove fmt parameter from wlr_texture_write_pixels
...
It's not allowed to change the format of a texture so remove
the confusing parameter.
2018-10-15 23:56:56 +02:00
Mariusz Bialonczyk
ad406db21c
gles2: change context when it is not current
...
Texture functions, that create and manipulate textures should switch
the current context if necessary.
thanks to: @emersion
Fixes #934
2018-08-03 07:43:22 +02:00
emersion
c4915d1492
render: add wlr_texture_is_opaque
2018-07-12 23:35:33 +01:00
emersion
7cbef15206
util: add wlr_ prefix to log symbols
2018-07-09 22:49:54 +01:00
emersion
57548b557a
Merge branch 'master' into screencontent
2018-06-17 14:49:18 +01:00
Vincent Vanlaer
f1a62a3200
Rename egl.exts to match the extension names
2018-06-09 19:11:51 +02:00
emersion
457bfcab19
render/egl: only request high priority context on DRM
2018-06-08 00:17:45 +01:00
emersion
21928cbe61
Merge branch 'master' into screencontent
2018-05-31 12:33:27 +01: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
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
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
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
95e86e675a
render/gles2: remove global state, use OpenGL debug extension
2018-03-20 19:14:33 +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
Drew DeVault
1956d3cedb
Merge pull request #722 from emersion/matrix-redesign
...
Matrix redesign
2018-03-17 15:22:00 -04: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
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
Guido Günther
2dc8a35db2
textures: tell us which texture format is unsupported
2018-02-28 18:36:32 +01: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
Scott Anderson
9b984253e2
Move egl.h to render/egl.h
2017-10-22 10:36:07 +13:00
Scott Anderson
009c3747a8
Multi-GPU DRM
2017-10-01 22:29:25 +13:00
Drew DeVault
220a6e9bf6
Add xwayland activate and fix EGL bug
2017-09-28 09:11:16 -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
Drew DeVault
94e6e6334b
Refactor out wlr_texture_state
2017-08-14 08:25:26 -04:00
nyorain
862bc9783f
Fix egl image leak in gles renderer
2017-08-12 11:41:40 +02: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
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
nyorain
e167f41fde
Rename wlr_surface -> wlr_texture; attach -> upload
2017-08-08 18:25:16 +02:00