mirror of
https://github.com/optiscaler/OptiScaler.git
synced 2026-05-03 16:21:46 +00:00
Improved vulkanModule handling
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user