Added missing feature structure for VK_KHR_maintenance4

VK_KHR_maintenance4 adds a feature structure, which was missing from
PhysicalDevice::getFeatures2(). This CL adds it.

Tests: dEQP-VK.api.info.get_physical_device_properties2.features
Bug: b/204502926
Change-Id: I88738817a22e536c3b8c13887c5865f634cda403
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/64728
Presubmit-Ready: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Commit-Queue: Alexis Hétu <sugoi@google.com>
Tested-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Vulkan/VkPhysicalDevice.cpp b/src/Vulkan/VkPhysicalDevice.cpp
index 010c270..3dc62d6 100644
--- a/src/Vulkan/VkPhysicalDevice.cpp
+++ b/src/Vulkan/VkPhysicalDevice.cpp
@@ -364,6 +364,12 @@
 }
 
 template<typename T>
+static void getPhysicalDeviceMaintenance4Features(T *features)
+{
+	features->maintenance4 = VK_TRUE;
+}
+
+template<typename T>
 static void getPhysicalDeviceVulkan12Features(T *features)
 {
 	features->samplerMirrorClampToEdge = VK_TRUE;
@@ -409,7 +415,7 @@
 	getPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(features);
 	getPhysicalDeviceDynamicRenderingFeatures(features);
 	getPhysicalDeviceShaderIntegerDotProductFeatures(features);
-	features->maintenance4 = VK_TRUE;
+	getPhysicalDeviceMaintenance4Features(features);
 }
 
 static void getPhysicalDeviceCustomBorderColorFeaturesExt(VkPhysicalDeviceCustomBorderColorFeaturesEXT *features)
@@ -570,6 +576,9 @@
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES:
 			getPhysicalDeviceShaderIntegerDotProductFeatures(reinterpret_cast<struct VkPhysicalDeviceShaderIntegerDotProductFeatures *>(curExtension));
 			break;
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES:
+			getPhysicalDeviceMaintenance4Features(reinterpret_cast<struct VkPhysicalDeviceMaintenance4Features *>(curExtension));
+			break;
 		// Unsupported extensions, but used by dEQP
 		// TODO(b/176893525): This may not be legal.
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT:
@@ -577,6 +586,7 @@
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT:
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT:
+		case VK_STRUCTURE_TYPE_MAX_ENUM:  // dEQP tests that this value is ignored.
 			break;
 		default:
 			UNSUPPORTED("curExtension->sType: %s", vk::Stringify(curExtension->sType).c_str());