From 80de53b4feabfe6dac27a9ecbb515e192434d831 Mon Sep 17 00:00:00 2001 From: Hanlu Li Date: Sat, 15 Aug 2026 07:20:15 +0800 Subject: [PATCH 1/2] LATX, fix: Add Vulkan maintenance6 proc wrappers Signed-off-by: Hanlu Li --- target/i386/latx/include/wrappedvulkan_private.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/target/i386/latx/include/wrappedvulkan_private.h b/target/i386/latx/include/wrappedvulkan_private.h index de65273d04..a9fabdb06c 100644 --- a/target/i386/latx/include/wrappedvulkan_private.h +++ b/target/i386/latx/include/wrappedvulkan_private.h @@ -845,6 +845,14 @@ GO(vkGetDeviceImageSubresourceLayoutKHR, vFppp) GO(vkGetImageSubresourceLayout2KHR, vFpUpp) GO(vkGetRenderingAreaGranularityKHR, vFppp) +// VK_KHR_maintenance6 +GO(vkCmdBindDescriptorBufferEmbeddedSamplers2EXT, vFpp) +GO(vkCmdBindDescriptorSets2KHR, vFpp) +GO(vkCmdPushConstants2KHR, vFpp) +GO(vkCmdPushDescriptorSet2KHR, vFpp) +GO(vkCmdPushDescriptorSetWithTemplate2KHR, vFpp) +GO(vkCmdSetDescriptorBufferOffsets2EXT, vFpp) + // VK_NV_memory_decompression GO(vkCmdDecompressMemoryIndirectCountNV, vFpUUu) GO(vkCmdDecompressMemoryNV, vFpup) From 191296f3748f8225712ff1bff96a55786c143059 Mon Sep 17 00:00:00 2001 From: Hanlu Li Date: Sat, 15 Aug 2026 07:35:25 +0800 Subject: [PATCH 2/2] LATX, fix: Cover runtime-exposed Vulkan proc wrappers Vulkan implementations may return supported extension entry points through vkGetInstanceProcAddr or vkGetDeviceProcAddr even when those names are not exported as ordinary symbols. Missing signature entries made LAT return NULL after the host had returned a valid function pointer. Add the stable generic/Linux entry points observed during the Steam and DXVK coverage run. Add the two exact generic bridge shapes needed by those signatures. Signed-off-by: Hanlu Li --- target/i386/latx/context/wrapper.c | 4 ++ .../i386/latx/include/wrappedvulkan_private.h | 41 +++++++++++++++++++ target/i386/latx/include/wrapper.h | 2 + 3 files changed, 47 insertions(+) diff --git a/target/i386/latx/context/wrapper.c b/target/i386/latx/context/wrapper.c index 3cf3efc5cd..d98cbe0abf 100644 --- a/target/i386/latx/context/wrapper.c +++ b/target/i386/latx/context/wrapper.c @@ -1517,6 +1517,8 @@ typedef void (*vFppipipiu_t)(void*, void*, int32_t, void*, int32_t, void*, int32 typedef uint32_t (*uFpddpippppp_t)(void*, double, double, void*, int32_t, void*, void*, void*, void*, void*); typedef int32_t (*iFpippu_t)(void*, int32_t, void*, void*, uint32_t); typedef uint32_t (*uFpupppp_t)(void*, uint32_t, void*, void*, void*, void*); +typedef uint64_t (*UFpu_t)(void*, uint32_t); +typedef int32_t (*iFpupppp_t)(void*, uint32_t, void*, void*, void*, void*); //endxcbV2 typedef void (*vFpLi_t)(void*, uintptr_t, int32_t); typedef void (*vFpLL_t)(void*, uintptr_t, uintptr_t); @@ -3155,6 +3157,8 @@ void vFppipipiu(uintptr_t fcn) { __CPU; vFppipipiu_t fn = (vFppipipiu_t)fcn; fn( void uFpddpippppp(uintptr_t fcn) { __CPU; uFpddpippppp_t fn = (uFpddpippppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, R_XMMD(0), R_XMMD(1), (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); DEBUG_LOG; (void)cpu; } void iFpippu(uintptr_t fcn) { __CPU; iFpippu_t fn = (iFpippu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8); DEBUG_LOG; (void)cpu; } void uFpupppp(uintptr_t fcn) { __CPU; uFpupppp_t fn = (uFpupppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); DEBUG_LOG; (void)cpu; } +void UFpu(uintptr_t fcn) { __CPU; UFpu_t fn = (UFpu_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI); DEBUG_LOG; (void)cpu; } +void iFpupppp(uintptr_t fcn) { __CPU; iFpupppp_t fn = (iFpupppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); DEBUG_LOG; (void)cpu; } //xcbV2end #undef R_RAX #undef R_RDI diff --git a/target/i386/latx/include/wrappedvulkan_private.h b/target/i386/latx/include/wrappedvulkan_private.h index a9fabdb06c..536a92bb1f 100644 --- a/target/i386/latx/include/wrappedvulkan_private.h +++ b/target/i386/latx/include/wrappedvulkan_private.h @@ -973,3 +973,44 @@ GO(vkCmdInitializeGraphScratchMemoryAMDX, vFpUU) GOM(vkCreateExecutionGraphPipelinesAMDX, iFEpUuppp) GO(vkGetExecutionGraphPipelineNodeIndexAMDX, iFpUpp) GO(vkGetExecutionGraphPipelineScratchSizeAMDX, iFpUp) + +// VK_KHR_dynamic_rendering_local_read +GO(vkCmdSetRenderingAttachmentLocationsKHR, vFpp) +GO(vkCmdSetRenderingInputAttachmentIndicesKHR, vFpp) + +// VK_KHR_line_rasterization +GO(vkCmdSetLineStippleKHR, vFpuW) + +// VK_NV_cooperative_matrix2 +GO(vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV, iFppp) + +// VK_NV_cooperative_vector +GO(vkGetPhysicalDeviceCooperativeVectorPropertiesNV, iFppp) + +// VK_ARM_tensors +GO(vkGetPhysicalDeviceExternalTensorPropertiesARM, vFppp) + +// VK_ARM_data_graph +GO(vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM, vFppp) +GO(vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM, iFpupp) + +// VK_ARM_performance_counters_by_region +GO(vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM, iFpuppp) + +// VK_EXT_descriptor_heap +GO(vkGetPhysicalDeviceDescriptorSizeEXT, UFpu) + +// VK_KHR_swapchain_maintenance1 +GO(vkReleaseSwapchainImagesKHR, iFpp) + +// VK_ARM_shader_instrumentation +GO(vkEnumeratePhysicalDeviceShaderInstrumentationMetricsARM, iFppp) + +// VK_KHR_maintenance10 +GO(vkCmdEndRendering2KHR, vFpp) + +// VK_ARM_data_graph_instruction_set_tosa +GO(vkGetPhysicalDeviceQueueFamilyDataGraphEngineOperationPropertiesARM, iFpupp) + +// VK_ARM_data_graph_optical_flow +GO(vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM, iFpupppp) diff --git a/target/i386/latx/include/wrapper.h b/target/i386/latx/include/wrapper.h index 5f66d739dd..0b4eea23c7 100644 --- a/target/i386/latx/include/wrapper.h +++ b/target/i386/latx/include/wrapper.h @@ -1554,5 +1554,7 @@ void vFppipipiu(uintptr_t fcn); void uFpddpippppp(uintptr_t fcn); void iFpippu(uintptr_t fcn); void uFpupppp(uintptr_t fcn); +void UFpu(uintptr_t fcn); +void iFpupppp(uintptr_t fcn); //endxcbV2 #endif // __WRAPPER_H_