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

Commit 23143108 authored by Yiwei Zhang's avatar Yiwei Zhang
Browse files

libvulkan: intercept vkBindImageMemory2(KHR) at driver level

This change just updates the code generator template to add the
interception of vkBindImageMemory2 and vkBindImageMemory2KHR at
vulkan::driver level.

Bug: 130182551
Test: CtsDeqpTestCases
Change-Id: I2083d7048bba93bea80c010ba89dbc5f8ab6de0c
parent 81890b23
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -703,6 +703,7 @@ VK_KHR_get_surface_capabilities2
{{Macro "driver.InterceptedExtensions"}}
VK_KHR_get_physical_device_properties2
VK_ANDROID_external_memory_android_hardware_buffer
VK_KHR_bind_memory2
{{end}}


@@ -750,6 +751,9 @@ VK_ANDROID_external_memory_android_hardware_buffer
    {{else if eq $.Name "vkGetInstanceProcAddr"}}true
    {{else if eq $.Name "vkGetDeviceProcAddr"}}true

    {{/* VK_KHR_swapchain v69 requirement */}}
    {{else if eq $.Name "vkBindImageMemory2"}}true
    {{else if eq $.Name "vkBindImageMemory2KHR"}}true
    {{end}}

    {{$ext := GetAnnotation $ "extension"}}
@@ -985,6 +989,10 @@ VK_ANDROID_external_memory_android_hardware_buffer
    {{else if eq $.Name "vkGetPhysicalDeviceProperties"}}true
    {{else if eq $.Name "vkGetPhysicalDeviceProperties2"}}true
    {{else if eq $.Name "vkGetPhysicalDeviceProperties2KHR"}}true

    {{/* VK_KHR_swapchain v69 requirement */}}
    {{else if eq $.Name "vkBindImageMemory2"}}true
    {{else if eq $.Name "vkBindImageMemory2KHR"}}true
    {{end}}

    {{$ext := GetAnnotation $ "extension"}}
+2 −0
Original line number Diff line number Diff line
@@ -537,6 +537,7 @@ void CreateInfoWrapper::FilterExtension(const char* name) {
                // Extensions we don't need to do anything about at this level
                break;

            case ProcHook::KHR_bind_memory2:
            case ProcHook::KHR_incremental_present:
            case ProcHook::KHR_shared_presentable_image:
            case ProcHook::KHR_swapchain:
@@ -577,6 +578,7 @@ void CreateInfoWrapper::FilterExtension(const char* name) {
                // return now as these extensions do not require HAL support
                return;
            case ProcHook::EXT_hdr_metadata:
            case ProcHook::KHR_bind_memory2:
                hook_extensions_.set(ext_bit);
                break;
            case ProcHook::ANDROID_external_memory_android_hardware_buffer:
+26 −0
Original line number Diff line number Diff line
@@ -137,6 +137,15 @@ VKAPI_ATTR VkResult checkedGetSwapchainStatusKHR(VkDevice device, VkSwapchainKHR
    }
}

VKAPI_ATTR VkResult checkedBindImageMemory2KHR(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfoKHR* pBindInfos) {
    if (GetData(device).hook_extensions[ProcHook::KHR_bind_memory2]) {
        return BindImageMemory2KHR(device, bindInfoCount, pBindInfos);
    } else {
        Logger(device).Err(device, "VK_KHR_bind_memory2 not enabled. vkBindImageMemory2KHR not executed.");
        return VK_SUCCESS;
    }
}

// clang-format on

const ProcHook g_proc_hooks[] = {
@@ -169,6 +178,20 @@ const ProcHook g_proc_hooks[] = {
        reinterpret_cast<PFN_vkVoidFunction>(AllocateCommandBuffers),
        nullptr,
    },
    {
        "vkBindImageMemory2",
        ProcHook::DEVICE,
        ProcHook::EXTENSION_CORE,
        reinterpret_cast<PFN_vkVoidFunction>(BindImageMemory2),
        nullptr,
    },
    {
        "vkBindImageMemory2KHR",
        ProcHook::DEVICE,
        ProcHook::KHR_bind_memory2,
        reinterpret_cast<PFN_vkVoidFunction>(BindImageMemory2KHR),
        reinterpret_cast<PFN_vkVoidFunction>(checkedBindImageMemory2KHR),
    },
    {
        "vkCreateAndroidSurfaceKHR",
        ProcHook::INSTANCE,
@@ -458,6 +481,7 @@ ProcHook::Extension GetProcHookExtension(const char* name) {
    if (strcmp(name, "VK_KHR_get_surface_capabilities2") == 0) return ProcHook::KHR_get_surface_capabilities2;
    if (strcmp(name, "VK_KHR_get_physical_device_properties2") == 0) return ProcHook::KHR_get_physical_device_properties2;
    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;
    // clang-format on
    return ProcHook::EXTENSION_UNKNOWN;
}
@@ -517,11 +541,13 @@ bool InitDriverTable(VkDevice dev,
    INIT_PROC(true, dev, CreateImage);
    INIT_PROC(true, dev, DestroyImage);
    INIT_PROC(true, dev, AllocateCommandBuffers);
    INIT_PROC(false, dev, BindImageMemory2);
    INIT_PROC(false, dev, GetDeviceQueue2);
    INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsageANDROID);
    INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsage2ANDROID);
    INIT_PROC_EXT(ANDROID_native_buffer, true, dev, AcquireImageANDROID);
    INIT_PROC_EXT(ANDROID_native_buffer, true, dev, QueueSignalReleaseImageANDROID);
    INIT_PROC_EXT(KHR_bind_memory2, true, dev, BindImageMemory2KHR);
    // clang-format on

    return success;
+3 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ struct ProcHook {
        KHR_get_surface_capabilities2,
        KHR_get_physical_device_properties2,
        ANDROID_external_memory_android_hardware_buffer,
        KHR_bind_memory2,

        EXTENSION_CORE,  // valid bit
        EXTENSION_COUNT,
@@ -85,11 +86,13 @@ struct DeviceDriverTable {
    PFN_vkCreateImage CreateImage;
    PFN_vkDestroyImage DestroyImage;
    PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
    PFN_vkBindImageMemory2 BindImageMemory2;
    PFN_vkGetDeviceQueue2 GetDeviceQueue2;
    PFN_vkGetSwapchainGrallocUsageANDROID GetSwapchainGrallocUsageANDROID;
    PFN_vkGetSwapchainGrallocUsage2ANDROID GetSwapchainGrallocUsage2ANDROID;
    PFN_vkAcquireImageANDROID AcquireImageANDROID;
    PFN_vkQueueSignalReleaseImageANDROID QueueSignalReleaseImageANDROID;
    PFN_vkBindImageMemory2KHR BindImageMemory2KHR;
    // clang-format on
};

+20 −0
Original line number Diff line number Diff line
@@ -1818,5 +1818,25 @@ VKAPI_ATTR void SetHdrMetadataEXT(
    return;
}

VKAPI_ATTR
VkResult BindImageMemory2(VkDevice device,
                          uint32_t bindInfoCount,
                          const VkBindImageMemoryInfo* pBindInfos) {
    ATRACE_CALL();

    return GetData(device).driver.BindImageMemory2(device, bindInfoCount,
                                                   pBindInfos);
}

VKAPI_ATTR
VkResult BindImageMemory2KHR(VkDevice device,
                             uint32_t bindInfoCount,
                             const VkBindImageMemoryInfo* pBindInfos) {
    ATRACE_CALL();

    return GetData(device).driver.BindImageMemory2KHR(device, bindInfoCount,
                                                      pBindInfos);
}

}  // namespace driver
}  // namespace vulkan
Loading