Improved vulkanModule handling

This commit is contained in:
cdozdil
2026-04-30 00:29:06 +03:00
committed by FakeMichau
parent 723002e277
commit cdad533b48
2 changed files with 52 additions and 31 deletions
+3
View File
@@ -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);
+49 -31
View File
@@ -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<VkExtensionProperties> 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<VkExtensionProperties> 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<VkExtensionProperties> extensions(vkEnumerateDeviceExtensionPropertiesCount);
enumarate(physicalDevice, nullptr, &vkEnumerateDeviceExtensionPropertiesCount, extensions.data());
enumarate(physicalDevice, nullptr, &vkEnumerateDeviceExtensionPropertiesCount, nullptr);
std::vector<VkExtensionProperties> 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);
}
}
}