On Tue, Oct 31, 2017 at 09:59:20AM -0500, Rob Herring wrote: > EGL, gralloc, and HWC must all have a common definition of fd's and int's > in native_handle_t to share the fd and width, height, format, etc. of a > dmabuf. > > Move the definition into HWC so we aren't dependent on a specific gralloc > implementation and so we don't have to create an importer just for > different native_handle_t layouts. This will allow supporting multiple > gralloc implementations that conform to this layout. > > For now, this is aligned with gbm_gralloc's struct. Once we change > gbm_gralloc and mesa to point to this copy, we can make modifications to > the struct. > > Signed-off-by: Rob Herring <robh@xxxxxxxxxx> > --- > Android.mk | 1 - > gralloc_drm_handle.h | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 87 insertions(+), 1 deletion(-) > create mode 100644 gralloc_drm_handle.h > > diff --git a/Android.mk b/Android.mk > index 8b11e375adde..ee5b8bfb44d0 100644 > --- a/Android.mk > +++ b/Android.mk > @@ -47,7 +47,6 @@ LOCAL_SHARED_LIBRARIES := \ > LOCAL_STATIC_LIBRARIES := libdrmhwc_utils > > LOCAL_C_INCLUDES := \ > - external/drm_gralloc \ > system/core/libsync > > LOCAL_SRC_FILES := \ > diff --git a/gralloc_drm_handle.h b/gralloc_drm_handle.h > new file mode 100644 > index 000000000000..e2f35dda539b > --- /dev/null > +++ b/gralloc_drm_handle.h > @@ -0,0 +1,87 @@ > +/* > + * Copyright (C) 2010-2011 Chia-I Wu <olvaffe@xxxxxxxxx> > + * Copyright (C) 2010-2011 LunarG Inc. > + * Copyright (C) 2016-2017 Linaro, Ltd., Rob Herring <robh@xxxxxxxxxx> > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the "Software"), > + * to deal in the Software without restriction, including without limitation > + * the rights to use, copy, modify, merge, publish, distribute, sublicense, > + * and/or sell copies of the Software, and to permit persons to whom the > + * Software is furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be included > + * in all copies or substantial portions of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER > + * DEALINGS IN THE SOFTWARE. > + */ > + > +#ifndef _GRALLOC_DRM_HANDLE_H_ > +#define _GRALLOC_DRM_HANDLE_H_ > + > +#include <cutils/native_handle.h> > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +struct gralloc_drm_handle_t { > + native_handle_t base; > + > + /* file descriptors */ > + int prime_fd; > + > + /* integers */ > + int magic; > + > + int width; > + int height; > + int format; > + int usage; > + > + int name; /* the name of the bo */ > + int stride; /* the stride in bytes */ > + int data_owner; /* owner of data (for validation) */ > + > + uint64_t modifier __attribute__((aligned(8))); /* buffer modifiers */ > + union { > + void *data; /* private pointer for gralloc */ > + uint64_t reserved; > + } __attribute__((aligned(8))); > +}; > +#define GRALLOC_HANDLE_MAGIC 0x5f47424d Maybe add a #define GRALLOC_HANDLE_VERSION 1 #define GRALLOC_HANDLE_MAGIC (0x5f47424d + GRALLOC_HANDLE_VERSION) and a comment that the version needs to be incremented for every change, to catch mismatching mesa/hwc versions? Given the layout there's no way to add more fds in a backwards-compatible way, so we need full versioning I think, and treat any change as a breaking one. -Daniel > +#define GRALLOC_HANDLE_NUM_INTS ( \ > + ((sizeof(struct gralloc_drm_handle_t) - sizeof(native_handle_t))/sizeof(int)) \ > + - GRALLOC_HANDLE_NUM_FDS) > + > +static inline struct gralloc_drm_handle_t *gralloc_drm_handle(buffer_handle_t _handle) > +{ > + struct gralloc_drm_handle_t *handle = > + (struct gralloc_drm_handle_t *) _handle; > + > + if (handle && (handle->base.version != sizeof(handle->base) || > + handle->base.numInts != GRALLOC_HANDLE_NUM_INTS || > + handle->base.numFds != GRALLOC_HANDLE_NUM_FDS || > + handle->magic != GRALLOC_HANDLE_MAGIC)) > + return NULL; > + > + return handle; > +} > + > +static inline int gralloc_drm_get_prime_fd(buffer_handle_t _handle) > +{ > + struct gralloc_drm_handle_t *handle = gralloc_drm_handle(_handle); > + return (handle) ? handle->prime_fd : -1; > +} > + > +#ifdef __cplusplus > +} > +#endif > +#endif /* _GRALLOC_DRM_HANDLE_H_ */ > -- > 2.14.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel