vulkan: make meson build work

Change-Id: I7865e5c398569efae43b7c2b2c6433d23fe1e9ca
diff --git a/system/vulkan/goldfish_vulkan.cpp b/system/vulkan/goldfish_vulkan.cpp
index 7817bd2..7e0b8f9 100644
--- a/system/vulkan/goldfish_vulkan.cpp
+++ b/system/vulkan/goldfish_vulkan.cpp
@@ -658,6 +658,7 @@
 
 static PFN_vkVoidFunction sQueueSignalReleaseImageAndroidImpl = 0;
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
 static VkResult
 QueueSignalReleaseImageANDROID(
     VkQueue queue,
@@ -670,6 +671,7 @@
     ((PFN_vkQueueSignalReleaseImageANDROID)sQueueSignalReleaseImageAndroidImpl)(queue, waitSemaphoreCount, pWaitSemaphores, image, pNativeFenceFd);
     return VK_SUCCESS;
 }
+#endif
 
 static PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* name) {
     AEMU_SCOPED_TRACE("goldfish_vulkan::GetDeviceProcAddr");
@@ -709,6 +711,7 @@
         return (PFN_vkVoidFunction)GetBufferCollectionPropertiesFUCHSIA;
     }
 #endif
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
     if (!strcmp(name, "vkQueueSignalReleaseImageANDROID")) {
         if (!sQueueSignalReleaseImageAndroidImpl) {
             sQueueSignalReleaseImageAndroidImpl =
@@ -717,6 +720,7 @@
         }
         return (PFN_vkVoidFunction)QueueSignalReleaseImageANDROID;
     }
+#endif
     if (!strcmp(name, "vkGetDeviceProcAddr")) {
         return (PFN_vkVoidFunction)(GetDeviceProcAddr);
     }
@@ -742,6 +746,7 @@
     if (!strcmp(name, "vkGetDeviceProcAddr")) {
         return (PFN_vkVoidFunction)(GetDeviceProcAddr);
     }
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
     if (!strcmp(name, "vkQueueSignalReleaseImageANDROID")) {
         if (!sQueueSignalReleaseImageAndroidImpl) {
             sQueueSignalReleaseImageAndroidImpl =
@@ -750,6 +755,7 @@
         }
         return (PFN_vkVoidFunction)QueueSignalReleaseImageANDROID;
     }
+#endif
     return (PFN_vkVoidFunction)(goldfish_vk::goldfish_vulkan_get_instance_proc_address(instance, name));
 }
 
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index c73bbda..fcdc603 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -77,44 +77,6 @@
 
 #include <android/hardware_buffer.h>
 
-native_handle_t *AHardwareBuffer_getNativeHandle(AHardwareBuffer*) { return NULL; }
-
-uint64_t getAndroidHardwareBufferUsageFromVkUsage(
-    const VkImageCreateFlags vk_create,
-    const VkImageUsageFlags vk_usage) {
-  return AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE;
-}
-
-VkResult importAndroidHardwareBuffer(
-    Gralloc *grallocHelper,
-    const VkImportAndroidHardwareBufferInfoANDROID* info,
-    struct AHardwareBuffer **importOut) {
-  return VK_SUCCESS;
-}
-
-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) {
-  return VK_SUCCESS;
-}
-
-VkResult getAndroidHardwareBufferPropertiesANDROID(
-    Gralloc *grallocHelper,
-    const VkPhysicalDeviceMemoryProperties* memProps,
-    VkDevice,
-    const AHardwareBuffer*,
-    VkAndroidHardwareBufferPropertiesANDROID*) { return VK_SUCCESS; }
-
-VkResult getMemoryAndroidHardwareBufferANDROID(struct AHardwareBuffer **) { return VK_SUCCESS; }
-
 #endif // VK_USE_PLATFORM_ANDROID_KHR
 
 #include "HostVisibleMemoryVirtualization.h"
@@ -126,7 +88,9 @@
 
 #include "goldfish_address_space.h"
 #include "goldfish_vk_private_defs.h"
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
 #include "vk_format_info.h"
+#endif
 #include "vk_struct_id.h"
 #include "vk_util.h"
 
@@ -315,7 +279,9 @@
         bool dedicated = false;
         bool imported = false;
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
         AHardwareBuffer* ahw = nullptr;
+#endif
         zx_handle_t vmoHandle = ZX_HANDLE_INVALID;
         VkDevice device;
 
@@ -529,9 +495,11 @@
 
         auto& memInfo = it->second;
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
         if (memInfo.ahw) {
             AHardwareBuffer_release(memInfo.ahw);
         }
+#endif
 
         if (memInfo.vmoHandle != ZX_HANDLE_INVALID) {
             zx_handle_close(memInfo.vmoHandle);
@@ -873,7 +841,9 @@
         info.allocationSize = allocationSize;
         info.ptr = ptr;
         info.memoryTypeIndex = memoryTypeIndex;
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
         info.ahw = ahw;
+#endif
         info.imported = imported;
         info.vmoHandle = vmoHandle;
     }
@@ -1673,6 +1643,7 @@
         }
     }
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
     VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID(
         void*, VkResult,
         VkDevice device,
@@ -1720,6 +1691,7 @@
 
         return queryRes;
     }
+#endif
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
     VkResult on_vkGetMemoryZirconHandleFUCHSIA(
@@ -3182,8 +3154,12 @@
         const VkExportMemoryAllocateInfo* exportAllocateInfoPtr =
             vk_find_struct<VkExportMemoryAllocateInfo>(pAllocateInfo);
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
         const VkImportAndroidHardwareBufferInfoANDROID* importAhbInfoPtr =
             vk_find_struct<VkImportAndroidHardwareBufferInfoANDROID>(pAllocateInfo);
+#else
+        const void* importAhbInfoPtr = nullptr;
+#endif
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
         const VkImportMemoryBufferCollectionFUCHSIA*
@@ -3760,9 +3736,11 @@
         if (it == info_VkDeviceMemory.end()) return;
         auto& info = it->second;
         uint64_t memoryObjectId = (uint64_t)(void*)memory;
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
         if (info.ahw) {
             memoryObjectId = getAHardwareBufferId(info.ahw);
         }
+#endif
         emitDeviceMemoryReport(
             info_VkDevice[device],
             info.imported ? VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT
@@ -6032,6 +6010,7 @@
         return enc->vkQueueWaitIdle(queue, true /* do lock */);
     }
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
     void unwrap_VkNativeBufferANDROID(
         const VkImageCreateInfo* pCreateInfo,
         VkImageCreateInfo* local_pCreateInfo) {
@@ -6063,7 +6042,6 @@
     }
 
     void unwrap_vkAcquireImageANDROID_nativeFenceFd(int fd, int*) {
-#if defined(VK_USE_PLATFORM_ANDROID_KHR) || defined(__linux__)
         if (fd != -1) {
             AEMU_SCOPED_TRACE("waitNativeFenceInAcquire");
             // Implicit Synchronization
@@ -6081,8 +6059,8 @@
             // Therefore, assume contract where we need to close fd in this driver
             close(fd);
         }
-#endif
     }
+#endif
 
     // Action of vkMapMemoryIntoAddressSpaceGOOGLE:
     // 1. preprocess (on_vkMapMemoryIntoAddressSpaceGOOGLE_pre):
@@ -6461,8 +6439,10 @@
         }
 #endif
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
         VkAndroidHardwareBufferUsageANDROID* output_ahw_usage =
             vk_find_struct<VkAndroidHardwareBufferUsageANDROID>(pImageFormatProperties);
+#endif
 
         VkResult hostRes;
 
@@ -6499,12 +6479,14 @@
         }
 #endif
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
         if (output_ahw_usage) {
             output_ahw_usage->androidHardwareBufferUsage =
                 getAndroidHardwareBufferUsageFromVkUsage(
                     pImageFormatInfo->flags,
                     pImageFormatInfo->usage);
         }
+#endif
 
         return hostRes;
     }
@@ -7003,6 +6985,7 @@
         return fd;
     }
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
     VkResult on_vkQueueSignalReleaseImageANDROID(
         void* context,
         VkResult input_result,
@@ -7014,7 +6997,6 @@
 
         (void)input_result;
 
-#if defined(VK_USE_PLATFORM_ANDROID_KHR) || defined(__linux__)
         VkEncoder* enc = (VkEncoder*)context;
 
         if (!mFeatureInfo->hasVulkanAsyncQsri) {
@@ -7040,9 +7022,9 @@
             int syncFd = exportSyncFdForQSRILocked(image);
             if (syncFd >= 0) close(syncFd);
         }
-#endif
         return VK_SUCCESS;
     }
