summaryrefslogtreecommitdiff
path: root/gralloc4/src/core/mali_gralloc_bufferallocation.h
diff options
context:
space:
mode:
authorSeYeong Byeon <sy.byeon@samsung.com>2020-10-07 16:04:38 +0900
committerAnkit Goyal <layog@google.com>2020-12-21 15:55:15 +0800
commit0fddf7d4a323917438f2fa475e25e0f0fccf1336 (patch)
treeeecfd1a34c92e6b524e1d49a7a94dd4296774e35 /gralloc4/src/core/mali_gralloc_bufferallocation.h
parent0cfc5e0193d520252f2c7132b6fc5fec3247eaa2 (diff)
downloadgchips-0fddf7d4a323917438f2fa475e25e0f0fccf1336.tar.gz
gralloc4: initial code
Bug: 173320140 Test: Builds successfully with gralloc3 and gralloc4 Test: Device boots to home with gralloc3 No-Typo-Check: Typos in comments from upstream Signed-off-by: SeYeong Byeon <sy.byeon@samsung.com> Change-Id: I1df105fd0358a0d1ee9c0266acafc4f7192ebc92
Diffstat (limited to 'gralloc4/src/core/mali_gralloc_bufferallocation.h')
-rw-r--r--gralloc4/src/core/mali_gralloc_bufferallocation.h115
1 files changed, 115 insertions, 0 deletions
diff --git a/gralloc4/src/core/mali_gralloc_bufferallocation.h b/gralloc4/src/core/mali_gralloc_bufferallocation.h
new file mode 100644
index 0000000..bcc927f
--- /dev/null
+++ b/gralloc4/src/core/mali_gralloc_bufferallocation.h
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2016-2020 ARM Limited. All rights reserved.
+ *
+ * Copyright (C) 2008 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.
+ */
+#ifndef MALI_GRALLOC_BUFFERALLOCATION_H_
+#define MALI_GRALLOC_BUFFERALLOCATION_H_
+
+#include <hardware/hardware.h>
+#include "mali_gralloc_buffer.h"
+#include "core/mali_gralloc_bufferdescriptor.h"
+
+/* Compression scheme */
+enum class AllocBaseType
+{
+ /*
+ * No compression scheme
+ */
+ UNCOMPRESSED,
+
+ /*
+ * Arm Framebuffer Compression
+ */
+ AFBC, /* 16 x 16 block size */
+ AFBC_WIDEBLK, /* 32 x 8 block size */
+ AFBC_EXTRAWIDEBLK, /* 64 x 4 block size */
+
+};
+
+/*
+ * Allocation type.
+ *
+ * Allocation-specific properties of format modifiers
+ * described by MALI_GRALLOC_INTFMT_*.
+ */
+struct AllocType
+{
+ /*
+ * The compression scheme in use
+ *
+ * For AFBC formats, this describes:
+ * - the block size for single plane base formats, or
+ * - the block size of the first/luma plane for multi-plane base formats.
+ */
+ AllocBaseType primary_type{AllocBaseType::UNCOMPRESSED};
+
+ /*
+ * Multi-plane AFBC format. AFBC chroma-only plane(s) are
+ * always compressed with superblock type 'AFBC_EXTRAWIDEBLK'.
+ */
+ bool is_multi_plane{};
+
+ /*
+ * Allocate tiled AFBC headers.
+ */
+ bool is_tiled{};
+
+ /*
+ * Pad AFBC header stride to 64-byte alignment
+ * (multiple of 4x16B headers).
+ */
+ bool is_padded{};
+
+ /*
+ * Front-buffer rendering safe AFBC allocations include an
+ * additional 4kB-aligned body buffer.
+ */
+ bool is_frontbuffer_safe{};
+
+ bool is_afbc() const
+ {
+ switch (primary_type)
+ {
+ case AllocBaseType::AFBC:
+ case AllocBaseType::AFBC_WIDEBLK:
+ case AllocBaseType::AFBC_EXTRAWIDEBLK:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+};
+
+using alloc_type_t = AllocType;
+
+int mali_gralloc_derive_format_and_size(buffer_descriptor_t * const bufDescriptor);
+
+int mali_gralloc_buffer_allocate(const gralloc_buffer_descriptor_t *descriptors,
+ uint32_t numDescriptors, buffer_handle_t *pHandle, bool *shared_backend);
+
+int mali_gralloc_buffer_free(buffer_handle_t pHandle);
+
+void init_afbc(uint8_t *buf, uint64_t internal_format, const bool is_multi_plane, int w, int h);
+
+uint32_t lcm(uint32_t a, uint32_t b);
+
+bool get_alloc_type(const uint64_t format_ext,
+ const uint32_t format_idx,
+ const uint64_t usage,
+ alloc_type_t * const alloc_type);
+
+#endif /* MALI_GRALLOC_BUFFERALLOCATION_H_ */