[vulkan] Add AHB support functions

bug: 122080810

This CL adds support functions for use with AHardwareBuffer
for getting buffer info and
acquiring/importing/creating buffers.

This is inspired by / based on Intel ANV
https://github.com/mesa3d/mesa/blob/master/src/intel/vulkan/anv_android.c

which has a similar layering between implementation-specific Vulkan
and AHardwareBuffer.

No new entry points are exposed yet.

Test: Builds

Change-Id: Ieb5bfcb8b65b87650cd4a2658668efac99f9105c
diff --git a/system/vulkan_enc/AndroidHardwareBuffer.h b/system/vulkan_enc/AndroidHardwareBuffer.h
new file mode 100644
index 0000000..fc6a27e
--- /dev/null
+++ b/system/vulkan_enc/AndroidHardwareBuffer.h
@@ -0,0 +1,52 @@
+/// Copyright (C) 2019 The Android Open Source Project
+// Copyright (C) 2019 Google Inc.
+//
+// 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.
+#pragma once
+
+#include "HostVisibleMemoryVirtualization.h"
+
+#include <vulkan/vulkan.h>
+#include <vndk/hardware_buffer.h>
+
+// Structure similar to
+// https://github.com/mesa3d/mesa/blob/master/src/intel/vulkan/anv_android.c
+
+namespace goldfish_vk {
+
+VkResult getAndroidHardwareBufferPropertiesANDROID(
+    const HostVisibleMemoryVirtualizationInfo* hostMemVirtInfo,
+    VkDevice device,
+    const AHardwareBuffer* buffer,
+    VkAndroidHardwareBufferPropertiesANDROID* pProperties);
+
+VkResult getMemoryAndroidHardwareBufferANDROID(
+    struct AHardwareBuffer **pBuffer);
+
+VkResult importAndroidHardwareBuffer(
+    const VkImportAndroidHardwareBufferInfoANDROID* info,
+    struct AHardwareBuffer **importOut);
+
+VkResult createAndroidHardwareBuffer(
+    bool hasDedicatedImage,
+    bool hasDedicatedBuffer,
+    const VkExtent3D& imageExtent,
+    uint32_t imageLayers,
+    VkFormat imageFormat,
+    VkImageUsageFlags imageUsage,
+    VkImageCreateFlags imageCreateFlags,
+    VkDeviceSize bufferSize,
+    VkDeviceSize allocationInfoAllocSize,
+    struct AHardwareBuffer **out);
+
+} // namespace goldfish_vk
\ No newline at end of file