diff --git a/system/OpenglSystemCommon/EmulatorFeatureInfo.h b/system/OpenglSystemCommon/EmulatorFeatureInfo.h
index b2add4a..d3228f5 100644
--- a/system/OpenglSystemCommon/EmulatorFeatureInfo.h
+++ b/system/OpenglSystemCommon/EmulatorFeatureInfo.h
@@ -82,9 +82,6 @@
 // Vulkan null optional strings
 static const char kVulkanNullOptionalStrings[] = "ANDROID_EMU_vulkan_null_optional_strings";
 
-// Vulkan create resources with requirements
-static const char kVulkanCreateResourcesWithRequirements[] = "ANDROID_EMU_vulkan_create_resources_with_requirements";
-
 // Struct describing available emulator features
 struct EmulatorFeatureInfo {
 
@@ -96,8 +93,7 @@
         hasDirectMem(false),
         hasVulkan(false),
         hasDeferredVulkanCommands(false),
-        hasVulkanNullOptionalStrings(false),
-        hasVulkanCreateResourcesWithRequirements(false) { }
+        hasVulkanNullOptionalStrings(false) { }
 
     SyncImpl syncImpl;
     DmaImpl dmaImpl;
@@ -107,7 +103,6 @@
     bool hasVulkan;
     bool hasDeferredVulkanCommands;
     bool hasVulkanNullOptionalStrings;
-    bool hasVulkanCreateResourcesWithRequirements;
 };
 
 #endif // __COMMON_EMULATOR_FEATURE_INFO_H
diff --git a/system/OpenglSystemCommon/HostConnection.cpp b/system/OpenglSystemCommon/HostConnection.cpp
index cfe31b5..392b7c6 100644
--- a/system/OpenglSystemCommon/HostConnection.cpp
+++ b/system/OpenglSystemCommon/HostConnection.cpp
@@ -294,7 +294,6 @@
         queryAndSetVulkanSupport(m_rcEnc);
         queryAndSetDeferredVulkanCommandsSupport(m_rcEnc);
         queryAndSetVulkanNullOptionalStringsSupport(m_rcEnc);
-        queryAndSetVulkanCreateResourcesWithRequirementsSupport(m_rcEnc);
         if (m_processPipe) {
             m_processPipe->processPipeInit(m_rcEnc);
         }
@@ -457,10 +456,3 @@
         rcEnc->featureInfo()->hasVulkanNullOptionalStrings = true;
     }
 }
-
-void HostConnection::queryAndSetVulkanCreateResourcesWithRequirementsSupport(ExtendedRCEncoderContext* rcEnc) {
-    std::string glExtensions = queryGLExtensions(rcEnc);
-    if (glExtensions.find(kVulkanCreateResourcesWithRequirements) != std::string::npos) {
-        rcEnc->featureInfo()->hasVulkanCreateResourcesWithRequirements = true;
-    }
-}
diff --git a/system/OpenglSystemCommon/HostConnection.h b/system/OpenglSystemCommon/HostConnection.h
index f79c11f..2f9f83f 100644
--- a/system/OpenglSystemCommon/HostConnection.h
+++ b/system/OpenglSystemCommon/HostConnection.h
@@ -167,7 +167,6 @@
     void queryAndSetVulkanSupport(ExtendedRCEncoderContext *rcEnc);
     void queryAndSetDeferredVulkanCommandsSupport(ExtendedRCEncoderContext *rcEnc);
     void queryAndSetVulkanNullOptionalStringsSupport(ExtendedRCEncoderContext *rcEnc);
-    void queryAndSetVulkanCreateResourcesWithRequirementsSupport(ExtendedRCEncoderContext *rcEnc);
 
 private:
     IOStream *m_stream;
