diff --git a/build-fuchsia/Vulkan-Docs.diff b/build-fuchsia/Vulkan-Docs.diff
index 9b97928..f1107ac 100644
--- a/build-fuchsia/Vulkan-Docs.diff
+++ b/build-fuchsia/Vulkan-Docs.diff
@@ -34,8 +34,7 @@
                                      'VK_ANDROID_external_memory_android_hardware_buffer'
                                                                    ], commonSuppressExtensions ],
 -        [ 'vulkan_fuchsia.h',     [ 'VK_FUCHSIA_imagepipe_surface'], commonSuppressExtensions ],
-+        [ 'vulkan_fuchsia.h',     [ 'VK_KHR_magma_surface',
-+                                    'VK_FUCHSIA_imagepipe_surface',
++        [ 'vulkan_fuchsia.h',     [ 'VK_FUCHSIA_imagepipe_surface',
 +                                    'VK_FUCHSIA_external_memory',
 +                                    'VK_FUCHSIA_external_semaphore',
 +                                    'VK_FUCHSIA_buffer_collection'], commonSuppressExtensions ],
diff --git a/build-fuchsia/generated/include/object_tracker.cpp b/build-fuchsia/generated/include/object_tracker.cpp
index 80a6ac8..202b148 100644
--- a/build-fuchsia/generated/include/object_tracker.cpp
+++ b/build-fuchsia/generated/include/object_tracker.cpp
@@ -4222,47 +4222,6 @@
 
 }
 
-#ifdef VK_USE_PLATFORM_FUCHSIA
-
-VKAPI_ATTR VkResult VKAPI_CALL CreateMagmaSurfaceKHR(
-    VkInstance                                  instance,
-    const VkMagmaSurfaceCreateInfoKHR*          pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface)
-{
-    bool skip = false;
-    {
-        std::lock_guard<std::mutex> lock(global_lock);
-        skip |= ValidateObject(instance, instance, kVulkanObjectTypeInstance, false, VALIDATION_ERROR_UNDEFINED, VALIDATION_ERROR_UNDEFINED);
-    }
-    if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
-    VkResult result = get_dispatch_table(ot_instance_table_map, instance)->CreateMagmaSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
-    if (VK_SUCCESS == result) {
-        std::lock_guard<std::mutex> lock(global_lock);
-        CreateObject(instance, *pSurface, kVulkanObjectTypeSurfaceKHR, pAllocator);
-    }
-    return result;
-}
-#endif // VK_USE_PLATFORM_FUCHSIA
-
-#ifdef VK_USE_PLATFORM_FUCHSIA
-
-VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceMagmaPresentationSupportKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    queueFamilyIndex)
-{
-    bool skip = false;
-    {
-        std::lock_guard<std::mutex> lock(global_lock);
-        skip |= ValidateObject(physicalDevice, physicalDevice, kVulkanObjectTypePhysicalDevice, false, VALIDATION_ERROR_UNDEFINED, VALIDATION_ERROR_UNDEFINED);
-    }
-    if (skip) return VK_FALSE;
-    VkBool32 result = get_dispatch_table(ot_instance_table_map, physicalDevice)->GetPhysicalDeviceMagmaPresentationSupportKHR(physicalDevice, queueFamilyIndex);
-
-    return result;
-}
-#endif // VK_USE_PLATFORM_FUCHSIA
-
 // Declare only
 VKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(
     VkInstance                                  instance,
@@ -5637,12 +5596,6 @@
     {"vkBindBufferMemory2KHR", (void*)BindBufferMemory2KHR},
     {"vkBindImageMemory2KHR", (void*)BindImageMemory2KHR},
     {"vkGetDescriptorSetLayoutSupportKHR", (void*)GetDescriptorSetLayoutSupportKHR},
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    {"vkCreateMagmaSurfaceKHR", (void*)CreateMagmaSurfaceKHR},
-#endif
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    {"vkGetPhysicalDeviceMagmaPresentationSupportKHR", (void*)GetPhysicalDeviceMagmaPresentationSupportKHR},
-#endif
     {"vkCreateDebugReportCallbackEXT", (void *)CreateDebugReportCallbackEXT},
     {"vkDestroyDebugReportCallbackEXT", (void *)DestroyDebugReportCallbackEXT},
     {"vkDebugReportMessageEXT", (void *)DebugReportMessageEXT},
diff --git a/build-fuchsia/generated/include/parameter_validation.cpp b/build-fuchsia/generated/include/parameter_validation.cpp
index d082e37..d095d67 100644
--- a/build-fuchsia/generated/include/parameter_validation.cpp
+++ b/build-fuchsia/generated/include/parameter_validation.cpp
@@ -438,12 +438,6 @@
 typedef bool (*PFN_manual_vkBindBufferMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos);
 typedef bool (*PFN_manual_vkBindImageMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos);
 typedef bool (*PFN_manual_vkGetDescriptorSetLayoutSupportKHR)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport);
-#ifdef VK_USE_PLATFORM_FUCHSIA
-typedef bool (*PFN_manual_vkCreateMagmaSurfaceKHR)(VkInstance instance, const VkMagmaSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-#endif
-#ifdef VK_USE_PLATFORM_FUCHSIA
-typedef bool (*PFN_manual_vkGetPhysicalDeviceMagmaPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
-#endif
 typedef bool (*PFN_manual_vkDebugReportMessageEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage);
 typedef bool (*PFN_manual_vkDebugMarkerSetObjectTagEXT)(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo);
 typedef bool (*PFN_manual_vkDebugMarkerSetObjectNameEXT)(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo);
@@ -804,12 +798,6 @@
     {"vkBindBufferMemory2KHR", nullptr},
     {"vkBindImageMemory2KHR", nullptr},
     {"vkGetDescriptorSetLayoutSupportKHR", nullptr},
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    {"vkCreateMagmaSurfaceKHR", nullptr},
-#endif
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    {"vkGetPhysicalDeviceMagmaPresentationSupportKHR", nullptr},
-#endif
     {"vkDebugReportMessageEXT", nullptr},
     {"vkDebugMarkerSetObjectTagEXT", nullptr},
     {"vkDebugMarkerSetObjectNameEXT", nullptr},
@@ -9335,82 +9323,6 @@
 
 
 
-#ifdef VK_USE_PLATFORM_FUCHSIA
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateMagmaSurfaceKHR(
-    VkInstance                                  instance,
-    const VkMagmaSurfaceCreateInfoKHR*          pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface)
-{
-    instance_layer_data *local_data = GetLayerDataPtr(get_dispatch_key(instance), instance_layer_data_map);
-    bool skip = false;
-    VkResult result = VK_ERROR_VALIDATION_FAILED_EXT;
-    std::unique_lock<std::mutex> lock(global_lock);
-
-    if (!local_data->extensions.vk_khr_surface) skip |= OutputExtensionError(local_data, "vkCreateMagmaSurfaceKHR", VK_KHR_SURFACE_EXTENSION_NAME);
-
-    if (!local_data->extensions.vk_khr_magma_surface) skip |= OutputExtensionError(local_data, "vkCreateMagmaSurfaceKHR", VK_KHR_MAGMA_SURFACE_EXTENSION_NAME);
-
-    skip |= validate_struct_type(local_data->report_data, "vkCreateMagmaSurfaceKHR", "pCreateInfo", "VK_STRUCTURE_TYPE_MAGMA_SURFACE_CREATE_INFO_KHR", pCreateInfo, VK_STRUCTURE_TYPE_MAGMA_SURFACE_CREATE_INFO_KHR, true, VALIDATION_ERROR_UNDEFINED);
-
-    if (pCreateInfo != NULL)
-    {
-        skip |= validate_struct_pnext(local_data->report_data, "vkCreateMagmaSurfaceKHR", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion, VALIDATION_ERROR_UNDEFINED);
-    }
-
-    if (pAllocator != NULL)
-    {
-        skip |= validate_required_pointer(local_data->report_data, "vkCreateMagmaSurfaceKHR", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation), VALIDATION_ERROR_002004f0);
-
-        skip |= validate_required_pointer(local_data->report_data, "vkCreateMagmaSurfaceKHR", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation), VALIDATION_ERROR_002004f2);
-
-        skip |= validate_required_pointer(local_data->report_data, "vkCreateMagmaSurfaceKHR", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree), VALIDATION_ERROR_002004f4);
-    }
-
-    skip |= validate_required_pointer(local_data->report_data, "vkCreateMagmaSurfaceKHR", "pSurface", pSurface, VALIDATION_ERROR_UNDEFINED);
-
-    PFN_manual_vkCreateMagmaSurfaceKHR custom_func = (PFN_manual_vkCreateMagmaSurfaceKHR)custom_functions["vkCreateMagmaSurfaceKHR"];
-    if (custom_func != nullptr) {
-        skip |= custom_func(instance, pCreateInfo, pAllocator, pSurface);
-    }
-
-    lock.unlock();
-    if (!skip) {
-            result = local_data->dispatch_table.CreateMagmaSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
-    }
-    return result;
-}
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMagmaPresentationSupportKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    queueFamilyIndex)
-{
-    instance_layer_data *local_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), instance_layer_data_map);
-    bool skip = false;
-    VkBool32 result = VK_FALSE;
-    std::unique_lock<std::mutex> lock(global_lock);
-
-    if (!local_data->extensions.vk_khr_surface) skip |= OutputExtensionError(local_data, "vkGetPhysicalDeviceMagmaPresentationSupportKHR", VK_KHR_SURFACE_EXTENSION_NAME);
-
-    if (!local_data->extensions.vk_khr_magma_surface) skip |= OutputExtensionError(local_data, "vkGetPhysicalDeviceMagmaPresentationSupportKHR", VK_KHR_MAGMA_SURFACE_EXTENSION_NAME);
-
-    // No xml-driven validation
-
-    PFN_manual_vkGetPhysicalDeviceMagmaPresentationSupportKHR custom_func = (PFN_manual_vkGetPhysicalDeviceMagmaPresentationSupportKHR)custom_functions["vkGetPhysicalDeviceMagmaPresentationSupportKHR"];
-    if (custom_func != nullptr) {
-        skip |= custom_func(physicalDevice, queueFamilyIndex);
-    }
-
-    lock.unlock();
-    if (!skip) {
-            result = local_data->dispatch_table.GetPhysicalDeviceMagmaPresentationSupportKHR(physicalDevice, queueFamilyIndex);
-    }
-    return result;
-}
-
-#endif // VK_USE_PLATFORM_FUCHSIA
-
 // Generated function handles validation only -- API definition is in non-generated source
 extern VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
     VkInstance                                  instance,
