layers: Hack to remove incorrect implicit VU

VUID-VkFramebufferCreateInfo-pAttachments-parameter should've been
removed for VK_KHR_imageless_framebuffer, and replaced with explicit
VU instead - but this hasn't yet happened.
In order to ship validation for this functionality in the next SDK,
the VU has temporarily been hardcoded out in the generator script.
Added in an explicit check temporarily to ensure that

Most of these changes (other than the change to
parameter_validation_generator.py) will remain intact after the spec is
updated. The script change won't cause any issues after it the spec is
updated either, so it can be reverted in slow time.
diff --git a/layers/generated/parameter_validation.cpp b/layers/generated/parameter_validation.cpp
index 35184be..7953aa5 100644
--- a/layers/generated/parameter_validation.cpp
+++ b/layers/generated/parameter_validation.cpp
@@ -3640,8 +3640,6 @@
         skip |= validate_flags("vkCreateFramebuffer", "pCreateInfo->flags", "VkFramebufferCreateFlagBits", AllVkFramebufferCreateFlagBits, pCreateInfo->flags, false, false, "VUID-VkFramebufferCreateInfo-flags-parameter");
 
         skip |= validate_required_handle("vkCreateFramebuffer", "pCreateInfo->renderPass", pCreateInfo->renderPass);
-
-        skip |= validate_array("vkCreateFramebuffer", "pCreateInfo->attachmentCount", "pCreateInfo->pAttachments", pCreateInfo->attachmentCount, &pCreateInfo->pAttachments, false, true, kVUIDUndefined, "VUID-VkFramebufferCreateInfo-pAttachments-parameter");
     }
     if (pAllocator != NULL)
     {
@@ -3664,6 +3662,7 @@
         }
     }
     skip |= validate_required_pointer("vkCreateFramebuffer", "pFramebuffer", pFramebuffer, "VUID-vkCreateFramebuffer-pFramebuffer-parameter");
+    skip |= manual_PreCallValidateCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
     return skip;
 }
 
diff --git a/layers/parameter_validation_utils.cpp b/layers/parameter_validation_utils.cpp
index 3ed6157..1cd6766 100644
--- a/layers/parameter_validation_utils.cpp
+++ b/layers/parameter_validation_utils.cpp
@@ -3159,3 +3159,15 @@
     return skip;
 }
 #endif
+
+bool StatelessValidation::manual_PreCallValidateCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo *pCreateInfo,
+                                                                  const VkAllocationCallbacks *pAllocator,
+                                                                  VkFramebuffer *pFramebuffer) {
+    // Validation for pAttachments which is excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml
+    bool skip = false;
+    if ((pCreateInfo->flags & VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR) == 0) {
+        skip |= validate_array("vkCreateFramebuffer", "attachmentCount", "pAttachments", pCreateInfo->attachmentCount,
+                               &pCreateInfo->pAttachments, false, true, kVUIDUndefined, kVUIDUndefined);
+    }
+    return skip;
+}
diff --git a/layers/stateless_validation.h b/layers/stateless_validation.h
index 7f0bd57..9ace56d 100644
--- a/layers/stateless_validation.h
+++ b/layers/stateless_validation.h
@@ -1069,5 +1069,9 @@
     bool PreCallValidateGetDeviceGroupSurfacePresentModes2EXT(VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo,
                                                               VkDeviceGroupPresentModeFlagsKHR *pModes);
 #endif  // VK_USE_PLATFORM_WIN32_KHR
+
+    bool manual_PreCallValidateCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo *pCreateInfo,
+                                                 const VkAllocationCallbacks *pAllocator, VkFramebuffer *pFramebuffer);
+
 #include "parameter_validation.h"
 };  // Class StatelessValidation