diff --git a/system/vulkan/func_table.cpp b/system/vulkan/func_table.cpp
index 64427be..f0ed982 100644
--- a/system/vulkan/func_table.cpp
+++ b/system/vulkan/func_table.cpp
@@ -3844,34 +3844,6 @@
     vkEnc->vkCommandBufferHostSyncGOOGLE(commandBuffer, needHostSync, sequenceNumber);
 }
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-static VkResult entry_vkCreateImageWithRequirementsGOOGLE(
-    VkDevice device,
-    const VkImageCreateInfo* pCreateInfo,
-    const VkAllocationCallbacks* pAllocator,
-    VkImage* pImage,
-    VkMemoryRequirements* pMemoryRequirements)
-{
-    AEMU_SCOPED_TRACE("vkCreateImageWithRequirementsGOOGLE");
-    auto vkEnc = HostConnection::get()->vkEncoder();
-    VkResult vkCreateImageWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
-    vkCreateImageWithRequirementsGOOGLE_VkResult_return = vkEnc->vkCreateImageWithRequirementsGOOGLE(device, pCreateInfo, pAllocator, pImage, pMemoryRequirements);
-    return vkCreateImageWithRequirementsGOOGLE_VkResult_return;
-}
-static VkResult entry_vkCreateBufferWithRequirementsGOOGLE(
-    VkDevice device,
-    const VkBufferCreateInfo* pCreateInfo,
-    const VkAllocationCallbacks* pAllocator,
-    VkBuffer* pBuffer,
-    VkMemoryRequirements* pMemoryRequirements)
-{
-    AEMU_SCOPED_TRACE("vkCreateBufferWithRequirementsGOOGLE");
-    auto vkEnc = HostConnection::get()->vkEncoder();
-    VkResult vkCreateBufferWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
-    vkCreateBufferWithRequirementsGOOGLE_VkResult_return = vkEnc->vkCreateBufferWithRequirementsGOOGLE(device, pCreateInfo, pAllocator, pBuffer, pMemoryRequirements);
-    return vkCreateBufferWithRequirementsGOOGLE_VkResult_return;
-}
-#endif
 void* goldfish_vulkan_get_proc_address(const char* name){
 #ifdef VK_VERSION_1_0
     if (!strcmp(name, "vkCreateInstance"))
@@ -5307,16 +5279,6 @@
         return nullptr;
     }
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-    if (!strcmp(name, "vkCreateImageWithRequirementsGOOGLE"))
-    {
-        return nullptr;
-    }
-    if (!strcmp(name, "vkCreateBufferWithRequirementsGOOGLE"))
-    {
-        return nullptr;
-    }
-#endif
     return nullptr;
 }
 void* goldfish_vulkan_get_instance_proc_address(VkInstance instance, const char* name){
@@ -6916,18 +6878,6 @@
         return hasExt ? (void*)entry_vkCommandBufferHostSyncGOOGLE : nullptr;
     }
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-    if (!strcmp(name, "vkCreateImageWithRequirementsGOOGLE"))
-    {
-        bool hasExt = resources->hasInstanceExtension(instance, "VK_GOOGLE_create_resources_with_requirements");
-        return hasExt ? (void*)entry_vkCreateImageWithRequirementsGOOGLE : nullptr;
-    }
-    if (!strcmp(name, "vkCreateBufferWithRequirementsGOOGLE"))
-    {
-        bool hasExt = resources->hasInstanceExtension(instance, "VK_GOOGLE_create_resources_with_requirements");
-        return hasExt ? (void*)entry_vkCreateBufferWithRequirementsGOOGLE : nullptr;
-    }
-#endif
     return nullptr;
 }
 void* goldfish_vulkan_get_device_proc_address(VkDevice device, const char* name){
@@ -8527,18 +8477,6 @@
         return hasExt ? (void*)entry_vkCommandBufferHostSyncGOOGLE : nullptr;
     }
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-    if (!strcmp(name, "vkCreateImageWithRequirementsGOOGLE"))
-    {
-        bool hasExt = resources->hasDeviceExtension(device, "VK_GOOGLE_create_resources_with_requirements");
-        return hasExt ? (void*)entry_vkCreateImageWithRequirementsGOOGLE : nullptr;
-    }
-    if (!strcmp(name, "vkCreateBufferWithRequirementsGOOGLE"))
-    {
-        bool hasExt = resources->hasDeviceExtension(device, "VK_GOOGLE_create_resources_with_requirements");
-        return hasExt ? (void*)entry_vkCreateBufferWithRequirementsGOOGLE : nullptr;
-    }
-#endif
     return nullptr;
 }
 
