From 9fd549698b42a9258b973ab230cdbde7de4d5476 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 26 May 2026 16:16:40 +0100 Subject: [PATCH] Fix triple-promotion handling of EXT line stipple. Closes #3841 --- renderdoc/driver/vulkan/vk_dispatchtables.cpp | 22 +++++++++++++++++++ renderdoc/driver/vulkan/vk_hookset_defs.h | 2 +- renderdoc/driver/vulkan/vk_layer.cpp | 9 ++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/vulkan/vk_dispatchtables.cpp b/renderdoc/driver/vulkan/vk_dispatchtables.cpp index 644c56c71..68b7c9572 100644 --- a/renderdoc/driver/vulkan/vk_dispatchtables.cpp +++ b/renderdoc/driver/vulkan/vk_dispatchtables.cpp @@ -111,6 +111,17 @@ void InitInstanceExtensionTables(VkInstance instance, InstanceDeviceInfo *info) table->CONCAT(func, KHR) = table->CONCAT(func, EXT); \ } +#undef HookInitPromotedExtensionEXTtoKHR +#define HookInitPromotedExtensionEXTtoKHR(func) \ + { \ + if(table->CONCAT(func, EXT) == NULL) \ + table->CONCAT(func, EXT) = table->CONCAT(func, KHR); \ + if(table->CONCAT(func, KHR) == NULL) \ + table->CONCAT(func, KHR) = table->CONCAT(func, EXT); \ + if(table->func == NULL) \ + table->func = table->CONCAT(func, EXT); \ + } + DeclExts(); CheckInstanceExts(); @@ -161,6 +172,17 @@ void InitDeviceExtensionTables(VkDevice device, InstanceDeviceInfo *info) table->CONCAT(func, KHR) = table->CONCAT(func, EXT); \ } +#undef HookInitPromotedExtensionEXTtoKHR +#define HookInitPromotedExtensionEXTtoKHR(func) \ + { \ + if(table->CONCAT(func, EXT) == NULL) \ + table->CONCAT(func, EXT) = table->CONCAT(func, KHR); \ + if(table->CONCAT(func, KHR) == NULL) \ + table->CONCAT(func, KHR) = table->CONCAT(func, EXT); \ + if(table->func == NULL) \ + table->func = table->CONCAT(func, EXT); \ + } + DeclExts(); CheckInstanceExts(); diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index 54315e613..ae8fbc628 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -1050,7 +1050,7 @@ HookInitExtension(EXT_mesh_shader, CmdDrawMeshTasksIndirectCountEXT); \ HookInitExtension(KHR_calibrated_timestamps, GetCalibratedTimestampsKHR); \ HookInitPromotedExtension(KHR_line_rasterization, CmdSetLineStipple, KHR); \ - HookInitExtensionEXTtoKHR(CmdSetLineStipple); \ + HookInitPromotedExtensionEXTtoKHR(CmdSetLineStipple); \ HookInitExtension(KHR_deferred_host_operations, CreateDeferredOperationKHR); \ HookInitExtension(KHR_deferred_host_operations, DeferredOperationJoinKHR); \ HookInitExtension(KHR_deferred_host_operations, DestroyDeferredOperationKHR); \ diff --git a/renderdoc/driver/vulkan/vk_layer.cpp b/renderdoc/driver/vulkan/vk_layer.cpp index 295f875b3..ef12a6fe2 100644 --- a/renderdoc/driver/vulkan/vk_layer.cpp +++ b/renderdoc/driver/vulkan/vk_layer.cpp @@ -417,6 +417,9 @@ VK_LAYER_RENDERDOC_CaptureEnumerateInstanceExtensionProperties( #undef HookInitExtensionEXTtoKHR #define HookInitExtensionEXTtoKHR(func) (void)0; +#undef HookInitPromotedExtensionEXTtoKHR +#define HookInitPromotedExtensionEXTtoKHR(func) (void)0; + // proc addr routines VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL @@ -529,6 +532,9 @@ VK_LAYER_RENDERDOC_CaptureGetInstanceProcAddr(VkInstance instance, const char *p #undef HookInitExtensionEXTtoKHR #define HookInitExtensionEXTtoKHR(func) (void)0; +#undef HookInitPromotedExtensionEXTtoKHR +#define HookInitPromotedExtensionEXTtoKHR(func) (void)0; + HookInitVulkanDevice(); HookInitVulkanDeviceExts(); @@ -610,6 +616,9 @@ VK_LAYER_RENDERDOC_Capture_layerGetPhysicalDeviceProcAddr(VkInstance instance, c #undef HookInitExtensionEXTtoKHR #define HookInitExtensionEXTtoKHR(func) (void)0; +#undef HookInitPromotedExtensionEXTtoKHR +#define HookInitPromotedExtensionEXTtoKHR(func) (void)0; + HookInitVulkanInstanceExts(); HookInitVulkanDeviceExts();