diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index adea2900..862f361b 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -382,6 +382,14 @@ namespace dxvk { m_deviceInfo.core.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR; m_deviceInfo.core.pNext = nullptr; + // Query info now so that we have basic device properties available + m_vki->vkGetPhysicalDeviceProperties2KHR(m_handle, &m_deviceInfo.core); + + if (m_deviceInfo.core.properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0)) { + m_deviceInfo.coreSubgroup.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + m_deviceInfo.coreSubgroup.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.coreSubgroup); + } + if (m_deviceExtensions.supports(VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME)) { m_deviceInfo.extTransformFeedback.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT; m_deviceInfo.extTransformFeedback.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.extTransformFeedback); @@ -392,6 +400,7 @@ namespace dxvk { m_deviceInfo.extVertexAttributeDivisor.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.extVertexAttributeDivisor); } + // Query full device properties for all enabled extensions m_vki->vkGetPhysicalDeviceProperties2KHR(m_handle, &m_deviceInfo.core); // Nvidia reports the driver version in a slightly different format diff --git a/src/dxvk/dxvk_device_info.h b/src/dxvk/dxvk_device_info.h index 5434c44c..2f387b8f 100644 --- a/src/dxvk/dxvk_device_info.h +++ b/src/dxvk/dxvk_device_info.h @@ -14,6 +14,7 @@ namespace dxvk { */ struct DxvkDeviceInfo { VkPhysicalDeviceProperties2KHR core; + VkPhysicalDeviceSubgroupProperties coreSubgroup; VkPhysicalDeviceTransformFeedbackPropertiesEXT extTransformFeedback; VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT extVertexAttributeDivisor; };