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

Commit fbd330f5 authored by Chris Forbes's avatar Chris Forbes Committed by Android (Google) Code Review
Browse files

Merge changes I6ea2e33e,Iccfce003

* changes:
  vulkan: Add function stub & plumbing for KHR_swapchain_front_buffered
  vulkan: Add KHR_swapchain_front_buffered to header and api
parents e5c943a7 0f2ac2e5
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -150,6 +150,9 @@ define NULL_HANDLE 0
@extension("VK_NVX_device_generated_commands") define VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 1
@extension("VK_NVX_device_generated_commands") define VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NVX_device_generated_commands"

@extension("VK_KHR_swapchain_front_buffered") define VK_KHR_SWAPCHAIN_FRONT_BUFFERED_SPEC_VERSION 2
@extension("VK_KHR_swapchain_front_buffered") define VK_KHR_SWAPCHAIN_FRONT_BUFFERED_EXTENSION_NAME "VK_KHR_swapchain_front_buffered"



/////////////
@@ -924,6 +927,10 @@ enum VkPresentModeKHR {
    VK_PRESENT_MODE_MAILBOX_KHR                             = 0x00000001,
    VK_PRESENT_MODE_FIFO_KHR                                = 0x00000002,
    VK_PRESENT_MODE_FIFO_RELAXED_KHR                        = 0x00000003,
    //@extension("VK_KHR_swapchain_front_buffered")
    VK_PRESENT_MODE_FRONT_BUFFERED_DEMAND_REFRESH_KHR       = 1000111000,
    //@extension("VK_KHR_swapchain_front_buffered")
    VK_PRESENT_MODE_FRONT_BUFFERED_CONTINUOUS_REFRESH_KHR   = 1000111001,
}

@extension("VK_KHR_surface")
@@ -6109,6 +6116,13 @@ cmd void vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
        VkDeviceGeneratedCommandsLimitsNVX*         pLimits) {
}

@extension("VK_KHR_swapchain_front_buffered")
cmd VkResult vkGetSwapchainStatusKHR(
        VkDevice                                    device,
        VkSwapchainKHR                              swapchain) {
    return ?
}


////////////////
// Validation //
+14 −0
Original line number Diff line number Diff line
@@ -3228,6 +3228,8 @@ typedef enum VkPresentModeKHR {
    VK_PRESENT_MODE_MAILBOX_KHR = 1,
    VK_PRESENT_MODE_FIFO_KHR = 2,
    VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
    VK_PRESENT_MODE_FRONT_BUFFERED_DEMAND_REFRESH_KHR = 1000111000,
    VK_PRESENT_MODE_FRONT_BUFFERED_CONTINUOUS_REFRESH_KHR = 1000111001,
    VK_PRESENT_MODE_BEGIN_RANGE_KHR = VK_PRESENT_MODE_IMMEDIATE_KHR,
    VK_PRESENT_MODE_END_RANGE_KHR = VK_PRESENT_MODE_FIFO_RELAXED_KHR,
    VK_PRESENT_MODE_RANGE_SIZE_KHR = (VK_PRESENT_MODE_FIFO_RELAXED_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
@@ -3884,6 +3886,18 @@ typedef struct VkPresentRegionsKHR {
    const VkPresentRegionKHR* pRegions;
} VkPresentRegionsKHR;

#define VK_KHR_swapchain_front_buffered 1
#define VK_KHR_SWAPCHAIN_FRONT_BUFFERED_SPEC_VERSION 2
#define VK_KHR_SWAPCHAIN_FRONT_BUFFERED_EXTENSION_NAME "VK_KHR_swapchain_front_buffered"

typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain);

#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR(
    VkDevice                                    device,
    VkSwapchainKHR                              swapchain);
#endif

#define VK_EXT_debug_report 1
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)

+1 −0
Original line number Diff line number Diff line
@@ -705,6 +705,7 @@ VK_KHR_incremental_present
VK_KHR_surface
VK_KHR_swapchain
VK_GOOGLE_display_timing
VK_KHR_swapchain_front_buffered
{{end}}


+17 −0
Original line number Diff line number Diff line
@@ -93,6 +93,15 @@ VKAPI_ATTR VkResult checkedGetPastPresentationTimingGOOGLE(VkDevice device, VkSw
    }
}

VKAPI_ATTR VkResult checkedGetSwapchainStatusKHR(VkDevice device, VkSwapchainKHR swapchain) {
    if (GetData(device).hook_extensions[ProcHook::KHR_swapchain_front_buffered]) {
        return GetSwapchainStatusKHR(device, swapchain);
    } else {
        Logger(device).Err(device, "VK_KHR_swapchain_front_buffered not enabled. vkGetSwapchainStatusKHR not executed.");
        return VK_SUCCESS;
    }
}

// clang-format on

const ProcHook g_proc_hooks[] = {
@@ -300,6 +309,13 @@ const ProcHook g_proc_hooks[] = {
        reinterpret_cast<PFN_vkVoidFunction>(GetSwapchainImagesKHR),
        reinterpret_cast<PFN_vkVoidFunction>(checkedGetSwapchainImagesKHR),
    },
    {
        "vkGetSwapchainStatusKHR",
        ProcHook::DEVICE,
        ProcHook::KHR_swapchain_front_buffered,
        reinterpret_cast<PFN_vkVoidFunction>(GetSwapchainStatusKHR),
        reinterpret_cast<PFN_vkVoidFunction>(checkedGetSwapchainStatusKHR),
    },
    {
        "vkQueuePresentKHR",
        ProcHook::DEVICE,
@@ -338,6 +354,7 @@ ProcHook::Extension GetProcHookExtension(const char* name) {
    if (strcmp(name, "VK_KHR_surface") == 0) return ProcHook::KHR_surface;
    if (strcmp(name, "VK_KHR_swapchain") == 0) return ProcHook::KHR_swapchain;
    if (strcmp(name, "VK_GOOGLE_display_timing") == 0) return ProcHook::GOOGLE_display_timing;
    if (strcmp(name, "VK_KHR_swapchain_front_buffered") == 0) return ProcHook::KHR_swapchain_front_buffered;
    // clang-format on
    return ProcHook::EXTENSION_UNKNOWN;
}
+1 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ struct ProcHook {
        KHR_surface,
        KHR_swapchain,
        GOOGLE_display_timing,
        KHR_swapchain_front_buffered,

        EXTENSION_CORE,  // valid bit
        EXTENSION_COUNT,
Loading