diff --git a/system/vulkan/func_table.h b/system/vulkan/func_table.h
index 05658cf..4d0e977 100644
--- a/system/vulkan/func_table.h
+++ b/system/vulkan/func_table.h
@@ -284,8 +284,6 @@
 #endif
 #ifdef VK_GOOGLE_async_command_buffers
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-#endif
 void* goldfish_vulkan_get_proc_address(const char* name);
 void* goldfish_vulkan_get_instance_proc_address(VkInstance instance, const char* name);
 void* goldfish_vulkan_get_device_proc_address(VkDevice device, const char* name);
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index a3d8861..9cd8a79 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -265,8 +265,6 @@
         VkDeviceMemory currentBacking = VK_NULL_HANDLE;
         VkDeviceSize currentBackingOffset = 0;
         VkDeviceSize currentBackingSize = 0;
-        bool baseRequirementsKnown = false;
-        VkMemoryRequirements baseRequirements;
     };
 
     struct VkBuffer_Info {
@@ -277,8 +275,6 @@
         VkDeviceMemory currentBacking = VK_NULL_HANDLE;
         VkDeviceSize currentBackingOffset = 0;
         VkDeviceSize currentBackingSize = 0;
-        bool baseRequirementsKnown = false;
-        VkMemoryRequirements baseRequirements;
     };
 
     struct VkSemaphore_Info {
@@ -615,11 +611,6 @@
         return mFeatureInfo->hasDeferredVulkanCommands;
     }
 
