Plumb gralloc producer/consumer bits correctly
Bug: 33350696
Test: compile, boot device, cts
Change-Id: I2f078cf4bbdf0db49f2e914b051f55629fb37eb6
diff --git a/libs/nativewindow/AHardwareBuffer.cpp b/libs/nativewindow/AHardwareBuffer.cpp
index e2647be..4a8d3b6 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 @@
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 @@
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 @@
} 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 @@
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 @@
}
}
-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 6c67cf8..f64bab1 100644
--- a/libs/nativewindow/ANativeWindow.cpp
+++ b/libs/nativewindow/ANativeWindow.cpp
@@ -191,10 +191,9 @@
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 6c8221d..d759acb 100644
--- a/libs/nativewindow/Android.bp
+++ b/libs/nativewindow/Android.bp
@@ -49,6 +49,7 @@
"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 f5657ff..e1d54e6 100644
--- a/libs/nativewindow/include/android/hardware_buffer.h
+++ b/libs/nativewindow/include/android/hardware_buffer.h
@@ -83,70 +83,57 @@
};
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,
- /* The buffer will sometimes be written to by the CPU */
- AHARDWAREBUFFER_USAGE0_CPU_WRITE = 1ULL << 5,
- /* The buffer will often be written to by the CPU */
- AHARDWAREBUFFER_USAGE0_CPU_WRITE_OFTEN = 1ULL << 6 | AHARDWAREBUFFER_USAGE0_CPU_WRITE,
- /* The buffer will be read from by the GPU */
- AHARDWAREBUFFER_USAGE0_GPU_SAMPLED_IMAGE = 1ULL << 10,
- /* 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,
- /* 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,
- /* The buffer will be read by a hardware video encoder */
- AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE = 1ULL << 21,
-};
+ 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,
-/* 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,
+ /* 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_USAGE_CPU_WRITE_RARELY = 2UL << 4,
+ /* The buffer will often be written to by the CPU */
+ 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_USAGE_GPU_SAMPLED_IMAGE = 1UL << 8,
+ /* The buffer will be written to by the GPU */
+ AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT = 1UL << 9,
+ /* The buffer must not be used outside of a protected hardware path */
+ AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT = 1UL << 14,
+ /* The buffer will be read by a hardware video encoder */
+ 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 @@
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 @@
* 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 @@
* 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 ee5da84..ed6b169 100644
--- a/libs/nativewindow/include/private/android/AHardwareBufferHelpers.h
+++ b/libs/nativewindow/include/private/android/AHardwareBufferHelpers.h
@@ -33,14 +33,9 @@
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 067046b..95618c4 100644
--- a/libs/nativewindow/include/vndk/window.h
+++ b/libs/nativewindow/include/vndk/window.h
@@ -325,17 +325,16 @@
/*
* 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 1099043..cc2731d 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 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 @@
// 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(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((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(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 6d78770..b89c35a 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 1050283..aa4513e 100644
--- a/libs/vr/libdvr/Android.mk
+++ b/libs/vr/libdvr/Android.mk
@@ -45,6 +45,7 @@
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 64c7f16..e469e3e 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 @@
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 2866f47..caf20a5 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 @@
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 @@
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, 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 @@
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);