- Joshie 🐸✨
On 13.10.20 03:51, Joshua Ashton wrote:
Signed-off-by: Joshua Ashton joshua@froggi.es
dlls/winevulkan/make_vulkan | 8 ++++- dlls/winevulkan/vulkan.c | 59 +++++++++++++++++++++++++++++++++++-- 2 files changed, 64 insertions(+), 3 deletions(-)
diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index 70d8fa5516..fa2f9edf73 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -101,7 +101,6 @@ UNSUPPORTED_EXTENSIONS = [ # Device extensions "VK_AMD_display_native_hdr", "VK_EXT_display_control", # Requires VK_EXT_display_surface_counter - "VK_EXT_full_screen_exclusive", "VK_EXT_hdr_metadata", # Needs WSI work. "VK_EXT_pipeline_creation_feedback", "VK_GOOGLE_display_timing", @@ -225,6 +224,12 @@ FUNCTION_OVERRIDES = { # VK_EXT_calibrated_timestamps "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT" : {"dispatch" : True, "driver" : False, "thunk" : False}, "vkGetCalibratedTimestampsEXT" : {"dispatch" : True, "driver" : False, "thunk" : False},
+ # VK_EXT_full_screen_exclusive + "vkGetPhysicalDeviceSurfacePresentModes2EXT" : {"dispatch" : True, "driver" : False, "thunk" : False}, + "vkGetDeviceGroupSurfacePresentModes2EXT" : {"dispatch" : True, "driver" : False, "thunk" : False}, + "vkAcquireFullScreenExclusiveModeEXT" : {"dispatch" : True, "driver" : False, "thunk" : False}, + "vkReleaseFullScreenExclusiveModeEXT" : {"dispatch" : True, "driver" : False, "thunk" : False}, }
STRUCT_CHAIN_CONVERSIONS = [ @@ -235,6 +240,7 @@ STRUCT_CHAIN_CONVERSIONS = [ # List of device extensions to ensure that we support regardless of whether # the actual driver supports them or not. FAKED_EXTENSIONS = [ + {"name": "VK_EXT_full_screen_exclusive", "version": 4} ]
class Direction(Enum): diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 177aa3a8bf..fa18209cbd 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -1640,15 +1640,30 @@ VkResult WINAPI wine_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice VkResult WINAPI wine_vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice phys_dev, const VkPhysicalDeviceSurfaceInfo2KHR *surface_info, VkSurfaceCapabilities2KHR *capabilities) { + VkPhysicalDeviceSurfaceInfo2KHR surface_info_modified; VkResult res;
TRACE("%p, %p, %p\n", phys_dev, surface_info, capabilities);
- res = thunk_vkGetPhysicalDeviceSurfaceCapabilities2KHR(phys_dev, surface_info, capabilities); + /* Toss out VkSurfaceFullScreenExclusiveInfoEXT + * and VkSurfaceFullScreenExclusiveWin32InfoEXT */ + surface_info_modified.sType = surface_info->sType; + surface_info_modified.pNext = NULL; + surface_info_modified.surface = surface_info->surface;
+ res = thunk_vkGetPhysicalDeviceSurfaceCapabilities2KHR(phys_dev, &surface_info_modified, capabilities);
if (res == VK_SUCCESS) + { + VkSurfaceCapabilitiesFullScreenExclusiveEXT *full_screen_exclusive_caps;
white space error
adjust_max_image_count(phys_dev, &capabilities->surfaceCapabilities);
+ /* Lie and say we support exclusive fullscreen. */ + if ((full_screen_exclusive_caps = wine_vk_find_struct(capabilities, SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT)))
- full_screen_exclusive_caps->fullScreenExclusiveSupported = VK_TRUE;
+ }
return res; }
@@ -1656,15 +1671,55 @@ VkResult WINAPI wine_vkGetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice phys const VkPhysicalDeviceSurfaceInfo2KHR *surface_info, uint32_t *surface_format_count, VkSurfaceFormat2KHR *surface_formats) { + VkPhysicalDeviceSurfaceInfo2KHR surface_info_modified; VkResult res;
TRACE("%p, %p, %p, %p\n", phys_dev, surface_info, surface_format_count, surface_formats);
- res = thunk_vkGetPhysicalDeviceSurfaceFormats2KHR(phys_dev, surface_info, surface_format_count, surface_formats); + /* Toss out VkSurfaceFullScreenExclusiveInfoEXT + * and VkSurfaceFullScreenExclusiveWin32InfoEXT */ + surface_info_modified.sType = surface_info->sType; + surface_info_modified.pNext = NULL;
This is going to break if there's another extension that uses this function.
Generating a chain conversion function might be a better idea, but I think StructChainConversionFunction doesn't support output chains yet.
Otherwise, at least put a TODO or FIXME comment here.
Thanks,
Georg Lehmann
+ surface_info_modified.surface = surface_info->surface;
+ res = thunk_vkGetPhysicalDeviceSurfaceFormats2KHR(phys_dev, &surface_info_modified, surface_format_count, surface_formats);
return res; }
+VkResult WINAPI wine_vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t *pPresentModeCount, VkPresentModeKHR *pPresentModes); +VkResult WINAPI wine_vkGetDeviceGroupSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR *pModes);
+VkResult WINAPI wine_vkGetPhysicalDeviceSurfacePresentModes2EXT( + VkPhysicalDevice phys_dev, const VkPhysicalDeviceSurfaceInfo2KHR *surface_info, + uint32_t *present_mode_count, VkPresentModeKHR *present_modes) +{ + TRACE("%p, %p, %p, %p", phys_dev, surface_info, present_mode_count, present_modes); + return wine_vkGetPhysicalDeviceSurfacePresentModesKHR(phys_dev, surface_info->surface, present_mode_count, present_modes); +}
+VkResult WINAPI wine_vkGetDeviceGroupSurfacePresentModes2EXT( + VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR *surface_info, + VkDeviceGroupPresentModeFlagsKHR *modes) +{ + TRACE("%p, %p, %p", device, surface_info, modes); + return wine_vkGetDeviceGroupSurfacePresentModesKHR(device, surface_info->surface, modes); +}
+VkResult WINAPI wine_vkAcquireFullScreenExclusiveModeEXT( + VkDevice device, VkSwapchainKHR swapchain) +{ + TRACE("%p, %s", device, wine_dbgstr_longlong(swapchain)); + return VK_SUCCESS; +}
+VkResult WINAPI wine_vkReleaseFullScreenExclusiveModeEXT( + VkDevice device, VkSwapchainKHR swapchain) +{ + TRACE("%p, %s", device, wine_dbgstr_longlong(swapchain)); + return VK_SUCCESS; +}
BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, void *reserved) { TRACE("%p, %u, %p\n", hinst, reason, reserved);