Mesa (staging/21.1): vulkan: Support 32-bit "weak" symbols on MSVC

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon May 17 19:00:35 UTC 2021


Module: Mesa
Branch: staging/21.1
Commit: b233fca1f8a7dd0bf32cc998f7afebf39c0f3d96
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b233fca1f8a7dd0bf32cc998f7afebf39c0f3d96

Author: James Park <jpark37 at lagfreegames.com>
Date:   Sun May  2 02:24:09 2021 -0700

vulkan: Support 32-bit "weak" symbols on MSVC

MSVC uses different decorated names for 32-bit versus 64-bit. Declare
all argument sizes for 32-bit because computing the actual size would be
difficult.

Fixes: 9be7aa3fc83 ("vulkan: Add a common entrypoint table generator")
Reviewed-by: Jesse Natalie <jenatali at microsoft.com>
Acked-by: Jason Ekstrand <jason at jlekstrand.net>
Reviewed-by: Erik Faye-Lund <erik.faye-lund at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10573>
(cherry picked from commit fb7be7870c258e566f4da6b7d5d0218d717b82c5)

---

 .pick_status.json                     |  2 +-
 src/vulkan/util/vk_entrypoints_gen.py | 14 +++++++++++---
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 55a7ba96c74..07f7364b47d 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -328,7 +328,7 @@
         "description": "vulkan: Support 32-bit \"weak\" symbols on MSVC",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": "9be7aa3fc83ba3117bae7907765fdf2023c2683b"
     },
diff --git a/src/vulkan/util/vk_entrypoints_gen.py b/src/vulkan/util/vk_entrypoints_gen.py
index 6e4cdc90065..a663d10e114 100644
--- a/src/vulkan/util/vk_entrypoints_gen.py
+++ b/src/vulkan/util/vk_entrypoints_gen.py
@@ -109,6 +109,10 @@ TEMPLATE_C = Template(COPYRIGHT + """
 /* Weak aliases for all potential implementations. These will resolve to
  * NULL if they're not defined, which lets the resolve_entrypoint() function
  * either pick the correct entry point.
+ *
+ * MSVC uses different decorated names for 32-bit versus 64-bit. Declare
+ * all argument sizes for 32-bit because computing the actual size would be
+ * difficult.
  */
 
 <%def name="entrypoint_table(type, entrypoints, prefixes)">
@@ -119,10 +123,14 @@ TEMPLATE_C = Template(COPYRIGHT + """
     % endif
     % for p in prefixes:
 #ifdef _MSC_VER
-    #pragma comment(linker, "/alternatename:${p}_${e.name}_Weak=${p}_${e.name}_Null")
-    #pragma comment(linker, "/alternatename:${p}_${e.name}=${p}_${e.name}_Weak")
     ${e.return_type} (*${p}_${e.name}_Null)(${e.decl_params()}) = 0;
-    ${e.return_type} ${p}_${e.name}_Weak(${e.decl_params()});
+#ifdef _M_IX86
+      % for args_size in [4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 60, 104]:
+    #pragma comment(linker, "/alternatename:_${p}_${e.name}@${args_size}=_${p}_${e.name}_Null")
+      % endfor
+#else
+    #pragma comment(linker, "/alternatename:${p}_${e.name}=${p}_${e.name}_Null")
+#endif
 #else
     VKAPI_ATTR ${e.return_type} VKAPI_CALL ${p}_${e.name}(${e.decl_params()}) __attribute__ ((weak));
 #endif



More information about the mesa-commit mailing list