-    bool supportsCreateResourcesWithRequirements() const {
-        if (!mFeatureInfo) return false;
-        return mFeatureInfo->hasVulkanCreateResourcesWithRequirements;
-    }
-
     int getHostInstanceExtensionIndex(const std::string& extName) const {
         int i = 0;
         for (const auto& prop : mHostInstanceExtensions) {
@@ -2069,10 +2060,12 @@
         dedicatedReqs->requiresDedicatedAllocation = VK_TRUE;
     }
 
-    void transformImageMemoryRequirementsForGuestLocked(
+    void transformImageMemoryRequirementsForGuest(
         VkImage image,
         VkMemoryRequirements* reqs) {
 
+        AutoLock lock(mLock);
+
         auto it = info_VkImage.find(image);
         if (it == info_VkImage.end()) return;
 
@@ -2087,10 +2080,12 @@
         transformExternalResourceMemoryRequirementsForGuest(reqs);
     }
 
-    void transformBufferMemoryRequirementsForGuestLocked(
+    void transformBufferMemoryRequirementsForGuest(
         VkBuffer buffer,
         VkMemoryRequirements* reqs) {
 
+        AutoLock lock(mLock);
+
         auto it = info_VkBuffer.find(buffer);
         if (it == info_VkBuffer.end()) return;
 
@@ -2243,14 +2238,7 @@
         }
 #endif
 
-        VkResult res;
-        VkMemoryRequirements memReqs;
-
-        if (supportsCreateResourcesWithRequirements()) {
-            res = enc->vkCreateImageWithRequirementsGOOGLE(device, &localCreateInfo, pAllocator, pImage, &memReqs);
-        } else {
-            res = enc->vkCreateImage(device, &localCreateInfo, pAllocator, pImage);
-        }
+        VkResult res = enc->vkCreateImage(device, &localCreateInfo, pAllocator, pImage);
 
         if (res != VK_SUCCESS) return res;
 
@@ -2265,19 +2253,10 @@
         info.createInfo = *pCreateInfo;
         info.createInfo.pNext = nullptr;
 
-        if (supportsCreateResourcesWithRequirements()) {
-            info.baseRequirementsKnown = true;
-        }
+        if (!extImgCiPtr) return res;
 
-        if (extImgCiPtr) {
-            info.external = true;
-            info.externalCreateInfo = *extImgCiPtr;
-        }
-
-        if (info.baseRequirementsKnown) {
-            transformImageMemoryRequirementsForGuestLocked(*pImage, &memReqs);
-            info.baseRequirements = memReqs;
-        }
+        info.external = true;
+        info.externalCreateInfo = *extImgCiPtr;
 
         return res;
     }
@@ -2342,28 +2321,11 @@
     void on_vkGetImageMemoryRequirements(
         void *context, VkDevice device, VkImage image,
         VkMemoryRequirements *pMemoryRequirements) {
-
-        AutoLock lock(mLock);
-
-        auto it = info_VkImage.find(image);
-        if (it == info_VkImage.end()) return;
-
-        auto& info = it->second;
-
-        if (info.baseRequirementsKnown) {
-            *pMemoryRequirements = info.baseRequirements;
-            return;
-        }
-
         VkEncoder* enc = (VkEncoder*)context;
-
         enc->vkGetImageMemoryRequirements(
             device, image, pMemoryRequirements);
-
-        transformImageMemoryRequirementsForGuestLocked(
+        transformImageMemoryRequirementsForGuest(
             image, pMemoryRequirements);
-        info.baseRequirementsKnown = true;
-        info.baseRequirements = *pMemoryRequirements;
     }
 
     void on_vkGetImageMemoryRequirements2(
@@ -2415,14 +2377,7 @@
         VkBuffer *pBuffer) {
         VkEncoder* enc = (VkEncoder*)context;
 
-        VkResult res;
-        VkMemoryRequirements memReqs;
-
-        if (supportsCreateResourcesWithRequirements()) {
-            res = enc->vkCreateBufferWithRequirementsGOOGLE(device, pCreateInfo, pAllocator, pBuffer, &memReqs);
-        } else {
-            res = enc->vkCreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
-        }
+        VkResult res = enc->vkCreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
 
         if (res != VK_SUCCESS) return res;
 
@@ -2436,22 +2391,13 @@
         info.createInfo = *pCreateInfo;
         info.createInfo.pNext = nullptr;
 
-        if (supportsCreateResourcesWithRequirements()) {
-            info.baseRequirementsKnown = true;
-        }
-
         const VkExternalMemoryBufferCreateInfo* extBufCi =
             vk_find_struct<VkExternalMemoryBufferCreateInfo>(pCreateInfo);
 
-        if (extBufCi) {
-            info.external = true;
-            info.externalCreateInfo = *extBufCi;
-        }
+        if (!extBufCi) return res;
 
-        if (info.baseRequirementsKnown) {
-            transformBufferMemoryRequirementsForGuestLocked(*pBuffer, &memReqs);
-            info.baseRequirements = memReqs;
-        }
+        info.external = true;
+        info.externalCreateInfo = *extBufCi;
 
         return res;
     }
@@ -2465,26 +2411,11 @@
 
     void on_vkGetBufferMemoryRequirements(
         void* context, VkDevice device, VkBuffer buffer, VkMemoryRequirements *pMemoryRequirements) {
-
-        AutoLock lock(mLock);
-
-        auto it = info_VkBuffer.find(buffer);
-        if (it == info_VkBuffer.end()) return;
-
-        auto& info = it->second;
-
-        if (info.baseRequirementsKnown) {
-            *pMemoryRequirements = info.baseRequirements;
-            return;
-        }
-
         VkEncoder* enc = (VkEncoder*)context;
         enc->vkGetBufferMemoryRequirements(
             device, buffer, pMemoryRequirements);
-        transformBufferMemoryRequirementsForGuestLocked(
+        transformBufferMemoryRequirementsForGuest(
             buffer, pMemoryRequirements);
-        info.baseRequirementsKnown = true;
-        info.baseRequirements = *pMemoryRequirements;
     }
 
     void on_vkGetBufferMemoryRequirements2(
diff --git a/system/vulkan_enc/VkEncoder.cpp b/system/vulkan_enc/VkEncoder.cpp
index 85d7092..732bd21 100644
--- a/system/vulkan_enc/VkEncoder.cpp
+++ b/system/vulkan_enc/VkEncoder.cpp
@@ -94,11 +94,7 @@
 
     // Assume the lock for the current encoder is held.
     void registerCleanupCallback(void* handle, VkEncoder::CleanupCallback cb) {
-        if (mCleanupCallbacks.end() == mCleanupCallbacks.find(handle)) {
-            mCleanupCallbacks[handle] = cb;
-        } else {
-            return;
-        }
+        mCleanupCallbacks.insert({handle, cb});
     }
 
     void unregisterCleanupCallback(void* handle) {
@@ -23100,209 +23096,5 @@
 }
 
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-VkResult VkEncoder::vkCreateImageWithRequirementsGOOGLE(
-    VkDevice device,
-    const VkImageCreateInfo* pCreateInfo,
-    const VkAllocationCallbacks* pAllocator,
-    VkImage* pImage,
-    VkMemoryRequirements* pMemoryRequirements)
-{
-    AutoLock encoderLock(mImpl->lock);
-    AEMU_SCOPED_TRACE("vkCreateImageWithRequirementsGOOGLE encode");
-    mImpl->log("start vkCreateImageWithRequirementsGOOGLE");
-    auto stream = mImpl->stream();
-    auto countingStream = mImpl->countingStream();
-    auto resources = mImpl->resources();
-    auto pool = mImpl->pool();
-    stream->setHandleMapping(resources->unwrapMapping());
-    VkDevice local_device;
-    VkImageCreateInfo* local_pCreateInfo;
-    VkAllocationCallbacks* local_pAllocator;
-    local_device = device;
-    local_pCreateInfo = nullptr;
-    if (pCreateInfo)
-    {
-        local_pCreateInfo = (VkImageCreateInfo*)pool->alloc(sizeof(const VkImageCreateInfo));
-        deepcopy_VkImageCreateInfo(pool, pCreateInfo, (VkImageCreateInfo*)(local_pCreateInfo));
-    }
-    local_pAllocator = nullptr;
-    if (pAllocator)
-    {
-        local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
-    }
-    local_pAllocator = nullptr;
-    if (local_pCreateInfo)
-    {
-        transform_tohost_VkImageCreateInfo(mImpl->resources(), (VkImageCreateInfo*)(local_pCreateInfo));
-    }
-    if (local_pAllocator)
-    {
-        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
-    }
-    countingStream->rewind();
-    {
-        uint64_t cgen_var_1520;
-        countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1520, 1);
-        countingStream->write((uint64_t*)&cgen_var_1520, 1 * 8);
-        marshal_VkImageCreateInfo(countingStream, (VkImageCreateInfo*)(local_pCreateInfo));
-        // WARNING PTR CHECK
-        uint64_t cgen_var_1521 = (uint64_t)(uintptr_t)local_pAllocator;
-        countingStream->putBe64(cgen_var_1521);
-        if (local_pAllocator)
-        {
-            marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
-        }
-        uint64_t cgen_var_1522;
-        countingStream->handleMapping()->mapHandles_VkImage_u64(pImage, &cgen_var_1522, 1);
-        countingStream->write((uint64_t*)&cgen_var_1522, 8);
-        marshal_VkMemoryRequirements(countingStream, (VkMemoryRequirements*)(pMemoryRequirements));
-    }
-    uint32_t packetSize_vkCreateImageWithRequirementsGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
-    countingStream->rewind();
-    uint32_t opcode_vkCreateImageWithRequirementsGOOGLE = OP_vkCreateImageWithRequirementsGOOGLE;
-    stream->write(&opcode_vkCreateImageWithRequirementsGOOGLE, sizeof(uint32_t));
-    stream->write(&packetSize_vkCreateImageWithRequirementsGOOGLE, sizeof(uint32_t));
-    uint64_t cgen_var_1523;
-    stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1523, 1);
-    stream->write((uint64_t*)&cgen_var_1523, 1 * 8);
-    marshal_VkImageCreateInfo(stream, (VkImageCreateInfo*)(local_pCreateInfo));
-    // WARNING PTR CHECK
-    uint64_t cgen_var_1524 = (uint64_t)(uintptr_t)local_pAllocator;
-    stream->putBe64(cgen_var_1524);
-    if (local_pAllocator)
-    {
-        marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
-    }
-    stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
-    uint64_t cgen_var_1525;
-    stream->handleMapping()->mapHandles_VkImage_u64(pImage, &cgen_var_1525, 1);
-    stream->write((uint64_t*)&cgen_var_1525, 8);
-    stream->setHandleMapping(resources->unwrapMapping());
-    marshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
-    AEMU_SCOPED_TRACE("vkCreateImageWithRequirementsGOOGLE readParams");
-    stream->setHandleMapping(resources->createMapping());
-    uint64_t cgen_var_1526;
-    stream->read((uint64_t*)&cgen_var_1526, 8);
-    stream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_1526, (VkImage*)pImage, 1);
-    stream->unsetHandleMapping();
-    unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
-    if (pMemoryRequirements)
-    {
-        transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
-    }
-    AEMU_SCOPED_TRACE("vkCreateImageWithRequirementsGOOGLE returnUnmarshal");
-    VkResult vkCreateImageWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
-    stream->read(&vkCreateImageWithRequirementsGOOGLE_VkResult_return, sizeof(VkResult));
-    countingStream->clearPool();
-    stream->clearPool();
-    pool->freeAll();
-    mImpl->log("finish vkCreateImageWithRequirementsGOOGLE");;
-    return vkCreateImageWithRequirementsGOOGLE_VkResult_return;
-}
-
-VkResult VkEncoder::vkCreateBufferWithRequirementsGOOGLE(
-    VkDevice device,
-    const VkBufferCreateInfo* pCreateInfo,
-    const VkAllocationCallbacks* pAllocator,
-    VkBuffer* pBuffer,
-    VkMemoryRequirements* pMemoryRequirements)
-{
-    AutoLock encoderLock(mImpl->lock);
-    AEMU_SCOPED_TRACE("vkCreateBufferWithRequirementsGOOGLE encode");
-    mImpl->log("start vkCreateBufferWithRequirementsGOOGLE");
-    auto stream = mImpl->stream();
-    auto countingStream = mImpl->countingStream();
-    auto resources = mImpl->resources();
-    auto pool = mImpl->pool();
-    stream->setHandleMapping(resources->unwrapMapping());
-    VkDevice local_device;
-    VkBufferCreateInfo* local_pCreateInfo;
-    VkAllocationCallbacks* local_pAllocator;
-    local_device = device;
-    local_pCreateInfo = nullptr;
-    if (pCreateInfo)
-    {
-        local_pCreateInfo = (VkBufferCreateInfo*)pool->alloc(sizeof(const VkBufferCreateInfo));
-        deepcopy_VkBufferCreateInfo(pool, pCreateInfo, (VkBufferCreateInfo*)(local_pCreateInfo));
-    }
-    local_pAllocator = nullptr;
-    if (pAllocator)
-    {
-        local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
-    }
-    local_pAllocator = nullptr;
-    if (local_pCreateInfo)
-    {
-        transform_tohost_VkBufferCreateInfo(mImpl->resources(), (VkBufferCreateInfo*)(local_pCreateInfo));
-    }
-    if (local_pAllocator)
-    {
-        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
-    }
-    countingStream->rewind();
-    {
-        uint64_t cgen_var_1527;
-        countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1527, 1);
-        countingStream->write((uint64_t*)&cgen_var_1527, 1 * 8);
-        marshal_VkBufferCreateInfo(countingStream, (VkBufferCreateInfo*)(local_pCreateInfo));
-        // WARNING PTR CHECK
-        uint64_t cgen_var_1528 = (uint64_t)(uintptr_t)local_pAllocator;
-        countingStream->putBe64(cgen_var_1528);
-        if (local_pAllocator)
-        {
-            marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
-        }
-        uint64_t cgen_var_1529;
-        countingStream->handleMapping()->mapHandles_VkBuffer_u64(pBuffer, &cgen_var_1529, 1);
-        countingStream->write((uint64_t*)&cgen_var_1529, 8);
-        marshal_VkMemoryRequirements(countingStream, (VkMemoryRequirements*)(pMemoryRequirements));
-    }
-    uint32_t packetSize_vkCreateBufferWithRequirementsGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
-    countingStream->rewind();
-    uint32_t opcode_vkCreateBufferWithRequirementsGOOGLE = OP_vkCreateBufferWithRequirementsGOOGLE;
-    stream->write(&opcode_vkCreateBufferWithRequirementsGOOGLE, sizeof(uint32_t));
-    stream->write(&packetSize_vkCreateBufferWithRequirementsGOOGLE, sizeof(uint32_t));
-    uint64_t cgen_var_1530;
-    stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1530, 1);
-    stream->write((uint64_t*)&cgen_var_1530, 1 * 8);
-    marshal_VkBufferCreateInfo(stream, (VkBufferCreateInfo*)(local_pCreateInfo));
-    // WARNING PTR CHECK
-    uint64_t cgen_var_1531 = (uint64_t)(uintptr_t)local_pAllocator;
-    stream->putBe64(cgen_var_1531);
-    if (local_pAllocator)
-    {
-        marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
-    }
-    stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
-    uint64_t cgen_var_1532;
-    stream->handleMapping()->mapHandles_VkBuffer_u64(pBuffer, &cgen_var_1532, 1);
-    stream->write((uint64_t*)&cgen_var_1532, 8);
-    stream->setHandleMapping(resources->unwrapMapping());
-    marshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
-    AEMU_SCOPED_TRACE("vkCreateBufferWithRequirementsGOOGLE readParams");
-    stream->setHandleMapping(resources->createMapping());
-    uint64_t cgen_var_1533;
-    stream->read((uint64_t*)&cgen_var_1533, 8);
-    stream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_1533, (VkBuffer*)pBuffer, 1);
-    stream->unsetHandleMapping();
-    unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
-    if (pMemoryRequirements)
-    {
-        transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
-    }
-    AEMU_SCOPED_TRACE("vkCreateBufferWithRequirementsGOOGLE returnUnmarshal");
-    VkResult vkCreateBufferWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
-    stream->read(&vkCreateBufferWithRequirementsGOOGLE_VkResult_return, sizeof(VkResult));
-    countingStream->clearPool();
-    stream->clearPool();
-    pool->freeAll();
-    mImpl->log("finish vkCreateBufferWithRequirementsGOOGLE");;
-    return vkCreateBufferWithRequirementsGOOGLE_VkResult_return;
-}
-
-#endif
 
 } // namespace goldfish_vk
