vknulldrv: Report valid VkPhysicalDeviceFeatures

Change-Id: I616f8e40d42abb812cc150d31b3a07d41d86b43c
diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
index b4e21db..8f47bd1 100644
--- a/vulkan/nulldrv/null_driver.cpp
+++ b/vulkan/nulldrv/null_driver.cpp
@@ -378,6 +378,67 @@
     properties->memoryHeaps[0].flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT;
 }
 
+void GetPhysicalDeviceFeatures(VkPhysicalDevice /*gpu*/,
+                               VkPhysicalDeviceFeatures* features) {
+    *features = VkPhysicalDeviceFeatures{
+        VK_TRUE,   // robustBufferAccess
+        VK_FALSE,  // fullDrawIndexUint32
+        VK_FALSE,  // imageCubeArray
+        VK_FALSE,  // independentBlend
+        VK_FALSE,  // geometryShader
+        VK_FALSE,  // tessellationShader
+        VK_FALSE,  // sampleRateShading
+        VK_FALSE,  // dualSrcBlend
+        VK_FALSE,  // logicOp
+        VK_FALSE,  // multiDrawIndirect
+        VK_FALSE,  // drawIndirectFirstInstance
+        VK_FALSE,  // depthClamp
+        VK_FALSE,  // depthBiasClamp
+        VK_FALSE,  // fillModeNonSolid
+        VK_FALSE,  // depthBounds
+        VK_FALSE,  // wideLines
+        VK_FALSE,  // largePoints
+        VK_FALSE,  // alphaToOne
+        VK_FALSE,  // multiViewport
+        VK_FALSE,  // samplerAnisotropy
+        VK_FALSE,  // textureCompressionETC2
+        VK_FALSE,  // textureCompressionASTC_LDR
+        VK_FALSE,  // textureCompressionBC
+        VK_FALSE,  // occlusionQueryPrecise
+        VK_FALSE,  // pipelineStatisticsQuery
+        VK_FALSE,  // vertexPipelineStoresAndAtomics
+        VK_FALSE,  // fragmentStoresAndAtomics
+        VK_FALSE,  // shaderTessellationAndGeometryPointSize
+        VK_FALSE,  // shaderImageGatherExtended
+        VK_FALSE,  // shaderStorageImageExtendedFormats
+        VK_FALSE,  // shaderStorageImageMultisample
+        VK_FALSE,  // shaderStorageImageReadWithoutFormat
+        VK_FALSE,  // shaderStorageImageWriteWithoutFormat
+        VK_FALSE,  // shaderUniformBufferArrayDynamicIndexing
+        VK_FALSE,  // shaderSampledImageArrayDynamicIndexing
+        VK_FALSE,  // shaderStorageBufferArrayDynamicIndexing
+        VK_FALSE,  // shaderStorageImageArrayDynamicIndexing
+        VK_FALSE,  // shaderClipDistance
+        VK_FALSE,  // shaderCullDistance
+        VK_FALSE,  // shaderFloat64
+        VK_FALSE,  // shaderInt64
+        VK_FALSE,  // shaderInt16
+        VK_FALSE,  // shaderResourceResidency
+        VK_FALSE,  // shaderResourceMinLod
+        VK_FALSE,  // sparseBinding
+        VK_FALSE,  // sparseResidencyBuffer
+        VK_FALSE,  // sparseResidencyImage2D
+        VK_FALSE,  // sparseResidencyImage3D
+        VK_FALSE,  // sparseResidency2Samples
+        VK_FALSE,  // sparseResidency4Samples
+        VK_FALSE,  // sparseResidency8Samples
+        VK_FALSE,  // sparseResidency16Samples
+        VK_FALSE,  // sparseResidencyAliased
+        VK_FALSE,  // variableMultisampleRate
+        VK_FALSE,  // inheritedQueries
+    };
+}
+
 // -----------------------------------------------------------------------------
 // Device
 
@@ -842,10 +903,6 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wunused-parameter"
 
-void GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) {
-    ALOGV("TODO: vk%s", __FUNCTION__);
-}
-
 void GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) {
     ALOGV("TODO: vk%s", __FUNCTION__);
 }