From 66ee1771a66afae08b2b8d5aad51c86cade347ee Mon Sep 17 00:00:00 2001 From: Jesse Hall Date: Thu, 23 Mar 2017 16:40:59 -0700 Subject: [PATCH] Use gralloc usage conversion library Converting from ..graphics.allocator@2.0 usage to gralloc0 usage isn't quite as simple as ORing and truncating, which is what the default implementation was doing. Switch to using library functions that do it correctly. Test: boot bullhead Change-Id: I40ae00e9aad92b374f281569207972b7461a3e55 --- graphics/allocator/2.0/default/Android.bp | 1 + graphics/allocator/2.0/default/Gralloc1On0Adapter.cpp | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/graphics/allocator/2.0/default/Android.bp b/graphics/allocator/2.0/default/Android.bp index b8d4fdeee5..0baef89308 100644 --- a/graphics/allocator/2.0/default/Android.bp +++ b/graphics/allocator/2.0/default/Android.bp @@ -41,4 +41,5 @@ cc_library_static { include_dirs: ["system/core/libsync/include"], cflags: ["-Wall", "-Wextra", "-Wno-unused-parameter"], export_include_dirs: ["."], + whole_static_libs: ["libgrallocusage"], } diff --git a/graphics/allocator/2.0/default/Gralloc1On0Adapter.cpp b/graphics/allocator/2.0/default/Gralloc1On0Adapter.cpp index 4b9c9e10a1..f722429724 100644 --- a/graphics/allocator/2.0/default/Gralloc1On0Adapter.cpp +++ b/graphics/allocator/2.0/default/Gralloc1On0Adapter.cpp @@ -21,6 +21,8 @@ #include "Gralloc1On0Adapter.h" #include "gralloc1-adapter.h" +#include + #include #include @@ -240,8 +242,8 @@ gralloc1_error_t Gralloc1On0Adapter::allocate( // pointer, which only occurs when mDevice has been loaded successfully and // we are permitted to allocate - int usage = static_cast(descriptor->producerUsage) | - static_cast(descriptor->consumerUsage); + int usage = android_convertGralloc1To0Usage( + descriptor->producerUsage, descriptor->consumerUsage); buffer_handle_t handle = nullptr; int stride = 0; ALOGV("Calling alloc(%p, %u, %u, %i, %u)", mDevice, descriptor->width, @@ -438,7 +440,7 @@ gralloc1_error_t Gralloc1On0Adapter::lock( { if (mMinorVersion >= 3) { int result = mModule->lockAsync(mModule, buffer->getHandle(), - static_cast(producerUsage | consumerUsage), + android_convertGralloc1To0Usage(producerUsage, consumerUsage), accessRegion.left, accessRegion.top, accessRegion.width, accessRegion.height, outData, acquireFence); if (result != 0) { @@ -448,7 +450,7 @@ gralloc1_error_t Gralloc1On0Adapter::lock( syncWaitForever(acquireFence, "Gralloc1On0Adapter::lock"); int result = mModule->lock(mModule, buffer->getHandle(), - static_cast(producerUsage | consumerUsage), + android_convertGralloc1To0Usage(producerUsage, consumerUsage), accessRegion.left, accessRegion.top, accessRegion.width, accessRegion.height, outData); ALOGV("gralloc0 lock returned %d", result);