[dxvk] Enable VK_KHR_timeline_semaphore if supported

This commit is contained in:
Philip Rebohle 2021-10-19 16:08:00 +02:00 committed by Philip Rebohle
parent f5fe2596e3
commit 87b23ff9a0
4 changed files with 32 additions and 3 deletions

View File

@ -251,7 +251,9 @@ namespace dxvk {
&& (m_deviceFeatures.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor
|| !required.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor)
&& (m_deviceFeatures.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor
|| !required.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor);
|| !required.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor)
&& (m_deviceFeatures.khrTimelineSemaphore.timelineSemaphore
|| !required.khrTimelineSemaphore.timelineSemaphore);
}
@ -265,7 +267,7 @@ namespace dxvk {
DxvkDeviceFeatures enabledFeatures) {
DxvkDeviceExtensions devExtensions;
std::array<DxvkExt*, 30> devExtensionList = {{
std::array<DxvkExt*, 31> devExtensionList = {{
&devExtensions.amdMemoryOverallocationBehaviour,
&devExtensions.amdShaderFragmentMask,
&devExtensions.ext4444Formats,
@ -294,6 +296,7 @@ namespace dxvk {
&devExtensions.khrSamplerMirrorClampToEdge,
&devExtensions.khrShaderFloatControls,
&devExtensions.khrSwapchain,
&devExtensions.khrTimelineSemaphore,
&devExtensions.nvxBinaryImport,
&devExtensions.nvxImageViewHandle,
}};
@ -410,6 +413,11 @@ namespace dxvk {
enabledFeatures.khrBufferDeviceAddress.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.khrBufferDeviceAddress);
}
if (devExtensions.khrTimelineSemaphore) {
enabledFeatures.khrTimelineSemaphore.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR;
enabledFeatures.khrTimelineSemaphore.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.khrTimelineSemaphore);
}
// Report the desired overallocation behaviour to the driver
VkDeviceMemoryOverallocationCreateInfoAMD overallocInfo;
overallocInfo.sType = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD;
@ -629,6 +637,11 @@ namespace dxvk {
m_deviceInfo.khrShaderFloatControls.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.khrShaderFloatControls);
}
if (m_deviceExtensions.supports(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME)) {
m_deviceInfo.khrTimelineSemaphore.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR;
m_deviceInfo.khrTimelineSemaphore.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.khrTimelineSemaphore);
}
// Query full device properties for all enabled extensions
m_vki->vkGetPhysicalDeviceProperties2(m_handle, &m_deviceInfo.core);
@ -720,6 +733,11 @@ namespace dxvk {
m_deviceFeatures.khrBufferDeviceAddress.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.khrBufferDeviceAddress);
}
if (m_deviceExtensions.supports(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME)) {
m_deviceFeatures.khrTimelineSemaphore.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR;
m_deviceFeatures.khrTimelineSemaphore.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.khrTimelineSemaphore);
}
m_vki->vkGetPhysicalDeviceFeatures2(m_handle, &m_deviceFeatures.core);
}
@ -815,7 +833,9 @@ namespace dxvk {
"\n vertexAttributeInstanceRateDivisor : ", features.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor ? "1" : "0",
"\n vertexAttributeInstanceRateZeroDivisor : ", features.extVertexAttributeDivisor.vertexAttributeInstanceRateZeroDivisor ? "1" : "0",
"\n", VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME,
"\n bufferDeviceAddress : ", features.khrBufferDeviceAddress.bufferDeviceAddress));
"\n bufferDeviceAddress : ", features.khrBufferDeviceAddress.bufferDeviceAddress,
"\n", VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME,
"\n timelineSemaphore : ", features.khrTimelineSemaphore.timelineSemaphore));
}

View File

@ -24,6 +24,7 @@ namespace dxvk {
VkPhysicalDeviceDepthStencilResolvePropertiesKHR khrDepthStencilResolve;
VkPhysicalDeviceDriverPropertiesKHR khrDeviceDriverProperties;
VkPhysicalDeviceFloatControlsPropertiesKHR khrShaderFloatControls;
VkPhysicalDeviceTimelineSemaphorePropertiesKHR khrTimelineSemaphore;
};
@ -49,6 +50,7 @@ namespace dxvk {
VkPhysicalDeviceTransformFeedbackFeaturesEXT extTransformFeedback;
VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT extVertexAttributeDivisor;
VkPhysicalDeviceBufferDeviceAddressFeaturesKHR khrBufferDeviceAddress;
VkPhysicalDeviceTimelineSemaphoreFeaturesKHR khrTimelineSemaphore;
};
}

View File

@ -304,6 +304,7 @@ namespace dxvk {
DxvkExt khrSamplerMirrorClampToEdge = { VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrShaderFloatControls = { VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrSwapchain = { VK_KHR_SWAPCHAIN_EXTENSION_NAME, DxvkExtMode::Required };
DxvkExt khrTimelineSemaphore = { VK_KHR_TIMELINE_SEMAPHORE_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 };
};

View File

@ -309,6 +309,12 @@ namespace dxvk::vk {
VULKAN_FN(vkQueuePresentKHR);
#endif
#ifdef VK_KHR_timeline_semaphore
VULKAN_FN(vkGetSemaphoreCounterValueKHR);
VULKAN_FN(vkSignalSemaphoreKHR);
VULKAN_FN(vkWaitSemaphoresKHR);
#endif
#ifdef VK_EXT_conditional_rendering
VULKAN_FN(vkCmdBeginConditionalRenderingEXT);
VULKAN_FN(vkCmdEndConditionalRenderingEXT);