diff options
author | 2017-04-20 16:35:39 -0700 | |
---|---|---|
committer | 2017-04-28 00:07:09 +0000 | |
commit | 2c38b56d19f464142e32030b99ac56afd47ab7cd (patch) | |
tree | f677438221ecc9cdfbdad87a9eb5ca98c7a76020 | |
parent | 829a3e8b3dcdef428485b2f606413e2b4ebcdcda (diff) |
Plumb gralloc producer/consumer bits correctly
Bug: 33350696
Test: compile, boot device, cts
Change-Id: I2f078cf4bbdf0db49f2e914b051f55629fb37eb6
-rw-r--r-- | libs/nativewindow/AHardwareBuffer.cpp | 177 | ||||
-rw-r--r-- | libs/nativewindow/ANativeWindow.cpp | 7 | ||||
-rw-r--r-- | libs/nativewindow/Android.bp | 1 | ||||
-rw-r--r-- | libs/nativewindow/include/android/hardware_buffer.h | 113 | ||||
-rw-r--r-- | libs/nativewindow/include/private/android/AHardwareBufferHelpers.h | 9 | ||||
-rw-r--r-- | libs/nativewindow/include/vndk/window.h | 7 | ||||
-rw-r--r-- | libs/nativewindow/tests/AHardwareBufferTest.cpp | 198 | ||||
-rw-r--r-- | libs/nativewindow/tests/Android.bp | 5 | ||||
-rw-r--r-- | libs/vr/libdvr/Android.mk | 1 | ||||
-rw-r--r-- | libs/vr/libdvr/display_manager_client.cpp | 18 | ||||
-rw-r--r-- | libs/vr/libdvr/tests/dvr_named_buffer-test.cpp | 21 |
11 files changed, 192 insertions, 365 deletions
diff --git a/libs/nativewindow/AHardwareBuffer.cpp b/libs/nativewindow/AHardwareBuffer.cpp index e2647bedd1..4a8d3b697c 100644 --- a/libs/nativewindow/AHardwareBuffer.cpp +++ b/libs/nativewindow/AHardwareBuffer.cpp @@ -27,10 +27,9 @@ #include <utils/StrongPointer.h> #include <ui/GraphicBuffer.h> #include <system/graphics.h> -#include <hardware/gralloc1.h> -#include <grallocusage/GrallocUsageConversion.h> #include <private/android/AHardwareBufferHelpers.h> +#include <android/hardware/graphics/common/1.0/types.h> static constexpr int kFdBufferSize = 128 * sizeof(int); // 128 ints @@ -51,17 +50,17 @@ int AHardwareBuffer_allocate(const AHardwareBuffer_Desc* desc, AHardwareBuffer** return BAD_VALUE; } + if (desc->reserved != 0) { + ALOGE("AHardwareBuffer_Desc::reserved field must be 0"); + return BAD_VALUE; + } + if (desc->format == AHARDWAREBUFFER_FORMAT_BLOB && desc->height != 1) { ALOGE("Height must be 1 when using the AHARDWAREBUFFER_FORMAT_BLOB format"); return BAD_VALUE; } - uint64_t producerUsage = 0; - uint64_t consumerUsage = 0; - AHardwareBuffer_convertToGrallocUsageBits(&producerUsage, &consumerUsage, desc->usage0, - desc->usage1); - uint32_t usage = android_convertGralloc1To0Usage(producerUsage, consumerUsage); - + uint64_t usage = AHardwareBuffer_convertToGrallocUsageBits(desc->usage); sp<GraphicBuffer> gbuffer(new GraphicBuffer( desc->width, desc->height, format, desc->layers, usage, std::string("AHardwareBuffer pid [") + std::to_string(getpid()) + "]")); @@ -102,30 +101,24 @@ void AHardwareBuffer_describe(const AHardwareBuffer* buffer, outDesc->width = gbuffer->getWidth(); outDesc->height = gbuffer->getHeight(); outDesc->layers = gbuffer->getLayerCount(); - - uint64_t producerUsage = 0; - uint64_t consumerUsage = 0; - android_convertGralloc0To1Usage(gbuffer->getUsage(), &producerUsage, &consumerUsage); - AHardwareBuffer_convertFromGrallocUsageBits(&outDesc->usage0, &outDesc->usage1, - producerUsage, consumerUsage); outDesc->format = AHardwareBuffer_convertFromPixelFormat( static_cast<uint32_t>(gbuffer->getPixelFormat())); + outDesc->usage = AHardwareBuffer_convertFromGrallocUsageBits(gbuffer->getUsage()); + outDesc->reserved = 0; } -int AHardwareBuffer_lock(AHardwareBuffer* buffer, uint64_t usage0, +int AHardwareBuffer_lock(AHardwareBuffer* buffer, uint64_t usage, int32_t fence, const ARect* rect, void** outVirtualAddress) { if (!buffer) return BAD_VALUE; - if (usage0 & ~(AHARDWAREBUFFER_USAGE0_CPU_READ_OFTEN | - AHARDWAREBUFFER_USAGE0_CPU_WRITE_OFTEN)) { + if (usage & ~(AHARDWAREBUFFER_USAGE_CPU_READ_MASK | + AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK)) { ALOGE("Invalid usage flags passed to AHardwareBuffer_lock; only " - " AHARDWAREBUFFER_USAGE0_CPU_* flags are allowed"); + " AHARDWAREBUFFER_USAGE_CPU_* flags are allowed"); return BAD_VALUE; } - uint64_t producerUsage = 0; - uint64_t consumerUsage = 0; - AHardwareBuffer_convertToGrallocUsageBits(&producerUsage, &consumerUsage, usage0, 0); + usage = AHardwareBuffer_convertToGrallocUsageBits(usage); GraphicBuffer* gBuffer = AHardwareBuffer_to_GraphicBuffer(buffer); Rect bounds; if (!rect) { @@ -133,8 +126,7 @@ int AHardwareBuffer_lock(AHardwareBuffer* buffer, uint64_t usage0, } else { bounds.set(Rect(rect->left, rect->top, rect->right, rect->bottom)); } - return gBuffer->lockAsync(producerUsage, consumerUsage, bounds, - outVirtualAddress, fence); + return gBuffer->lockAsync(usage, usage, bounds, outVirtualAddress, fence); } int AHardwareBuffer_unlock(AHardwareBuffer* buffer, int32_t* fence) { @@ -287,68 +279,6 @@ struct UsageMaskMapping { uint64_t grallocMask; }; -static constexpr UsageMaskMapping kUsage0ProducerMapping[] = { - { AHARDWAREBUFFER_USAGE0_CPU_WRITE, GRALLOC1_PRODUCER_USAGE_CPU_WRITE }, - { AHARDWAREBUFFER_USAGE0_CPU_WRITE_OFTEN, GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN }, - { AHARDWAREBUFFER_USAGE0_GPU_COLOR_OUTPUT, GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET }, - { AHARDWAREBUFFER_USAGE0_PROTECTED_CONTENT, GRALLOC1_PRODUCER_USAGE_PROTECTED }, - { AHARDWAREBUFFER_USAGE0_SENSOR_DIRECT_DATA, GRALLOC1_PRODUCER_USAGE_SENSOR_DIRECT_DATA }, -}; - -static constexpr UsageMaskMapping kUsage1ProducerMapping[] = { - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_0, GRALLOC1_PRODUCER_USAGE_PRIVATE_0 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_1, GRALLOC1_PRODUCER_USAGE_PRIVATE_1 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_2, GRALLOC1_PRODUCER_USAGE_PRIVATE_2 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_3, GRALLOC1_PRODUCER_USAGE_PRIVATE_3 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_4, GRALLOC1_PRODUCER_USAGE_PRIVATE_4 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_5, GRALLOC1_PRODUCER_USAGE_PRIVATE_5 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_6, GRALLOC1_PRODUCER_USAGE_PRIVATE_6 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_7, GRALLOC1_PRODUCER_USAGE_PRIVATE_7 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_8, GRALLOC1_PRODUCER_USAGE_PRIVATE_8 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_9, GRALLOC1_PRODUCER_USAGE_PRIVATE_9 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_10, GRALLOC1_PRODUCER_USAGE_PRIVATE_10 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_11, GRALLOC1_PRODUCER_USAGE_PRIVATE_11 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_12, GRALLOC1_PRODUCER_USAGE_PRIVATE_12 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_13, GRALLOC1_PRODUCER_USAGE_PRIVATE_13 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_14, GRALLOC1_PRODUCER_USAGE_PRIVATE_14 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_15, GRALLOC1_PRODUCER_USAGE_PRIVATE_15 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_16, GRALLOC1_PRODUCER_USAGE_PRIVATE_16 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_17, GRALLOC1_PRODUCER_USAGE_PRIVATE_17 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_18, GRALLOC1_PRODUCER_USAGE_PRIVATE_18 }, - { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_19, GRALLOC1_PRODUCER_USAGE_PRIVATE_19 }, -}; - -static constexpr UsageMaskMapping kUsage0ConsumerMapping[] = { - { AHARDWAREBUFFER_USAGE0_CPU_READ, GRALLOC1_CONSUMER_USAGE_CPU_READ }, - { AHARDWAREBUFFER_USAGE0_CPU_READ_OFTEN, GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN }, - { AHARDWAREBUFFER_USAGE0_GPU_SAMPLED_IMAGE, GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE }, - { AHARDWAREBUFFER_USAGE0_GPU_DATA_BUFFER, GRALLOC1_CONSUMER_USAGE_GPU_DATA_BUFFER }, - { AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE, GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER }, -}; - -static constexpr UsageMaskMapping kUsage1ConsumerMapping[] = { - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_0, GRALLOC1_CONSUMER_USAGE_PRIVATE_0 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_1, GRALLOC1_CONSUMER_USAGE_PRIVATE_1 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_2, GRALLOC1_CONSUMER_USAGE_PRIVATE_2 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_3, GRALLOC1_CONSUMER_USAGE_PRIVATE_3 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_4, GRALLOC1_CONSUMER_USAGE_PRIVATE_4 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_5, GRALLOC1_CONSUMER_USAGE_PRIVATE_5 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_6, GRALLOC1_CONSUMER_USAGE_PRIVATE_6 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_7, GRALLOC1_CONSUMER_USAGE_PRIVATE_7 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_8, GRALLOC1_CONSUMER_USAGE_PRIVATE_8 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_9, GRALLOC1_CONSUMER_USAGE_PRIVATE_9 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_10, GRALLOC1_CONSUMER_USAGE_PRIVATE_10 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_11, GRALLOC1_CONSUMER_USAGE_PRIVATE_11 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_12, GRALLOC1_CONSUMER_USAGE_PRIVATE_12 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_13, GRALLOC1_CONSUMER_USAGE_PRIVATE_13 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_14, GRALLOC1_CONSUMER_USAGE_PRIVATE_14 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_15, GRALLOC1_CONSUMER_USAGE_PRIVATE_15 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_16, GRALLOC1_CONSUMER_USAGE_PRIVATE_16 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_17, GRALLOC1_CONSUMER_USAGE_PRIVATE_17 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_18, GRALLOC1_CONSUMER_USAGE_PRIVATE_18 }, - { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_19, GRALLOC1_CONSUMER_USAGE_PRIVATE_19 }, -}; - static inline bool containsBits(uint64_t mask, uint64_t bitsToCheck) { return (mask & bitsToCheck) == bitsToCheck && bitsToCheck; } @@ -381,56 +311,37 @@ uint32_t AHardwareBuffer_convertToPixelFormat(uint32_t format) { } } -void AHardwareBuffer_convertToGrallocUsageBits(uint64_t* outProducerUsage, - uint64_t* outConsumerUsage, uint64_t usage0, uint64_t usage1) { - *outProducerUsage = 0; - *outConsumerUsage = 0; - for (const UsageMaskMapping& mapping : kUsage0ProducerMapping) { - if (containsBits(usage0, mapping.hardwareBufferMask)) { - *outProducerUsage |= mapping.grallocMask; - } - } - for (const UsageMaskMapping& mapping : kUsage1ProducerMapping) { - if (containsBits(usage1, mapping.hardwareBufferMask)) { - *outProducerUsage |= mapping.grallocMask; - } - } - for (const UsageMaskMapping& mapping : kUsage0ConsumerMapping) { - if (containsBits(usage0, mapping.hardwareBufferMask)) { - *outConsumerUsage |= mapping.grallocMask; - } - } - for (const UsageMaskMapping& mapping : kUsage1ConsumerMapping) { - if (containsBits(usage1, mapping.hardwareBufferMask)) { - *outConsumerUsage |= mapping.grallocMask; - } - } +uint64_t AHardwareBuffer_convertToGrallocUsageBits(uint64_t usage) { + using android::hardware::graphics::common::V1_0::BufferUsage; + static_assert(AHARDWAREBUFFER_USAGE_CPU_READ_NEVER == (uint64_t)BufferUsage::CPU_READ_NEVER, + "gralloc and AHardwareBuffer flags don't match"); + static_assert(AHARDWAREBUFFER_USAGE_CPU_READ_RARELY == (uint64_t)BufferUsage::CPU_READ_RARELY, + "gralloc and AHardwareBuffer flags don't match"); + static_assert(AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN == (uint64_t)BufferUsage::CPU_READ_OFTEN, + "gralloc and AHardwareBuffer flags don't match"); + static_assert(AHARDWAREBUFFER_USAGE_CPU_WRITE_NEVER == (uint64_t)BufferUsage::CPU_WRITE_NEVER, + "gralloc and AHardwareBuffer flags don't match"); + static_assert(AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY == (uint64_t)BufferUsage::CPU_WRITE_RARELY, + "gralloc and AHardwareBuffer flags don't match"); + static_assert(AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN == (uint64_t)BufferUsage::CPU_WRITE_OFTEN, + "gralloc and AHardwareBuffer flags don't match"); + static_assert(AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE == (uint64_t)BufferUsage::GPU_TEXTURE, + "gralloc and AHardwareBuffer flags don't match"); + static_assert(AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT == (uint64_t)BufferUsage::GPU_RENDER_TARGET, + "gralloc and AHardwareBuffer flags don't match"); + static_assert(AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT == (uint64_t)BufferUsage::PROTECTED, + "gralloc and AHardwareBuffer flags don't match"); + static_assert(AHARDWAREBUFFER_USAGE_VIDEO_ENCODE == (uint64_t)BufferUsage::VIDEO_ENCODER, + "gralloc and AHardwareBuffer flags don't match"); + static_assert(AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER == (uint64_t)BufferUsage::GPU_DATA_BUFFER, + "gralloc and AHardwareBuffer flags don't match"); + static_assert(AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA == (uint64_t)BufferUsage::SENSOR_DIRECT_DATA, + "gralloc and AHardwareBuffer flags don't match"); + return usage; } -void AHardwareBuffer_convertFromGrallocUsageBits(uint64_t* outUsage0, uint64_t* outUsage1, - uint64_t producerUsage, uint64_t consumerUsage) { - *outUsage0 = 0; - *outUsage1 = 0; - for (const UsageMaskMapping& mapping : kUsage0ProducerMapping) { - if (containsBits(producerUsage, mapping.grallocMask)) { - *outUsage0 |= mapping.hardwareBufferMask; - } - } - for (const UsageMaskMapping& mapping : kUsage1ProducerMapping) { - if (containsBits(producerUsage, mapping.grallocMask)) { - *outUsage1 |= mapping.hardwareBufferMask; - } - } - for (const UsageMaskMapping& mapping : kUsage0ConsumerMapping) { - if (containsBits(consumerUsage, mapping.grallocMask)) { - *outUsage0 |= mapping.hardwareBufferMask; - } - } - for (const UsageMaskMapping& mapping : kUsage1ConsumerMapping) { - if (containsBits(consumerUsage, mapping.grallocMask)) { - *outUsage1 |= mapping.hardwareBufferMask; - } - } +uint64_t AHardwareBuffer_convertFromGrallocUsageBits(uint64_t usage) { + return usage; } const GraphicBuffer* AHardwareBuffer_to_GraphicBuffer(const AHardwareBuffer* buffer) { diff --git a/libs/nativewindow/ANativeWindow.cpp b/libs/nativewindow/ANativeWindow.cpp index 6c67cf8dc6..f64bab13f0 100644 --- a/libs/nativewindow/ANativeWindow.cpp +++ b/libs/nativewindow/ANativeWindow.cpp @@ -191,10 +191,9 @@ int ANativeWindow_cancelBuffer(ANativeWindow* window, ANativeWindowBuffer* buffe return window->cancelBuffer(window, buffer, fenceFd); } -int ANativeWindow_setUsage(ANativeWindow* window, uint64_t usage0, uint64_t usage1) { - uint64_t pUsage, cUsage; - AHardwareBuffer_convertToGrallocUsageBits(&pUsage, &cUsage, usage0, usage1); - return native_window_set_usage(window, android_convertGralloc1To0Usage(pUsage, cUsage)); +int ANativeWindow_setUsage(ANativeWindow* window, uint64_t usage) { + usage = AHardwareBuffer_convertToGrallocUsageBits(usage); + return native_window_set_usage(window, (uint32_t)usage); // FIXME: we need a 64-bits version } int ANativeWindow_setBufferCount(ANativeWindow* window, size_t bufferCount) { diff --git a/libs/nativewindow/Android.bp b/libs/nativewindow/Android.bp index 6c8221d1de..d759acbbc1 100644 --- a/libs/nativewindow/Android.bp +++ b/libs/nativewindow/Android.bp @@ -49,6 +49,7 @@ cc_library { "liblog", "libutils", "libui", + "android.hardware.graphics.common@1.0", ], static_libs: [ diff --git a/libs/nativewindow/include/android/hardware_buffer.h b/libs/nativewindow/include/android/hardware_buffer.h index f5657ffe29..e1d54e68c6 100644 --- a/libs/nativewindow/include/android/hardware_buffer.h +++ b/libs/nativewindow/include/android/hardware_buffer.h @@ -83,70 +83,57 @@ enum { }; enum { + /* The buffer will never be read by the CPU */ + AHARDWAREBUFFER_USAGE_CPU_READ_NEVER = 0UL, /* The buffer will sometimes be read by the CPU */ - AHARDWAREBUFFER_USAGE0_CPU_READ = 1ULL << 1, - /* The buffer will often be read by the CPU*/ - AHARDWAREBUFFER_USAGE0_CPU_READ_OFTEN = 1ULL << 2 | AHARDWAREBUFFER_USAGE0_CPU_READ, + AHARDWAREBUFFER_USAGE_CPU_READ_RARELY = 2UL, + /* The buffer will often be read by the CPU */ + AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN = 3UL, + /* CPU read value mask */ + AHARDWAREBUFFER_USAGE_CPU_READ_MASK = 0xFUL, + + /* The buffer will never be written by the CPU */ + AHARDWAREBUFFER_USAGE_CPU_WRITE_NEVER = 0UL << 4, /* The buffer will sometimes be written to by the CPU */ - AHARDWAREBUFFER_USAGE0_CPU_WRITE = 1ULL << 5, + AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY = 2UL << 4, /* The buffer will often be written to by the CPU */ - AHARDWAREBUFFER_USAGE0_CPU_WRITE_OFTEN = 1ULL << 6 | AHARDWAREBUFFER_USAGE0_CPU_WRITE, + AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN = 3UL << 4, + /* CPU write value mask */ + AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK = 0xFUL << 4, + /* The buffer will be read from by the GPU */ - AHARDWAREBUFFER_USAGE0_GPU_SAMPLED_IMAGE = 1ULL << 10, + AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE = 1UL << 8, /* The buffer will be written to by the GPU */ - AHARDWAREBUFFER_USAGE0_GPU_COLOR_OUTPUT = 1ULL << 11, - /* The buffer will be used as a shader storage or uniform buffer object*/ - AHARDWAREBUFFER_USAGE0_GPU_DATA_BUFFER = 1ULL << 14, + AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT = 1UL << 9, /* The buffer must not be used outside of a protected hardware path */ - AHARDWAREBUFFER_USAGE0_PROTECTED_CONTENT = 1ULL << 18, - /** The buffer will be used for sensor direct data */ - AHARDWAREBUFFER_USAGE0_SENSOR_DIRECT_DATA = 1ULL << 29, + AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT = 1UL << 14, /* The buffer will be read by a hardware video encoder */ - AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE = 1ULL << 21, -}; - -/* These flags are intended only for use by device-specific graphics drivers. */ -enum { - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_19 = 1ULL << 24, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_19 = 1ULL << 25, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_18 = 1ULL << 26, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_18 = 1ULL << 27, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_17 = 1ULL << 28, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_17 = 1ULL << 29, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_16 = 1ULL << 30, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_16 = 1ULL << 31, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_15 = 1ULL << 32, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_15 = 1ULL << 33, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_14 = 1ULL << 34, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_14 = 1ULL << 35, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_13 = 1ULL << 36, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_13 = 1ULL << 37, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_12 = 1ULL << 38, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_12 = 1ULL << 39, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_11 = 1ULL << 40, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_11 = 1ULL << 41, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_10 = 1ULL << 42, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_10 = 1ULL << 43, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_9 = 1ULL << 44, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_9 = 1ULL << 45, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_8 = 1ULL << 46, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_8 = 1ULL << 47, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_7 = 1ULL << 48, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_7 = 1ULL << 49, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_6 = 1ULL << 50, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_6 = 1ULL << 51, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_5 = 1ULL << 52, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_5 = 1ULL << 53, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_4 = 1ULL << 54, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_4 = 1ULL << 55, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_3 = 1ULL << 56, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_3 = 1ULL << 57, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_2 = 1ULL << 58, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_2 = 1ULL << 59, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_1 = 1ULL << 60, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_1 = 1ULL << 61, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_0 = 1ULL << 62, - AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_0 = 1ULL << 63, + AHARDWAREBUFFER_USAGE_VIDEO_ENCODE = 1UL << 16, + /** The buffer will be used for sensor direct data */ + AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA = 1UL << 23, + /* The buffer will be used as a shader storage or uniform buffer object*/ + AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER = 1UL << 24, + + AHARDWAREBUFFER_USAGE_VENDOR_0 = 1ULL << 28, + AHARDWAREBUFFER_USAGE_VENDOR_1 = 1ULL << 29, + AHARDWAREBUFFER_USAGE_VENDOR_2 = 1ULL << 30, + AHARDWAREBUFFER_USAGE_VENDOR_3 = 1ULL << 31, + AHARDWAREBUFFER_USAGE_VENDOR_4 = 1ULL << 48, + AHARDWAREBUFFER_USAGE_VENDOR_5 = 1ULL << 49, + AHARDWAREBUFFER_USAGE_VENDOR_6 = 1ULL << 50, + AHARDWAREBUFFER_USAGE_VENDOR_7 = 1ULL << 51, + AHARDWAREBUFFER_USAGE_VENDOR_8 = 1ULL << 52, + AHARDWAREBUFFER_USAGE_VENDOR_9 = 1ULL << 53, + AHARDWAREBUFFER_USAGE_VENDOR_10 = 1ULL << 54, + AHARDWAREBUFFER_USAGE_VENDOR_11 = 1ULL << 55, + AHARDWAREBUFFER_USAGE_VENDOR_12 = 1ULL << 56, + AHARDWAREBUFFER_USAGE_VENDOR_13 = 1ULL << 57, + AHARDWAREBUFFER_USAGE_VENDOR_14 = 1ULL << 58, + AHARDWAREBUFFER_USAGE_VENDOR_15 = 1ULL << 59, + AHARDWAREBUFFER_USAGE_VENDOR_16 = 1ULL << 60, + AHARDWAREBUFFER_USAGE_VENDOR_17 = 1ULL << 61, + AHARDWAREBUFFER_USAGE_VENDOR_18 = 1ULL << 62, + AHARDWAREBUFFER_USAGE_VENDOR_19 = 1ULL << 63, }; typedef struct AHardwareBuffer_Desc { @@ -154,8 +141,8 @@ typedef struct AHardwareBuffer_Desc { uint32_t height; uint32_t layers; uint32_t format; // One of AHARDWAREBUFFER_FORMAT_* - uint64_t usage0; // Combination of AHARDWAREBUFFER_USAGE0_* - uint64_t usage1; // Initialize to zero, reserved for future use + uint64_t usage; // Combination of AHARDWAREBUFFER_USAGE_* + uint64_t reserved; // Initialize to zero, reserved for future use } AHardwareBuffer_Desc; typedef struct AHardwareBuffer AHardwareBuffer; @@ -203,7 +190,7 @@ void AHardwareBuffer_describe(const AHardwareBuffer* buffer, * The content of the buffer outside of the specified rect is NOT modified * by this call. * - * The buffer usage may only specify AHARDWAREBUFFER_USAGE0_CPU_*. If set, then + * The buffer usage may only specify AHARDWAREBUFFER_USAGE_CPU_*. If set, then * outVirtualAddress is filled with the address of the buffer in virtual memory, * otherwise this function will fail. * @@ -217,11 +204,11 @@ void AHardwareBuffer_describe(const AHardwareBuffer* buffer, * may return an error or leave the buffer's content into an indeterminate * state. * - * Returns NO_ERROR on success, BAD_VALUE if the buffer is NULL or if the usage0 - * flags are not a combination of AHARDWAREBUFFER_USAGE0_CPU_*, or an error + * Returns NO_ERROR on success, BAD_VALUE if the buffer is NULL or if the usage + * flags are not a combination of AHARDWAREBUFFER_USAGE_CPU_*, or an error * number of the lock fails for any reason. */ -int AHardwareBuffer_lock(AHardwareBuffer* buffer, uint64_t usage0, +int AHardwareBuffer_lock(AHardwareBuffer* buffer, uint64_t usage, int32_t fence, const ARect* rect, void** outVirtualAddress); /* diff --git a/libs/nativewindow/include/private/android/AHardwareBufferHelpers.h b/libs/nativewindow/include/private/android/AHardwareBufferHelpers.h index ee5da84ec5..ed6b1695ae 100644 --- a/libs/nativewindow/include/private/android/AHardwareBufferHelpers.h +++ b/libs/nativewindow/include/private/android/AHardwareBufferHelpers.h @@ -33,14 +33,9 @@ struct ANativeWindowBuffer; namespace android { uint32_t AHardwareBuffer_convertFromPixelFormat(uint32_t format); - uint32_t AHardwareBuffer_convertToPixelFormat(uint32_t format); - -void AHardwareBuffer_convertToGrallocUsageBits(uint64_t* outProducerUsage, - uint64_t* outConsumerUsage, uint64_t usage0, uint64_t usage1); - -void AHardwareBuffer_convertFromGrallocUsageBits(uint64_t* outUsage0, uint64_t* outUsage1, - uint64_t producerUsage, uint64_t consumerUsage); +uint64_t AHardwareBuffer_convertToGrallocUsageBits(uint64_t usage); +uint64_t AHardwareBuffer_convertFromGrallocUsageBits(uint64_t usage); class GraphicBuffer; const GraphicBuffer* AHardwareBuffer_to_GraphicBuffer(const AHardwareBuffer* buffer); diff --git a/libs/nativewindow/include/vndk/window.h b/libs/nativewindow/include/vndk/window.h index 067046b8d3..95618c472d 100644 --- a/libs/nativewindow/include/vndk/window.h +++ b/libs/nativewindow/include/vndk/window.h @@ -325,17 +325,16 @@ int ANativeWindow_cancelBuffer(ANativeWindow* window, ANativeWindowBuffer* buffe /* * Sets the intended usage flags for the next buffers. * - * usage: one of AHARDWAREBUFFER_USAGE0_* constant - * privateUsage: one of AHARDWAREBUFFER_USAGE1_*_PRIVATE_* constant + * usage: one of AHARDWAREBUFFER_USAGE_* constant * * By default (if this function is never called), a usage of - * AHARDWAREBUFFER_USAGE0_GPU_SAMPLED_IMAGE | AHARDWAREBUFFER_USAGE0_GPU_COLOR_OUTPUT + * AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE | AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT * is assumed. * * Calling this function will usually cause following buffers to be * reallocated. */ -int ANativeWindow_setUsage(ANativeWindow* window, uint64_t usage0, uint64_t usage1); +int ANativeWindow_setUsage(ANativeWindow* window, uint64_t usage); /* diff --git a/libs/nativewindow/tests/AHardwareBufferTest.cpp b/libs/nativewindow/tests/AHardwareBufferTest.cpp index 10990432c6..cc2731d908 100644 --- a/libs/nativewindow/tests/AHardwareBufferTest.cpp +++ b/libs/nativewindow/tests/AHardwareBufferTest.cpp @@ -19,11 +19,12 @@ #include <android/hardware_buffer.h> #include <private/android/AHardwareBufferHelpers.h> -#include <hardware/gralloc1.h> +#include <android/hardware/graphics/common/1.0/types.h> #include <gtest/gtest.h> using namespace android; +using android::hardware::graphics::common::V1_0::BufferUsage; static ::testing::AssertionResult BuildHexFailureMessage(uint64_t expected, uint64_t actual, const char* type) { @@ -35,28 +36,14 @@ static ::testing::AssertionResult BuildHexFailureMessage(uint64_t expected, } static ::testing::AssertionResult TestUsageConversion( - uint64_t grallocProducerUsage, uint64_t grallocConsumerUsage, - uint64_t hardwareBufferUsage0, uint64_t hardwareBufferUsage1) { - uint64_t producerUsage = 0; - uint64_t consumerUsage = 0; - uint64_t usage0 = 0; - uint64_t usage1 = 0; + uint64_t grallocUsage, uint64_t hardwareBufferUsage) { + uint64_t convertedGrallocUsage = AHardwareBuffer_convertToGrallocUsageBits(hardwareBufferUsage); + if (convertedGrallocUsage != grallocUsage) + return BuildHexFailureMessage(grallocUsage, convertedGrallocUsage, "converToGralloc"); - AHardwareBuffer_convertToGrallocUsageBits( - &producerUsage, &consumerUsage, hardwareBufferUsage0, hardwareBufferUsage1); - if (producerUsage != grallocProducerUsage) - return BuildHexFailureMessage(grallocProducerUsage, producerUsage, - "producer"); - if (consumerUsage != grallocConsumerUsage) - return BuildHexFailureMessage(grallocConsumerUsage, consumerUsage, - "consumer"); - - AHardwareBuffer_convertFromGrallocUsageBits( - &usage0, &usage1, grallocProducerUsage, grallocConsumerUsage); - if (usage0 != hardwareBufferUsage0) - return BuildHexFailureMessage(hardwareBufferUsage0, usage0, "usage0"); - if (usage1 != hardwareBufferUsage1) - return BuildHexFailureMessage(hardwareBufferUsage1, usage1, "usage1"); + uint64_t convertedHArdwareBufferUsage = AHardwareBuffer_convertFromGrallocUsageBits(grallocUsage); + if (convertedHArdwareBufferUsage != grallocUsage) + return BuildHexFailureMessage(grallocUsage, convertedHArdwareBufferUsage, "convertFromGralloc"); return testing::AssertionSuccess(); } @@ -64,123 +51,58 @@ static ::testing::AssertionResult TestUsageConversion( // This is a unit test rather than going through AHardwareBuffer because not // all flags may be supported by the host device. TEST(AHardwareBufferTest, ConvertToAndFromGrallocBits) { - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_CPU_READ, - AHARDWAREBUFFER_USAGE0_CPU_READ, 0)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN, - AHARDWAREBUFFER_USAGE0_CPU_READ_OFTEN, 0)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_CPU_WRITE, 0, - AHARDWAREBUFFER_USAGE0_CPU_WRITE, 0)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN, 0, - AHARDWAREBUFFER_USAGE0_CPU_WRITE_OFTEN, 0)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE, - AHARDWAREBUFFER_USAGE0_GPU_SAMPLED_IMAGE, 0)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET, - 0, AHARDWAREBUFFER_USAGE0_GPU_COLOR_OUTPUT, 0)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_GPU_DATA_BUFFER, - AHARDWAREBUFFER_USAGE0_GPU_DATA_BUFFER, 0)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PROTECTED, 0, - AHARDWAREBUFFER_USAGE0_PROTECTED_CONTENT, 0)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_SENSOR_DIRECT_DATA, - 0, AHARDWAREBUFFER_USAGE0_SENSOR_DIRECT_DATA, 0)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER, - AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE, 0)); + EXPECT_TRUE(TestUsageConversion((uint64_t)BufferUsage::CPU_READ_RARELY, + AHARDWAREBUFFER_USAGE_CPU_READ_RARELY)); + EXPECT_TRUE(TestUsageConversion((uint64_t)BufferUsage::CPU_READ_OFTEN, + AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN)); + EXPECT_TRUE(TestUsageConversion((uint64_t)BufferUsage::CPU_WRITE_RARELY, + AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY)); + EXPECT_TRUE(TestUsageConversion((uint64_t)BufferUsage::CPU_WRITE_OFTEN, + AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN)); + + EXPECT_TRUE(TestUsageConversion((uint64_t)BufferUsage::GPU_TEXTURE, + AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE)); + EXPECT_TRUE(TestUsageConversion((uint64_t)BufferUsage::GPU_RENDER_TARGET, + AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT)); + EXPECT_TRUE(TestUsageConversion((uint64_t)BufferUsage::GPU_DATA_BUFFER, + AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER)); + EXPECT_TRUE(TestUsageConversion((uint64_t)BufferUsage::PROTECTED, + AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT)); + EXPECT_TRUE(TestUsageConversion((uint64_t)BufferUsage::SENSOR_DIRECT_DATA, + AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA)); + EXPECT_TRUE(TestUsageConversion((uint64_t)BufferUsage::VIDEO_ENCODER, + AHARDWAREBUFFER_USAGE_VIDEO_ENCODE)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_0, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_0)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_1, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_1)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_2, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_2)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_3, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_3)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_4, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_4)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_5, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_5)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_6, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_6)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_7, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_7)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_8, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_8)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_9, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_9)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_10, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_10)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_11, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_11)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_12, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_12)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_13, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_13)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_14, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_14)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_15, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_15)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_16, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_16)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_17, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_17)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_18, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_18)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_PRIVATE_19, 0, - 0, AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_19)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_0, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_0)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_1, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_1)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_2, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_2)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_3, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_3)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_4, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_4)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_5, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_5)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_6, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_6)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_7, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_7)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_8, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_8)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_9, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_9)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_10, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_10)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_11, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_11)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_12, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_12)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_13, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_13)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_14, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_14)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_15, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_15)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_16, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_16)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_17, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_17)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_18, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_18)); - EXPECT_TRUE(TestUsageConversion(0, GRALLOC1_CONSUMER_USAGE_PRIVATE_19, - 0, AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_19)); + EXPECT_TRUE(TestUsageConversion(1ull<<28, AHARDWAREBUFFER_USAGE_VENDOR_0)); + EXPECT_TRUE(TestUsageConversion(1ull<<29, AHARDWAREBUFFER_USAGE_VENDOR_1)); + EXPECT_TRUE(TestUsageConversion(1ull<<30, AHARDWAREBUFFER_USAGE_VENDOR_2)); + EXPECT_TRUE(TestUsageConversion(1ull<<31, AHARDWAREBUFFER_USAGE_VENDOR_3)); + EXPECT_TRUE(TestUsageConversion(1ull<<48, AHARDWAREBUFFER_USAGE_VENDOR_4)); + EXPECT_TRUE(TestUsageConversion(1ull<<49, AHARDWAREBUFFER_USAGE_VENDOR_5)); + EXPECT_TRUE(TestUsageConversion(1ull<<50, AHARDWAREBUFFER_USAGE_VENDOR_6)); + EXPECT_TRUE(TestUsageConversion(1ull<<51, AHARDWAREBUFFER_USAGE_VENDOR_7)); + EXPECT_TRUE(TestUsageConversion(1ull<<52, AHARDWAREBUFFER_USAGE_VENDOR_8)); + EXPECT_TRUE(TestUsageConversion(1ull<<53, AHARDWAREBUFFER_USAGE_VENDOR_9)); + EXPECT_TRUE(TestUsageConversion(1ull<<54, AHARDWAREBUFFER_USAGE_VENDOR_10)); + EXPECT_TRUE(TestUsageConversion(1ull<<55, AHARDWAREBUFFER_USAGE_VENDOR_11)); + EXPECT_TRUE(TestUsageConversion(1ull<<56, AHARDWAREBUFFER_USAGE_VENDOR_12)); + EXPECT_TRUE(TestUsageConversion(1ull<<57, AHARDWAREBUFFER_USAGE_VENDOR_13)); + EXPECT_TRUE(TestUsageConversion(1ull<<58, AHARDWAREBUFFER_USAGE_VENDOR_14)); + EXPECT_TRUE(TestUsageConversion(1ull<<59, AHARDWAREBUFFER_USAGE_VENDOR_15)); + EXPECT_TRUE(TestUsageConversion(1ull<<60, AHARDWAREBUFFER_USAGE_VENDOR_16)); + EXPECT_TRUE(TestUsageConversion(1ull<<61, AHARDWAREBUFFER_USAGE_VENDOR_17)); + EXPECT_TRUE(TestUsageConversion(1ull<<62, AHARDWAREBUFFER_USAGE_VENDOR_18)); + EXPECT_TRUE(TestUsageConversion(1ull<<63, AHARDWAREBUFFER_USAGE_VENDOR_19)); // Test some more complex flag combinations. - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_CPU_WRITE, - GRALLOC1_CONSUMER_USAGE_CPU_READ, - AHARDWAREBUFFER_USAGE0_CPU_READ | AHARDWAREBUFFER_USAGE0_CPU_WRITE, - 0)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN, 0, - AHARDWAREBUFFER_USAGE0_CPU_WRITE_OFTEN, 0)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET, - GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE | - GRALLOC1_CONSUMER_USAGE_PRIVATE_17, - AHARDWAREBUFFER_USAGE0_GPU_COLOR_OUTPUT | - AHARDWAREBUFFER_USAGE0_GPU_SAMPLED_IMAGE, - AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_17)); - EXPECT_TRUE(TestUsageConversion(GRALLOC1_PRODUCER_USAGE_SENSOR_DIRECT_DATA, - GRALLOC1_CONSUMER_USAGE_GPU_DATA_BUFFER, - AHARDWAREBUFFER_USAGE0_GPU_DATA_BUFFER | - AHARDWAREBUFFER_USAGE0_SENSOR_DIRECT_DATA, 0)); + EXPECT_TRUE(TestUsageConversion( + (uint64_t)BufferUsage::CPU_READ_RARELY | + (uint64_t)BufferUsage::CPU_WRITE_RARELY, + AHARDWAREBUFFER_USAGE_CPU_READ_RARELY | AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY)); + +EXPECT_TRUE(TestUsageConversion( + (uint64_t)BufferUsage::GPU_RENDER_TARGET | (uint64_t)BufferUsage::GPU_TEXTURE | + 1ull << 29 | 1ull << 57, + AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT | AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE | + AHARDWAREBUFFER_USAGE_VENDOR_1 | AHARDWAREBUFFER_USAGE_VENDOR_13)); } diff --git a/libs/nativewindow/tests/Android.bp b/libs/nativewindow/tests/Android.bp index 6d78770e5f..b89c35ac64 100644 --- a/libs/nativewindow/tests/Android.bp +++ b/libs/nativewindow/tests/Android.bp @@ -16,7 +16,10 @@ cc_test { name: "AHardwareBufferTest", - shared_libs: ["libnativewindow"], + shared_libs: [ + "libnativewindow", + "android.hardware.graphics.common@1.0", + ], srcs: [ "AHardwareBufferTest.cpp", "c_compatibility.c"], diff --git a/libs/vr/libdvr/Android.mk b/libs/vr/libdvr/Android.mk index 105028385a..aa4513e133 100644 --- a/libs/vr/libdvr/Android.mk +++ b/libs/vr/libdvr/Android.mk @@ -45,6 +45,7 @@ LOCAL_STATIC_LIBRARIES := \ libvirtualtouchpadclient \ libvr_hwc-impl \ libvr_hwc-binder \ + libgrallocusage \ LOCAL_SHARED_LIBRARIES := \ android.hardware.graphics.bufferqueue@1.0 \ diff --git a/libs/vr/libdvr/display_manager_client.cpp b/libs/vr/libdvr/display_manager_client.cpp index 64c7f16cc3..e469e3e91a 100644 --- a/libs/vr/libdvr/display_manager_client.cpp +++ b/libs/vr/libdvr/display_manager_client.cpp @@ -1,6 +1,7 @@ #include "include/dvr/display_manager_client.h" #include <dvr/dvr_buffer.h> +#include <grallocusage/GrallocUsageConversion.h> #include <private/android/AHardwareBufferHelpers.h> #include <private/dvr/buffer_hub_client.h> #include <private/dvr/display_manager_client_impl.h> @@ -45,11 +46,22 @@ void dvrDisplayManagerClientDestroy(DvrDisplayManagerClient* client) { DvrBuffer* dvrDisplayManagerSetupNamedBuffer(DvrDisplayManagerClient* client, const char* name, size_t size, - uint64_t usage0, uint64_t usage1) { + uint64_t hardware_buffer_usage, + uint64_t unused) { uint64_t producer_usage = 0; uint64_t consumer_usage = 0; - android::AHardwareBuffer_convertToGrallocUsageBits( - &producer_usage, &consumer_usage, usage0, usage1); + + // Note: AHardwareBuffer no longer uses usage0/usage1 + uint64_t gralloc_usage = + android::AHardwareBuffer_convertToGrallocUsageBits(hardware_buffer_usage); + + // Note: split producer/consumer usage is deprecated, grallocV2 uses single + // 64-bits usage + // And, currently, 64-bits gralloc usage flags can safely be truncated to + // 32-bits + android_convertGralloc0To1Usage((uint32_t)gralloc_usage, &producer_usage, + &consumer_usage); + auto ion_buffer = client->client->SetupNamedBuffer(name, size, producer_usage, consumer_usage); if (ion_buffer) { diff --git a/libs/vr/libdvr/tests/dvr_named_buffer-test.cpp b/libs/vr/libdvr/tests/dvr_named_buffer-test.cpp index 2866f477db..caf20a5164 100644 --- a/libs/vr/libdvr/tests/dvr_named_buffer-test.cpp +++ b/libs/vr/libdvr/tests/dvr_named_buffer-test.cpp @@ -57,14 +57,12 @@ TEST_F(DvrNamedBufferTest, TestNamedBuffersSameName) { ASSERT_EQ(desc1.height, 1u); ASSERT_EQ(desc1.layers, 1u); ASSERT_EQ(desc1.format, HAL_PIXEL_FORMAT_BLOB); - ASSERT_EQ(desc1.usage0, 0u); - ASSERT_EQ(desc1.usage1, 0u); + ASSERT_EQ(desc1.usage, 0u); ASSERT_EQ(desc2.width, 10u); ASSERT_EQ(desc2.height, 1u); ASSERT_EQ(desc2.layers, 1u); ASSERT_EQ(desc2.format, HAL_PIXEL_FORMAT_BLOB); - ASSERT_EQ(desc2.usage0, 0u); - ASSERT_EQ(desc2.usage1, 0u); + ASSERT_EQ(desc2.usage, 0u); dvrBufferDestroy(buffer1); dvrBufferDestroy(buffer2); @@ -85,8 +83,7 @@ TEST_F(DvrNamedBufferTest, TestNamedBuffersSameName) { ASSERT_EQ(desc3.height, 1u); ASSERT_EQ(desc3.layers, 1u); ASSERT_EQ(desc3.format, HAL_PIXEL_FORMAT_BLOB); - ASSERT_EQ(desc3.usage0, 0u); - ASSERT_EQ(desc3.usage1, 0u); + ASSERT_EQ(desc3.usage, 0u); dvrBufferDestroy(buffer3); @@ -124,15 +121,15 @@ TEST_F(DvrNamedBufferTest, TestMultipleNamedBuffers) { TEST_F(DvrNamedBufferTest, TestNamedBufferUsage) { const char* buffer_name = "buffer_usage"; - // Set usage0 to AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE. We use this because - // internally AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE is converted to + // Set usage to AHARDWAREBUFFER_USAGE_VIDEO_ENCODE. We use this because + // internally AHARDWAREBUFFER_USAGE_VIDEO_ENCODE is converted to // GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER, and these two values are different. // If all is good, when we get the AHardwareBuffer, it should be converted - // back to AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE. - const int64_t usage0 = AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE; + // back to AHARDWAREBUFFER_USAGE_VIDEO_ENCODE. + const int64_t usage = AHARDWAREBUFFER_USAGE_VIDEO_ENCODE; DvrBuffer* setup_buffer = - dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, usage0, 0); + dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, usage, 0); ASSERT_NE(nullptr, setup_buffer); AHardwareBuffer* hardware_buffer = nullptr; @@ -143,7 +140,7 @@ TEST_F(DvrNamedBufferTest, TestNamedBufferUsage) { AHardwareBuffer_Desc desc = {}; AHardwareBuffer_describe(hardware_buffer, &desc); - ASSERT_EQ(desc.usage0, AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE); + ASSERT_EQ(desc.usage, AHARDWAREBUFFER_USAGE_VIDEO_ENCODE); dvrBufferDestroy(setup_buffer); AHardwareBuffer_release(hardware_buffer); |