diff --git a/system/vulkan_enc/VkEncoder.h b/system/vulkan_enc/VkEncoder.h
index dd2cd64..65debda 100644
--- a/system/vulkan_enc/VkEncoder.h
+++ b/system/vulkan_enc/VkEncoder.h
@@ -1793,20 +1793,6 @@
         uint32_t needHostSync,
         uint32_t sequenceNumber);
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-    VkResult vkCreateImageWithRequirementsGOOGLE(
-    VkDevice device,
-        const VkImageCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkImage* pImage,
-        VkMemoryRequirements* pMemoryRequirements);
-    VkResult vkCreateBufferWithRequirementsGOOGLE(
-    VkDevice device,
-        const VkBufferCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkBuffer* pBuffer,
-        VkMemoryRequirements* pMemoryRequirements);
-#endif
 
 private:
     class Impl;
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp b/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
index 1513661..5b004c0 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
@@ -6384,8 +6384,6 @@
 #endif
 #ifdef VK_GOOGLE_async_command_buffers
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-#endif
 void deepcopy_extension_struct(
     Pool* pool,
     const void* structExtension,
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
index ca6d6dc..b367ee0 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
@@ -2026,7 +2026,5 @@
 #endif
 #ifdef VK_GOOGLE_async_command_buffers
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-#endif
 
 } // namespace goldfish_vk
