From ffdbd58d58e0fa78f70573e408be523d7e49d423 Mon Sep 17 00:00:00 2001 From: James Park Date: Sun, 2 May 2021 02:24:09 -0700 Subject: [PATCH] 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 Acked-by: Jason Ekstrand Reviewed-by: Erik Faye-Lund Part-of: (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 e436264bed3..36efa5997c6 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