[RFC PATCH 1/2] winevulkan: Generate and install JSON manifest and registry entry used by official Vulkan loader.

Brendan Shanks bshanks at codeweavers.com
Fri Mar 13 12:10:35 CDT 2020


Signed-off-by: Brendan Shanks <bshanks at 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"
+    }
+}
-- 
2.24.1




More information about the wine-devel mailing list