diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index 1285c4eeb..8db978820 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -1027,6 +1027,7 @@ namespace dxvk { &devExtensions.khrSwapchain, &devExtensions.khrWin32KeyedMutex, &devExtensions.nvDescriptorPoolOverallocation, + &devExtensions.nvLowLatency2, &devExtensions.nvRawAccessChains, &devExtensions.nvxBinaryImport, &devExtensions.nvxImageViewHandle, @@ -1177,6 +1178,9 @@ namespace dxvk { enabledFeatures.nvDescriptorPoolOverallocation.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.nvDescriptorPoolOverallocation); } + if (devExtensions.nvLowLatency2) + enabledFeatures.nvLowLatency2 = VK_TRUE; + if (devExtensions.nvRawAccessChains) { enabledFeatures.nvRawAccessChains.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV; enabledFeatures.nvRawAccessChains.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.nvRawAccessChains); @@ -1332,6 +1336,8 @@ namespace dxvk { "\n presentWait : ", features.khrPresentWait.presentWait ? "1" : "0", "\n", VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_EXTENSION_NAME, "\n descriptorPoolOverallocation : ", features.nvDescriptorPoolOverallocation.descriptorPoolOverallocation ? "1" : "0", + "\n", VK_NV_LOW_LATENCY_2_EXTENSION_NAME, + "\n extension supported : ", features.nvLowLatency2 ? "1" : "0", "\n", VK_NV_RAW_ACCESS_CHAINS_EXTENSION_NAME, "\n shaderRawAccessChains : ", features.nvRawAccessChains.shaderRawAccessChains ? "1" : "0", "\n", VK_NVX_BINARY_IMPORT_EXTENSION_NAME, diff --git a/src/dxvk/dxvk_device_info.h b/src/dxvk/dxvk_device_info.h index 87f444a9d..b1e1eaf1d 100644 --- a/src/dxvk/dxvk_device_info.h +++ b/src/dxvk/dxvk_device_info.h @@ -73,6 +73,7 @@ namespace dxvk { VkPhysicalDevicePresentIdFeaturesKHR khrPresentId; VkPhysicalDevicePresentWaitFeaturesKHR khrPresentWait; VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV nvDescriptorPoolOverallocation; + VkBool32 nvLowLatency2; VkPhysicalDeviceRawAccessChainsFeaturesNV nvRawAccessChains; VkBool32 nvxBinaryImport; VkBool32 nvxImageViewHandle; diff --git a/src/dxvk/dxvk_extensions.h b/src/dxvk/dxvk_extensions.h index b8df6d1e7..4019ac5d2 100644 --- a/src/dxvk/dxvk_extensions.h +++ b/src/dxvk/dxvk_extensions.h @@ -327,6 +327,7 @@ namespace dxvk { DxvkExt khrSwapchain = { VK_KHR_SWAPCHAIN_EXTENSION_NAME, DxvkExtMode::Required }; DxvkExt khrWin32KeyedMutex = { VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt nvDescriptorPoolOverallocation = { VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_EXTENSION_NAME, DxvkExtMode::Optional }; + DxvkExt nvLowLatency2 = { VK_NV_LOW_LATENCY_2_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt nvRawAccessChains = { VK_NV_RAW_ACCESS_CHAINS_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt nvxBinaryImport = { VK_NVX_BINARY_IMPORT_EXTENSION_NAME, DxvkExtMode::Disabled }; DxvkExt nvxImageViewHandle = { VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME, DxvkExtMode::Disabled }; diff --git a/src/vulkan/vulkan_loader.h b/src/vulkan/vulkan_loader.h index 61402fbdd..edc9d6df6 100644 --- a/src/vulkan/vulkan_loader.h +++ b/src/vulkan/vulkan_loader.h @@ -458,6 +458,14 @@ namespace dxvk::vk { VULKAN_FN(wine_vkAcquireKeyedMutex); VULKAN_FN(wine_vkReleaseKeyedMutex); #endif + + #ifdef VK_NV_low_latency2 + VULKAN_FN(vkSetLatencySleepModeNV); + VULKAN_FN(vkLatencySleepNV); + VULKAN_FN(vkSetLatencyMarkerNV); + VULKAN_FN(vkGetLatencyTimingsNV); + VULKAN_FN(vkQueueNotifyOutOfBandNV); + #endif }; }