UPSTREAM: cros_gralloc: Avoid using masks in handle_usage()

After https://crrev.com/c/5907583, handle_usage() tries to match
the entire value. An allocation with usage 0x100000203 from

  BufferUsage::GPU_RENDER_TARGET |
  BufferUsage::CPU_READ_OFTEN |
  BufferUsage::FRONT_BUFFER

would fail to match the combined BUFFER_USAGE_FRONT_RENDERING_MASK
(`1U << 28 | 1ULL << 32`) because the allocation only sets a
single usage bit `BUFFER_USAGE_FRONT_RENDERING` (`1ULL << 32`)
and not the combined mask.

Bug: b/373474508
Test: vts -m VtsHalGraphicsAllocatorAidl_TargetTest
Change-Id: I926789a7aab937f2c2092475cb40ad9666b4f95f
This commit is contained in:
Jason Macnak 2024-10-14 16:37:23 -07:00
parent 93d9ee4352
commit 3b405c8fdf
2 changed files with 8 additions and 3 deletions

View file

@ -139,7 +139,9 @@ uint64_t cros_gralloc_convert_usage(uint64_t usage)
handle_usage(&usage, BUFFER_USAGE_SENSOR_DIRECT_DATA, &use_flags,
BO_USE_SENSOR_DIRECT_DATA);
handle_usage(&usage, BUFFER_USAGE_GPU_DATA_BUFFER, &use_flags, BO_USE_GPU_DATA_BUFFER);
handle_usage(&usage, BUFFER_USAGE_FRONT_RENDERING_MASK, &use_flags, BO_USE_FRONT_RENDERING);
handle_usage(&usage, BUFFER_USAGE_FRONT_RENDERING, &use_flags, BO_USE_FRONT_RENDERING);
handle_usage(&usage, BUFFER_USAGE_FRONT_RENDERING_PRIVATE, &use_flags,
BO_USE_FRONT_RENDERING);
if (usage) {
ALOGE("Unhandled gralloc usage: %llx", (unsigned long long)usage);

View file

@ -21,10 +21,13 @@
// Reserve the GRALLOC_USAGE_PRIVATE_0 bit from hardware/gralloc.h for buffers
// used for front rendering. minigbm backend later decides to use
// BO_USE_FRONT_RENDERING or BO_USE_LINEAR upon buffer allocaton.
#define BUFFER_USAGE_FRONT_RENDERING (1U << 28)
#define BUFFER_USAGE_FRONT_RENDERING_PRIVATE (1U << 28)
// Adopt BufferUsage::FRONT_BUFFER from api level 33
#define BUFFER_USAGE_FRONT_RENDERING_MASK (BUFFER_USAGE_FRONT_RENDERING | (1ULL << 32))
#define BUFFER_USAGE_FRONT_RENDERING (1ULL << 32)
#define BUFFER_USAGE_FRONT_RENDERING_MASK \
(BUFFER_USAGE_FRONT_RENDERING | BUFFER_USAGE_FRONT_RENDERING_PRIVATE)
#define CROS_GRALLOC_BUFFER_METADATA_MAX_NAME_SIZE 1024