diff --git a/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp b/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
index 481ce6c..c42f6e8 100644
--- a/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
@@ -282,8 +282,6 @@
 #endif
 #ifdef VK_GOOGLE_async_command_buffers
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-#endif
 uint32_t goldfish_vk_struct_type(
     const void* structExtension)
 {
diff --git a/system/vulkan_enc/goldfish_vk_extension_structs_guest.h b/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
index 7df1ac1..1d671f8 100644
--- a/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
+++ b/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
@@ -299,7 +299,5 @@
 #endif
 #ifdef VK_GOOGLE_async_command_buffers
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-#endif
 
 } // namespace goldfish_vk
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp b/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
index fbc6a48..7d16b31 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
@@ -4748,8 +4748,6 @@
 #endif
 #ifdef VK_GOOGLE_async_command_buffers
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-#endif
 void handlemap_extension_struct(
     VulkanHandleMapping* handlemap,
     void* structExtension_out)
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.h b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
index 911ff2f..e973064 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.h
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
@@ -1679,7 +1679,5 @@
 #endif
 #ifdef VK_GOOGLE_async_command_buffers
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-#endif
 
 } // namespace goldfish_vk
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp b/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
index 0ed32d3..96efd31 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
@@ -13453,8 +13453,6 @@
 #endif
 #ifdef VK_GOOGLE_async_command_buffers
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-#endif
 void marshal_extension_struct(
     VulkanStreamGuest* vkStream,
     const void* structExtension)
