roderickc / wine-vulkan

Other
53 stars 7 forks source link

Wolfenstein II support? #1

Closed oscarbg closed 6 years ago

oscarbg commented 6 years ago

Hi, I have Wolfenstein II support running via wine staging OK using 2 patches from: https://bugs.winehq.org/show_bug.cgi?id=43935 one is Vulkan related add support for vkGetPhysicalDeviceProperties2KHR (from the VK_KHR_get_physical_device_properties2 extension) is not implemented.

So I compiled your branch to see if doesn't need any Vulkan patches.. compiled code and installed Vulkan 1.0.65 SDK (also tested with 1.0.51 SDK).. from simple cube.exe vulkaninfo.exe demos seems installation is OK.. so running Wolfenstein II with your branch doesn't work: GUI window log:

Application Info

App    : Wolfenstein II The New Colossus - 1.0.2
Engine : idTech - 6.5.0

Instance Extensions

 + VK_KHR_surface
 + VK_KHR_win32_surface

Device Extensions

+ VK_AMD_rasterization_order

Device Extensions

 + VK_KHR_swapchain

Vulkan Device Info:
Vendor : AMD
GPU    : AMD RADV VEGA
VRAM   : 7888 MiB
Driver : 17.3.99
VK API : 1.0.57

Initializing Vulkan subsystem
FATAL ERROR: Could not initialize vkGetPhysicalDeviceSurfaceSupportKHR function pointer
TIMER: idRenderSystemLocal::Init() took 72.0840 ms
Dumped console text to C:\users\ivan\SAVE~YWG\MachineGames\Wolfenstein II The New Colossus\base\ErrorLog_12-04-2017__03-56-15pm.txt.

console log:

fixme:vulkan:wine_vk_instance_convert_create_info Application requested a linked structure of type 47
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceDisplayPropertiesKHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceDisplayPlanePropertiesKHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetDisplayPlaneSupportedDisplaysKHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetDisplayModePropertiesKHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkCreateDisplayModeKHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetDisplayPlaneCapabilitiesKHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkCreateDisplayPlaneSurfaceKHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkCreateSharedSwapchainsKHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceFeatures2KHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceProperties2KHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceFormatProperties2KHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceImageFormatProperties2KHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceQueueFamilyProperties2KHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceMemoryProperties2KHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceSparseImageFormatProperties2KHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceExternalBufferPropertiesKHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceExternalSemaphorePropertiesKHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceExternalFencePropertiesKHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceSurfaceCapabilities2KHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceSurfaceFormats2KHR'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkCreateDebugReportCallbackEXT'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkDestroyDebugReportCallbackEXT'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkDebugReportMessageEXT'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkDebugMarkerSetObjectTagEXT'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkDebugMarkerSetObjectNameEXT'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceExternalImageFormatPropertiesNV'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetDeviceGroupSurfacePresentModesKHX'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDevicePresentRectanglesKHX'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkEnumeratePhysicalDeviceGroupsKHX'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkReleaseDisplayEXT'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceSurfaceCapabilities2EXT'
fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: 'vkGetPhysicalDeviceMultisamplePropertiesEXT'
WARNING: radv is not a conformant vulkan implementation, testing use only.
roderickc commented 6 years ago

Hi Oscar,

Thanks for testing the vulkan support. I'm currently reworking some of the surface code and afterwards can easily add this extension. I'm surprised though that the game is complaining about 'vkGetPhysicalDeviceSurfaceSupportKHR'. Unless the game is just printing the wrong message, which is common for games.

Probably around the weekend is when I will push some of my changes. I will let you know when they are ready.

Thanks, Roderick

oscarbg commented 6 years ago

thanks.. will try early next week then and post results..

roderickc commented 6 years ago

It took a bit longer than expected, but I needed to make a lot of massive changes to the code base to clean up many things (memory leaks, moved more calls to winex11, improved 32-bit support..) and went through may rebases.

In any case latest master (download it again as I did a force push) should support 'VK_KHR_get_physical_device_properties2'. However it doesn't seem to be enough for Wolfenstein just yet. I keep getting the same error even though the surface extension is there. It must be complaining about something else, but I'm not sure yet what. Please give it a try as maybe you have more luck.

roderickc commented 6 years ago

I have the game starting now. It needs a few more tricky fixes and some hacks. Need to figure out how to add these changes properly.

While the game starts and I see some of the logos, the screen is black with just a mouse cursor afterwards.

roderickc commented 6 years ago

The debug output (WINEDEBUG=+vulkan) can't easily get captured due to steam, but basically the game is trying to load "vkGetPhysicalDeviceSurfaceSupportKHR" through vkGetDeviceProcAddr. This is really wrong as physical device is a child of instance and should only load through vkGetInstanceProcAddr. Just allowing it from within vkGetDeviceProcAddr gets it to start.

oscarbg commented 6 years ago

@roderickc black screen should be solved using patch from: https://bugs.winehq.org/show_bug.cgi?id=43935 download patch from this bug "ntdll: Return STATUS_PENDING from NtReadFileScatter on success or EOF" or also better from Wine 3.0 latest rc's include "commit f87a2f0e4cd4d36f3a218ac499d7a8f1933335a5 Author: Andrew Eikum aeikum@codeweavers.com Date: Wed Dec 6 15:08:00 2017 -0600

ntdll: Don't require full-page reads in NtReadFileScatter"

this patch which fixes it also..

hope you can test if finally all works with either one of these patches..

will test soon.. thanks..

roderickc commented 6 years ago

Thanks for letting me know of those patches. I will probably rebase my work on top of 3.0 later today and give it a try. For now I may add the wolfenstein ii hacks as well. I will let you know when the changes are up.

roderickc commented 6 years ago

You are right it gets to the menu now. I can start a game. It starts a cut scene when I pick difficulty and a save slot. Though after that the screen is black, but there is audio. I need to try again.

In any cases I pushed the wolfenstein hacks and all the code is now based on wine 3.0. Let me know how things work for you.

roderickc commented 6 years ago

After further testing the game seems to work fine. The cut scenes are just sensitive to turning black I guess if you minimize the window by accident. I had issues skipping the cutscenes, probably because I'm on Wayland, but when in game I can play now.

roderickc commented 6 years ago

The issue is now resolved in a correct way in master.