layers: Add deprecated extension warning to BP

Change-Id: I268ffe40c30a1118e0538e28e6f9c2619e3d6b0a
diff --git a/layers/best_practices.cpp b/layers/best_practices.cpp
index 3b9217c..dd815db 100644
--- a/layers/best_practices.cpp
+++ b/layers/best_practices.cpp
@@ -47,6 +47,13 @@
                                "vkCreateInstance(): Attempting to enable Device Extension %s at CreateInstance time.",
                                pCreateInfo->ppEnabledExtensionNames[i]);
         }
+
+        if (white_list(pCreateInfo->ppEnabledExtensionNames[i], kDeprecatedExtensionNames)) {
+            skip |= log_msg(report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,
+                            kVUID_BestPractices_CreateInstance_DeprecatedExtension,
+                            "vkCreateInstance(): Attempting to enable Deprecated Extension %s at CreateInstance time.",
+                            pCreateInfo->ppEnabledExtensionNames[i]);
+        }
     }
 
     return skip;
@@ -78,9 +85,16 @@
 
     for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
         if (white_list(pCreateInfo->ppEnabledExtensionNames[i], kInstanceExtensionNames)) {
-            skip |= LogWarning(device, kVUID_BestPractices_CreateInstance_ExtensionMismatch,
-                               "vkCreateDevice(): Attempting to enable Instance Extension %s at CreateDevice time.",
-                               pCreateInfo->ppEnabledExtensionNames[i]);
+            skip |= log_msg(report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,
+                            kVUID_BestPractices_CreateDevice_ExtensionMismatch,
+                            "vkCreateDevice(): Attempting to enable Instance Extension %s at CreateDevice time.",
+                            pCreateInfo->ppEnabledExtensionNames[i]);
+        }
+        if (white_list(pCreateInfo->ppEnabledExtensionNames[i], kDeprecatedExtensionNames)) {
+            skip |= log_msg(report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,
+                            kVUID_BestPractices_CreateDevice_DeprecatedExtension,
+                            "vkCreateDevice(): Attempting to enable Deprecated Extension %s at CreateDevice time.",
+                            pCreateInfo->ppEnabledExtensionNames[i]);
         }
     }
 
diff --git a/layers/best_practices.h b/layers/best_practices.h
index f656b5d..4a9b225 100644
--- a/layers/best_practices.h
+++ b/layers/best_practices.h
@@ -25,6 +25,42 @@
 
 static const uint32_t kMemoryObjectWarningLimit = 250;
 
+static const std::set<std::string> kDeprecatedExtensionNames = {VK_KHR_16BIT_STORAGE_EXTENSION_NAME,
+                                                                VK_KHR_BIND_MEMORY_2_EXTENSION_NAME,
+                                                                VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME,
+                                                                VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME,
+                                                                VK_KHR_DEVICE_GROUP_EXTENSION_NAME,
+                                                                VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME,
+                                                                VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME,
+                                                                VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME,
+                                                                VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME,
+                                                                VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME,
+                                                                VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME,
+                                                                VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME,
+                                                                VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME,
+                                                                VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME,
+                                                                VK_KHR_MAINTENANCE1_EXTENSION_NAME,
+                                                                VK_KHR_MAINTENANCE2_EXTENSION_NAME,
+                                                                VK_KHR_MAINTENANCE3_EXTENSION_NAME,
+                                                                VK_KHR_MULTIVIEW_EXTENSION_NAME,
+                                                                VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME,
+                                                                VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME,
+                                                                VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME,
+                                                                VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME,
+                                                                VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME,
+                                                                VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME,
+                                                                VK_EXT_DEBUG_MARKER_EXTENSION_NAME,
+                                                                VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME,
+                                                                VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME,
+                                                                VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME,
+                                                                VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME,
+                                                                VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME,
+                                                                VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME,
+                                                                VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME,
+                                                                VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME,
+                                                                VK_NV_GLSL_SHADER_EXTENSION_NAME,
+                                                                VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME};
+
 class BestPractices : public ValidationStateTracker {
   public:
     using StateTracker = ValidationStateTracker;
@@ -141,6 +177,5 @@
 
   private:
     uint32_t instance_api_version;
-
     uint32_t num_mem_objects = 0;
 };
diff --git a/layers/best_practices_error_enums.h b/layers/best_practices_error_enums.h
index bf06198..9b0b724 100644
--- a/layers/best_practices_error_enums.h
+++ b/layers/best_practices_error_enums.h
@@ -30,6 +30,12 @@
 
 static const char DECORATE_UNUSED *kVUID_BestPractices_CreateInstance_ExtensionMismatch =
     "UNASSIGNED-BestPractices-vkCreateInstance-extension-mismatch";
+static const char DECORATE_UNUSED *kVUID_BestPractices_CreateDevice_ExtensionMismatch =
+    "UNASSIGNED-BestPractices-vkCreateDevice-extension-mismatch";
+static const char DECORATE_UNUSED *kVUID_BestPractices_CreateInstance_DeprecatedExtension =
+    "UNASSIGNED-BestPractices-vkCreateInstance-deprecated-extension";
+static const char DECORATE_UNUSED *kVUID_BestPractices_CreateDevice_DeprecatedExtension =
+    "UNASSIGNED-BestPractices-vkCreateInstance-deprecated-extension";
 static const char DECORATE_UNUSED *kVUID_BestPractices_CreateDevice_API_Mismatch =
     "UNASSIGNED-BestPractices-vkCreateDevice-API-version-mismatch";
 static const char DECORATE_UNUSED *kVUID_BestPractices_SharingModeExclusive =