[Mesa-dev] [PATCH] egl/android: remove flink name support
Robert Foss
robert.foss at collabora.com
Fri Apr 20 11:29:17 UTC 2018
Hey Rob,
This looks good to me.
Do you mind if I carry this patch my series to get it all pushed upstream at once?
Rob.
On 04/19/2018 11:09 PM, Rob Herring wrote:
> Maintaining both flink names and prime fd support which are provided by
> 2 different gralloc implementations is problematic because we have a
> dependency on a specific gralloc implementation header.
>
> This mostly removes the dependency on the gralloc implementation and
> headers. The dependency on GRALLOC_MODULE_PERFORM_GET_DRM_FD remains for
> now, but the definition is added locally to remove the header
> dependency.
>
> Signed-off-by: Rob Herring <robh at kernel.org>
> ---
> With this plus Robert's probing patch, we remove any gralloc
> implementation dependency (other than it has to be a pre 1.0
> implementation...).
>
> src/egl/drivers/dri2/egl_dri2.h | 1 -
> src/egl/drivers/dri2/platform_android.c | 172 ++++----------------------------
> 2 files changed, 17 insertions(+), 156 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
> index cc76c73eab2f..d9e1f466fbeb 100644
> --- a/src/egl/drivers/dri2/egl_dri2.h
> +++ b/src/egl/drivers/dri2/egl_dri2.h
> @@ -61,7 +61,6 @@ struct zwp_linux_dmabuf_v1;
>
> #include <system/window.h>
> #include <hardware/gralloc.h>
> -#include <gralloc_drm_handle.h>
>
> #endif /* HAVE_ANDROID_PLATFORM */
>
> diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c
> index 4f25cb746915..68c85d7f99fa 100644
> --- a/src/egl/drivers/dri2/platform_android.c
> +++ b/src/egl/drivers/dri2/platform_android.c
> @@ -37,7 +37,6 @@
> #include "loader.h"
> #include "egl_dri2.h"
> #include "egl_dri2_fallbacks.h"
> -#include "gralloc_drm.h"
>
> #define ALIGN(val, align) (((val) + (align) - 1) & ~((align) - 1))
>
> @@ -164,12 +163,6 @@ get_native_buffer_fd(struct ANativeWindowBuffer *buf)
> return (handle && handle->numFds) ? handle->data[0] : -1;
> }
>
> -static int
> -get_native_buffer_name(struct ANativeWindowBuffer *buf)
> -{
> - return gralloc_drm_get_gem_handle(buf->handle);
> -}
> -
> static EGLBoolean
> droid_window_dequeue_buffer(struct dri2_egl_surface *dri2_surf)
> {
> @@ -822,50 +815,6 @@ droid_create_image_from_prime_fd(_EGLDisplay *disp, _EGLContext *ctx,
> return dri2_create_image_dma_buf(disp, ctx, NULL, attr_list);
> }
>
> -static _EGLImage *
> -droid_create_image_from_name(_EGLDisplay *disp, _EGLContext *ctx,
> - struct ANativeWindowBuffer *buf)
> -{
> - struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> - struct dri2_egl_image *dri2_img;
> - int name;
> - int format;
> -
> - name = get_native_buffer_name(buf);
> - if (!name) {
> - _eglError(EGL_BAD_PARAMETER, "eglCreateEGLImageKHR");
> - return NULL;
> - }
> -
> - format = get_format(buf->format);
> - if (format == -1)
> - return NULL;
> -
> - dri2_img = calloc(1, sizeof(*dri2_img));
> - if (!dri2_img) {
> - _eglError(EGL_BAD_ALLOC, "droid_create_image_mesa_drm");
> - return NULL;
> - }
> -
> - _eglInitImage(&dri2_img->base, disp);
> -
> - dri2_img->dri_image =
> - dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen,
> - buf->width,
> - buf->height,
> - format,
> - name,
> - buf->stride,
> - dri2_img);
> - if (!dri2_img->dri_image) {
> - free(dri2_img);
> - _eglError(EGL_BAD_ALLOC, "droid_create_image_mesa_drm");
> - return NULL;
> - }
> -
> - return &dri2_img->base;
> -}
> -
> static EGLBoolean
> droid_query_surface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf,
> EGLint attribute, EGLint *value)
> @@ -921,7 +870,7 @@ dri2_create_image_android_native_buffer(_EGLDisplay *disp,
> if (fd >= 0)
> return droid_create_image_from_prime_fd(disp, ctx, buf, fd);
>
> - return droid_create_image_from_name(disp, ctx, buf);
> + return NULL;
> }
>
> static _EGLImage *
> @@ -943,82 +892,6 @@ droid_flush_front_buffer(__DRIdrawable * driDrawable, void *loaderPrivate)
> {
> }
>
> -static int
> -droid_get_buffers_parse_attachments(struct dri2_egl_surface *dri2_surf,
> - unsigned int *attachments, int count)
> -{
> - int num_buffers = 0;
> -
> - /* fill dri2_surf->buffers */
> - for (int i = 0; i < count * 2; i += 2) {
> - __DRIbuffer *buf, *local;
> -
> - assert(num_buffers < ARRAY_SIZE(dri2_surf->buffers));
> - buf = &dri2_surf->buffers[num_buffers];
> -
> - switch (attachments[i]) {
> - case __DRI_BUFFER_BACK_LEFT:
> - if (dri2_surf->base.Type == EGL_WINDOW_BIT) {
> - buf->attachment = attachments[i];
> - buf->name = get_native_buffer_name(dri2_surf->buffer);
> - buf->cpp = get_format_bpp(dri2_surf->buffer->format);
> - buf->pitch = dri2_surf->buffer->stride * buf->cpp;
> - buf->flags = 0;
> -
> - if (buf->name)
> - num_buffers++;
> -
> - break;
> - }
> - /* fall through for pbuffers */
> - case __DRI_BUFFER_DEPTH:
> - case __DRI_BUFFER_STENCIL:
> - case __DRI_BUFFER_ACCUM:
> - case __DRI_BUFFER_DEPTH_STENCIL:
> - case __DRI_BUFFER_HIZ:
> - local = dri2_egl_surface_alloc_local_buffer(dri2_surf,
> - attachments[i], attachments[i + 1]);
> -
> - if (local) {
> - *buf = *local;
> - num_buffers++;
> - }
> - break;
> - case __DRI_BUFFER_FRONT_LEFT:
> - case __DRI_BUFFER_FRONT_RIGHT:
> - case __DRI_BUFFER_FAKE_FRONT_LEFT:
> - case __DRI_BUFFER_FAKE_FRONT_RIGHT:
> - case __DRI_BUFFER_BACK_RIGHT:
> - default:
> - /* no front or right buffers */
> - break;
> - }
> - }
> -
> - return num_buffers;
> -}
> -
> -static __DRIbuffer *
> -droid_get_buffers_with_format(__DRIdrawable * driDrawable,
> - int *width, int *height,
> - unsigned int *attachments, int count,
> - int *out_count, void *loaderPrivate)
> -{
> - struct dri2_egl_surface *dri2_surf = loaderPrivate;
> -
> - if (update_buffers(dri2_surf) < 0)
> - return NULL;
> -
> - *out_count = droid_get_buffers_parse_attachments(dri2_surf, attachments, count);
> -
> - if (width)
> - *width = dri2_surf->base.Width;
> - if (height)
> - *height = dri2_surf->base.Height;
> -
> - return dri2_surf->buffers;
> -}
> -
> static unsigned
> droid_get_capability(void *loaderPrivate, enum dri_loader_cap cap)
> {
> @@ -1100,6 +973,14 @@ droid_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *dpy)
> return (config_count != 0);
> }
>
> +enum {
> + /* perform(const struct gralloc_module_t *mod,
> + * int op,
> + * int *fd);
> + */
> + GRALLOC_MODULE_PERFORM_GET_DRM_FD = 0x40000002,
> +};
> +
> static int
> droid_open_device(struct dri2_egl_display *dri2_dpy)
> {
> @@ -1141,15 +1022,6 @@ static const struct dri2_egl_display_vtbl droid_display_vtbl = {
> .get_dri_drawable = dri2_surface_get_dri_drawable,
> };
>
> -static const __DRIdri2LoaderExtension droid_dri2_loader_extension = {
> - .base = { __DRI_DRI2_LOADER, 4 },
> -
> - .getBuffers = NULL,
> - .flushFrontBuffer = droid_flush_front_buffer,
> - .getBuffersWithFormat = droid_get_buffers_with_format,
> - .getCapability = droid_get_capability,
> -};
> -
> static const __DRIimageLoaderExtension droid_image_loader_extension = {
> .base = { __DRI_IMAGE_LOADER, 2 },
>
> @@ -1158,13 +1030,6 @@ static const __DRIimageLoaderExtension droid_image_loader_extension = {
> .getCapability = droid_get_capability,
> };
>
> -static const __DRIextension *droid_dri2_loader_extensions[] = {
> - &droid_dri2_loader_extension.base,
> - &image_lookup_extension.base,
> - &use_invalidate.base,
> - NULL,
> -};
> -
> static const __DRIextension *droid_image_loader_extensions[] = {
> &droid_image_loader_extension.base,
> &image_lookup_extension.base,
> @@ -1216,17 +1081,14 @@ dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *disp)
> /* render nodes cannot use Gem names, and thus do not support
> * the __DRI_DRI2_LOADER extension */
> if (!dri2_dpy->is_render_node) {
> - dri2_dpy->loader_extensions = droid_dri2_loader_extensions;
> - if (!dri2_load_driver(disp)) {
> - err = "DRI2: failed to load driver";
> - goto cleanup;
> - }
> - } else {
> - dri2_dpy->loader_extensions = droid_image_loader_extensions;
> - if (!dri2_load_driver_dri3(disp)) {
> - err = "DRI3: failed to load driver";
> - goto cleanup;
> - }
> + err = "DRI2: driver is not a render node";
> + goto cleanup;
> + }
> +
> + dri2_dpy->loader_extensions = droid_image_loader_extensions;
> + if (!dri2_load_driver_dri3(disp)) {
> + err = "DRI3: failed to load driver";
> + goto cleanup;
> }
>
> if (!dri2_create_screen(disp)) {
>
More information about the mesa-dev
mailing list