Simon Ser
9d55f712e3
render: introduce wlr_texture_from_buffer
...
This adds a a function to create a wlr_texture from a wlr_buffer.
The main motivation for this is to allow the renderer to create a
single wlr_texture per wlr_buffer. This can avoid needless imports
by re-using existing textures.
2021-05-17 16:22:43 +02:00
Simon Zeni
ed7f2651b6
render: add DRM dumb buffer allocator
2021-05-05 10:40:21 +02:00
Simon Zeni
2c90e0f521
render/gbm_allocator: duplicate drm fd during creation process
2021-05-05 10:40:21 +02:00
Simon Ser
5be76bb047
render/allocator: add allocator_autocreate_with_drm_fd
...
Same as wlr_allocator_autocreate, but allows the caller to force a
DRM FD.
Similar to renderer_autocreate_with_drm_fd.
2021-04-29 15:58:56 +02:00
Simon Ser
619a975025
render: remove wlr_ prefix from wlr_renderer_autocreate_with_drm_fd
...
This function is only required because the DRM backend still needs
to perform multi-GPU magic under-the-hood. Remove the wlr_ prefix
to make it clear it's not a candidate for being made public.
2021-04-29 09:46:34 +02:00
Simon Zeni
318e3ac92c
render/allocator: introduce wlr_allocator_autocreate
2021-04-28 20:55:57 +02:00
Simon Zeni
982498fab3
render: introduce renderer_get_render_buffer_caps
2021-04-28 20:55:57 +02:00
Simon Zeni
a8c91fbac9
render/shm_allocator: make wlr_shm_allocator_create return a wlr_allocator
2021-04-28 20:55:57 +02:00
Simon Zeni
c75aa71816
render/gbm_allocator: make wlr_gbm_allocator_create return a wlr_allocator
2021-04-28 20:55:57 +02:00
Simon Zeni
30706b71fb
render/pixman: implement preferred_read_format
2021-04-27 18:28:41 +02:00
Simon Ser
8ca2b4cf49
render/pixman: destroy textures on renderer teardown
2021-04-22 15:44:49 +02:00
Simon Ser
661ba49564
render/gles2: destroy textures on renderer teardown
2021-04-22 15:44:49 +02:00
Simon Zeni
0d90dddfab
render: introduce pixman renderer
2021-04-17 09:54:39 +02:00
Simon Ser
c6b009ef85
render: introduce shared memory allocator
...
It allocates in local main memory via shm_open, and provides a FD
to allow sharing with other processes.
This is suitable for software rendering under the Wayland and X11
backends.
2021-04-17 09:54:39 +02:00
Simon Zeni
84dea55b20
render: rename get_dmabuf_render_formats into get_render_formats
2021-04-15 17:10:06 +02:00
Simon Ser
a109a80dca
render: drop support for ellipses
...
For anything more complicated than quads, compositors can easily
ship their own shaders.
Closes: https://github.com/swaywm/wlroots/issues/2759
2021-04-08 09:10:03 +02:00
Simon Zeni
78d21fa131
render/gles2: remove depth and bpp gles2_pixel_format, use drm pixel format
2021-03-25 10:55:54 +01:00
Simon Zeni
50d2985607
Move render/shm_format functions to render/pixel_format
2021-03-25 10:55:54 +01:00
Simon Zeni
5fd82c6f54
render/pixel_format: introduce pixel format info table
2021-03-25 10:55:54 +01:00
Simon Zeni
9601a2abf0
output: improve transform matrix calculation
...
Compute only the transform matrix in the output. The projection matrix
will be calculated inside the gles2 renderer when we start rendering.
The goal is to help the pixman rendering process.
2021-03-10 15:33:36 +01:00
Simon Ser
27fba3df43
render: use DRM formats in wlr_texture_from_pixels
2021-02-23 16:09:26 +01:00
Simon Ser
ddfee63055
render: use DRM formats in wlr_renderer_get_shm_texture_formats
2021-02-23 16:09:26 +01:00
Simon Ser
549435aee5
render/gles2: replace wlr_gles2_texture.wl_format with drm_format
2021-02-23 16:09:26 +01:00
Simon Ser
fab396f149
render/gles2: convert format table to DRM formats
2021-02-23 16:09:26 +01:00
Simon Ser
5d6d76c61f
render/shm_format: add wl_shm_format conversion helpers
2021-02-23 16:09:26 +01:00
Simon Ser
2f11914613
render: introduce private wlr_renderer_autocreate_with_drm_fd
2021-01-16 22:52:26 +01:00
Simon Ser
c73a8cde83
render/gbm_allocator: fix gbm_device use-after-free
...
We need to destroy any gbm_bo we've created before gbm_device_destroy.
Closes: https://github.com/swaywm/wlroots/issues/2601
2021-01-15 19:27:49 +01:00
Simon Ser
9dd059376c
render/gbm_allocator: document that DRM primary FDs work
2021-01-15 11:25:30 +01:00
Simon Ser
5642b880c3
render: document wlr_renderer_bind_buffer
2021-01-14 12:16:51 +01:00
Simon Ser
d37214cb16
render/drm_format_set: add wlr_drm_format_{create,add}
2020-12-18 09:41:12 +01:00
Simon Ser
82443ea46b
render/drm_format_set: introduce wlr_drm_format_intersect
...
Intersects modifiers from two wlr_drm_format structs. If either format
doesn't support modifiers, the resulting format won't support modifiers.
2020-12-03 10:52:25 +01:00
Simon Ser
5d008d9030
render: introduce wlr_renderer_get_dmabuf_render_formats
...
It describes which DMA-BUF formats can be used to render.
2020-11-30 11:08:44 +01:00
Simon Ser
eb8360bda3
render: introduce wlr_renderer_get_drm_fd
2020-11-15 22:54:07 +01:00
Simon Ser
c11c6c4568
render/swapchain: add support for buffer age
2020-11-15 22:48:42 +01:00
Simon Ser
6136fe87d1
render/gles2: implement wlr_renderer_bind_buffer
2020-11-15 22:48:42 +01:00
Simon Ser
c88c54fb38
render: introduce wlr_renderer_bind_buffer
2020-11-15 22:48:42 +01:00
Simon Ser
b0a663d39d
render: introduce wlr_swapchain
...
The swapchain maximum capacity is set to 4, so that we have enough room
for:
- A buffer currently displayed on screen
- A buffer queued for display (e.g. to KMS)
- A pending buffer that'll be queued next commit
- An additional pending buffer in case we want to invalidate the
currently pending one
2020-11-15 22:48:42 +01:00
Simon Ser
7c6212a0f7
render/drm_format_set: introduce wlr_drm_format_dup
2020-11-15 22:48:42 +01:00
Simon Ser
5913040110
render: introduce wlr_gbm_allocator
2020-11-15 22:48:42 +01:00
Simon Ser
f47445f142
render: introduce wlr_allocator
2020-11-15 22:48:42 +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 Zeni
4a4da256dd
render/gles2: use glGetAttribLocation instead of hardcoded indices
2020-06-24 20:01:19 +02:00
Andri Yngvason
b64a8a7f98
render: Add wlr_renderer_blit_dmabuf()
2020-06-08 20:49:41 +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
5dc3a9c754
render/gles2: add wlr_gles2_renderer_check_ext
2020-04-22 22:40:54 +02: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
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