@@ -16220,16 +16218,6 @@
             return "OP_vkCommandBufferHostSyncGOOGLE";
         }
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-        case OP_vkCreateImageWithRequirementsGOOGLE:
-        {
-            return "OP_vkCreateImageWithRequirementsGOOGLE";
-        }
-        case OP_vkCreateBufferWithRequirementsGOOGLE:
-        {
-            return "OP_vkCreateBufferWithRequirementsGOOGLE";
-        }
-#endif
         default:
         {
             return "OP_UNKNOWN_API_CALL";
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.h b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
index ad7f8f3..154b7de 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.h
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
@@ -3390,10 +3390,6 @@
 #define OP_vkResetCommandBufferAsyncGOOGLE 20323
 #define OP_vkCommandBufferHostSyncGOOGLE 20324
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-#define OP_vkCreateImageWithRequirementsGOOGLE 20325
-#define OP_vkCreateBufferWithRequirementsGOOGLE 20326
-#endif
 const char* api_opcode_to_string(
     const uint32_t opcode);
 
diff --git a/system/vulkan_enc/goldfish_vk_private_defs.h b/system/vulkan_enc/goldfish_vk_private_defs.h
index b180ce8..662b8f0 100644
--- a/system/vulkan_enc/goldfish_vk_private_defs.h
+++ b/system/vulkan_enc/goldfish_vk_private_defs.h
@@ -429,11 +429,6 @@
     uint32_t needHostSync,
     uint32_t sequenceNumber);
 
-#define VK_GOOGLE_create_resources_with_requirements 1
-
-typedef void (VKAPI_PTR *PFN_vkCreateImageWithRequirementsGOOGLE)(
-    VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage, VkMemoryRequirements* pMemoryRequirements);
-
 #ifndef VK_FUCHSIA_buffer_collection
 #define VK_FUCHSIA_buffer_collection 1
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIA)
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.cpp b/system/vulkan_enc/goldfish_vk_transform_guest.cpp
index d06135e..aa42af7 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.cpp
@@ -8945,8 +8945,6 @@
 #endif
 #ifdef VK_GOOGLE_async_command_buffers
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-#endif
 void transform_tohost_extension_struct(
     ResourceTracker* resourceTracker,
     void* structExtension_out)
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.h b/system/vulkan_enc/goldfish_vk_transform_guest.h
index 217284e..754c033 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.h
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.h
@@ -3067,7 +3067,5 @@
 #endif
 #ifdef VK_GOOGLE_async_command_buffers
 #endif
-#ifdef VK_GOOGLE_create_resources_with_requirements
-#endif
 
 } // namespace goldfish_vk
