Re: [RFC][PATCH 2/2 v4] drm_hwcomposer: Add platformhisi buffer importer for hikey and hikey960
Hey John, Feel free to add my ACK. Rob. On 03/08/2018 11:08 PM, John Stultz wrote: On Thu, Mar 8, 2018 at 3:16 AM, Robert Fosswrote: Hey John, This patch looks good to me. I have yet to build it, and I haven't brought my HiKey960 up for testing quite yet. On 03/07/2018 12:19 AM, John Stultz wrote: This allows for importing buffers allocated from the hikey and hikey960 gralloc implelementations. "implelementations" -> "implementations" Fixed in my tree. Let me know if you have any further feedback after testing and I'll re-submit. thanks -john ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [RFC][PATCH 2/2 v4] drm_hwcomposer: Add platformhisi buffer importer for hikey and hikey960
On Thu, Mar 8, 2018 at 3:16 AM, Robert Fosswrote: > Hey John, > > This patch looks good to me. > > I have yet to build it, and I haven't brought my HiKey960 up for testing > quite yet. > > > On 03/07/2018 12:19 AM, John Stultz wrote: >> >> This allows for importing buffers allocated from the >> hikey and hikey960 gralloc implelementations. > > > "implelementations" -> "implementations" Fixed in my tree. Let me know if you have any further feedback after testing and I'll re-submit. thanks -john ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [RFC][PATCH 2/2 v4] drm_hwcomposer: Add platformhisi buffer importer for hikey and hikey960
Hey John, This patch looks good to me. I have yet to build it, and I haven't brought my HiKey960 up for testing quite yet. On 03/07/2018 12:19 AM, John Stultz wrote: This allows for importing buffers allocated from the hikey and hikey960 gralloc implelementations. "implelementations" -> "implementations" Cc: Marissa WallCc: Sean Paul Cc: Dmitry Shmidt Cc: Robert Foss Cc: Matt Szczesiak Cc: Liviu Dudau Cc: David Hanna Cc: Rob Herring Cc: Alexandru-Cosmin Gheorghe Signed-off-by: John Stultz --- v2: * Make platformhisi and the generic importer exclusive in the build * Fixup vendor check v3: * Unify format conversions * Subclass the platformdrmgeneric importer implementation to reduce code duplication * Rework to avoid board specific logic (tweak gralloc to be consistent between the two) v4: * Minor cleanups as suggested by Alexandru-Cosmin Gheorghe --- Android.mk | 13 + platformdrmgeneric.h | 2 +- platformhisi.cpp | 135 +++ platformhisi.h | 48 ++ 4 files changed, 197 insertions(+), 1 deletion(-) create mode 100644 platformhisi.cpp create mode 100644 platformhisi.h diff --git a/Android.mk b/Android.mk index ee5b8bf..f37e4c3 100644 --- a/Android.mk +++ b/Android.mk @@ -74,7 +74,20 @@ LOCAL_CPPFLAGS += \ -DHWC2_USE_CPP11 \ -DHWC2_INCLUDE_STRINGIFICATION + +ifeq ($(TARGET_PRODUCT),hikey960) +LOCAL_CPPFLAGS += -DUSE_HISI_IMPORTER +LOCAL_SRC_FILES += platformhisi.cpp +LOCAL_C_INCLUDES += device/linaro/hikey/gralloc960/ +else +ifeq ($(TARGET_PRODUCT),hikey) +LOCAL_CPPFLAGS += -DUSE_HISI_IMPORTER +LOCAL_SRC_FILES += platformhisi.cpp +LOCAL_C_INCLUDES += device/linaro/hikey/gralloc/ +else LOCAL_CPPFLAGS += -DUSE_DRM_GENERIC_IMPORTER +endif +endif LOCAL_MODULE := hwcomposer.drm LOCAL_MODULE_TAGS := optional diff --git a/platformdrmgeneric.h b/platformdrmgeneric.h index 8376580..fbe059b 100644 --- a/platformdrmgeneric.h +++ b/platformdrmgeneric.h @@ -35,8 +35,8 @@ class DrmGenericImporter : public Importer { int ImportBuffer(buffer_handle_t handle, hwc_drm_bo_t *bo) override; int ReleaseBuffer(hwc_drm_bo_t *bo) override; - private: uint32_t ConvertHalFormatToDrm(uint32_t hal_format); + private: DrmResources *drm_; diff --git a/platformhisi.cpp b/platformhisi.cpp new file mode 100644 index 000..16c5e6f --- /dev/null +++ b/platformhisi.cpp @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "hwc-platform-hisi" + +#include "drmresources.h" +#include "platform.h" +#include "platformhisi.h" + + +#include +#include +#include +#include +#include + +#include +#include +#include "gralloc_priv.h" + + +namespace android { + +Importer *Importer::CreateInstance(DrmResources *drm) { + HisiImporter *importer = new HisiImporter(drm); + if (!importer) +return NULL; + + int ret = importer->Init(); + if (ret) { +ALOGE("Failed to initialize the hisi importer %d", ret); +delete importer; +return NULL; + } + return importer; +} + +HisiImporter::HisiImporter(DrmResources *drm) : DrmGenericImporter(drm), drm_(drm) { +} + +HisiImporter::~HisiImporter() { +} + +int HisiImporter::Init() { + int ret = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, + (const hw_module_t **)_); + if (ret) { +ALOGE("Failed to open gralloc module %d", ret); +return ret; + } + + if (strcasecmp(gralloc_->common.author, "ARM Ltd.")) +ALOGW("Using non-ARM gralloc module: %s/%s\n", gralloc_->common.name, + gralloc_->common.author); + + return 0; +} + +EGLImageKHR HisiImporter::ImportImage(EGLDisplay egl_display, buffer_handle_t handle) { + private_handle_t const *hnd = reinterpret_cast < private_handle_t const *>(handle); + if (!hnd) +return NULL; + + EGLint fmt = ConvertHalFormatToDrm(hnd->req_format); + if (fmt < 0) + return NULL; + + EGLint attr[] = { +EGL_WIDTH, hnd->width, +EGL_HEIGHT, hnd->height, +EGL_LINUX_DRM_FOURCC_EXT, fmt, +EGL_DMA_BUF_PLANE0_FD_EXT, hnd->share_fd, +EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, +
[RFC][PATCH 2/2 v4] drm_hwcomposer: Add platformhisi buffer importer for hikey and hikey960
This allows for importing buffers allocated from the hikey and hikey960 gralloc implelementations. Cc: Marissa WallCc: Sean Paul Cc: Dmitry Shmidt Cc: Robert Foss Cc: Matt Szczesiak Cc: Liviu Dudau Cc: David Hanna Cc: Rob Herring Cc: Alexandru-Cosmin Gheorghe Signed-off-by: John Stultz --- v2: * Make platformhisi and the generic importer exclusive in the build * Fixup vendor check v3: * Unify format conversions * Subclass the platformdrmgeneric importer implementation to reduce code duplication * Rework to avoid board specific logic (tweak gralloc to be consistent between the two) v4: * Minor cleanups as suggested by Alexandru-Cosmin Gheorghe --- Android.mk | 13 + platformdrmgeneric.h | 2 +- platformhisi.cpp | 135 +++ platformhisi.h | 48 ++ 4 files changed, 197 insertions(+), 1 deletion(-) create mode 100644 platformhisi.cpp create mode 100644 platformhisi.h diff --git a/Android.mk b/Android.mk index ee5b8bf..f37e4c3 100644 --- a/Android.mk +++ b/Android.mk @@ -74,7 +74,20 @@ LOCAL_CPPFLAGS += \ -DHWC2_USE_CPP11 \ -DHWC2_INCLUDE_STRINGIFICATION + +ifeq ($(TARGET_PRODUCT),hikey960) +LOCAL_CPPFLAGS += -DUSE_HISI_IMPORTER +LOCAL_SRC_FILES += platformhisi.cpp +LOCAL_C_INCLUDES += device/linaro/hikey/gralloc960/ +else +ifeq ($(TARGET_PRODUCT),hikey) +LOCAL_CPPFLAGS += -DUSE_HISI_IMPORTER +LOCAL_SRC_FILES += platformhisi.cpp +LOCAL_C_INCLUDES += device/linaro/hikey/gralloc/ +else LOCAL_CPPFLAGS += -DUSE_DRM_GENERIC_IMPORTER +endif +endif LOCAL_MODULE := hwcomposer.drm LOCAL_MODULE_TAGS := optional diff --git a/platformdrmgeneric.h b/platformdrmgeneric.h index 8376580..fbe059b 100644 --- a/platformdrmgeneric.h +++ b/platformdrmgeneric.h @@ -35,8 +35,8 @@ class DrmGenericImporter : public Importer { int ImportBuffer(buffer_handle_t handle, hwc_drm_bo_t *bo) override; int ReleaseBuffer(hwc_drm_bo_t *bo) override; - private: uint32_t ConvertHalFormatToDrm(uint32_t hal_format); + private: DrmResources *drm_; diff --git a/platformhisi.cpp b/platformhisi.cpp new file mode 100644 index 000..16c5e6f --- /dev/null +++ b/platformhisi.cpp @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "hwc-platform-hisi" + +#include "drmresources.h" +#include "platform.h" +#include "platformhisi.h" + + +#include +#include +#include +#include +#include + +#include +#include +#include "gralloc_priv.h" + + +namespace android { + +Importer *Importer::CreateInstance(DrmResources *drm) { + HisiImporter *importer = new HisiImporter(drm); + if (!importer) +return NULL; + + int ret = importer->Init(); + if (ret) { +ALOGE("Failed to initialize the hisi importer %d", ret); +delete importer; +return NULL; + } + return importer; +} + +HisiImporter::HisiImporter(DrmResources *drm) : DrmGenericImporter(drm), drm_(drm) { +} + +HisiImporter::~HisiImporter() { +} + +int HisiImporter::Init() { + int ret = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, + (const hw_module_t **)_); + if (ret) { +ALOGE("Failed to open gralloc module %d", ret); +return ret; + } + + if (strcasecmp(gralloc_->common.author, "ARM Ltd.")) +ALOGW("Using non-ARM gralloc module: %s/%s\n", gralloc_->common.name, + gralloc_->common.author); + + return 0; +} + +EGLImageKHR HisiImporter::ImportImage(EGLDisplay egl_display, buffer_handle_t handle) { + private_handle_t const *hnd = reinterpret_cast < private_handle_t const *>(handle); + if (!hnd) +return NULL; + + EGLint fmt = ConvertHalFormatToDrm(hnd->req_format); + if (fmt < 0) + return NULL; + + EGLint attr[] = { +EGL_WIDTH, hnd->width, +EGL_HEIGHT, hnd->height, +EGL_LINUX_DRM_FOURCC_EXT, fmt, +EGL_DMA_BUF_PLANE0_FD_EXT, hnd->share_fd, +EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, +EGL_DMA_BUF_PLANE0_PITCH_EXT, hnd->byte_stride, +EGL_NONE, + }; + return eglCreateImageKHR(egl_display, EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, NULL, attr); +} + +int HisiImporter::ImportBuffer(buffer_handle_t handle, hwc_drm_bo_t *bo) { +