Improved vulkanModule handling

This commit is contained in:
cdozdil
2026-04-30 00:29:06 +03:00
parent a365ce844a
commit 2ee4bb7e48
3 changed files with 71 additions and 50 deletions
+3
View File
@@ -325,6 +325,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);
+19 -19
View File
@@ -2152,8 +2152,8 @@ bool MenuCommon::RenderMenu()
}
else
{
firstLine = StrFmt("%s | FPS: %6.1f %s", api.c_str(), frameRate, fgText.c_str());
}
firstLine = StrFmt("%s | FPS: %6.1f %s", api.c_str(), frameRate, fgText.c_str());
}
}
else if (config->FpsOverlayType.value_or_default() == FpsOverlay_Simple)
{
@@ -2169,11 +2169,11 @@ bool MenuCommon::RenderMenu()
}
else
{
firstLine = StrFmt("%s | FPS: %6.1f, %7.2f ms %s | %s -> %s %u.%u.%u", api.c_str(), frameRate,
frameTime, fgText.c_str(), state.currentInputApiName.c_str(),
currentFeature->Name().c_str(), currentFeature->Version().major,
currentFeature->Version().minor, currentFeature->Version().patch);
}
firstLine = StrFmt("%s | FPS: %6.1f, %7.2f ms %s | %s -> %s %u.%u.%u", api.c_str(), frameRate,
frameTime, fgText.c_str(), state.currentInputApiName.c_str(),
currentFeature->Name().c_str(), currentFeature->Version().major,
currentFeature->Version().minor, currentFeature->Version().patch);
}
}
else
{
@@ -2183,13 +2183,13 @@ bool MenuCommon::RenderMenu()
frameRate / (float) (fg->GetInterpolatedFrameCount() + 1), frameTime,
fgText.c_str());
}
else
{
firstLine =
StrFmt("%s | FPS: %6.1f, %7.2f ms %s", api.c_str(), frameRate, frameTime, fgText.c_str());
else
{
firstLine =
StrFmt("%s | FPS: %6.1f, %7.2f ms %s", api.c_str(), frameRate, frameTime, fgText.c_str());
}
}
}
}
else
{
if (currentFeature != nullptr && !currentFeature->IsFrozen())
@@ -2207,10 +2207,10 @@ bool MenuCommon::RenderMenu()
{
firstLine =
StrFmt("%s | FPS: %6.1f, Avg: %6.1f %s | %s -> %s %u.%u.%u", api.c_str(), frameRate,
1000.0f / averageFrameTime, fgText.c_str(), state.currentInputApiName.c_str(),
currentFeature->Name().c_str(), currentFeature->Version().major,
currentFeature->Version().minor, currentFeature->Version().patch);
}
1000.0f / averageFrameTime, fgText.c_str(), state.currentInputApiName.c_str(),
currentFeature->Name().c_str(), currentFeature->Version().major,
currentFeature->Version().minor, currentFeature->Version().patch);
}
}
else
{
@@ -2222,11 +2222,11 @@ bool MenuCommon::RenderMenu()
}
else
{
firstLine = StrFmt("%s | FPS: %6.1f, Avg: %6.1f %s", api.c_str(), frameRate,
1000.0f / averageFrameTime, fgText.c_str());
firstLine = StrFmt("%s | FPS: %6.1f, Avg: %6.1f %s", api.c_str(), frameRate,
1000.0f / averageFrameTime, fgText.c_str());
}
}
}
}
// Prepare Line 2
if (config->FpsOverlayType.value_or_default() >= FpsOverlay_Detailed)
+49 -31
View File
@@ -272,26 +272,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);
}
}
}
@@ -411,26 +420,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);
}
}
}