@@ -13123,18 +13035,6 @@
     VkDevice                                    device,
     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
     VkDescriptorSetLayoutSupport*               pSupport);
-#ifdef VK_USE_PLATFORM_FUCHSIA
-VKAPI_ATTR VkResult VKAPI_CALL CreateMagmaSurfaceKHR(
-    VkInstance                                  instance,
-    const VkMagmaSurfaceCreateInfoKHR*          pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-#endif
-#ifdef VK_USE_PLATFORM_FUCHSIA
-VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceMagmaPresentationSupportKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    queueFamilyIndex);
-#endif
 VKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(
     VkInstance                                  instance,
     const VkDebugReportCallbackCreateInfoEXT*   pCreateInfo,
@@ -13740,12 +13640,6 @@
     {"vkBindBufferMemory2KHR", (void*)vkBindBufferMemory2KHR},
     {"vkBindImageMemory2KHR", (void*)vkBindImageMemory2KHR},
     {"vkGetDescriptorSetLayoutSupportKHR", (void*)vkGetDescriptorSetLayoutSupportKHR},
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    {"vkCreateMagmaSurfaceKHR", (void*)vkCreateMagmaSurfaceKHR},
-#endif
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    {"vkGetPhysicalDeviceMagmaPresentationSupportKHR", (void*)vkGetPhysicalDeviceMagmaPresentationSupportKHR},
-#endif
     {"vkCreateDebugReportCallbackEXT", (void*)vkCreateDebugReportCallbackEXT},
     {"vkDestroyDebugReportCallbackEXT", (void*)vkDestroyDebugReportCallbackEXT},
     {"vkDebugReportMessageEXT", (void*)vkDebugReportMessageEXT},
diff --git a/build-fuchsia/generated/include/thread_check.h b/build-fuchsia/generated/include/thread_check.h
index 43bf7ae..af76aa3 100644
--- a/build-fuchsia/generated/include/thread_check.h
+++ b/build-fuchsia/generated/include/thread_check.h
@@ -4828,32 +4828,6 @@
     }
 }
 
-#ifdef VK_USE_PLATFORM_FUCHSIA
-
-VKAPI_ATTR VkResult VKAPI_CALL CreateMagmaSurfaceKHR(
-    VkInstance                                  instance,
-    const VkMagmaSurfaceCreateInfoKHR*          pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface)
-{
-    dispatch_key key = get_dispatch_key(instance);
-    layer_data *my_data = GetLayerDataPtr(key, layer_data_map);
-    VkLayerInstanceDispatchTable *pTable = my_data->instance_dispatch_table;
-    VkResult result;
-    bool threadChecks = startMultiThread();
-    if (threadChecks) {
-        startReadObject(my_data, instance);
-    }
-    result = pTable->CreateMagmaSurfaceKHR(instance,pCreateInfo,pAllocator,pSurface);
-    if (threadChecks) {
-        finishReadObject(my_data, instance);
-    } else {
-        finishMultiThread();
-    }
-    return result;
-}
-#endif /* VK_USE_PLATFORM_FUCHSIA */
-
 
 // declare only
 VKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(
@@ -6451,9 +6425,6 @@
     {"vkBindBufferMemory2KHR", (void*)BindBufferMemory2KHR},
     {"vkBindImageMemory2KHR", (void*)BindImageMemory2KHR},
     {"vkGetDescriptorSetLayoutSupportKHR", (void*)GetDescriptorSetLayoutSupportKHR},
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    {"vkCreateMagmaSurfaceKHR", (void*)CreateMagmaSurfaceKHR},
-#endif
     {"vkCreateDebugReportCallbackEXT", (void*)CreateDebugReportCallbackEXT},
     {"vkDestroyDebugReportCallbackEXT", (void*)DestroyDebugReportCallbackEXT},
     {"vkDebugReportMessageEXT", (void*)DebugReportMessageEXT},
diff --git a/build-fuchsia/generated/include/unique_objects_wrappers.h b/build-fuchsia/generated/include/unique_objects_wrappers.h
index 6552362..327523f 100644
--- a/build-fuchsia/generated/include/unique_objects_wrappers.h
+++ b/build-fuchsia/generated/include/unique_objects_wrappers.h
@@ -3672,24 +3672,6 @@
     }
 }
 
-#ifdef VK_USE_PLATFORM_FUCHSIA
-
-VKAPI_ATTR VkResult VKAPI_CALL CreateMagmaSurfaceKHR(
-    VkInstance                                  instance,
-    const VkMagmaSurfaceCreateInfoKHR*          pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface)
-{
-    instance_layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(instance), instance_layer_data_map);
-    VkResult result = dev_data->dispatch_table.CreateMagmaSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
-    if (VK_SUCCESS == result) {
-        std::lock_guard<std::mutex> lock(global_lock);
-        *pSurface = WrapNew(*pSurface);
-    }
-    return result;
-}
-#endif // VK_USE_PLATFORM_FUCHSIA
-
 // Declare only
 VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(
     VkDevice                                    device,
@@ -4652,9 +4634,6 @@
     {"vkBindBufferMemory2KHR", (void*)BindBufferMemory2KHR},
     {"vkBindImageMemory2KHR", (void*)BindImageMemory2KHR},
     {"vkGetDescriptorSetLayoutSupportKHR", (void*)GetDescriptorSetLayoutSupportKHR},
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    {"vkCreateMagmaSurfaceKHR", (void*)CreateMagmaSurfaceKHR},
-#endif
     {"vkDebugMarkerSetObjectTagEXT", (void *)DebugMarkerSetObjectTagEXT},
     {"vkDebugMarkerSetObjectNameEXT", (void *)DebugMarkerSetObjectNameEXT},
     {"vkCmdDrawIndirectCountAMD", (void*)CmdDrawIndirectCountAMD},
diff --git a/build-fuchsia/generated/include/vk_dispatch_table_helper.h b/build-fuchsia/generated/include/vk_dispatch_table_helper.h
index faa780a..502178f 100644
--- a/build-fuchsia/generated/include/vk_dispatch_table_helper.h
+++ b/build-fuchsia/generated/include/vk_dispatch_table_helper.h
@@ -581,12 +581,6 @@
     table->GetPhysicalDeviceExternalFencePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR) gpa(instance, "vkGetPhysicalDeviceExternalFencePropertiesKHR");
     table->GetPhysicalDeviceSurfaceCapabilities2KHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR) gpa(instance, "vkGetPhysicalDeviceSurfaceCapabilities2KHR");
     table->GetPhysicalDeviceSurfaceFormats2KHR = (PFN_vkGetPhysicalDeviceSurfaceFormats2KHR) gpa(instance, "vkGetPhysicalDeviceSurfaceFormats2KHR");
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    table->CreateMagmaSurfaceKHR = (PFN_vkCreateMagmaSurfaceKHR) gpa(instance, "vkCreateMagmaSurfaceKHR");
-#endif // VK_USE_PLATFORM_FUCHSIA
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    table->GetPhysicalDeviceMagmaPresentationSupportKHR = (PFN_vkGetPhysicalDeviceMagmaPresentationSupportKHR) gpa(instance, "vkGetPhysicalDeviceMagmaPresentationSupportKHR");
-#endif // VK_USE_PLATFORM_FUCHSIA
     table->CreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT) gpa(instance, "vkCreateDebugReportCallbackEXT");
     table->DestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT) gpa(instance, "vkDestroyDebugReportCallbackEXT");
     table->DebugReportMessageEXT = (PFN_vkDebugReportMessageEXT) gpa(instance, "vkDebugReportMessageEXT");
diff --git a/build-fuchsia/generated/include/vk_enum_string_helper.h b/build-fuchsia/generated/include/vk_enum_string_helper.h
index 767305f..456d9d1 100644
--- a/build-fuchsia/generated/include/vk_enum_string_helper.h
+++ b/build-fuchsia/generated/include/vk_enum_string_helper.h
@@ -362,8 +362,6 @@
             return "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO";
         case VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK:
             return "VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK";
-        case VK_STRUCTURE_TYPE_MAGMA_SURFACE_CREATE_INFO_KHR:
-            return "VK_STRUCTURE_TYPE_MAGMA_SURFACE_CREATE_INFO_KHR";
         case VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE:
             return "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE";
         case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:
