diff --git a/OptiScaler/hooks/Vulkan_Hooks.cpp b/OptiScaler/hooks/Vulkan_Hooks.cpp index 057856f6..d6b0be20 100644 --- a/OptiScaler/hooks/Vulkan_Hooks.cpp +++ b/OptiScaler/hooks/Vulkan_Hooks.cpp @@ -337,6 +337,9 @@ PFN_vkVoidFunction hkvkGetDeviceProcAddr(VkDevice device, const char* pName) void VulkanHooks::Hook(HMODULE vulkan1) { + if (vulkanModule == nullptr) + vulkanModule = vulkan1; + VulkanSpoofing::HookForVulkanSpoofing(vulkan1); VulkanSpoofing::HookForVulkanExtensionSpoofing(vulkan1); VulkanSpoofing::HookForVulkanVRAMSpoofing(vulkan1); diff --git a/OptiScaler/spoofing/Vulkan_Spoofing.cpp b/OptiScaler/spoofing/Vulkan_Spoofing.cpp index 25764af9..73f79629 100644 --- a/OptiScaler/spoofing/Vulkan_Spoofing.cpp +++ b/OptiScaler/spoofing/Vulkan_Spoofing.cpp @@ -240,26 +240,35 @@ VkResult VulkanSpoofing::hkvkCreateInstance(VkInstanceCreateInfo* pCreateInfo, c auto enumarate = o_vkEnumerateInstanceExtensionProperties; if (o_vkEnumerateInstanceExtensionProperties == nullptr) { - enumarate = (PFN_vkEnumerateInstanceExtensionProperties) KernelBaseProxy::GetProcAddress_()( - vulkanModule, "vkEnumerateInstanceExtensionProperties"); + if (vulkanModule == nullptr) + vulkanModule = KernelBaseProxy::GetModuleHandleA_()("vulkan-1.dll"); + + if (vulkanModule != nullptr) + { + enumarate = (PFN_vkEnumerateInstanceExtensionProperties) KernelBaseProxy::GetProcAddress_()( + vulkanModule, "vkEnumerateInstanceExtensionProperties"); + } + + if (enumarate == nullptr) + { + enumarate = vkEnumerateInstanceExtensionProperties; + } } - if (o_vkEnumerateInstanceExtensionProperties == nullptr) + if (enumarate != nullptr) { - enumarate = vkEnumerateInstanceExtensionProperties; - } + LOG_INFO("vkInstanceExtensions is empty, enumerating instance extensions"); + vkEnumerateInstanceExtensionPropertiesListed = true; + vkEnumerateInstanceExtensionPropertiesCount = 0; - LOG_INFO("vkInstanceExtensions is empty, enumerating instance extensions"); - vkEnumerateInstanceExtensionPropertiesListed = true; - vkEnumerateInstanceExtensionPropertiesCount = 0; - - enumarate(VK_NULL_HANDLE, &vkEnumerateInstanceExtensionPropertiesCount, VK_NULL_HANDLE); - std::vector extensions(vkEnumerateInstanceExtensionPropertiesCount); - enumarate(VK_NULL_HANDLE, &vkEnumerateInstanceExtensionPropertiesCount, extensions.data()); - for (const auto& ext : extensions) - { - vkInstanceExtensions[ext.extensionName] = true; - LOG_DEBUG(" {}", ext.extensionName); + enumarate(VK_NULL_HANDLE, &vkEnumerateInstanceExtensionPropertiesCount, VK_NULL_HANDLE); + std::vector extensions(vkEnumerateInstanceExtensionPropertiesCount); + enumarate(VK_NULL_HANDLE, &vkEnumerateInstanceExtensionPropertiesCount, extensions.data()); + for (const auto& ext : extensions) + { + vkInstanceExtensions[ext.extensionName] = true; + LOG_DEBUG(" {}", ext.extensionName); + } } } @@ -383,26 +392,35 @@ VkResult VulkanSpoofing::hkvkCreateDevice(VkPhysicalDevice physicalDevice, VkDev auto enumarate = o_vkEnumerateDeviceExtensionProperties; if (o_vkEnumerateDeviceExtensionProperties == nullptr) { - enumarate = (PFN_vkEnumerateDeviceExtensionProperties) KernelBaseProxy::GetProcAddress_()( - vulkanModule, "vkEnumerateDeviceExtensionProperties"); + if (vulkanModule == nullptr) + vulkanModule = KernelBaseProxy::GetModuleHandleA_()("vulkan-1.dll"); + + if (vulkanModule != nullptr) + { + enumarate = (PFN_vkEnumerateDeviceExtensionProperties) KernelBaseProxy::GetProcAddress_()( + vulkanModule, "vkEnumerateDeviceExtensionProperties"); + } + + if (enumarate == nullptr) + { + enumarate = vkEnumerateDeviceExtensionProperties; + } } - if (o_vkEnumerateDeviceExtensionProperties == nullptr) + if (enumarate != nullptr) { - enumarate = vkEnumerateDeviceExtensionProperties; - } + vkEnumerateDeviceExtensionPropertiesListed = true; + vkEnumerateDeviceExtensionPropertiesCount = 0; - vkEnumerateDeviceExtensionPropertiesListed = true; - vkEnumerateDeviceExtensionPropertiesCount = 0; + enumarate(physicalDevice, nullptr, &vkEnumerateDeviceExtensionPropertiesCount, nullptr); + std::vector extensions(vkEnumerateDeviceExtensionPropertiesCount); + enumarate(physicalDevice, nullptr, &vkEnumerateDeviceExtensionPropertiesCount, extensions.data()); - enumarate(physicalDevice, nullptr, &vkEnumerateDeviceExtensionPropertiesCount, nullptr); - std::vector extensions(vkEnumerateDeviceExtensionPropertiesCount); - enumarate(physicalDevice, nullptr, &vkEnumerateDeviceExtensionPropertiesCount, extensions.data()); - - for (const auto& ext : extensions) - { - vkDeviceExtensions[ext.extensionName] = true; - LOG_DEBUG(" {}", ext.extensionName); + for (const auto& ext : extensions) + { + vkDeviceExtensions[ext.extensionName] = true; + LOG_DEBUG(" {}", ext.extensionName); + } } }