[dxvk] Enable VK_EXT_shader_module_identifier if supported

This commit is contained in:
Philip Rebohle 2022-07-08 15:34:16 +02:00
parent 04545ab00a
commit 331c790592
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
4 changed files with 26 additions and 1 deletions

View File

@ -250,6 +250,8 @@ namespace dxvk {
|| !required.extRobustness2.robustImageAccess2)
&& (m_deviceFeatures.extRobustness2.nullDescriptor
|| !required.extRobustness2.nullDescriptor)
&& (m_deviceFeatures.extShaderModuleIdentifier.shaderModuleIdentifier
|| !required.extShaderModuleIdentifier.shaderModuleIdentifier)
&& (m_deviceFeatures.extTransformFeedback.transformFeedback
|| !required.extTransformFeedback.transformFeedback)
&& (m_deviceFeatures.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor
@ -269,7 +271,7 @@ namespace dxvk {
DxvkDeviceFeatures enabledFeatures) {
DxvkDeviceExtensions devExtensions;
std::array<DxvkExt*, 34> devExtensionList = {{
std::array<DxvkExt*, 35> devExtensionList = {{
&devExtensions.amdMemoryOverallocationBehaviour,
&devExtensions.amdShaderFragmentMask,
&devExtensions.ext4444Formats,
@ -286,6 +288,7 @@ namespace dxvk {
&devExtensions.extPipelineCreationCacheControl,
&devExtensions.extRobustness2,
&devExtensions.extShaderDemoteToHelperInvocation,
&devExtensions.extShaderModuleIdentifier,
&devExtensions.extShaderStencilExport,
&devExtensions.extShaderViewportIndexLayer,
&devExtensions.extTransformFeedback,
@ -348,6 +351,9 @@ namespace dxvk {
enabledFeatures.extRobustness2.nullDescriptor = VK_TRUE;
enabledFeatures.extShaderModuleIdentifier.shaderModuleIdentifier =
m_deviceFeatures.extShaderModuleIdentifier.shaderModuleIdentifier;
enabledFeatures.khrDynamicRendering.dynamicRendering = VK_TRUE;
Logger::info(str::format("Device properties:"
@ -418,6 +424,11 @@ namespace dxvk {
enabledFeatures.extShaderDemoteToHelperInvocation.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extShaderDemoteToHelperInvocation);
}
if (devExtensions.extShaderModuleIdentifier) {
enabledFeatures.extShaderModuleIdentifier.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT;
enabledFeatures.extShaderModuleIdentifier.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extShaderModuleIdentifier);
}
if (devExtensions.extRobustness2) {
enabledFeatures.extRobustness2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT;
enabledFeatures.extRobustness2.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extRobustness2);
@ -753,6 +764,11 @@ namespace dxvk {
m_deviceFeatures.extShaderDemoteToHelperInvocation.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extShaderDemoteToHelperInvocation);
}
if (m_deviceExtensions.supports(VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME)) {
m_deviceFeatures.extShaderModuleIdentifier.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT;
m_deviceFeatures.extShaderModuleIdentifier.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extShaderModuleIdentifier);
}
if (m_deviceExtensions.supports(VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME)) {
m_deviceFeatures.extTransformFeedback.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT;
m_deviceFeatures.extTransformFeedback.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extTransformFeedback);
@ -865,6 +881,8 @@ namespace dxvk {
"\n nullDescriptor : ", features.extRobustness2.nullDescriptor ? "1" : "0",
"\n", VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME,
"\n shaderDemoteToHelperInvocation : ", features.extShaderDemoteToHelperInvocation.shaderDemoteToHelperInvocation ? "1" : "0",
"\n", VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME,
"\n shaderModuleIdentifier : ", features.extShaderModuleIdentifier.shaderModuleIdentifier ? "1" : "0",
"\n", VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME,
"\n transformFeedback : ", features.extTransformFeedback.transformFeedback ? "1" : "0",
"\n geometryStreams : ", features.extTransformFeedback.geometryStreams ? "1" : "0",

View File

@ -49,6 +49,7 @@ namespace dxvk {
VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT extPipelineCreationCacheControl;
VkPhysicalDeviceRobustness2FeaturesEXT extRobustness2;
VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT extShaderDemoteToHelperInvocation;
VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT extShaderModuleIdentifier;
VkPhysicalDeviceTransformFeedbackFeaturesEXT extTransformFeedback;
VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT extVertexAttributeDivisor;
VkPhysicalDeviceBufferDeviceAddressFeaturesKHR khrBufferDeviceAddress;

View File

@ -292,6 +292,7 @@ namespace dxvk {
DxvkExt extPipelineCreationCacheControl = { VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extRobustness2 = { VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, DxvkExtMode::Required };
DxvkExt extShaderDemoteToHelperInvocation = { VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extShaderModuleIdentifier = { VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extShaderStencilExport = { VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extShaderViewportIndexLayer = { VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extTransformFeedback = { VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, DxvkExtMode::Optional };

View File

@ -339,6 +339,11 @@ namespace dxvk::vk {
VULKAN_FN(vkResetQueryPoolEXT);
#endif
#ifdef VK_EXT_shader_module_identifier
VULKAN_FN(vkGetShaderModuleCreateInfoIdentifierEXT);
VULKAN_FN(vkGetShaderModuleIdentifierEXT);
#endif
#ifdef VK_EXT_transform_feedback
VULKAN_FN(vkCmdBindTransformFeedbackBuffersEXT);
VULKAN_FN(vkCmdBeginTransformFeedbackEXT);