diff --git a/build-fuchsia/generated/include/vk_extension_helper.h b/build-fuchsia/generated/include/vk_extension_helper.h
index b943d11..d9defda 100644
--- a/build-fuchsia/generated/include/vk_extension_helper.h
+++ b/build-fuchsia/generated/include/vk_extension_helper.h
@@ -55,7 +55,6 @@
     bool vk_khr_external_semaphore_capabilities{false};
     bool vk_khr_get_physical_device_properties_2{false};
     bool vk_khr_get_surface_capabilities_2{false};
-    bool vk_khr_magma_surface{false};
     bool vk_khr_mir_surface{false};
     bool vk_khr_surface{false};
     bool vk_khr_wayland_surface{false};
@@ -114,10 +113,6 @@
             std::make_pair(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_get_physical_device_properties_2, {})),
             std::make_pair(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_get_surface_capabilities_2, {{
                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
-#ifdef VK_USE_PLATFORM_FUCHSIA
-            std::make_pair(VK_KHR_MAGMA_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_magma_surface, {{
-                           {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
-#endif
 #ifdef VK_USE_PLATFORM_MIR_KHR
             std::make_pair(VK_KHR_MIR_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_mir_surface, {{
                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
@@ -220,9 +215,6 @@
     VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME
     VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
     VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    VK_KHR_MAGMA_SURFACE_EXTENSION_NAME
-#endif
 #ifdef VK_USE_PLATFORM_MIR_KHR
     VK_KHR_MIR_SURFACE_EXTENSION_NAME
 #endif
diff --git a/build-fuchsia/generated/include/vk_layer_dispatch_table.h b/build-fuchsia/generated/include/vk_layer_dispatch_table.h
index 1c816dd..f7a4844 100644
--- a/build-fuchsia/generated/include/vk_layer_dispatch_table.h
+++ b/build-fuchsia/generated/include/vk_layer_dispatch_table.h
@@ -152,14 +152,6 @@
     PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR GetPhysicalDeviceSurfaceCapabilities2KHR;
     PFN_vkGetPhysicalDeviceSurfaceFormats2KHR GetPhysicalDeviceSurfaceFormats2KHR;
 
-    // ---- VK_KHR_magma_surface extension commands
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    PFN_vkCreateMagmaSurfaceKHR CreateMagmaSurfaceKHR;
-#endif // VK_USE_PLATFORM_FUCHSIA
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    PFN_vkGetPhysicalDeviceMagmaPresentationSupportKHR GetPhysicalDeviceMagmaPresentationSupportKHR;
-#endif // VK_USE_PLATFORM_FUCHSIA
-
     // ---- VK_EXT_debug_report extension commands
     PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
     PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
diff --git a/build-fuchsia/generated/include/vk_loader_extensions.c b/build-fuchsia/generated/include/vk_loader_extensions.c
index 8c184d9..6a75115 100644
--- a/build-fuchsia/generated/include/vk_loader_extensions.c
+++ b/build-fuchsia/generated/include/vk_loader_extensions.c
@@ -182,14 +182,6 @@
     LOOKUP_GIPA(GetPhysicalDeviceSurfaceCapabilities2KHR, false);
     LOOKUP_GIPA(GetPhysicalDeviceSurfaceFormats2KHR, false);
 
-    // ---- VK_KHR_magma_surface extension commands
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    LOOKUP_GIPA(CreateMagmaSurfaceKHR, false);
-#endif // VK_USE_PLATFORM_FUCHSIA
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    LOOKUP_GIPA(GetPhysicalDeviceMagmaPresentationSupportKHR, false);
-#endif // VK_USE_PLATFORM_FUCHSIA
-
     // ---- VK_EXT_debug_report extension commands
     LOOKUP_GIPA(CreateDebugReportCallbackEXT, false);
     LOOKUP_GIPA(DestroyDebugReportCallbackEXT, false);
@@ -729,14 +721,6 @@
     table->GetPhysicalDeviceSurfaceCapabilities2KHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)gpa(inst, "vkGetPhysicalDeviceSurfaceCapabilities2KHR");
     table->GetPhysicalDeviceSurfaceFormats2KHR = (PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)gpa(inst, "vkGetPhysicalDeviceSurfaceFormats2KHR");
 
-    // ---- VK_KHR_magma_surface extension commands
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    table->CreateMagmaSurfaceKHR = (PFN_vkCreateMagmaSurfaceKHR)gpa(inst, "vkCreateMagmaSurfaceKHR");
-#endif // VK_USE_PLATFORM_FUCHSIA
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    table->GetPhysicalDeviceMagmaPresentationSupportKHR = (PFN_vkGetPhysicalDeviceMagmaPresentationSupportKHR)gpa(inst, "vkGetPhysicalDeviceMagmaPresentationSupportKHR");
-#endif // VK_USE_PLATFORM_FUCHSIA
-
     // ---- VK_EXT_debug_report extension commands
     table->CreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)gpa(inst, "vkCreateDebugReportCallbackEXT");
     table->DestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)gpa(inst, "vkDestroyDebugReportCallbackEXT");
@@ -1264,14 +1248,6 @@
     if (!strcmp(name, "GetPhysicalDeviceSurfaceCapabilities2KHR")) return (void *)table->GetPhysicalDeviceSurfaceCapabilities2KHR;
     if (!strcmp(name, "GetPhysicalDeviceSurfaceFormats2KHR")) return (void *)table->GetPhysicalDeviceSurfaceFormats2KHR;
 
-    // ---- VK_KHR_magma_surface extension commands
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    if (!strcmp(name, "CreateMagmaSurfaceKHR")) return (void *)table->CreateMagmaSurfaceKHR;
-#endif // VK_USE_PLATFORM_FUCHSIA
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    if (!strcmp(name, "GetPhysicalDeviceMagmaPresentationSupportKHR")) return (void *)table->GetPhysicalDeviceMagmaPresentationSupportKHR;
-#endif // VK_USE_PLATFORM_FUCHSIA
-
     // ---- VK_EXT_debug_report extension commands
     if (!strcmp(name, "CreateDebugReportCallbackEXT")) return (void *)table->CreateDebugReportCallbackEXT;
     if (!strcmp(name, "DestroyDebugReportCallbackEXT")) return (void *)table->DestroyDebugReportCallbackEXT;
@@ -3187,14 +3163,6 @@
     .GetPhysicalDeviceSurfaceCapabilities2KHR = terminator_GetPhysicalDeviceSurfaceCapabilities2KHR,
     .GetPhysicalDeviceSurfaceFormats2KHR = terminator_GetPhysicalDeviceSurfaceFormats2KHR,
 
-    // ---- VK_KHR_magma_surface extension commands
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    .CreateMagmaSurfaceKHR = terminator_CreateMagmaSurfaceKHR,
-#endif // VK_USE_PLATFORM_FUCHSIA
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    .GetPhysicalDeviceMagmaPresentationSupportKHR = terminator_GetPhysicalDeviceMagmaPresentationSupportKHR,
-#endif // VK_USE_PLATFORM_FUCHSIA
-
     // ---- VK_EXT_debug_report extension commands
     .CreateDebugReportCallbackEXT = terminator_CreateDebugReportCallbackEXT,
     .DestroyDebugReportCallbackEXT = terminator_DestroyDebugReportCallbackEXT,
@@ -3277,9 +3245,6 @@
                                                   VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME,
                                                   VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME,
                                                   VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME,
-#ifdef VK_USE_PLATFORM_FUCHSIA
-                                                  VK_KHR_MAGMA_SURFACE_EXTENSION_NAME,
-#endif // VK_USE_PLATFORM_FUCHSIA
                                                   VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
                                                   VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME,
                                                   VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME,
diff --git a/build-fuchsia/generated/include/vk_loader_extensions.h b/build-fuchsia/generated/include/vk_loader_extensions.h
index 04bcd11..1cb6d1c 100644
--- a/build-fuchsia/generated/include/vk_loader_extensions.h
+++ b/build-fuchsia/generated/include/vk_loader_extensions.h
@@ -329,14 +329,6 @@
     PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR GetPhysicalDeviceSurfaceCapabilities2KHR;
     PFN_vkGetPhysicalDeviceSurfaceFormats2KHR GetPhysicalDeviceSurfaceFormats2KHR;
 
-    // ---- VK_KHR_magma_surface extension commands
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    PFN_vkCreateMagmaSurfaceKHR CreateMagmaSurfaceKHR;
-#endif // VK_USE_PLATFORM_FUCHSIA
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    PFN_vkGetPhysicalDeviceMagmaPresentationSupportKHR GetPhysicalDeviceMagmaPresentationSupportKHR;
-#endif // VK_USE_PLATFORM_FUCHSIA
-
     // ---- VK_EXT_debug_report extension commands
     PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
     PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
diff --git a/build-fuchsia/generated/include/vk_safe_struct.cpp b/build-fuchsia/generated/include/vk_safe_struct.cpp
index df6f51b..29f596e 100644
--- a/build-fuchsia/generated/include/vk_safe_struct.cpp
+++ b/build-fuchsia/generated/include/vk_safe_struct.cpp
@@ -12059,67 +12059,6 @@
         memcpy ((void *)pViewFormats, (void *)src->pViewFormats, sizeof(VkFormat)*src->viewFormatCount);
     }
 }
-#ifdef VK_USE_PLATFORM_FUCHSIA
-
-
-safe_VkMagmaSurfaceCreateInfoKHR::safe_VkMagmaSurfaceCreateInfoKHR(const VkMagmaSurfaceCreateInfoKHR* in_struct) :
-    sType(in_struct->sType),
-    pNext(in_struct->pNext),
-    imagePipeHandle(in_struct->imagePipeHandle),
-    width(in_struct->width),
-    height(in_struct->height)
-{
-}
-
-safe_VkMagmaSurfaceCreateInfoKHR::safe_VkMagmaSurfaceCreateInfoKHR()
-{}
-
-safe_VkMagmaSurfaceCreateInfoKHR::safe_VkMagmaSurfaceCreateInfoKHR(const safe_VkMagmaSurfaceCreateInfoKHR& src)
-{
-    sType = src.sType;
-    pNext = src.pNext;
-    imagePipeHandle = src.imagePipeHandle;
-    width = src.width;
-    height = src.height;
-}
-
-safe_VkMagmaSurfaceCreateInfoKHR& safe_VkMagmaSurfaceCreateInfoKHR::operator=(const safe_VkMagmaSurfaceCreateInfoKHR& src)
-{
-    if (&src == this) return *this;
-
-
-    sType = src.sType;
-    pNext = src.pNext;
-    imagePipeHandle = src.imagePipeHandle;
-    width = src.width;
-    height = src.height;
-
-    return *this;
-}
-
-safe_VkMagmaSurfaceCreateInfoKHR::~safe_VkMagmaSurfaceCreateInfoKHR()
-{
-}
-
-void safe_VkMagmaSurfaceCreateInfoKHR::initialize(const VkMagmaSurfaceCreateInfoKHR* in_struct)
-{
-    sType = in_struct->sType;
-    pNext = in_struct->pNext;
-    imagePipeHandle = in_struct->imagePipeHandle;
-    width = in_struct->width;
-    height = in_struct->height;
-}
-
-void safe_VkMagmaSurfaceCreateInfoKHR::initialize(const safe_VkMagmaSurfaceCreateInfoKHR* src)
-{
-    sType = src->sType;
-    pNext = src->pNext;
-    imagePipeHandle = src->imagePipeHandle;
-    width = src->width;
-    height = src->height;
-}
-#endif // VK_USE_PLATFORM_FUCHSIA
-
 
 safe_VkDebugReportCallbackCreateInfoEXT::safe_VkDebugReportCallbackCreateInfoEXT(const VkDebugReportCallbackCreateInfoEXT* in_struct) :
     sType(in_struct->sType),
diff --git a/build-fuchsia/generated/include/vk_safe_struct.h b/build-fuchsia/generated/include/vk_safe_struct.h
index eb59787..280e244 100644
--- a/build-fuchsia/generated/include/vk_safe_struct.h
+++ b/build-fuchsia/generated/include/vk_safe_struct.h
@@ -2923,25 +2923,6 @@
     VkImageFormatListCreateInfoKHR const *ptr() const { return reinterpret_cast<VkImageFormatListCreateInfoKHR const *>(this); }
 };
 
-#ifdef VK_USE_PLATFORM_FUCHSIA
-struct safe_VkMagmaSurfaceCreateInfoKHR {
-    VkStructureType sType;
-    const void* pNext;
-    zx_handle_t imagePipeHandle;
-    uint32_t width;
-    uint32_t height;
-    safe_VkMagmaSurfaceCreateInfoKHR(const VkMagmaSurfaceCreateInfoKHR* in_struct);
-    safe_VkMagmaSurfaceCreateInfoKHR(const safe_VkMagmaSurfaceCreateInfoKHR& src);
-    safe_VkMagmaSurfaceCreateInfoKHR& operator=(const safe_VkMagmaSurfaceCreateInfoKHR& src);
-    safe_VkMagmaSurfaceCreateInfoKHR();
-    ~safe_VkMagmaSurfaceCreateInfoKHR();
-    void initialize(const VkMagmaSurfaceCreateInfoKHR* in_struct);
-    void initialize(const safe_VkMagmaSurfaceCreateInfoKHR* src);
-    VkMagmaSurfaceCreateInfoKHR *ptr() { return reinterpret_cast<VkMagmaSurfaceCreateInfoKHR *>(this); }
-    VkMagmaSurfaceCreateInfoKHR const *ptr() const { return reinterpret_cast<VkMagmaSurfaceCreateInfoKHR const *>(this); }
-};
-#endif // VK_USE_PLATFORM_FUCHSIA
-
 struct safe_VkDebugReportCallbackCreateInfoEXT {
     VkStructureType sType;
     const void* pNext;
diff --git a/build-fuchsia/generated/include/vk_typemap_helper.h b/build-fuchsia/generated/include/vk_typemap_helper.h
index abf1c1f..8717766 100644
--- a/build-fuchsia/generated/include/vk_typemap_helper.h
+++ b/build-fuchsia/generated/include/vk_typemap_helper.h
@@ -1470,17 +1470,6 @@
     typedef VkImageFormatListCreateInfoKHR Type;
 };
 
-#ifdef VK_USE_PLATFORM_FUCHSIA
-// Map type VkMagmaSurfaceCreateInfoKHR to id VK_STRUCTURE_TYPE_MAGMA_SURFACE_CREATE_INFO_KHR
-template <> struct LvlTypeMap<VkMagmaSurfaceCreateInfoKHR> {
-    static const VkStructureType kSType = VK_STRUCTURE_TYPE_MAGMA_SURFACE_CREATE_INFO_KHR;
-};
-
-template <> struct LvlSTypeMap<VK_STRUCTURE_TYPE_MAGMA_SURFACE_CREATE_INFO_KHR> {
-    typedef VkMagmaSurfaceCreateInfoKHR Type;
-};
-
-#endif // VK_USE_PLATFORM_FUCHSIA
 // Map type VkDebugReportCallbackCreateInfoEXT to id VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
 template <> struct LvlTypeMap<VkDebugReportCallbackCreateInfoEXT> {
     static const VkStructureType kSType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
diff --git a/common/vulkan_wrapper.cpp b/common/vulkan_wrapper.cpp
index 129dde8..7e62de1 100644
--- a/common/vulkan_wrapper.cpp
+++ b/common/vulkan_wrapper.cpp
@@ -13,8 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-// This file is generated, and then has been manually modified to add
-// Magma-specific functions.
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -250,11 +248,6 @@
         dlsym(libvulkan, "vkGetPhysicalDeviceWin32PresentationSupportKHR"));
 #endif
 
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    vkCreateMagmaSurfaceKHR = reinterpret_cast<PFN_vkCreateMagmaSurfaceKHR>(dlsym(libvulkan, "vkCreateMagmaSurfaceKHR"));
-    vkGetPhysicalDeviceMagmaPresentationSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceMagmaPresentationSupportKHR>(
-        dlsym(libvulkan, "vkGetPhysicalDeviceMagmaPresentationSupportKHR"));
-#endif
     return 1;
 }
 
@@ -445,11 +438,6 @@
 PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR;
 #endif
 
-#ifdef VK_USE_PLATFORM_FUCHSIA
-PFN_vkCreateMagmaSurfaceKHR vkCreateMagmaSurfaceKHR;
-PFN_vkGetPhysicalDeviceMagmaPresentationSupportKHR vkGetPhysicalDeviceMagmaPresentationSupportKHR;
-#endif
-
 PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT;
 PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT;
 PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT;
diff --git a/common/vulkan_wrapper.h b/common/vulkan_wrapper.h
index e9db446..78c8b4b 100644
--- a/common/vulkan_wrapper.h
+++ b/common/vulkan_wrapper.h
@@ -13,8 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-// This file is generated, and then has been manually modified to add
-// Magma-specific functions.
 #ifndef VULKAN_WRAPPER_H
 #define VULKAN_WRAPPER_H
 
@@ -231,12 +229,6 @@
 extern PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR;
 #endif
 
-#ifdef VK_USE_PLATFORM_FUCHSIA
-// VK_KHR_magma_surface
-extern PFN_vkCreateMagmaSurfaceKHR vkCreateMagmaSurfaceKHR;
-extern PFN_vkGetPhysicalDeviceMagmaPresentationSupportKHR vkGetPhysicalDeviceMagmaPresentationSupportKHR;
-#endif
-
 
 // VK_KHR_sampler_mirror_clamp_to_edge
 
diff --git a/include/vulkan/vk_icd.h b/include/vulkan/vk_icd.h
index 2cac13c..332b507 100644
--- a/include/vulkan/vk_icd.h
+++ b/include/vulkan/vk_icd.h
@@ -89,7 +89,6 @@
     VK_ICD_WSI_PLATFORM_MACOS,
     VK_ICD_WSI_PLATFORM_IOS,
     VK_ICD_WSI_PLATFORM_DISPLAY,
-    VK_ICD_WSI_PLATFORM_MAGMA,
     VK_ICD_WSI_PLATFORM_FUCHSIA,
 } VkIcdWsiPlatform;
 
@@ -161,11 +160,6 @@
 #ifdef VK_USE_PLATFORM_FUCHSIA
 typedef struct {
   VkIcdSurfaceBase base;
-  int fd;
-  void* connection;
-} VkIcdSurfaceMagma;
-typedef struct {
-  VkIcdSurfaceBase base;
 } VkIcdSurfaceImagePipe;
 #endif // VK_USE_PLATFORM_FUCHSIA
 
diff --git a/include/vulkan/vulkan.hpp b/include/vulkan/vulkan.hpp
index 13284fc..d809a5e 100644
--- a/include/vulkan/vulkan.hpp
+++ b/include/vulkan/vulkan.hpp
@@ -1498,12 +1498,6 @@
     return ::vkCreateMacOSSurfaceMVK( instance, pCreateInfo, pAllocator, pSurface);
   }
 #endif /*VK_USE_PLATFORM_MACOS_MVK*/
-#ifdef VK_USE_PLATFORM_FUCHSIA
-  VkResult vkCreateMagmaSurfaceKHR( VkInstance instance, const VkMagmaSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface  ) const
-  {
-    return ::vkCreateMagmaSurfaceKHR( instance, pCreateInfo, pAllocator, pSurface);
-  }
-#endif /*VK_USE_PLATFORM_FUCHSIA*/
 #ifdef VK_USE_PLATFORM_MIR_KHR
   VkResult vkCreateMirSurfaceKHR( VkInstance instance, const VkMirSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface  ) const
   {
@@ -2048,12 +2042,6 @@
   {
     return ::vkGetPhysicalDeviceImageFormatProperties2KHR( physicalDevice, pImageFormatInfo, pImageFormatProperties);
   }
-#ifdef VK_USE_PLATFORM_FUCHSIA
-  VkBool32 vkGetPhysicalDeviceMagmaPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex  ) const
-  {
-    return ::vkGetPhysicalDeviceMagmaPresentationSupportKHR( physicalDevice, queueFamilyIndex);
-  }
-#endif /*VK_USE_PLATFORM_FUCHSIA*/
   void vkGetPhysicalDeviceMemoryProperties( VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties  ) const
   {
     return ::vkGetPhysicalDeviceMemoryProperties( physicalDevice, pMemoryProperties);
@@ -9185,7 +9173,6 @@
     ePhysicalDeviceVertexAttributeDivisorPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT,
     ePipelineVertexInputDivisorStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT,
     eImagepipeSurfaceCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA,
-    eMagmaSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_MAGMA_SURFACE_CREATE_INFO_KHR,
     eBufferCollectionCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA,
     eFuchsiaImageFormatFUCHSIA = VK_STRUCTURE_TYPE_FUCHSIA_IMAGE_FORMAT_FUCHSIA,
     eImportMemoryBufferCollectionFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA,
@@ -11979,88 +11966,6 @@
 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
-  struct MagmaSurfaceCreateInfoKHR
-  {
-    MagmaSurfaceCreateInfoKHR( zx_handle_t imagePipeHandle_ = 0,
-                               uint32_t width_ = 0,
-                               uint32_t height_ = 0 )
-      : imagePipeHandle( imagePipeHandle_ )
-      , width( width_ )
-      , height( height_ )
-    {
-    }
-
-    MagmaSurfaceCreateInfoKHR( VkMagmaSurfaceCreateInfoKHR const & rhs )
-    {
-      memcpy( this, &rhs, sizeof( MagmaSurfaceCreateInfoKHR ) );
-    }
-
-    MagmaSurfaceCreateInfoKHR& operator=( VkMagmaSurfaceCreateInfoKHR const & rhs )
-    {
-      memcpy( this, &rhs, sizeof( MagmaSurfaceCreateInfoKHR ) );
-      return *this;
-    }
-    MagmaSurfaceCreateInfoKHR& setPNext( const void* pNext_ )
-    {
-      pNext = pNext_;
-      return *this;
-    }
-
-    MagmaSurfaceCreateInfoKHR& setImagePipeHandle( zx_handle_t imagePipeHandle_ )
-    {
-      imagePipeHandle = imagePipeHandle_;
-      return *this;
-    }
-
-    MagmaSurfaceCreateInfoKHR& setWidth( uint32_t width_ )
-    {
-      width = width_;
-      return *this;
-    }
-
-    MagmaSurfaceCreateInfoKHR& setHeight( uint32_t height_ )
-    {
-      height = height_;
-      return *this;
-    }
-
-    operator VkMagmaSurfaceCreateInfoKHR const&() const
-    {
-      return *reinterpret_cast<const VkMagmaSurfaceCreateInfoKHR*>(this);
-    }
-
-    operator VkMagmaSurfaceCreateInfoKHR &()
-    {
-      return *reinterpret_cast<VkMagmaSurfaceCreateInfoKHR*>(this);
-    }
-
-    bool operator==( MagmaSurfaceCreateInfoKHR const& rhs ) const
-    {
-      return ( sType == rhs.sType )
-          && ( pNext == rhs.pNext )
-          && ( imagePipeHandle == rhs.imagePipeHandle )
-          && ( width == rhs.width )
-          && ( height == rhs.height );
-    }
-
-    bool operator!=( MagmaSurfaceCreateInfoKHR const& rhs ) const
-    {
-      return !operator==( rhs );
-    }
-
-  private:
-    StructureType sType = StructureType::eMagmaSurfaceCreateInfoKHR;
-
-  public:
-    const void* pNext = nullptr;
-    zx_handle_t imagePipeHandle;
-    uint32_t width;
-    uint32_t height;
-  };
-  static_assert( sizeof( MagmaSurfaceCreateInfoKHR ) == sizeof( VkMagmaSurfaceCreateInfoKHR ), "struct and wrapper have different size!" );
-#endif /*VK_USE_PLATFORM_FUCHSIA*/
-
-#ifdef VK_USE_PLATFORM_FUCHSIA
   struct ImagePipeSurfaceCreateInfoFUCHSIA
   {
     ImagePipeSurfaceCreateInfoFUCHSIA( ImagePipeSurfaceCreateFlagsFUCHSIA flags_ = ImagePipeSurfaceCreateFlagsFUCHSIA(),
@@ -40084,11 +39989,6 @@
     Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex, Dispatch const &d = Dispatch() ) const;
 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
 
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    template<typename Dispatch = DispatchLoaderStatic>
-    Bool32 getMagmaPresentationSupportKHR( uint32_t queueFamilyIndex, Dispatch const &d = Dispatch() ) const;
-#endif /*VK_USE_PLATFORM_FUCHSIA*/
-
 #ifdef VK_USE_PLATFORM_XLIB_KHR
     template<typename Dispatch = DispatchLoaderStatic>
     Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display* dpy, VisualID visualID, Dispatch const &d = Dispatch() ) const;
@@ -41050,22 +40950,6 @@
 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
 #endif /*VK_USE_PLATFORM_WIN32_KHR*/
 
-#ifdef VK_USE_PLATFORM_FUCHSIA
-#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
-  template<typename Dispatch>
-  VULKAN_HPP_INLINE Bool32 PhysicalDevice::getMagmaPresentationSupportKHR( uint32_t queueFamilyIndex, Dispatch const &d) const
-  {
-    return d.vkGetPhysicalDeviceMagmaPresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
-  }
-#else
-  template<typename Dispatch>
-  VULKAN_HPP_INLINE Bool32 PhysicalDevice::getMagmaPresentationSupportKHR( uint32_t queueFamilyIndex, Dispatch const &d ) const
-  {
-    return d.vkGetPhysicalDeviceMagmaPresentationSupportKHR( m_physicalDevice, queueFamilyIndex );
-  }
-#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
-#endif /*VK_USE_PLATFORM_FUCHSIA*/
-
 #ifdef VK_USE_PLATFORM_XLIB_KHR
   template<typename Dispatch>
   VULKAN_HPP_INLINE Bool32 PhysicalDevice::getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display* dpy, VisualID visualID, Dispatch const &d) const
@@ -42091,19 +41975,6 @@
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
     template<typename Dispatch = DispatchLoaderStatic>
-    Result createMagmaSurfaceKHR( const MagmaSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface, Dispatch const &d = Dispatch() ) const;
-#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
-    template<typename Dispatch = DispatchLoaderStatic>
-    ResultValueType<SurfaceKHR>::type createMagmaSurfaceKHR( const MagmaSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr, Dispatch const &d = Dispatch() ) const;
-#ifndef VULKAN_HPP_NO_SMART_HANDLE
-    template<typename Dispatch = DispatchLoaderStatic>
-    typename ResultValueType<UniqueHandle<SurfaceKHR,Dispatch>>::type createMagmaSurfaceKHRUnique( const MagmaSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator = nullptr, Dispatch const &d = Dispatch() ) const;
-#endif /*VULKAN_HPP_NO_SMART_HANDLE*/
-#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
-#endif /*VK_USE_PLATFORM_FUCHSIA*/
-
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    template<typename Dispatch = DispatchLoaderStatic>
     Result createImagePipeSurfaceFUCHSIA( const ImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface, Dispatch const &d = Dispatch() ) const;
 #ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
     template<typename Dispatch = DispatchLoaderStatic>
@@ -42544,34 +42415,6 @@
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
   template<typename Dispatch>
-  VULKAN_HPP_INLINE Result Instance::createMagmaSurfaceKHR( const MagmaSurfaceCreateInfoKHR* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface, Dispatch const &d) const
-  {
-    return static_cast<Result>( d.vkCreateMagmaSurfaceKHR( m_instance, reinterpret_cast<const VkMagmaSurfaceCreateInfoKHR*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
-  }
-#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
-  template<typename Dispatch>
-  VULKAN_HPP_INLINE ResultValueType<SurfaceKHR>::type Instance::createMagmaSurfaceKHR( const MagmaSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator, Dispatch const &d ) const
-  {
-    SurfaceKHR surface;
-    Result result = static_cast<Result>( d.vkCreateMagmaSurfaceKHR( m_instance, reinterpret_cast<const VkMagmaSurfaceCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
-    return createResultValue( result, surface, VULKAN_HPP_NAMESPACE_STRING"::Instance::createMagmaSurfaceKHR" );
-  }
-#ifndef VULKAN_HPP_NO_SMART_HANDLE
-  template<typename Dispatch>
-  VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<SurfaceKHR,Dispatch>>::type Instance::createMagmaSurfaceKHRUnique( const MagmaSurfaceCreateInfoKHR & createInfo, Optional<const AllocationCallbacks> allocator, Dispatch const &d ) const
-  {
-    SurfaceKHR surface;
-    Result result = static_cast<Result>( d.vkCreateMagmaSurfaceKHR( m_instance, reinterpret_cast<const VkMagmaSurfaceCreateInfoKHR*>( &createInfo ), reinterpret_cast<const VkAllocationCallbacks*>( static_cast<const AllocationCallbacks*>( allocator ) ), reinterpret_cast<VkSurfaceKHR*>( &surface ) ) );
-
-    ObjectDestroy<Instance,Dispatch> deleter( *this, allocator, d );
-    return createResultValue<SurfaceKHR,Dispatch>( result, surface, VULKAN_HPP_NAMESPACE_STRING"::Instance::createMagmaSurfaceKHRUnique", deleter );
-  }
-#endif /*VULKAN_HPP_NO_SMART_HANDLE*/
-#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
-#endif /*VK_USE_PLATFORM_FUCHSIA*/
-
-#ifdef VK_USE_PLATFORM_FUCHSIA
-  template<typename Dispatch>
   VULKAN_HPP_INLINE Result Instance::createImagePipeSurfaceFUCHSIA( const ImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const AllocationCallbacks* pAllocator, SurfaceKHR* pSurface, Dispatch const &d) const
   {
     return static_cast<Result>( d.vkCreateImagePipeSurfaceFUCHSIA( m_instance, reinterpret_cast<const VkImagePipeSurfaceCreateInfoFUCHSIA*>( pCreateInfo ), reinterpret_cast<const VkAllocationCallbacks*>( pAllocator ), reinterpret_cast<VkSurfaceKHR*>( pSurface ) ) );
@@ -44673,7 +44516,6 @@
     case StructureType::ePhysicalDeviceVertexAttributeDivisorPropertiesEXT: return "PhysicalDeviceVertexAttributeDivisorPropertiesEXT";
     case StructureType::ePipelineVertexInputDivisorStateCreateInfoEXT: return "PipelineVertexInputDivisorStateCreateInfoEXT";
     case StructureType::eImagepipeSurfaceCreateInfoFUCHSIA: return "ImagepipeSurfaceCreateInfoFUCHSIA";
-    case StructureType::eMagmaSurfaceCreateInfoKHR: return "MagmaSurfaceCreateInfoKHR";
     case StructureType::eBufferCollectionCreateInfoFUCHSIA: return "BufferCollectionCreateInfoFUCHSIA";
     case StructureType::eFuchsiaImageFormatFUCHSIA: return "FuchsiaImageFormatFUCHSIA";
     case StructureType::eImportMemoryBufferCollectionFUCHSIA: return "ImportMemoryBufferCollectionFUCHSIA";
@@ -46625,9 +46467,6 @@
 #ifdef VK_USE_PLATFORM_MACOS_MVK
     PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK = 0;
 #endif /*VK_USE_PLATFORM_MACOS_MVK*/
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    PFN_vkCreateMagmaSurfaceKHR vkCreateMagmaSurfaceKHR = 0;
-#endif /*VK_USE_PLATFORM_FUCHSIA*/
 #ifdef VK_USE_PLATFORM_MIR_KHR
     PFN_vkCreateMirSurfaceKHR vkCreateMirSurfaceKHR = 0;
 #endif /*VK_USE_PLATFORM_MIR_KHR*/
@@ -46788,9 +46627,6 @@
     PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties = 0;
     PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2 = 0;
     PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR = 0;
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    PFN_vkGetPhysicalDeviceMagmaPresentationSupportKHR vkGetPhysicalDeviceMagmaPresentationSupportKHR = 0;
-#endif /*VK_USE_PLATFORM_FUCHSIA*/
     PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties = 0;
     PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2 = 0;
     PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR = 0;
@@ -47019,9 +46855,6 @@
 #ifdef VK_USE_PLATFORM_MACOS_MVK
       vkCreateMacOSSurfaceMVK = PFN_vkCreateMacOSSurfaceMVK(instance.getProcAddr( "vkCreateMacOSSurfaceMVK"));
 #endif /*VK_USE_PLATFORM_MACOS_MVK*/
-#ifdef VK_USE_PLATFORM_FUCHSIA
-      vkCreateMagmaSurfaceKHR = PFN_vkCreateMagmaSurfaceKHR(instance.getProcAddr( "vkCreateMagmaSurfaceKHR"));
-#endif /*VK_USE_PLATFORM_FUCHSIA*/
 #ifdef VK_USE_PLATFORM_MIR_KHR
       vkCreateMirSurfaceKHR = PFN_vkCreateMirSurfaceKHR(instance.getProcAddr( "vkCreateMirSurfaceKHR"));
 #endif /*VK_USE_PLATFORM_MIR_KHR*/
@@ -47182,9 +47015,6 @@
       vkGetPhysicalDeviceImageFormatProperties = PFN_vkGetPhysicalDeviceImageFormatProperties(instance.getProcAddr( "vkGetPhysicalDeviceImageFormatProperties"));
       vkGetPhysicalDeviceImageFormatProperties2 = PFN_vkGetPhysicalDeviceImageFormatProperties2(instance.getProcAddr( "vkGetPhysicalDeviceImageFormatProperties2"));
       vkGetPhysicalDeviceImageFormatProperties2KHR = PFN_vkGetPhysicalDeviceImageFormatProperties2KHR(instance.getProcAddr( "vkGetPhysicalDeviceImageFormatProperties2KHR"));
-#ifdef VK_USE_PLATFORM_FUCHSIA
-      vkGetPhysicalDeviceMagmaPresentationSupportKHR = PFN_vkGetPhysicalDeviceMagmaPresentationSupportKHR(instance.getProcAddr( "vkGetPhysicalDeviceMagmaPresentationSupportKHR"));
-#endif /*VK_USE_PLATFORM_FUCHSIA*/
       vkGetPhysicalDeviceMemoryProperties = PFN_vkGetPhysicalDeviceMemoryProperties(instance.getProcAddr( "vkGetPhysicalDeviceMemoryProperties"));
       vkGetPhysicalDeviceMemoryProperties2 = PFN_vkGetPhysicalDeviceMemoryProperties2(instance.getProcAddr( "vkGetPhysicalDeviceMemoryProperties2"));
       vkGetPhysicalDeviceMemoryProperties2KHR = PFN_vkGetPhysicalDeviceMemoryProperties2KHR(instance.getProcAddr( "vkGetPhysicalDeviceMemoryProperties2KHR"));
diff --git a/include/vulkan/vulkan_core.h b/include/vulkan/vulkan_core.h
index 0b082d1..1e4a589 100644
--- a/include/vulkan/vulkan_core.h
+++ b/include/vulkan/vulkan_core.h
@@ -391,7 +391,6 @@
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000,
     VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001,
     VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA = 1000214000,
-    VK_STRUCTURE_TYPE_MAGMA_SURFACE_CREATE_INFO_KHR = 1001002000,
     VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA = 1001004000,
     VK_STRUCTURE_TYPE_FUCHSIA_IMAGE_FORMAT_FUCHSIA = 1001004001,
     VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA = 1001004004,
diff --git a/include/vulkan/vulkan_fuchsia.h b/include/vulkan/vulkan_fuchsia.h
index 0cabed3..c213e18 100644
--- a/include/vulkan/vulkan_fuchsia.h
+++ b/include/vulkan/vulkan_fuchsia.h
@@ -27,34 +27,6 @@
 */
 
 
-#define VK_KHR_magma_surface 1
-#define VK_KHR_MAGMA_SURFACE_SPEC_VERSION 1
-#define VK_KHR_MAGMA_SURFACE_EXTENSION_NAME "VK_KHR_magma_surface"
-
-typedef struct VkMagmaSurfaceCreateInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    zx_handle_t        imagePipeHandle;
-    uint32_t           width;
-    uint32_t           height;
-} VkMagmaSurfaceCreateInfoKHR;
-
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateMagmaSurfaceKHR)(VkInstance instance, const VkMagmaSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceMagmaPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateMagmaSurfaceKHR(
-    VkInstance                                  instance,
-    const VkMagmaSurfaceCreateInfoKHR*          pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMagmaPresentationSupportKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    queueFamilyIndex);
-#endif
-
 #define VK_FUCHSIA_imagepipe_surface 1
 #define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1
 #define VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME "VK_FUCHSIA_imagepipe_surface"
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index d206f2a..21d27a6 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -11629,11 +11629,6 @@
 #endif  // VK_USE_PLATFORM_WIN32_KHR
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
-VKAPI_ATTR VkResult VKAPI_CALL CreateMagmaSurfaceKHR(VkInstance instance, const VkMagmaSurfaceCreateInfoKHR *pCreateInfo,
-                                                     const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) {
-    return CreateSurface(instance, pCreateInfo, pAllocator, pSurface, &VkLayerInstanceDispatchTable::CreateMagmaSurfaceKHR);
-}
-
 VKAPI_ATTR VkResult VKAPI_CALL CreateImagePipeSurfaceFUCHSIA(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA *pCreateInfo,
                                                      const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) {
     return CreateSurface(instance, pCreateInfo, pAllocator, pSurface, &VkLayerInstanceDispatchTable::CreateImagePipeSurfaceFUCHSIA);
@@ -12772,7 +12767,6 @@
     {"vkCreateMacOSSurfaceMVK", (void *)CreateMacOSSurfaceMVK},
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
-    {"vkCreateMagmaSurfaceKHR", (void*)CreateMagmaSurfaceKHR},
     {"vkCreateImagePipeSurfaceFUCHSIA", (void*)CreateImagePipeSurfaceFUCHSIA},
     {"vkImportSemaphoreZirconHandleFUCHSIA", (void *)ImportSemaphoreZirconHandleFUCHSIA},
     {"vkGetSemaphoreZirconHandleFUCHSIA", (void *)GetSemaphoreZirconHandleFUCHSIA},
diff --git a/loader/loader.h b/loader/loader.h
index 5120170..dff569f 100644
--- a/loader/loader.h
+++ b/loader/loader.h
@@ -320,7 +320,6 @@
     bool wsi_ios_surface_enabled;
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
-    bool wsi_magma_surface_enabled;
     bool wsi_imagepipe_surface_enabled;
 #endif
     bool wsi_display_enabled;
diff --git a/loader/wsi.c b/loader/wsi.c
index 53b561e..8f4e35d 100644
--- a/loader/wsi.c
+++ b/loader/wsi.c
@@ -62,7 +62,6 @@
     ptr_instance->wsi_ios_surface_enabled = false;
 #endif  // VK_USE_PLATFORM_IOS_MVK
 #ifdef VK_USE_PLATFORM_FUCHSIA
-    ptr_instance->wsi_magma_surface_enabled = false;
     ptr_instance->wsi_imagepipe_surface_enabled = false;
 #endif  // VK_USE_PLATFORM_FUCHSIA
 
@@ -122,10 +121,6 @@
         }
 #endif  // VK_USE_PLATFORM_IOS_MVK
 #ifdef VK_USE_PLATFORM_FUCHSIA
-        if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_MAGMA_SURFACE_EXTENSION_NAME) == 0) {
-            ptr_instance->wsi_magma_surface_enabled = true;
-            continue;
-        }
         if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME) == 0) {
             ptr_instance->wsi_imagepipe_surface_enabled = true;
             continue;
@@ -605,116 +600,6 @@
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
 
-// Functions for the VK_KHR_magma_surface extension:
-
-// This is the trampoline entrypoint for CreateMagmaSurfaceKHR
-LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateMagmaSurfaceKHR(VkInstance instance,
-                                                                     const VkMagmaSurfaceCreateInfoKHR *pCreateInfo,
-                                                                     const VkAllocationCallbacks *pAllocator,
-                                                                     VkSurfaceKHR *pSurface) {
-    const VkLayerInstanceDispatchTable *disp;
-    disp = loader_get_instance_layer_dispatch(instance);
-    VkResult res;
-
-    res = disp->CreateMagmaSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
-    return res;
-}
-
-// This is the instance chain terminator function for CreateMagmaSurfaceKHR
-VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMagmaSurfaceKHR(VkInstance instance, const VkMagmaSurfaceCreateInfoKHR *pCreateInfo,
-                                                                const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) {
-    VkResult vkRes = VK_SUCCESS;
-    VkIcdSurface *pIcdSurface = NULL;
-    uint32_t i = 0;
-
-    // Initialize pSurface to NULL just to be safe.
-    *pSurface = VK_NULL_HANDLE;
-    // First, check to ensure the appropriate extension was enabled:
-    struct loader_instance *ptr_instance = loader_get_instance(instance);
-    if (!ptr_instance->wsi_magma_surface_enabled) {
-        loader_log(ptr_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
-                   "VK_KHR_magma_surface extension not enabled.  "
-                   "vkCreateMagmaSurfaceKHR not executed!\n");
-        vkRes = VK_ERROR_EXTENSION_NOT_PRESENT;
-        goto out;
-    }
-
-    // Next, if so, proceed with the implementation of this function:
-    pIcdSurface = AllocateIcdSurfaceStruct(ptr_instance, sizeof(pIcdSurface->magma_surf.base), sizeof(pIcdSurface->magma_surf));
-    if (pIcdSurface == NULL) {
-        vkRes = VK_ERROR_OUT_OF_HOST_MEMORY;
-        goto out;
-    }
-
-    pIcdSurface->magma_surf.base.platform = VK_ICD_WSI_PLATFORM_MAGMA;
-
-    // Loop through each ICD and determine if they need to create a surface
-    for (struct loader_icd_term *icd_term = ptr_instance->icd_terms; icd_term != NULL; icd_term = icd_term->next, i++) {
-        if (icd_term->scanned_icd->interface_version >= ICD_VER_SUPPORTS_ICD_SURFACE_KHR) {
-            if (NULL != icd_term->dispatch.CreateMagmaSurfaceKHR) {
-                vkRes = icd_term->dispatch.CreateMagmaSurfaceKHR(icd_term->instance, pCreateInfo, pAllocator,
-                                                                 &pIcdSurface->real_icd_surfaces[i]);
-                if (VK_SUCCESS != vkRes) {
-                    goto out;
-                }
-            }
-        }
-    }
-
-    *pSurface = (VkSurfaceKHR)(pIcdSurface);
-
-out:
-
-    if (VK_SUCCESS != vkRes && NULL != pIcdSurface) {
-        if (NULL != pIcdSurface->real_icd_surfaces) {
-            i = 0;
-            for (struct loader_icd_term *icd_term = ptr_instance->icd_terms; icd_term != NULL; icd_term = icd_term->next, i++) {
-                if ((VkSurfaceKHR)NULL != pIcdSurface->real_icd_surfaces[i] && NULL != icd_term->dispatch.DestroySurfaceKHR) {
-                    icd_term->dispatch.DestroySurfaceKHR(icd_term->instance, pIcdSurface->real_icd_surfaces[i], pAllocator);
-                }
-            }
-            loader_instance_heap_free(ptr_instance, pIcdSurface->real_icd_surfaces);
-        }
-        loader_instance_heap_free(ptr_instance, pIcdSurface);
-    }
-
-    return vkRes;
-}
-
-// This is the trampoline entrypoint for
-// GetPhysicalDeviceMagmaPresentationSupportKHR
-LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMagmaPresentationSupportKHR(VkPhysicalDevice physicalDevice,
-                                                                                            uint32_t queueFamilyIndex) {
-    VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
-    const VkLayerInstanceDispatchTable *disp;
-    disp = loader_get_instance_layer_dispatch(physicalDevice);
-    VkBool32 res = disp->GetPhysicalDeviceMagmaPresentationSupportKHR(unwrapped_phys_dev, queueFamilyIndex);
-    return res;
-}
-
-// This is the instance chain terminator function for
-// GetPhysicalDeviceMagmaPresentationSupportKHR
-VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceMagmaPresentationSupportKHR(VkPhysicalDevice physicalDevice,
-                                                                                       uint32_t queueFamilyIndex) {
-    // First, check to ensure the appropriate extension was enabled:
-    struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice;
-    struct loader_icd_term *icd_term = phys_dev_term->this_icd_term;
-    struct loader_instance *ptr_instance = (struct loader_instance *)icd_term->this_instance;
-    if (!ptr_instance->wsi_magma_surface_enabled) {
-        loader_log(ptr_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
-                   "VK_KHR_magma_surface extension not enabled.  "
-                   "vkGetPhysicalDeviceMagmaPresentationSupportKHR not executed!\n");
-        return VK_SUCCESS;
-    }
-
-    // Next, if so, proceed with the implementation of this function:
-    assert(icd_term->dispatch.GetPhysicalDeviceMagmaPresentationSupportKHR &&
-           "loader: null GetPhysicalDeviceMagmaPresentationSupportKHR ICD "
-           "pointer");
-
-    return icd_term->dispatch.GetPhysicalDeviceMagmaPresentationSupportKHR(phys_dev_term->phys_dev, queueFamilyIndex);
-}
-
 // This is the trampoline entrypoint for CreateImagePipeSurfaceFUCHSIA
 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA(VkInstance instance,
                                                                      const VkImagePipeSurfaceCreateInfoFUCHSIA *pCreateInfo,
@@ -1953,16 +1838,6 @@
 #endif  // VK_USE_PLATFORM_IOS_MVK
 #ifdef VK_USE_PLATFORM_FUCHSIA
 
-    // Functions for the VK_KHR_magma_surface extension:
-    if (!strcmp("vkCreateMagmaSurfaceKHR", name)) {
-        *addr = ptr_instance->wsi_magma_surface_enabled ? (void *)vkCreateMagmaSurfaceKHR : NULL;
-        return true;
-    }
-    if (!strcmp("vkGetPhysicalDeviceMagmaPresentationSupportKHR", name)) {
-        *addr = ptr_instance->wsi_magma_surface_enabled ? (void *)vkGetPhysicalDeviceMagmaPresentationSupportKHR : NULL;
-        return true;
-    }
-
     // Functions for the VK_FUCHSIA_imagepipe_surface extension:
     if (!strcmp("vkCreateImagePipeSurfaceFUCHSIA", name)) {
         *addr = ptr_instance->wsi_imagepipe_surface_enabled ? (void *)vkCreateImagePipeSurfaceFUCHSIA : NULL;
diff --git a/loader/wsi.h b/loader/wsi.h
index 346df69..b6ab2fe 100644
--- a/loader/wsi.h
+++ b/loader/wsi.h
@@ -46,7 +46,6 @@
         VkIcdSurfaceMacOS macos_surf;
 #endif  // VK_USE_PLATFORM_MACOS_MVK
 #ifdef VK_USE_PLATFORM_FUCHSIA
-        VkIcdSurfaceMagma magma_surf;
         VkIcdSurfaceImagePipe imagepipe_surf;
 #endif  // VK_USE_PLATFORM_FUCHSIA
         VkIcdSurfaceDisplay display_surf;
@@ -128,10 +127,6 @@
                                                                                       VisualID visualID);
 #endif
 #ifdef VK_USE_PLATFORM_FUCHSIA
-VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMagmaSurfaceKHR(VkInstance instance, const VkMagmaSurfaceCreateInfoKHR *pCreateInfo,
-                                                                const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
-VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceMagmaPresentationSupportKHR(VkPhysicalDevice physicalDevice,
-                                                                                       uint32_t queueFamilyIndex);
 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateImagePipeSurfaceFUCHSIA(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA *pCreateInfo,
                                                                 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
 #endif
diff --git a/scripts/loader_extension_generator.py b/scripts/loader_extension_generator.py
index f2dbba4..049a7e9 100644
--- a/scripts/loader_extension_generator.py
+++ b/scripts/loader_extension_generator.py
@@ -34,7 +34,6 @@
                  'VK_KHR_wayland_surface',
                  'VK_KHR_mir_surface',
                  'VK_KHR_win32_surface',
-                 'VK_KHR_magma_surface',
                  'VK_FUCHSIA_imagepipe_surface',
                  'VK_KHR_android_surface',
                  'VK_MVK_macos_surface',
diff --git a/scripts/vk.xml b/scripts/vk.xml
index 557c7a5..bb4d115 100644
--- a/scripts/vk.xml
+++ b/scripts/vk.xml
@@ -1634,13 +1634,6 @@
             <member><type>HINSTANCE</type>                        <name>hinstance</name></member>
             <member><type>HWND</type>                             <name>hwnd</name></member>
         </type>
-        <type category="struct" name="VkMagmaSurfaceCreateInfoKHR">
-            <member values="VK_STRUCTURE_TYPE_MAGMA_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
-            <member>const <type>void</type>*                      <name>pNext</name></member>
-            <member><type>zx_handle_t</type>                      <name>imagePipeHandle</name></member>
-            <member><type>uint32_t</type>                         <name>width</name></member>  
-            <member><type>uint32_t</type>                         <name>height</name></member>              
-        </type>
         <type category="struct" name="VkImagePipeSurfaceCreateInfoFUCHSIA">
             <member values="VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA"><type>VkStructureType</type> <name>sType</name></member>
             <member>const <type>void</type>*                      <name>pNext</name></member>
@@ -5337,13 +5330,6 @@
             <param><type>uint32_t</type> <name>queueFamilyIndex</name></param>
         </command>
         <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
-            <proto><type>VkResult</type> <name>vkCreateMagmaSurfaceKHR</name></proto>
-            <param><type>VkInstance</type> <name>instance</name></param>
-            <param>const <type>VkMagmaSurfaceCreateInfoKHR</type>* <name>pCreateInfo</name></param>
-            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
-            <param><type>VkSurfaceKHR</type>* <name>pSurface</name></param>
-        </command>
-        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
             <proto><type>VkResult</type> <name>vkCreateImagePipeSurfaceFUCHSIA</name></proto>
             <param><type>VkInstance</type> <name>instance</name></param>
             <param>const <type>VkImagePipeSurfaceCreateInfoFUCHSIA</type>* <name>pCreateInfo</name></param>
@@ -5375,11 +5361,6 @@
             <param><type>VkBufferCollectionFUCHSIA</type> <name>collection</name></param>
             <param><type>VkBufferCollectionPropertiesFUCHSIA</type>* <name>pProperties</name></param>
         </command>
-        <command>
-            <proto><type>VkBool32</type> <name>vkGetPhysicalDeviceMagmaPresentationSupportKHR</name></proto>
-            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
-            <param><type>uint32_t</type> <name>queueFamilyIndex</name></param>
-        </command>
         <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
             <proto><type>VkResult</type> <name>vkCreateXlibSurfaceKHR</name></proto>
             <param><type>VkInstance</type> <name>instance</name></param>
@@ -8853,16 +8834,6 @@
                 <command name="vkCreateImagePipeSurfaceFUCHSIA"/>
             </require>
         </extension>
-        <extension name="VK_KHR_magma_surface" number="1003" type="instance" requires="VK_KHR_surface" platform="fuchsia" contact="Craig Stout @cdotstout" supported="vulkan" author="KHR">
-            <require>
-                <enum value="1"                                         name="VK_KHR_MAGMA_SURFACE_SPEC_VERSION"/>
-                <enum value="&quot;VK_KHR_magma_surface&quot;"          name="VK_KHR_MAGMA_SURFACE_EXTENSION_NAME"/>
-                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_MAGMA_SURFACE_CREATE_INFO_KHR"/>
-                <type name="VkMagmaSurfaceCreateInfoKHR"/>
-                <command name="vkCreateMagmaSurfaceKHR"/>
-                <command name="vkGetPhysicalDeviceMagmaPresentationSupportKHR"/>
-            </require>
-        </extension>
         <extension name="VK_FUCHSIA_buffer_collection" number="1005" type="device" requires="VK_FUCHSIA_external_memory" author="FUCHSIA" contact="John Bauman @jbauman" supported="vulkan" platform="fuchsia">
             <require>
                 <enum value="1"                                         name="VK_FUCHSIA_BUFFER_COLLECTION_SPEC_VERSION"/>
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 7b5427a..b55876f 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -521,9 +521,6 @@
 #if defined(VK_USE_PLATFORM_WIN32_KHR)
             m_instance_extension_names.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
 #endif  // VK_USE_PLATFORM_WIN32_KHR
-#if defined(VK_USE_PLATFORM_FUCHSIA)
-            instance_extension_names.push_back(VK_KHR_MAGMA_SURFACE_EXTENSION_NAME);
-#endif  // VK_USE_PLATFORM_FUCHSIA
 #endif  // NEED_TO_TEST_THIS_ON_PLATFORM
 #if defined(VK_USE_PLATFORM_XCB_KHR)
             m_instance_extension_names.push_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME);
@@ -21677,6 +21674,7 @@
 }
 
 #ifndef SKIP_TESTS_CRASHING_ON_MAGMA
+#error here
 TEST_F(VkLayerTest, ResolveImageFormatMismatch) {
     VkResult err;
     bool pass;
diff --git a/tests/layers/wrap_objects.cpp b/tests/layers/wrap_objects.cpp
index d4c2d7e..e311ac9 100644
--- a/tests/layers/wrap_objects.cpp
+++ b/tests/layers/wrap_objects.cpp
@@ -1043,28 +1043,6 @@
 }
 #endif // VK_USE_PLATFORM_WIN32_KHR
 
-#ifdef VK_USE_PLATFORM_FUCHSIA
-
-VKAPI_ATTR VkResult VKAPI_CALL
-vkCreateMagmaSurfaceKHR(VkInstance instance, const VkMagmaSurfaceCreateInfoKHR *pCreateInfo,
-                        const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) {
-    VkResult result;
-    wrapped_inst_obj *inst;
-    auto vk_inst = unwrap_instance(instance, &inst);
-    result = inst->layer_disp.CreateMagmaSurfaceKHR(vk_inst, pCreateInfo, pAllocator, pSurface);
-    return result;
-}
-
-VKAPI_ATTR VkBool32 VKAPI_CALL
-vkGetPhysicalDeviceMagmaPresentationSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex) {
-    VkBool32 result;
-    wrapped_phys_dev_obj *phys_dev;
-    auto vk_phys_dev = unwrap_phys_dev(physicalDevice, &phys_dev);
-    result = phys_dev->inst->layer_disp.GetPhysicalDeviceMagmaPresentationSupportKHR(vk_phys_dev, queueFamilyIndex);
-    return result;
-}
-#endif // VK_USE_PLATFORM_FUCHSIA
-
 #ifdef VK_USE_PLATFORM_XCB_KHR
 
 VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface)
diff --git a/tests/test_environment.cpp b/tests/test_environment.cpp
index bbc2c92..6a988d0 100644
--- a/tests/test_environment.cpp
+++ b/tests/test_environment.cpp
@@ -92,9 +92,6 @@
 #ifdef VK_USE_PLATFORM_XCB_KHR
     instance_extension_names.push_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME);
 #endif
-#ifdef VK_USE_PLATFORM_FUCHSIA
-    instance_extension_names.push_back(VK_KHR_MAGMA_SURFACE_EXTENSION_NAME);
-#endif
 
     VkBool32 extFound;
 
