[PATCH 2/3] winevulkan: Support use of extensions which musn't be exposed.

Derek Lesho dlesho at codeweavers.com
Mon May 17 15:00:59 CDT 2021


Signed-off-by: Derek Lesho <dlesho at codeweavers.com>
---
This patch is dead code, being used later for VK_KHR_external_memory_fd.  I was informed that commits like this are normal for winevulkan, since exposing an extension w/ stubs can break applications.
---
 dlls/winevulkan/make_vulkan | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan
index 7f76d328fc8..7e1d7c0f043 100755
--- a/dlls/winevulkan/make_vulkan
+++ b/dlls/winevulkan/make_vulkan
@@ -120,6 +120,9 @@ UNSUPPORTED_EXTENSIONS = [
     "VK_NV_external_memory_win32",
 ]
 
+# Extensions which aren't present on the win32 platform, but which winevulkan may use.
+UNEXPOSED_EXTENSIONS = []
+
 # The Vulkan loader provides entry-points for core functionality and important
 # extensions. Based on vulkan-1.def this amounts to WSI extensions on 1.0.51.
 CORE_EXTENSIONS = [
@@ -521,7 +524,7 @@ class VkEnumValue(object):
 
 
 class VkFunction(object):
-    def __init__(self, _type=None, name=None, params=[], extensions=[], alias=None):
+    def __init__(self, _type=None, name=None, params=[], alias=None):
         self.extensions = []
         self.name = name
         self.type = _type
@@ -665,6 +668,9 @@ class VkFunction(object):
     def needs_private_thunk(self):
         return self.thunk_type == ThunkType.PRIVATE
 
+    def needs_exposed(self):
+        return not any(x for x in self.extensions if x in UNEXPOSED_EXTENSIONS)
+
     def pfn(self, prefix="p", call_conv=None, conv=False):
         """ Create function pointer. """
 
@@ -2656,6 +2662,9 @@ class VkGenerator(object):
             if not vk_func.is_required():
                 continue
 
+            if not vk_func.needs_exposed():
+                continue
+
             if vk_func.is_global_func():
                 continue
 
@@ -2676,6 +2685,8 @@ class VkGenerator(object):
         for ext in self.registry.extensions:
             if ext["type"] != "device":
                 continue
+            if ext["name"] in UNEXPOSED_EXTENSIONS:
+                continue
 
             f.write("    \"{0}\",\n".format(ext["name"]))
         f.write("};\n\n")
@@ -2685,6 +2696,8 @@ class VkGenerator(object):
         for ext in self.registry.extensions:
             if ext["type"] != "instance":
                 continue
+            if ext["name"] in UNEXPOSED_EXTENSIONS:
+                continue
 
             f.write("    \"{0}\",\n".format(ext["name"]))
         f.write("};\n\n")
@@ -2746,6 +2759,8 @@ class VkGenerator(object):
         for vk_func in self.registry.funcs.values():
             if not vk_func.is_required():
                 continue
+            if not vk_func.needs_exposed():
+                continue
             if vk_func.loader_thunk_type == ThunkType.NONE:
                 continue
 
@@ -2767,6 +2782,8 @@ class VkGenerator(object):
                 continue
             if vk_func.needs_thunk() and not vk_func.needs_private_thunk():
                 continue
+            if not vk_func.needs_exposed():
+                continue
 
             if vk_func.is_core_func():
                 f.write("{0};\n".format(vk_func.prototype("WINAPI", prefix=prefix)))
@@ -2874,6 +2891,8 @@ class VkGenerator(object):
         for vk_func in self.registry.funcs.values():
             if not vk_func.is_required():
                 continue
+            if not vk_func.needs_exposed():
+                continue
             if vk_func.loader_thunk_type != ThunkType.PUBLIC:
                 continue
 
@@ -2883,6 +2902,8 @@ class VkGenerator(object):
         for vk_func in self.registry.device_funcs:
             if not vk_func.is_required():
                 continue
+            if not vk_func.needs_exposed():
+                continue
 
             f.write("    {{\"{0}\", &{0}}},\n".format(vk_func.name))
         f.write("};\n\n")
@@ -2891,6 +2912,8 @@ class VkGenerator(object):
         for vk_func in self.registry.phys_dev_funcs:
             if not vk_func.is_required():
                 continue
+            if not vk_func.needs_exposed():
+                continue
 
             f.write("    {{\"{0}\", &{0}}},\n".format(vk_func.name))
         f.write("};\n\n")
@@ -2899,6 +2922,8 @@ class VkGenerator(object):
         for vk_func in self.registry.instance_funcs:
             if not vk_func.is_required():
                 continue
+            if not vk_func.needs_exposed():
+                continue
 
             f.write("    {{\"{0}\", &{0}}},\n".format(vk_func.name))
         f.write("};\n\n")
@@ -2956,6 +2981,8 @@ class VkGenerator(object):
         for vk_func in self.registry.funcs.values():
             if not vk_func.is_required():
                 continue
+            if not vk_func.needs_exposed():
+                continue
             if vk_func.loader_thunk_type == ThunkType.NONE:
                 continue
 
-- 
2.31.1




More information about the wine-devel mailing list