Signed-off-by: Brendan Shanks bshanks@codeweavers.com ---
This patch has make_vulkan generate a 'loader/winevulkan.json.in' manifest file, it gets processed to 'loader/winevulkan.json', then installed by wine.inf to c:\windows\system32.
- winevulkan.json doesn't need any pre-processing, but '.in' was the only way I found to have it built/installed. Is there a better way?
- Is 'loader' the best place to generate the file? I feel like 'dlls/winevulkan' would be preferable, but that puts the file in a different place relative to wine.inf when running from the build tree or installed.
configure.ac | 1 + dlls/winevulkan/make_vulkan | 13 +++++++++++++ loader/Makefile.in | 3 ++- loader/wine.inf.in | 32 ++++++++++++++++++++++---------- loader/winevulkan.json.in | 7 +++++++ 5 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 loader/winevulkan.json.in
diff --git a/configure.ac b/configure.ac index 7c3c6d2b67..5135a60a62 100644 --- a/configure.ac +++ b/configure.ac @@ -4099,6 +4099,7 @@ fonts \ loader/wine.inf \ loader/winebus.inf \ loader/winehid.inf \ +loader/winevulkan.json \ nls \ programs/msidb/msidb \ programs/msiexec/msiexec \ diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index 3593410041..66543dceaf 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -71,6 +71,7 @@ WINE_VK_VERSION = (1, 1) WINE_VULKAN_H = "../../include/wine/vulkan.h" WINE_VULKAN_DRIVER_H = "../../include/wine/vulkan_driver.h" WINE_VULKAN_LOADER_SPEC = "../vulkan-1/vulkan-1.spec" +WINE_VULKAN_JSON = "../../loader/winevulkan.json.in" WINE_VULKAN_SPEC = "winevulkan.spec" WINE_VULKAN_THUNKS_C = "vulkan_thunks.c" WINE_VULKAN_THUNKS_H = "vulkan_thunks.h" @@ -3000,6 +3001,15 @@ def download_vk_xml(filename): if not os.path.isfile(filename): urllib.request.urlretrieve(url, filename)
+def generate_vulkan_json(f): + f.write("{\n") + f.write(" "file_format_version": "1.0.0",\n") + f.write(" "ICD": {\n") + f.write(" "library_path": "winevulkan.dll",\n") + f.write(" "api_version": "{0}"\n".format(VK_XML_VERSION)) + f.write(" }\n") + f.write("}\n") + def main(): parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbose", action="count", default=0, help="increase output verbosity") @@ -3031,6 +3041,9 @@ def main(): with open(WINE_VULKAN_THUNKS_C, "w") as f: generator.generate_thunks_c(f, "wine_")
+ with open(WINE_VULKAN_JSON, "w") as f: + generate_vulkan_json(f) + with open(WINE_VULKAN_SPEC, "w") as f: generator.generate_vulkan_spec(f)
diff --git a/loader/Makefile.in b/loader/Makefile.in index f9b2fa9293..f3638fa4e0 100644 --- a/loader/Makefile.in +++ b/loader/Makefile.in @@ -10,7 +10,8 @@ SOURCES = \ wine.pl.UTF-8.man.in \ wine_info.plist.in \ winebus.inf.in \ - winehid.inf.in + winehid.inf.in \ + winevulkan.json.in
PROGRAMS = $(WINELOADER_PROGRAMS) INSTALL_LIB = $(WINELOADER_PROGRAMS) diff --git a/loader/wine.inf.in b/loader/wine.inf.in index 8267ef34dc..3ae4273671 100644 --- a/loader/wine.inf.in +++ b/loader/wine.inf.in @@ -30,7 +30,7 @@ signature="$CHICAGO$" RegisterDlls=RegisterDllsSection WineFakeDlls=FakeDllsWin32,FakeDlls UpdateInis=SystemIni -CopyFiles=InfFiles,NlsFiles +CopyFiles=InfFiles,NlsFiles,VulkanFiles AddReg=\ Classes,\ ContentIndex,\ @@ -48,13 +48,14 @@ AddReg=\ SessionMgr,\ Tapi,\ Timezones,\ - LicenseInformation + LicenseInformation,\ + Vulkan
[DefaultInstall.NT] RegisterDlls=RegisterDllsSection WineFakeDlls=FakeDllsWin32,FakeDlls UpdateInis=SystemIni -CopyFiles=InfFiles,NlsFiles +CopyFiles=InfFiles,NlsFiles,VulkanFiles AddReg=\ Classes,\ ContentIndex,\ @@ -73,14 +74,15 @@ AddReg=\ Tapi,\ Timezones,\ VersionInfo,\ - LicenseInformation + LicenseInformation,\ + Vulkan
[DefaultInstall.ntamd64] RegisterDlls=RegisterDllsSection WineFakeDlls=FakeDllsWin64,FakeDlls WinePreInstall=Wow64 UpdateInis=SystemIni -CopyFiles=InfFiles,NlsFiles +CopyFiles=InfFiles,NlsFiles,VulkanFiles AddReg=\ Classes,\ ContentIndex,\ @@ -100,14 +102,15 @@ AddReg=\ Tapi,\ Timezones,\ VersionInfo.ntamd64,\ - LicenseInformation + LicenseInformation,\ + Vulkan
[DefaultInstall.ntarm64] RegisterDlls=RegisterDllsSection WineFakeDlls=FakeDllsWin64,FakeDlls WinePreInstall=Wow64 UpdateInis=SystemIni -CopyFiles=InfFiles,NlsFiles +CopyFiles=InfFiles,NlsFiles,VulkanFiles AddReg=\ Classes,\ ContentIndex,\ @@ -127,12 +130,13 @@ AddReg=\ Tapi,\ Timezones,\ VersionInfo.ntamd64,\ - LicenseInformation + LicenseInformation,\ + Vulkan
[Wow64Install] RegisterDlls=RegisterDllsSection WineFakeDlls=FakeDllsWin32,FakeDllsWow64 -CopyFiles=NlsFiles +CopyFiles=NlsFiles,VulkanFiles AddReg=\ CurrentVersion,\ CurrentVersionWow64,\ @@ -142,7 +146,8 @@ AddReg=\ Misc,\ Tapi,\ VersionInfo.ntamd64,\ - LicenseInformation + LicenseInformation,\ + Vulkan
[Wow64Install.ntarm64] WineFakeDlls=FakeDllsWin32 @@ -3888,6 +3893,9 @@ HKLM,Software\Wine\LicenseInformation,"Shell-InBoxGames-Solitaire-EnableGame",0x HKLM,Software\Wine\LicenseInformation,"Shell-InBoxGames-SpiderSolitaire-EnableGame",0x10001,0x00000001 HKLM,Software\Wine\LicenseInformation,"Shell-PremiumInBoxGames-Chess-EnableGame",0x10001,0x00000001
+[Vulkan] +HKLM,Software\Khronos\Vulkan\Drivers,"%11%\winevulkan.json",0x10001,0 + [InfFiles] winebus.inf winehid.inf @@ -3965,9 +3973,13 @@ normnfd.nls normnfkc.nls normnfkd.nls
+[VulkanFiles] +winevulkan.json + [WineSourceDirs] NlsFiles=nls
[DestinationDirs] InfFiles = 17 NlsFiles = 11 +VulkanFiles = 11 diff --git a/loader/winevulkan.json.in b/loader/winevulkan.json.in new file mode 100644 index 0000000000..be1b278ddb --- /dev/null +++ b/loader/winevulkan.json.in @@ -0,0 +1,7 @@ +{ + "file_format_version": "1.0.0", + "ICD": { + "library_path": "winevulkan.dll", + "api_version": "1.1.130" + } +}
Red Dead Redemption 2 requires and installs the official Vulkan loader, but the installer requires vulkan-1.dll's FILEVERSION to be lower than what it's installing.
Signed-off-by: Brendan Shanks bshanks@codeweavers.com --- dlls/vulkan-1/version.rc | 1 + 1 file changed, 1 insertion(+)
diff --git a/dlls/vulkan-1/version.rc b/dlls/vulkan-1/version.rc index ec75462ddf..93cf661525 100644 --- a/dlls/vulkan-1/version.rc +++ b/dlls/vulkan-1/version.rc @@ -20,6 +20,7 @@
#define WINE_FILEDESCRIPTION_STR "Wine Vulkan Loader" #define WINE_FILENAME_STR "vulkan-1.dll" +#define WINE_FILEVERSION 1,0,0,0 /* Set to 1.0.0 so the official Vulkan runtime installer will replace this file */ #define WINE_FILEVERSION_STR PACKAGE_VERSION #define WINE_PRODUCTVERSION_STR PACKAGE_VERSION #define WINE_PRODUCTNAME_STR "Wine Vulkan"
I had some trouble finding the logic in the VulkanLoader repository for checking the DLL's FILEVERSION. As it turns out, the Vulkan Runtime Installer for Windows lives here: https://github.com/KhronosGroup/Vulkan-Tools/blob/master/windows-runtime-ins...
Signed-off-by: Liam Middlebrook lmiddlebrook@nvidia.com
Thanks,
Liam Middlebrook
On 3/13/20 10:10 AM, Brendan Shanks wrote:
Red Dead Redemption 2 requires and installs the official Vulkan loader, but the installer requires vulkan-1.dll's FILEVERSION to be lower than what it's installing.
Signed-off-by: Brendan Shanks bshanks@codeweavers.com
dlls/vulkan-1/version.rc | 1 + 1 file changed, 1 insertion(+)
diff --git a/dlls/vulkan-1/version.rc b/dlls/vulkan-1/version.rc index ec75462ddf..93cf661525 100644 --- a/dlls/vulkan-1/version.rc +++ b/dlls/vulkan-1/version.rc @@ -20,6 +20,7 @@
#define WINE_FILEDESCRIPTION_STR "Wine Vulkan Loader" #define WINE_FILENAME_STR "vulkan-1.dll" +#define WINE_FILEVERSION 1,0,0,0 /* Set to 1.0.0 so the official Vulkan runtime installer will replace this file */ #define WINE_FILEVERSION_STR PACKAGE_VERSION #define WINE_PRODUCTVERSION_STR PACKAGE_VERSION #define WINE_PRODUCTNAME_STR "Wine Vulkan"
----------------------------------------------------------------------------------- This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. -----------------------------------------------------------------------------------
|Hi Brendan,
On 13.03.2020 18:10, Brendan Shanks wrote:
- Is 'loader' the best place to generate the file? I feel like 'dlls/winevulkan' would be preferable, but that puts the file in a different place relative to wine.inf when running from the build tree or installed.
You could implement DllRegisterServer in winevulkan to create the file and set registry. json file could be stored in registry, but it seems trivial enough that a C string literal would be enough.
Thanks,
Jacek
On 13.03.2020 18:37, Jacek Caban wrote:
json file could be stored in registry
I meant resources.
Jacek
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47109
On 3/14/20 1:10 AM, Brendan Shanks wrote:
Signed-off-by: Brendan Shanks bshanks@codeweavers.com
This patch has make_vulkan generate a 'loader/winevulkan.json.in' manifest file, it gets processed to 'loader/winevulkan.json', then installed by wine.inf to c:\windows\system32.
winevulkan.json doesn't need any pre-processing, but '.in' was the only way I found to have it built/installed. Is there a better way?
Is 'loader' the best place to generate the file? I feel like 'dlls/winevulkan' would be preferable, but that puts the file in a different place relative to wine.inf when running from the build tree or installed.
configure.ac | 1 + dlls/winevulkan/make_vulkan | 13 +++++++++++++ loader/Makefile.in | 3 ++- loader/wine.inf.in | 32 ++++++++++++++++++++++---------- loader/winevulkan.json.in | 7 +++++++ 5 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 loader/winevulkan.json.in
diff --git a/configure.ac b/configure.ac index 7c3c6d2b67..5135a60a62 100644 --- a/configure.ac +++ b/configure.ac @@ -4099,6 +4099,7 @@ fonts \ loader/wine.inf \ loader/winebus.inf \ loader/winehid.inf \ +loader/winevulkan.json \ nls \ programs/msidb/msidb \ programs/msiexec/msiexec \ diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index 3593410041..66543dceaf 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -71,6 +71,7 @@ WINE_VK_VERSION = (1, 1) WINE_VULKAN_H = "../../include/wine/vulkan.h" WINE_VULKAN_DRIVER_H = "../../include/wine/vulkan_driver.h" WINE_VULKAN_LOADER_SPEC = "../vulkan-1/vulkan-1.spec" +WINE_VULKAN_JSON = "../../loader/winevulkan.json.in" WINE_VULKAN_SPEC = "winevulkan.spec" WINE_VULKAN_THUNKS_C = "vulkan_thunks.c" WINE_VULKAN_THUNKS_H = "vulkan_thunks.h" @@ -3000,6 +3001,15 @@ def download_vk_xml(filename): if not os.path.isfile(filename): urllib.request.urlretrieve(url, filename)
+def generate_vulkan_json(f):
- f.write("{\n")
- f.write(" "file_format_version": "1.0.0",\n")
- f.write(" "ICD": {\n")
- f.write(" "library_path": "winevulkan.dll",\n")
- f.write(" "api_version": "{0}"\n".format(VK_XML_VERSION))
- f.write(" }\n")
- f.write("}\n")
def main(): parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbose", action="count", default=0, help="increase output verbosity") @@ -3031,6 +3041,9 @@ def main(): with open(WINE_VULKAN_THUNKS_C, "w") as f: generator.generate_thunks_c(f, "wine_")
- with open(WINE_VULKAN_JSON, "w") as f:
generate_vulkan_json(f)
- with open(WINE_VULKAN_SPEC, "w") as f: generator.generate_vulkan_spec(f)
diff --git a/loader/Makefile.in b/loader/Makefile.in index f9b2fa9293..f3638fa4e0 100644 --- a/loader/Makefile.in +++ b/loader/Makefile.in @@ -10,7 +10,8 @@ SOURCES = \ wine.pl.UTF-8.man.in \ wine_info.plist.in \ winebus.inf.in \
- winehid.inf.in
- winehid.inf.in \
- winevulkan.json.in
PROGRAMS = $(WINELOADER_PROGRAMS) INSTALL_LIB = $(WINELOADER_PROGRAMS) diff --git a/loader/wine.inf.in b/loader/wine.inf.in index 8267ef34dc..3ae4273671 100644 --- a/loader/wine.inf.in +++ b/loader/wine.inf.in @@ -30,7 +30,7 @@ signature="$CHICAGO$" RegisterDlls=RegisterDllsSection WineFakeDlls=FakeDllsWin32,FakeDlls UpdateInis=SystemIni -CopyFiles=InfFiles,NlsFiles +CopyFiles=InfFiles,NlsFiles,VulkanFiles AddReg=\ Classes,\ ContentIndex,\ @@ -48,13 +48,14 @@ AddReg=\ SessionMgr,\ Tapi,\ Timezones,\
- LicenseInformation
- LicenseInformation,\
- Vulkan
[DefaultInstall.NT] RegisterDlls=RegisterDllsSection WineFakeDlls=FakeDllsWin32,FakeDlls UpdateInis=SystemIni -CopyFiles=InfFiles,NlsFiles +CopyFiles=InfFiles,NlsFiles,VulkanFiles AddReg=\ Classes,\ ContentIndex,\ @@ -73,14 +74,15 @@ AddReg=\ Tapi,\ Timezones,\ VersionInfo,\
- LicenseInformation
- LicenseInformation,\
- Vulkan
[DefaultInstall.ntamd64] RegisterDlls=RegisterDllsSection WineFakeDlls=FakeDllsWin64,FakeDlls WinePreInstall=Wow64 UpdateInis=SystemIni -CopyFiles=InfFiles,NlsFiles +CopyFiles=InfFiles,NlsFiles,VulkanFiles AddReg=\ Classes,\ ContentIndex,\ @@ -100,14 +102,15 @@ AddReg=\ Tapi,\ Timezones,\ VersionInfo.ntamd64,\
- LicenseInformation
- LicenseInformation,\
- Vulkan
[DefaultInstall.ntarm64] RegisterDlls=RegisterDllsSection WineFakeDlls=FakeDllsWin64,FakeDlls WinePreInstall=Wow64 UpdateInis=SystemIni -CopyFiles=InfFiles,NlsFiles +CopyFiles=InfFiles,NlsFiles,VulkanFiles AddReg=\ Classes,\ ContentIndex,\ @@ -127,12 +130,13 @@ AddReg=\ Tapi,\ Timezones,\ VersionInfo.ntamd64,\
- LicenseInformation
- LicenseInformation,\
- Vulkan
[Wow64Install] RegisterDlls=RegisterDllsSection WineFakeDlls=FakeDllsWin32,FakeDllsWow64 -CopyFiles=NlsFiles +CopyFiles=NlsFiles,VulkanFiles AddReg=\ CurrentVersion,\ CurrentVersionWow64,\ @@ -142,7 +146,8 @@ AddReg=\ Misc,\ Tapi,\ VersionInfo.ntamd64,\
- LicenseInformation
- LicenseInformation,\
- Vulkan
[Wow64Install.ntarm64] WineFakeDlls=FakeDllsWin32 @@ -3888,6 +3893,9 @@ HKLM,Software\Wine\LicenseInformation,"Shell-InBoxGames-Solitaire-EnableGame",0x HKLM,Software\Wine\LicenseInformation,"Shell-InBoxGames-SpiderSolitaire-EnableGame",0x10001,0x00000001 HKLM,Software\Wine\LicenseInformation,"Shell-PremiumInBoxGames-Chess-EnableGame",0x10001,0x00000001
+[Vulkan] +HKLM,Software\Khronos\Vulkan\Drivers,"%11%\winevulkan.json",0x10001,0
[InfFiles] winebus.inf winehid.inf @@ -3965,9 +3973,13 @@ normnfd.nls normnfkc.nls normnfkd.nls
+[VulkanFiles] +winevulkan.json
[WineSourceDirs] NlsFiles=nls
[DestinationDirs] InfFiles = 17 NlsFiles = 11 +VulkanFiles = 11 diff --git a/loader/winevulkan.json.in b/loader/winevulkan.json.in new file mode 100644 index 0000000000..be1b278ddb --- /dev/null +++ b/loader/winevulkan.json.in @@ -0,0 +1,7 @@ +{
- "file_format_version": "1.0.0",
- "ICD": {
"library_path": "winevulkan.dll",
"api_version": "1.1.130"
- }
+}