drm_hwcomposer: provide a common gralloc handle definition
PATCH v2 1/1 drm_hwcomposer: provide a common gralloc handle definition
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.
--- Android.mk | 1 - gralloc_drm_handle.h | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 gralloc_drm_handle.h
Android.mk +0 -1
@@ -47,7 +47,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_STATIC_LIBRARIES := libdrmhwc_utils LOCAL_C_INCLUDES := \ - external/drm_gralloc \ system/core/libsync LOCAL_SRC_FILES := \
gralloc_drm_handle.h new file +87 -0
87 lines not on this page · raw message
Signature · 6 lines
2.14.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Quoted 86 lines · Rob Herring
EGL, gralloc, and HWC must all have a common definition of fd's and int's in
native_handle_tto 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_tlayouts. 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_grallocand mesa to point to this copy, we can make modifications to the struct.Signed-off-by Rob Herring <[email protected]>--- Android.mk | 1 - gralloc_drm_handle.h | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 gralloc_drm_handle.hAndroid.mk +0
-1@@ -47,7 +47,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_STATIC_LIBRARIES := libdrmhwc_utils LOCAL_C_INCLUDES := \ - external/drm_gralloc \ system/core/libsync LOCAL_SRC_FILES := \gralloc_drm_handle.h new file +48
-0@@ -0,0 +1,87 @@ +/* +* Copyright (C) 2010-2011 Chia-I Wu <[email protected]> +* Copyright (C) 2010-2011 LunarG Inc. +* Copyright (C) 2016-2017 Linaro, Ltd., Rob Herring <[email protected]> +* +* 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 */
gralloc_drm_handle.h line 58
Quoted 10 lines
gralloc_drm_handle.h new file +10
-0+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
Quoted 35 lines
gralloc_drm_handle.h new file +28
-0+#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_ */ Signature · 6 lines
2.14.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Signature · 7 lines
Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Quoted 124 lines · Daniel Vetter
Quoted 111 lines · Rob Herring
EGL, gralloc, and HWC must all have a common definition of fd's and int's
innative_handle_tto 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 differentnative_handle_tlayouts. 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_grallocand mesa to point to this copy, we can make modifications to
the struct.Signed-off-by Rob Herring <[email protected]>--- Android.mk | 1 - gralloc_drm_handle.h | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 gralloc_drm_handle.hAndroid.mk +0
-1@@ -47,7 +47,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_STATIC_LIBRARIES := libdrmhwc_utils LOCAL_C_INCLUDES := \ - external/drm_gralloc \ system/core/libsync LOCAL_SRC_FILES := \gralloc_drm_handle.h new file +4
-0@@ -0,0 +1,87 @@ +/* +* Copyright (C) 2010-2011 Chia-I Wu <[email protected]> +* 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.
+ */gralloc_drm_handle.h new file +29
-0+ +#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))); /* buffermodifiers */
gralloc_drm_handle.h line 58
Quoted 6 lines
gralloc_drm_handle.h new file +6
-0+union { +void *data;/* private pointer for gralloc */ +uint64_t reserved; + } __attribute__((aligned (8 ))); +}; +#define GRALLOC_HANDLE_MAGIC 0x5f47424dMaybe add a
#define
GRALLOC_HANDLE_VERSION1
#defineGRALLOC_HANDLE_MAGIC(0x5f47424d+GRALLOC_HANDLE_VERSION)
Quoted 8 lines
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.
Quoted 40 lines
Quoted 40 lines
+#define
GRALLOC_HANDLE_NUM_INTS(\gralloc_drm_handle.h new file +1
-0+ ((sizeof(struct gralloc_drm_handle_t) -sizeof(native_handle_t))/sizeof(int)) \
gralloc_drm_handle.h new file +3
-0+ - GRALLOC_HANDLE_NUM_FDS) + +static inline struct gralloc_drm_handle_t*gralloc_drm_handle(buffer_handle_t
_handle)gralloc_drm_handle.h new file +5
-0+{ +struct gralloc_drm_handle_t *handle = + (struct gralloc_drm_handle_t *) _handle; + + if (handle && (handle->base.version != sizeof(handle-Quoted 1 line
base) ||
gralloc_drm_handle.h new file +1
-0+ handle->base.numInts !=
GRALLOC_HANDLE_NUM_INTS||gralloc_drm_handle.h new file +1
-0+ handle->base.numFds !=
GRALLOC_HANDLE_NUM_FDS||gralloc_drm_handle.h new file +7
-0+ handle->magic != GRALLOC_HANDLE_MAGIC)) +return NULL ; + +return handle; +} + +static inline int gralloc_drm_get_prime_fd(buffer_handle_t
_handle)gralloc_drm_handle.h new file +2
-0+{ + struct gralloc_drm_handle_t *handle =
gralloc_drm_handle(_handle);gralloc_drm_handle.h new file +7
-0+return (handle) ? handle->prime_fd :-1 ; +} + +#ifdef __cplusplus +} +#endif +#endif /* _GRALLOC_DRM_HANDLE_H_ */ Signature · 1 line
2.14.1
Quoted 6 lines
Quoted 4 lines
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Quoted 4 lines · Daniel Vetter
Quoted 3 lines · Rob Herring
EGL, gralloc, and HWC must all have a common definition of fd's and int's in
native_handle_tto share the fd and width, height, format, etc. of a dmabuf.
[...]
Quoted 11 lines
Quoted 1 line
+#define
GRALLOC_HANDLE_MAGIC0x5f47424dMaybe add a
#define
GRALLOC_HANDLE_VERSION1
#defineGRALLOC_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.
If we add or remove anything that will already be caught because sizes are stored and checked.
The magic corresponds to 'GBM_'. Maybe we want to change that to something else. However, I'd like to not change it just yet. My intention was to keep it compatible, update gbm_gralloc and mesa dependencies, then make any changes to this struct.
Rob
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Quoted 20 lines · Rob Herring
Quoted 4 lines · Daniel Vetter
Quoted 3 lines · Rob Herring
EGL, gralloc, and HWC must all have a common definition of fd's and int's in
native_handle_tto share the fd and width, height, format, etc. of a dmabuf.[...]
Quoted 11 lines
Quoted 1 line
+#define
GRALLOC_HANDLE_MAGIC0x5f47424dMaybe add a
#define
GRALLOC_HANDLE_VERSION1
#defineGRALLOC_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.
Quoted 7 lines
If we add or remove anything that will already be caught because sizes are stored and checked.
The magic corresponds to '
GBM_'. Maybe we want to change that to something else. However, I'd like to not change it just yet. My intention was to keep it compatible, updategbm_grallocand mesa dependencies, then make any changes to this struct.
Hm, start out with version 0 then, to match? Anyway, was just a suggestion, feel free to ignore :-)
-Daniel
Signature · 7 lines
Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel