mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-12-15 08:56:26 -05:00
Only allow one modifier per DMA-BUF, split attributes struct in render/
This commit is contained in:
parent
8c9d0f15ce
commit
28020ff577
15 changed files with 91 additions and 74 deletions
19
render/egl.c
19
render/egl.c
|
|
@ -340,9 +340,9 @@ EGLImageKHR wlr_egl_create_image_from_wl_drm(struct wlr_egl *egl,
|
|||
}
|
||||
|
||||
EGLImageKHR wlr_egl_create_image_from_dmabuf(struct wlr_egl *egl,
|
||||
struct wlr_dmabuf_buffer_attribs *attributes) {
|
||||
struct wlr_dmabuf_attributes *attributes) {
|
||||
bool has_modifier = false;
|
||||
if (attributes->modifier[0] != DRM_FORMAT_MOD_INVALID) {
|
||||
if (attributes->modifier != DRM_FORMAT_MOD_INVALID) {
|
||||
if (!egl->egl_exts.dmabuf_import_modifiers) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -364,7 +364,7 @@ EGLImageKHR wlr_egl_create_image_from_dmabuf(struct wlr_egl *egl,
|
|||
EGLint pitch;
|
||||
EGLint mod_lo;
|
||||
EGLint mod_hi;
|
||||
} attr_names[WLR_LINUX_DMABUF_MAX_PLANES] = {
|
||||
} attr_names[WLR_DMABUF_MAX_PLANES] = {
|
||||
{
|
||||
EGL_DMA_BUF_PLANE0_FD_EXT,
|
||||
EGL_DMA_BUF_PLANE0_OFFSET_EXT,
|
||||
|
|
@ -401,9 +401,9 @@ EGLImageKHR wlr_egl_create_image_from_dmabuf(struct wlr_egl *egl,
|
|||
attribs[atti++] = attributes->stride[i];
|
||||
if (has_modifier) {
|
||||
attribs[atti++] = attr_names[i].mod_lo;
|
||||
attribs[atti++] = attributes->modifier[i] & 0xFFFFFFFF;
|
||||
attribs[atti++] = attributes->modifier & 0xFFFFFFFF;
|
||||
attribs[atti++] = attr_names[i].mod_hi;
|
||||
attribs[atti++] = attributes->modifier[i] >> 32;
|
||||
attribs[atti++] = attributes->modifier >> 32;
|
||||
}
|
||||
}
|
||||
attribs[atti++] = EGL_NONE;
|
||||
|
|
@ -414,11 +414,11 @@ EGLImageKHR wlr_egl_create_image_from_dmabuf(struct wlr_egl *egl,
|
|||
}
|
||||
|
||||
#ifndef DRM_FORMAT_BIG_ENDIAN
|
||||
# define DRM_FORMAT_BIG_ENDIAN 0x80000000
|
||||
#define DRM_FORMAT_BIG_ENDIAN 0x80000000
|
||||
#endif
|
||||
bool wlr_egl_check_import_dmabuf(struct wlr_egl *egl,
|
||||
struct wlr_dmabuf_buffer *dmabuf) {
|
||||
switch (dmabuf->attributes.format & ~DRM_FORMAT_BIG_ENDIAN) {
|
||||
struct wlr_dmabuf_attributes *attribs) {
|
||||
switch (attribs->format & ~DRM_FORMAT_BIG_ENDIAN) {
|
||||
/* TODO: YUV based formats not yet supported, require multiple
|
||||
* wlr_create_image_from_dmabuf */
|
||||
case WL_SHM_FORMAT_YUYV:
|
||||
|
|
@ -431,8 +431,7 @@ bool wlr_egl_check_import_dmabuf(struct wlr_egl *egl,
|
|||
break;
|
||||
}
|
||||
|
||||
EGLImage egl_image = wlr_egl_create_image_from_dmabuf(egl,
|
||||
&dmabuf->attributes);
|
||||
EGLImage egl_image = wlr_egl_create_image_from_dmabuf(egl, attribs);
|
||||
if (egl_image) {
|
||||
/* We can import the image, good. No need to keep it
|
||||
since wlr_texture_upload_dmabuf will import it again */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue