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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user