+#endif
 
     VkResult on_vkCreateGraphicsPipelines(
         void* context,
@@ -7738,11 +7720,15 @@
 void ResourceTracker::unwrap_VkNativeBufferANDROID(
     const VkImageCreateInfo* pCreateInfo,
     VkImageCreateInfo* local_pCreateInfo) {
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
     mImpl->unwrap_VkNativeBufferANDROID(pCreateInfo, local_pCreateInfo);
+#endif
 }
 
 void ResourceTracker::unwrap_vkAcquireImageANDROID_nativeFenceFd(int fd, int* fd_out) {
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
     mImpl->unwrap_vkAcquireImageANDROID_nativeFenceFd(fd, fd_out);
+#endif
 }
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
@@ -7834,6 +7820,7 @@
 }
 #endif
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
 VkResult ResourceTracker::on_vkGetAndroidHardwareBufferPropertiesANDROID(
     void* context, VkResult input_result,
     VkDevice device,
@@ -7851,6 +7838,7 @@
         context, input_result,
         device, pInfo, pBuffer);
 }
+#endif
 
 VkResult ResourceTracker::on_vkCreateSamplerYcbcrConversion(
     void* context, VkResult input_result,
@@ -8271,6 +8259,7 @@
     return mImpl->on_vkAllocateCommandBuffers(context, input_result, device, pAllocateInfo, pCommandBuffers);
 }
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
 VkResult ResourceTracker::on_vkQueueSignalReleaseImageANDROID(
     void* context,
     VkResult input_result,
@@ -8281,6 +8270,7 @@
     int* pNativeFenceFd) {
     return mImpl->on_vkQueueSignalReleaseImageANDROID(context, input_result, queue, waitSemaphoreCount, pWaitSemaphores, image, pNativeFenceFd);
 }
+#endif
 
 VkResult ResourceTracker::on_vkCreateGraphicsPipelines(
     void* context,
diff --git a/system/vulkan_enc/ResourceTracker.h b/system/vulkan_enc/ResourceTracker.h
index 4fc47f7..5d1891e 100644
--- a/system/vulkan_enc/ResourceTracker.h
+++ b/system/vulkan_enc/ResourceTracker.h
@@ -314,6 +314,7 @@
         VkBufferCollectionPropertiesFUCHSIA* pProperties);
 #endif
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
     VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID(
         void* context, VkResult input_result,
         VkDevice device,
@@ -324,6 +325,7 @@
         VkDevice device,
         const VkMemoryGetAndroidHardwareBufferInfoANDROID *pInfo,
         struct AHardwareBuffer** pBuffer);
