X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fvulkan%2Fwsi%2Fwsi_common.h;h=99ccdf84cde30e09989dc5de89da7aa810d9a13d;hb=9a61f2a8a9ca17e2d53dded9c1c490c890aa4a74;hp=e693e2be4250265c98969517cc0215ce048328cf;hpb=1ee01d91c7e9bb0922b112c11a374283e2ca454b;p=mesa.git diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h index e693e2be425..99ccdf84cde 100644 --- a/src/vulkan/wsi/wsi_common.h +++ b/src/vulkan/wsi/wsi_common.h @@ -35,16 +35,13 @@ */ #define VK_STRUCTURE_TYPE_WSI_IMAGE_CREATE_INFO_MESA (VkStructureType)1000001002 #define VK_STRUCTURE_TYPE_WSI_MEMORY_ALLOCATE_INFO_MESA (VkStructureType)1000001003 -#define VK_STRUCTURE_TYPE_WSI_FORMAT_MODIFIER_PROPERTIES_LIST_MESA (VkStructureType)1000001004 #define VK_STRUCTURE_TYPE_WSI_SURFACE_SUPPORTED_COUNTERS_MESA (VkStructureType)1000001005 +#define VK_STRUCTURE_TYPE_WSI_MEMORY_SIGNAL_SUBMIT_INFO_MESA (VkStructureType)1000001006 struct wsi_image_create_info { VkStructureType sType; const void *pNext; bool scanout; - - uint32_t modifier_count; - const uint64_t *modifiers; }; struct wsi_memory_allocate_info { @@ -53,20 +50,6 @@ struct wsi_memory_allocate_info { bool implicit_sync; }; -struct wsi_format_modifier_properties { - uint64_t modifier; - uint32_t modifier_plane_count; -}; - -/* Chain in for vkGetPhysicalDeviceFormatProperties2KHR */ -struct wsi_format_modifier_properties_list { - VkStructureType sType; - const void *pNext; - - uint32_t modifier_count; - struct wsi_format_modifier_properties *modifier_properties; -}; - /* To be chained into VkSurfaceCapabilities2KHR */ struct wsi_surface_supported_counters { VkStructureType sType; @@ -76,6 +59,13 @@ struct wsi_surface_supported_counters { }; +/* To be chained into VkSubmitInfo */ +struct wsi_memory_signal_submit_info { + VkStructureType sType; + const void *pNext; + VkDeviceMemory memory; +}; + struct wsi_fence { VkDevice device; const struct wsi_device *wsi_device; @@ -87,6 +77,8 @@ struct wsi_fence { struct wsi_interface; +struct driOptionCache; + #define VK_ICD_WSI_PLATFORM_MAX (VK_ICD_WSI_PLATFORM_DISPLAY + 1) struct wsi_device { @@ -101,8 +93,55 @@ struct wsi_device { bool supports_modifiers; uint32_t maxImageDimension2D; - - uint64_t (*image_get_modifier)(VkImage image); + VkPresentModeKHR override_present_mode; + bool force_bgra8_unorm_first; + + /* Whether to enable adaptive sync for a swapchain if implemented and + * available. Not all window systems might support this. */ + bool enable_adaptive_sync; + + struct { + /* Override the minimum number of images on the swapchain. + * 0 = no override */ + uint32_t override_minImageCount; + + /* Forces strict number of image on the swapchain using application + * provided VkSwapchainCreateInfoKH::RminImageCount. + */ + bool strict_imageCount; + } x11; + + /* Signals the semaphore such that any wait on the semaphore will wait on + * any reads or writes on the give memory object. This is used to + * implement the semaphore signal operation in vkAcquireNextImage. + */ + void (*signal_semaphore_for_memory)(VkDevice device, + VkSemaphore semaphore, + VkDeviceMemory memory); + + /* Signals the fence such that any wait on the fence will wait on any reads + * or writes on the give memory object. This is used to implement the + * semaphore signal operation in vkAcquireNextImage. + */ + void (*signal_fence_for_memory)(VkDevice device, + VkFence fence, + VkDeviceMemory memory); + + /* + * This sets the ownership for a WSI memory object: + * + * The ownership is true if and only if the application is allowed to submit + * command buffers that reference the buffer. + * + * This can be used to prune BO lists without too many adverse affects on + * implicit sync. + * + * Side note: care needs to be taken for internally delayed submissions wrt + * timeline semaphores. + */ + void (*set_memory_ownership)(VkDevice device, + VkDeviceMemory memory, + VkBool32 ownership); #define WSI_CB(cb) PFN_vk##cb cb WSI_CB(AllocateMemory); @@ -123,11 +162,13 @@ struct wsi_device { WSI_CB(FreeMemory); WSI_CB(FreeCommandBuffers); WSI_CB(GetBufferMemoryRequirements); + WSI_CB(GetImageDrmFormatModifierPropertiesEXT); WSI_CB(GetImageMemoryRequirements); WSI_CB(GetImageSubresourceLayout); WSI_CB(GetMemoryFdKHR); WSI_CB(GetPhysicalDeviceFormatProperties); WSI_CB(GetPhysicalDeviceFormatProperties2KHR); + WSI_CB(GetPhysicalDeviceImageFormatProperties2); WSI_CB(ResetFences); WSI_CB(QueueSubmit); WSI_CB(WaitForFences); @@ -143,7 +184,8 @@ wsi_device_init(struct wsi_device *wsi, VkPhysicalDevice pdevice, WSI_FN_GetPhysicalDeviceProcAddr proc_addr, const VkAllocationCallbacks *alloc, - int display_fd); + int display_fd, + const struct driOptionCache *dri_options); void wsi_device_finish(struct wsi_device *wsi,