Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 858ad13b authored by Ian Elliott's avatar Ian Elliott Committed by Android (Google) Code Review
Browse files

Merge "Revert "Reland: "libvulkan: Implement EXT_swapchain_maintenance1""""

parents 8be052fe 334a4105
Loading
Loading
Loading
Loading
+1 −61
Original line number Diff line number Diff line
@@ -636,7 +636,6 @@ void CreateInfoWrapper::FilterExtension(const char* name) {
            case ProcHook::EXT_swapchain_colorspace:
            case ProcHook::KHR_get_surface_capabilities2:
            case ProcHook::GOOGLE_surfaceless_query:
            case ProcHook::EXT_surface_maintenance1:
                hook_extensions_.set(ext_bit);
                // return now as these extensions do not require HAL support
                return;
@@ -658,11 +657,9 @@ void CreateInfoWrapper::FilterExtension(const char* name) {
            case ProcHook::KHR_shared_presentable_image:
            case ProcHook::KHR_swapchain:
            case ProcHook::EXT_hdr_metadata:
            case ProcHook::EXT_swapchain_maintenance1:
            case ProcHook::ANDROID_external_memory_android_hardware_buffer:
            case ProcHook::ANDROID_native_buffer:
            case ProcHook::GOOGLE_display_timing:
            case ProcHook::KHR_external_fence_fd:
            case ProcHook::EXTENSION_CORE_1_0:
            case ProcHook::EXTENSION_CORE_1_1:
            case ProcHook::EXTENSION_CORE_1_2:
@@ -693,22 +690,16 @@ void CreateInfoWrapper::FilterExtension(const char* name) {
                ext_bit = ProcHook::ANDROID_native_buffer;
                break;
            case ProcHook::KHR_incremental_present:
            case ProcHook::KHR_shared_presentable_image:
            case ProcHook::GOOGLE_display_timing:
            case ProcHook::KHR_shared_presentable_image:
                hook_extensions_.set(ext_bit);
                // return now as these extensions do not require HAL support
                return;
            case ProcHook::EXT_swapchain_maintenance1:
                // map VK_KHR_swapchain_maintenance1 to KHR_external_fence_fd
                name = VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME;
                ext_bit = ProcHook::KHR_external_fence_fd;
                break;
            case ProcHook::EXT_hdr_metadata:
            case ProcHook::KHR_bind_memory2:
                hook_extensions_.set(ext_bit);
                break;
            case ProcHook::ANDROID_external_memory_android_hardware_buffer:
            case ProcHook::KHR_external_fence_fd:
            case ProcHook::EXTENSION_UNKNOWN:
                // Extensions we don't need to do anything about at this level
                break;
@@ -724,7 +715,6 @@ void CreateInfoWrapper::FilterExtension(const char* name) {
            case ProcHook::KHR_surface_protected_capabilities:
            case ProcHook::EXT_debug_report:
            case ProcHook::EXT_swapchain_colorspace:
            case ProcHook::EXT_surface_maintenance1:
            case ProcHook::GOOGLE_surfaceless_query:
            case ProcHook::ANDROID_native_buffer:
            case ProcHook::EXTENSION_CORE_1_0:
@@ -757,18 +747,10 @@ void CreateInfoWrapper::FilterExtension(const char* name) {
        if (strcmp(name, props.extensionName) != 0)
            continue;

        if (ext_bit != ProcHook::EXTENSION_UNKNOWN &&
                hal_extensions_.test(ext_bit)) {
            ALOGI("CreateInfoWrapper::FilterExtension: already have '%s'.", name);
            continue;
        }

        filter.names[filter.name_count++] = name;
        if (ext_bit != ProcHook::EXTENSION_UNKNOWN) {
            if (ext_bit == ProcHook::ANDROID_native_buffer)
                hook_extensions_.set(ProcHook::KHR_swapchain);
            if (ext_bit == ProcHook::KHR_external_fence_fd)
                hook_extensions_.set(ProcHook::EXT_swapchain_maintenance1);

            hal_extensions_.set(ext_bit);
        }
@@ -958,9 +940,6 @@ VkResult EnumerateInstanceExtensionProperties(
         VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION});
    loader_extensions.push_back({VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME,
                                 VK_GOOGLE_SURFACELESS_QUERY_SPEC_VERSION});
    loader_extensions.push_back({
        VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME,
        VK_EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION});

    static const VkExtensionProperties loader_debug_report_extension = {
        VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION,
@@ -1093,33 +1072,6 @@ VkResult GetAndroidNativeBufferSpecVersion9Support(
    return result;
}

bool CanSupportSwapchainMaintenance1Extension(VkPhysicalDevice physicalDevice) {
    const auto& driver = GetData(physicalDevice).driver;
    if (!driver.GetPhysicalDeviceExternalFenceProperties)
        return false;

    // Requires support for external fences imported from sync fds.
    // This is _almost_ universal on Android, but may be missing on
    // some extremely old drivers, or on strange implementations like
    // cuttlefish.
    VkPhysicalDeviceExternalFenceInfo fenceInfo = {
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO,
        nullptr,
        VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT
    };
    VkExternalFenceProperties fenceProperties = {
        VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES,
        nullptr,
        0, 0, 0
    };

    GetPhysicalDeviceExternalFenceProperties(physicalDevice, &fenceInfo, &fenceProperties);
    if (fenceProperties.externalFenceFeatures & VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT)
        return true;

    return false;
}

VkResult EnumerateDeviceExtensionProperties(
    VkPhysicalDevice physicalDevice,
    const char* pLayerName,
@@ -1197,12 +1149,6 @@ VkResult EnumerateDeviceExtensionProperties(
             VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION});
    }

    if (CanSupportSwapchainMaintenance1Extension(physicalDevice)) {
        loader_extensions.push_back({
                VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME,
                VK_EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION});
    }

    // enumerate our extensions first
    if (!pLayerName && pProperties) {
        uint32_t count = std::min(
@@ -1698,12 +1644,6 @@ void GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
                imageCompressionControlSwapchainInChain = true;
            } break;

            case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT: {
                auto smf = reinterpret_cast<VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT *>(
                        pFeats);
                smf->swapchainMaintenance1 = true;
            } break;

            default:
                break;
        }
+0 −20
Original line number Diff line number Diff line
@@ -162,15 +162,6 @@ VKAPI_ATTR void checkedGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2
    }
}

VKAPI_ATTR VkResult checkedReleaseSwapchainImagesEXT(VkDevice device, const VkReleaseSwapchainImagesInfoEXT* pReleaseInfo) {
    if (GetData(device).hook_extensions[ProcHook::EXT_swapchain_maintenance1]) {
        return ReleaseSwapchainImagesEXT(device, pReleaseInfo);
    } else {
        Logger(device).Err(device, "VK_EXT_swapchain_maintenance1 not enabled. vkReleaseSwapchainImagesEXT not executed.");
        return VK_SUCCESS;
    }
}

// clang-format on

const ProcHook g_proc_hooks[] = {
@@ -553,13 +544,6 @@ const ProcHook g_proc_hooks[] = {
        reinterpret_cast<PFN_vkVoidFunction>(QueueSubmit),
        nullptr,
    },
    {
        "vkReleaseSwapchainImagesEXT",
        ProcHook::DEVICE,
        ProcHook::EXT_swapchain_maintenance1,
        reinterpret_cast<PFN_vkVoidFunction>(ReleaseSwapchainImagesEXT),
        reinterpret_cast<PFN_vkVoidFunction>(checkedReleaseSwapchainImagesEXT),
    },
    {
        "vkSetHdrMetadataEXT",
        ProcHook::DEVICE,
@@ -596,8 +580,6 @@ ProcHook::Extension GetProcHookExtension(const char* name) {
    if (strcmp(name, "VK_KHR_surface") == 0) return ProcHook::KHR_surface;
    if (strcmp(name, "VK_KHR_surface_protected_capabilities") == 0) return ProcHook::KHR_surface_protected_capabilities;
    if (strcmp(name, "VK_KHR_swapchain") == 0) return ProcHook::KHR_swapchain;
    if (strcmp(name, "VK_EXT_swapchain_maintenance1") == 0) return ProcHook::EXT_swapchain_maintenance1;
    if (strcmp(name, "VK_EXT_surface_maintenance1") == 0) return ProcHook::EXT_surface_maintenance1;
    if (strcmp(name, "VK_ANDROID_external_memory_android_hardware_buffer") == 0) return ProcHook::ANDROID_external_memory_android_hardware_buffer;
    if (strcmp(name, "VK_KHR_bind_memory2") == 0) return ProcHook::KHR_bind_memory2;
    if (strcmp(name, "VK_KHR_get_physical_device_properties2") == 0) return ProcHook::KHR_get_physical_device_properties2;
@@ -605,7 +587,6 @@ ProcHook::Extension GetProcHookExtension(const char* name) {
    if (strcmp(name, "VK_KHR_external_memory_capabilities") == 0) return ProcHook::KHR_external_memory_capabilities;
    if (strcmp(name, "VK_KHR_external_semaphore_capabilities") == 0) return ProcHook::KHR_external_semaphore_capabilities;
    if (strcmp(name, "VK_KHR_external_fence_capabilities") == 0) return ProcHook::KHR_external_fence_capabilities;
    if (strcmp(name, "VK_KHR_external_fence_fd") == 0) return ProcHook::KHR_external_fence_fd;
    // clang-format on
    return ProcHook::EXTENSION_UNKNOWN;
}
@@ -685,7 +666,6 @@ bool InitDriverTable(VkDevice dev,
    INIT_PROC(true, dev, CreateImage);
    INIT_PROC(true, dev, DestroyImage);
    INIT_PROC(true, dev, AllocateCommandBuffers);
    INIT_PROC_EXT(KHR_external_fence_fd, true, dev, ImportFenceFdKHR);
    INIT_PROC(false, dev, BindImageMemory2);
    INIT_PROC_EXT(KHR_bind_memory2, true, dev, BindImageMemory2KHR);
    INIT_PROC(false, dev, GetDeviceQueue2);
+0 −4
Original line number Diff line number Diff line
@@ -49,8 +49,6 @@ struct ProcHook {
        KHR_surface,
        KHR_surface_protected_capabilities,
        KHR_swapchain,
        EXT_swapchain_maintenance1,
        EXT_surface_maintenance1,
        ANDROID_external_memory_android_hardware_buffer,
        KHR_bind_memory2,
        KHR_get_physical_device_properties2,
@@ -58,7 +56,6 @@ struct ProcHook {
        KHR_external_memory_capabilities,
        KHR_external_semaphore_capabilities,
        KHR_external_fence_capabilities,
        KHR_external_fence_fd,

        EXTENSION_CORE_1_0,
        EXTENSION_CORE_1_1,
@@ -121,7 +118,6 @@ struct DeviceDriverTable {
    PFN_vkCreateImage CreateImage;
    PFN_vkDestroyImage DestroyImage;
    PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
    PFN_vkImportFenceFdKHR ImportFenceFdKHR;
    PFN_vkBindImageMemory2 BindImageMemory2;
    PFN_vkBindImageMemory2KHR BindImageMemory2KHR;
    PFN_vkGetDeviceQueue2 GetDeviceQueue2;
+182 −442

File changed.

Preview size limit exceeded, changes collapsed.

+0 −1
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ VKAPI_ATTR VkResult GetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice ph
VKAPI_ATTR VkResult GetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats);
VKAPI_ATTR VkResult BindImageMemory2(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos);
VKAPI_ATTR VkResult BindImageMemory2KHR(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos);
VKAPI_ATTR VkResult ReleaseSwapchainImagesEXT(VkDevice device, const VkReleaseSwapchainImagesInfoEXT* pReleaseInfo);
// clang-format on

}  // namespace driver
Loading