diff --git a/ThunkLibs/libvulkan/Host.cpp b/ThunkLibs/libvulkan/Host.cpp index a4fab4346..31dd6a8dc 100644 --- a/ThunkLibs/libvulkan/Host.cpp +++ b/ThunkLibs/libvulkan/Host.cpp @@ -14,6 +14,7 @@ $end_info$ #include "common/Host.h" +#include #include #include #include @@ -259,6 +260,22 @@ std::span> RepackStructArray(uint32_t Count, const guest_lay return {HostData, Count}; } +void fexfn_impl_libvulkan_vkCmdSetVertexInputEXT( + VkCommandBuffer Buffer, uint32_t BindingDescCount, guest_layout GuestBindingDescs, + uint32_t AttributeDescCount, guest_layout GuestAttributeDescs) { + + assert(GuestBindingDescs.get_pointer() && BindingDescCount > 0); + assert(GuestAttributeDescs.get_pointer() && AttributeDescCount > 0); + + auto BindingDescs = RepackStructArray(BindingDescCount, GuestBindingDescs); + auto AttributeDescs = RepackStructArray(AttributeDescCount, GuestAttributeDescs); + + fexldr_ptr_libvulkan_vkCmdSetVertexInputEXT(Buffer, BindingDescCount, BindingDescs.data(), AttributeDescCount, AttributeDescs.data()); + + delete[] AttributeDescs.data(); + delete[] BindingDescs.data(); +} + void fexfn_impl_libvulkan_vkUpdateDescriptorSets(VkDevice device, unsigned int descriptorWriteCount, guest_layout pDescriptorWrites, unsigned int descriptorCopyCount, guest_layout pDescriptorCopies) { @@ -337,6 +354,8 @@ static PFN_vkVoidFunction LookupCustomVulkanFunction(const char* a_1) { return (PFN_vkVoidFunction)fexfn_impl_libvulkan_vkMapMemory; } else if (a_1 == "vkQueueSubmit"sv) { return (PFN_vkVoidFunction)fexfn_impl_libvulkan_vkQueueSubmit; + } else if (a_1 == "vkCmdSetVertexInputEXT"sv) { + return (PFN_vkVoidFunction)fexfn_impl_libvulkan_vkCmdSetVertexInputEXT; } else if (a_1 == "vkUpdateDescriptorSets"sv) { return (PFN_vkVoidFunction)fexfn_impl_libvulkan_vkUpdateDescriptorSets; #endif diff --git a/ThunkLibs/libvulkan/libvulkan_interface.cpp b/ThunkLibs/libvulkan/libvulkan_interface.cpp index 58255b82d..e1b5be11e 100644 --- a/ThunkLibs/libvulkan/libvulkan_interface.cpp +++ b/ThunkLibs/libvulkan/libvulkan_interface.cpp @@ -2793,8 +2793,17 @@ struct fex_gen_config {}; template<> struct fex_gen_config {}; #endif +#ifndef IS_32BIT_THUNK template<> struct fex_gen_config {}; +#else +template<> +struct fex_gen_config : fexgen::custom_host_impl {}; +template<> +struct fex_gen_param : fexgen::ptr_passthrough {}; +template<> +struct fex_gen_param : fexgen::ptr_passthrough {}; +#endif #ifndef IS_32BIT_THUNK template<> struct fex_gen_config {};