+#endif
 
     VkResult on_vkCreateSamplerYcbcrConversion(
         void* context, VkResult input_result,
diff --git a/system/vulkan_enc/VkEncoder.h b/system/vulkan_enc/VkEncoder.h
index 384688c..4721837 100644
--- a/system/vulkan_enc/VkEncoder.h
+++ b/system/vulkan_enc/VkEncoder.h
@@ -22,20 +22,16 @@
 // VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
 // CEREAL_OUTPUT_DIR: Where to put the generated sources.
 // python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
-
 #pragma once
-
 #include <vulkan/vulkan.h>
-
+#include "vulkan_gfxstream.h"
 
 #include "goldfish_vk_private_defs.h"
 #include <memory>
 class IOStream;
 
-
 namespace goldfish_vk {
 
-
 class VkEncoder {
 public:
     VkEncoder(IOStream* stream);
diff --git a/system/vulkan_enc/func_table.h b/system/vulkan_enc/func_table.h
index 2c3b4ee..774f88e 100644
--- a/system/vulkan_enc/func_table.h
+++ b/system/vulkan_enc/func_table.h
@@ -22,15 +22,11 @@
 // VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
 // CEREAL_OUTPUT_DIR: Where to put the generated sources.
 // python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
-
 #pragma once
-
 #include <vulkan/vulkan.h>
-
-
+#include "vulkan_gfxstream.h"
 
 namespace goldfish_vk {
-
 #ifdef VK_VERSION_1_0
 #endif
 #ifdef VK_VERSION_1_1
diff --git a/system/vulkan_enc/goldfish_vk_counting_guest.h b/system/vulkan_enc/goldfish_vk_counting_guest.h
index c929ee6..83038d4 100644
--- a/system/vulkan_enc/goldfish_vk_counting_guest.h
+++ b/system/vulkan_enc/goldfish_vk_counting_guest.h
@@ -22,18 +22,14 @@
 // VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
 // CEREAL_OUTPUT_DIR: Where to put the generated sources.
 // python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
-
 #pragma once
-
 #include <vulkan/vulkan.h>
-
+#include "vulkan_gfxstream.h"
 
 #include "vk_platform_compat.h"
 #include "goldfish_vk_private_defs.h"
 
-
 namespace goldfish_vk {
-
 #ifdef VK_VERSION_1_0
 void count_VkExtent2D(
     uint32_t featureBits,
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
index 1a41e6f..92507a2 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
@@ -22,11 +22,9 @@
 // VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
 // CEREAL_OUTPUT_DIR: Where to put the generated sources.
 // python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
-
 #pragma once
-
 #include <vulkan/vulkan.h>
-
+#include "vulkan_gfxstream.h"
 
 #include "vk_platform_compat.h"
 
@@ -41,9 +39,7 @@
 #undef VK_KHR_android_surface
 #undef VK_ANDROID_external_memory_android_hardware_buffer
 
-
 namespace goldfish_vk {
-
 #ifdef VK_VERSION_1_0
 void deepcopy_VkExtent2D(
     Allocator* alloc,
diff --git a/system/vulkan_enc/goldfish_vk_extension_structs_guest.h b/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
index 48f1da3..2c98b47 100644
--- a/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
+++ b/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
@@ -22,11 +22,9 @@
 // VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
 // CEREAL_OUTPUT_DIR: Where to put the generated sources.
 // python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
-
 #pragma once
-
 #include <vulkan/vulkan.h>
-
+#include "vulkan_gfxstream.h"
 
 #include "vk_platform_compat.h"
 #include "goldfish_vk_private_defs.h"
@@ -37,9 +35,7 @@
 #undef VK_KHR_android_surface
 #undef VK_ANDROID_external_memory_android_hardware_buffer
 
-
 namespace goldfish_vk {
-
 uint32_t goldfish_vk_struct_type(
     const void* structExtension);
 
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.h b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
index 6cc522b..9edff2e 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.h
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
@@ -22,11 +22,9 @@
 // VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
 // CEREAL_OUTPUT_DIR: Where to put the generated sources.
 // python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
-
 #pragma once
-
 #include <vulkan/vulkan.h>
-
+#include "vulkan_gfxstream.h"
 
 #include "vk_platform_compat.h"
 
@@ -39,9 +37,7 @@
 #undef VK_KHR_android_surface
 #undef VK_ANDROID_external_memory_android_hardware_buffer
 
-
 namespace goldfish_vk {
-
 #ifdef VK_VERSION_1_0
 void handlemap_VkExtent2D(
     VulkanHandleMapping* handlemap,
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.h b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
index 9f0fc5a..99fa7cd 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.h
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
@@ -22,11 +22,9 @@
 // VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
 // CEREAL_OUTPUT_DIR: Where to put the generated sources.
 // python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
-
 #pragma once
-
 #include <vulkan/vulkan.h>
-
+#include "vulkan_gfxstream.h"
 
 #include "vk_platform_compat.h"
 
@@ -41,9 +39,7 @@
 #undef VK_KHR_android_surface
 #undef VK_ANDROID_external_memory_android_hardware_buffer
 
-
 namespace goldfish_vk {
-
 #ifdef VK_VERSION_1_0
 void marshal_VkExtent2D(
     VulkanStreamGuest* vkStream,
diff --git a/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h b/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h
index 7254105..133d320 100644
--- a/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h
+++ b/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h
@@ -22,11 +22,9 @@
 // VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
 // CEREAL_OUTPUT_DIR: Where to put the generated sources.
 // python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
-
 #pragma once
-
 #include <vulkan/vulkan.h>
-
+#include "vulkan_gfxstream.h"
 
 #include "vk_platform_compat.h"
 
@@ -41,9 +39,7 @@
 #undef VK_KHR_android_surface
 #undef VK_ANDROID_external_memory_android_hardware_buffer
 
-
 namespace goldfish_vk {
-
 #ifdef VK_VERSION_1_0
 void reservedmarshal_VkExtent2D(
     VulkanStreamGuest* vkStream,
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.h b/system/vulkan_enc/goldfish_vk_transform_guest.h
index a26804e..3c17315 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.h
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.h
@@ -22,19 +22,15 @@
 // VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
 // CEREAL_OUTPUT_DIR: Where to put the generated sources.
 // python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
-
 #pragma once
-
 #include <vulkan/vulkan.h>
-
+#include "vulkan_gfxstream.h"
 
 #include "vk_platform_compat.h"
 
 #include "goldfish_vk_private_defs.h"
 
-
 namespace goldfish_vk {
-
 class ResourceTracker;
 #define LIST_TRIVIAL_TRANSFORMED_TYPES(f) \
 f(VkPhysicalDeviceExternalImageFormatInfo) \
diff --git a/system/vulkan_enc/vk_struct_id.h b/system/vulkan_enc/vk_struct_id.h
index f1ee84c..32d6b86 100644
--- a/system/vulkan_enc/vk_struct_id.h
+++ b/system/vulkan_enc/vk_struct_id.h
@@ -16,26 +16,33 @@
 
 #include <vulkan/vulkan.h>
 #include "goldfish_vk_private_defs.h"
+#include "vulkan_gfxstream.h"
 
 template <class T> struct vk_get_vk_struct_id;
 
 #define REGISTER_VK_STRUCT_ID(T, ID) \
     template <> struct vk_get_vk_struct_id<T> { static constexpr VkStructureType id = ID; }
 
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
 REGISTER_VK_STRUCT_ID(VkAndroidHardwareBufferPropertiesANDROID, VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID);
 REGISTER_VK_STRUCT_ID(VkAndroidHardwareBufferFormatPropertiesANDROID, VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID);
 REGISTER_VK_STRUCT_ID(VkAndroidHardwareBufferUsageANDROID, VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID);
+#endif
 REGISTER_VK_STRUCT_ID(VkBufferCreateInfo, VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO);
 REGISTER_VK_STRUCT_ID(VkImageCreateInfo, VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO);
 REGISTER_VK_STRUCT_ID(VkImageFormatProperties2, VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2);
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
 REGISTER_VK_STRUCT_ID(VkNativeBufferANDROID, VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID);
 REGISTER_VK_STRUCT_ID(VkExternalFormatANDROID, VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID);
+#endif
 REGISTER_VK_STRUCT_ID(VkExternalMemoryBufferCreateInfo, VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO);
 REGISTER_VK_STRUCT_ID(VkExternalMemoryImageCreateInfo, VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO);
 REGISTER_VK_STRUCT_ID(VkMemoryAllocateInfo, VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO);
 REGISTER_VK_STRUCT_ID(VkMemoryDedicatedAllocateInfo, VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO);
 REGISTER_VK_STRUCT_ID(VkMemoryDedicatedRequirements, VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS);
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
 REGISTER_VK_STRUCT_ID(VkImportAndroidHardwareBufferInfoANDROID, VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID);
+#endif
 REGISTER_VK_STRUCT_ID(VkExportMemoryAllocateInfo, VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO);
 REGISTER_VK_STRUCT_ID(VkMemoryRequirements2, VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2);
 REGISTER_VK_STRUCT_ID(VkSemaphoreCreateInfo, VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO);
diff --git a/system/vulkan_enc/vk_util.h b/system/vulkan_enc/vk_util.h
index 39de991..160bf06 100644
--- a/system/vulkan_enc/vk_util.h
+++ b/system/vulkan_enc/vk_util.h
@@ -199,13 +199,13 @@
 
 template <class T, class H> T* vk_find_struct(H* head)
 {
-    vk_get_vk_struct_id<H>::id;
+    (void)vk_get_vk_struct_id<H>::id;
     return static_cast<T*>(__vk_find_struct(static_cast<void*>(head), vk_get_vk_struct_id<T>::id));
 }
 
 template <class T, class H> const T* vk_find_struct(const H* head)
 {
-    vk_get_vk_struct_id<H>::id;
+    (void)vk_get_vk_struct_id<H>::id;
     return static_cast<const T*>(__vk_find_struct(const_cast<void*>(static_cast<const void*>(head)),
                                  vk_get_vk_struct_id<T>::id));
 }
@@ -228,14 +228,14 @@
 
 template <class T> vk_struct_chain_iterator vk_make_chain_iterator(T* vk_struct)
 {
-    vk_get_vk_struct_id<T>::id;
+    (void)vk_get_vk_struct_id<T>::id;
     vk_struct_chain_iterator result = { reinterpret_cast<vk_struct_common*>(vk_struct) };
     return result;
 }
 
 template <class T> void vk_append_struct(vk_struct_chain_iterator* i, T* vk_struct)
 {
-    vk_get_vk_struct_id<T>::id;
+    (void)vk_get_vk_struct_id<T>::id;
 
     vk_struct_common* p = i->value;
     if (p->pNext) {
diff --git a/system/vulkan_enc/vulkan_gfxstream.h b/system/vulkan_enc/vulkan_gfxstream.h
new file mode 100644
index 0000000..7c9b106
--- /dev/null
+++ b/system/vulkan_enc/vulkan_gfxstream.h
@@ -0,0 +1,223 @@
+#ifndef VULKAN_GFXSTREAM_H_
+#define VULKAN_GFXSTREAM_H_ 1
+
+// Copyright (C) 2022 The Android Open Source Project
+// Copyright (C) 2022 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.
+//
+// Autogenerated header vulkan_gfxstream.h
+// Please do not modify directly;
+// re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
+// or directly from Python by calling the genvk.py script with correct parameters.
+
+#ifdef VK_GFXSTREAM_STRUCTURE_TYPE_EXT
+#include "vulkan_gfxstream_structure_type.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_GOOGLE_gfxstream 1
+#define VK_GOOGLE_GFXSTREAM_SPEC_VERSION  0
+#define VK_GOOGLE_GFXSTREAM_NUMBER        386
+#define VK_GOOGLE_GFXSTREAM_EXTENSION_NAME "VK_GOOGLE_gfxstream"
+typedef struct VkImportColorBufferGOOGLE {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           colorBuffer;
+} VkImportColorBufferGOOGLE;
+
+typedef struct VkImportBufferGOOGLE {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           buffer;
+} VkImportBufferGOOGLE;
+
+typedef struct VkImportPhysicalAddressGOOGLE {
+    VkStructureType    sType;
+    void*              pNext;
+    uint64_t           physicalAddress;
+    VkDeviceSize       size;
+    VkFormat           format;
+    VkImageTiling      tiling;
+    uint32_t           tilingParameter;
+} VkImportPhysicalAddressGOOGLE;
+
+typedef VkResult (VKAPI_PTR *PFN_vkRegisterImageColorBufferGOOGLE)(VkDevice device, VkImage image, uint32_t colorBuffer);
+typedef VkResult (VKAPI_PTR *PFN_vkRegisterBufferColorBufferGOOGLE)(VkDevice device, VkBuffer buffer, uint32_t colorBuffer);
+typedef VkResult (VKAPI_PTR *PFN_vkMapMemoryIntoAddressSpaceGOOGLE)(VkDevice device, VkDeviceMemory memory, uint64_t* pAddress);
+typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateSizedGOOGLE)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, uint32_t imageInfoCount, uint32_t bufferInfoCount, uint32_t bufferViewCount, const uint32_t* pImageInfoEntryIndices, const uint32_t* pBufferInfoEntryIndices, const uint32_t* pBufferViewEntryIndices, const VkDescriptorImageInfo* pImageInfos, const VkDescriptorBufferInfo* pBufferInfos, const VkBufferView* pBufferViews);
+typedef void (VKAPI_PTR *PFN_vkBeginCommandBufferAsyncGOOGLE)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
+typedef void (VKAPI_PTR *PFN_vkEndCommandBufferAsyncGOOGLE)(VkCommandBuffer commandBuffer);
+typedef void (VKAPI_PTR *PFN_vkResetCommandBufferAsyncGOOGLE)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCommandBufferHostSyncGOOGLE)(VkCommandBuffer commandBuffer, uint32_t needHostSync, uint32_t sequenceNumber);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateImageWithRequirementsGOOGLE)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage, VkMemoryRequirements* pMemoryRequirements);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferWithRequirementsGOOGLE)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer, VkMemoryRequirements* pMemoryRequirements);
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostAddressInfoGOOGLE)(VkDevice device, VkDeviceMemory memory, uint64_t* pAddress, uint64_t* pSize, uint64_t* pHostmemId);
+typedef VkResult (VKAPI_PTR *PFN_vkFreeMemorySyncGOOGLE)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkQueueHostSyncGOOGLE)(VkQueue queue, uint32_t needHostSync, uint32_t sequenceNumber);
+typedef void (VKAPI_PTR *PFN_vkQueueSubmitAsyncGOOGLE)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
+typedef void (VKAPI_PTR *PFN_vkQueueWaitIdleAsyncGOOGLE)(VkQueue queue);
+typedef void (VKAPI_PTR *PFN_vkQueueBindSparseAsyncGOOGLE)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+typedef void (VKAPI_PTR *PFN_vkGetLinearImageLayoutGOOGLE)(VkDevice device, VkFormat format, VkDeviceSize* pOffset, VkDeviceSize* pRowPitchAlignment);
+typedef void (VKAPI_PTR *PFN_vkGetLinearImageLayout2GOOGLE)(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkDeviceSize* pOffset, VkDeviceSize* pRowPitchAlignment);
+typedef void (VKAPI_PTR *PFN_vkQueueFlushCommandsGOOGLE)(VkQueue queue, VkCommandBuffer commandBuffer, VkDeviceSize dataSize, const void* pData);
+typedef void (VKAPI_PTR *PFN_vkQueueCommitDescriptorSetUpdatesGOOGLE)(VkQueue queue, uint32_t descriptorPoolCount, const VkDescriptorPool* pDescriptorPools, uint32_t descriptorSetCount, const VkDescriptorSetLayout* pSetLayouts, const uint64_t* pDescriptorSetPoolIds, const uint32_t* pDescriptorSetWhichPool, const uint32_t* pDescriptorSetPendingAllocation, const uint32_t* pDescriptorWriteStartingIndices, uint32_t pendingDescriptorWriteCount, const VkWriteDescriptorSet* pPendingDescriptorWrites);
+typedef void (VKAPI_PTR *PFN_vkCollectDescriptorPoolIdsGOOGLE)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t* pPoolIdCount, uint64_t* pPoolIds);
+typedef void (VKAPI_PTR *PFN_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE)(VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkRegisterImageColorBufferGOOGLE(
+    VkDevice                                    device,
+    VkImage                                     image,
+    uint32_t                                    colorBuffer);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkRegisterBufferColorBufferGOOGLE(
+    VkDevice                                    device,
+    VkBuffer                                    buffer,
+    uint32_t                                    colorBuffer);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkMapMemoryIntoAddressSpaceGOOGLE(
+    VkDevice                                    device,
+    VkDeviceMemory                              memory,
+    uint64_t*                                   pAddress);
+
+VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplateSizedGOOGLE(
+    VkDevice                                    device,
+    VkDescriptorSet                             descriptorSet,
+    VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
+    uint32_t                                    imageInfoCount,
+    uint32_t                                    bufferInfoCount,
+    uint32_t                                    bufferViewCount,
+    const uint32_t*                             pImageInfoEntryIndices,
+    const uint32_t*                             pBufferInfoEntryIndices,
+    const uint32_t*                             pBufferViewEntryIndices,
+    const VkDescriptorImageInfo*                pImageInfos,
+    const VkDescriptorBufferInfo*               pBufferInfos,
+    const VkBufferView*                         pBufferViews);
+
+VKAPI_ATTR void VKAPI_CALL vkBeginCommandBufferAsyncGOOGLE(
+    VkCommandBuffer                             commandBuffer,
+    const VkCommandBufferBeginInfo*             pBeginInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkEndCommandBufferAsyncGOOGLE(
+    VkCommandBuffer                             commandBuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkResetCommandBufferAsyncGOOGLE(
+    VkCommandBuffer                             commandBuffer,
+    VkCommandBufferResetFlags                   flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCommandBufferHostSyncGOOGLE(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    needHostSync,
+    uint32_t                                    sequenceNumber);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageWithRequirementsGOOGLE(
+    VkDevice                                    device,
+    const VkImageCreateInfo*                    pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkImage*                                    pImage,
+    VkMemoryRequirements*                       pMemoryRequirements);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferWithRequirementsGOOGLE(
+    VkDevice                                    device,
+    const VkBufferCreateInfo*                   pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkBuffer*                                   pBuffer,
+    VkMemoryRequirements*                       pMemoryRequirements);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostAddressInfoGOOGLE(
+    VkDevice                                    device,
+    VkDeviceMemory                              memory,
+    uint64_t*                                   pAddress,
+    uint64_t*                                   pSize,
+    uint64_t*                                   pHostmemId);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkFreeMemorySyncGOOGLE(
+    VkDevice                                    device,
+    VkDeviceMemory                              memory,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkQueueHostSyncGOOGLE(
+    VkQueue                                     queue,
+    uint32_t                                    needHostSync,
+    uint32_t                                    sequenceNumber);
+
+VKAPI_ATTR void VKAPI_CALL vkQueueSubmitAsyncGOOGLE(
+    VkQueue                                     queue,
+    uint32_t                                    submitCount,
+    const VkSubmitInfo*                         pSubmits,
+    VkFence                                     fence);
+
+VKAPI_ATTR void VKAPI_CALL vkQueueWaitIdleAsyncGOOGLE(
+    VkQueue                                     queue);
+
+VKAPI_ATTR void VKAPI_CALL vkQueueBindSparseAsyncGOOGLE(
+    VkQueue                                     queue,
+    uint32_t                                    bindInfoCount,
+    const VkBindSparseInfo*                     pBindInfo,
+    VkFence                                     fence);
+
+VKAPI_ATTR void VKAPI_CALL vkGetLinearImageLayoutGOOGLE(
+    VkDevice                                    device,
+    VkFormat                                    format,
+    VkDeviceSize*                               pOffset,
+    VkDeviceSize*                               pRowPitchAlignment);
+
+VKAPI_ATTR void VKAPI_CALL vkGetLinearImageLayout2GOOGLE(
+    VkDevice                                    device,
+    const VkImageCreateInfo*                    pCreateInfo,
+    VkDeviceSize*                               pOffset,
+    VkDeviceSize*                               pRowPitchAlignment);
+
+VKAPI_ATTR void VKAPI_CALL vkQueueFlushCommandsGOOGLE(
+    VkQueue                                     queue,
+    VkCommandBuffer                             commandBuffer,
+    VkDeviceSize                                dataSize,
+    const void*                                 pData);
+
+VKAPI_ATTR void VKAPI_CALL vkQueueCommitDescriptorSetUpdatesGOOGLE(
+    VkQueue                                     queue,
+    uint32_t                                    descriptorPoolCount,
+    const VkDescriptorPool*                     pDescriptorPools,
+    uint32_t                                    descriptorSetCount,
+    const VkDescriptorSetLayout*                pSetLayouts,
+    const uint64_t*                             pDescriptorSetPoolIds,
+    const uint32_t*                             pDescriptorSetWhichPool,
+    const uint32_t*                             pDescriptorSetPendingAllocation,
+    const uint32_t*                             pDescriptorWriteStartingIndices,
+    uint32_t                                    pendingDescriptorWriteCount,
+    const VkWriteDescriptorSet*                 pPendingDescriptorWrites);
+
+VKAPI_ATTR void VKAPI_CALL vkCollectDescriptorPoolIdsGOOGLE(
+    VkDevice                                    device,
+    VkDescriptorPool                            descriptorPool,
+    uint32_t*                                   pPoolIdCount,
+    uint64_t*                                   pPoolIds);
+
+VKAPI_ATTR void VKAPI_CALL vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(
+    VkQueue                                     queue,
+    uint32_t                                    waitSemaphoreCount,
+    const VkSemaphore*                          pWaitSemaphores,
+    VkImage                                     image);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/vulkan_enc/vulkan_gfxstream_structure_type.h b/system/vulkan_enc/vulkan_gfxstream_structure_type.h
new file mode 100644
index 0000000..af300f5
--- /dev/null
+++ b/system/vulkan_enc/vulkan_gfxstream_structure_type.h
@@ -0,0 +1,34 @@
+// Copyright (C) 2018 The Android Open Source Project
+// Copyright (C) 2018 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.
+
+// Autogenerated module vulkan_gfxstream_structure_type
+// (header) generated by registry/vulkan/scripts/genvk.py -registry registry/vulkan/xml/vk.xml cereal -o ../../device/generic/vulkan-cereal/stream-servers/vulkan/cereal
+// Please do not modify directly;
+// re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
+// or directly from Python by defining:
+// VULKAN_REGISTRY_XML_DIR : Directory containing vk.xml
+// VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
+// CEREAL_OUTPUT_DIR: Where to put the generated sources.
+// python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
+#pragma once
+
+#define VK_GOOGLE_GFXSTREAM_ENUM(type,id)     ((type)(1000000000 + (1000 * (VK_GOOGLE_GFXSTREAM_NUMBER - 1)) + (id)))
+
+#define VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 0)
+#define VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 1)
+#define VK_STRUCTURE_TYPE_IMPORT_BUFFER_HANDLE_GOOGLE VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 2)
+#define VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 3)
+
+