On Tue, 2017-10-31 at 17:44 +0100, Daniel Vetter wrote: > 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@kernel. > > org> > > + * > > + * 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 This seems like a good idea to me. With this change feel free to add my r-b. > > > +#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 > >
Attachment:
signature.asc
Description: This is a digitally signed message part
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel