loader/dri3: convert to loader_dri_create_image

Get rid of the code duplication and makes it easier to hook in a
new createImageWithModifiers2, but obscures the code flow a bit.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8106>
This commit is contained in:
Lucas Stach 2020-12-15 14:52:28 +01:00 committed by Marge Bot
parent cb9ae4273d
commit 8fd5b16efc
1 changed files with 12 additions and 28 deletions

View File

@ -34,6 +34,7 @@
#include <X11/Xlib-xcb.h>
#include "loader_dri_helper.h"
#include "loader_dri3_helper.h"
#include "util/macros.h"
#include "drm-uapi/drm_fourcc.h"
@ -1314,6 +1315,8 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format,
struct xshmfence *shm_fence;
int buffer_fds[4], fence_fd;
int num_planes = 0;
uint64_t *modifiers = NULL;
uint32_t count = 0;
int i, mod;
int ret;
@ -1348,8 +1351,6 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format,
xcb_dri3_get_supported_modifiers_cookie_t mod_cookie;
xcb_dri3_get_supported_modifiers_reply_t *mod_reply;
xcb_generic_error_t *error = NULL;
uint64_t *modifiers = NULL;
uint32_t count = 0;
mod_cookie = xcb_dri3_get_supported_modifiers(draw->conn,
draw->window,
@ -1395,34 +1396,17 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format,
}
free(mod_reply);
/* don't use createImageWithModifiers() if we have no
* modifiers, other things depend on the use flags when
* there are no modifiers to know that a buffer can be
* shared.
*/
if (modifiers) {
buffer->image = draw->ext->image->createImageWithModifiers(draw->dri_screen,
width, height,
format,
modifiers,
count,
buffer);
}
free(modifiers);
}
#endif
if (!buffer->image)
buffer->image = draw->ext->image->createImage(draw->dri_screen,
width, height,
format,
__DRI_IMAGE_USE_SHARE |
__DRI_IMAGE_USE_SCANOUT |
__DRI_IMAGE_USE_BACKBUFFER |
(draw->is_protected_content ?
__DRI_IMAGE_USE_PROTECTED : 0),
buffer);
buffer->image = loader_dri_create_image(draw->dri_screen, draw->ext->image,
width, height, format,
__DRI_IMAGE_USE_SHARE |
__DRI_IMAGE_USE_SCANOUT |
__DRI_IMAGE_USE_BACKBUFFER |
(draw->is_protected_content ?
__DRI_IMAGE_USE_PROTECTED : 0),
modifiers, count, buffer);
free(modifiers);
pixmap_buffer = buffer->image;