Re: [PATCH v5] drm_hwcomposer: Add platformhisi buffer importer for hikey and hikey960
On Wed, Mar 14, 2018 at 11:55 AM, Robert Fosswrote: > Hey John, > > Pushed to master That's great! Thanks so much to you and everyone who provided review input! -john ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v5] drm_hwcomposer: Add platformhisi buffer importer for hikey and hikey960
Hey John, Pushed to master On 03/14/2018 12:51 AM, John Stultz wrote: This allows for importing buffers allocated from the hikey and hikey960 gralloc 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 Cc: Alistair Strachan Acked-by: Robert Foss 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 v5: * Minor spelling fix in commit message noticed by Robert Foss --- 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 8b11e37..1add286 100644 --- a/Android.mk +++ b/Android.mk @@ -75,7 +75,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, +
[PATCH v5] drm_hwcomposer: Add platformhisi buffer importer for hikey and hikey960
This allows for importing buffers allocated from the hikey and hikey960 gralloc 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 Cc: Alistair Strachan Acked-by: Robert Foss 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 v5: * Minor spelling fix in commit message noticed by Robert Foss --- 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 8b11e37..1add286 100644 --- a/Android.mk +++ b/Android.mk @@ -75,7 +75,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