layers: Support INCOMPLETE return codes in chassis

For some APIs, VK_INCOMPLETE is a valid return code. Ensure post-calls
are still made in these cases.

Special-cased APIs are:
    vkEnumeratePhysicalDevices
    vkEnumeratePhysicalDeviceGroupsKHR
    vkGetValidationCacheDataEXT
    vkGetPipelineCacheData
    vkGetShaderInfoAMD
    vkGetPhysicalDeviceDisplayPropertiesKHR
    vkGetPhysicalDeviceDisplayProperties2KHR
    vkGetPhysicalDeviceDisplayPlanePropertiesKHR
    vkGetDisplayPlaneSupportedDisplaysKHR
    vkGetDisplayModePropertiesKHR
    vkGetDisplayModeProperties2KHR
    vkGetPhysicalDeviceSurfaceFormatsKHR
    vkGetPhysicalDeviceSurfacePresentModesKHR
    vkGetPhysicalDevicePresentRectanglesKHR
    vkGetPastPresentationTimingGOOGLE
    vkGetSwapchainImagesKHR
    vkEnumerateInstanceLayerProperties
    vkEnumerateDeviceLayerProperties
    vkEnumerateInstanceExtensionProperties
    vkEnumerateDeviceExtensionProperties
    vkGetPhysicalDeviceCalibrateableTimeDomainsEXT
diff --git a/scripts/layer_chassis_generator.py b/scripts/layer_chassis_generator.py
index c2b6e28..57f3201 100644
--- a/scripts/layer_chassis_generator.py
+++ b/scripts/layer_chassis_generator.py
@@ -805,10 +805,37 @@
         self.appendSection('command', '    ' + assignresult + API + '(' + paramstext + ');')
 
         # Generate post-call object processing source code
+        alt_ret_codes = [
+            # Include functions here which must tolerate VK_INCOMPLETE as a return code
+            'vkEnumeratePhysicalDevices',
+            'vkEnumeratePhysicalDeviceGroupsKHR',
+            'vkGetValidationCacheDataEXT',
+            'vkGetPipelineCacheData',
+            'vkGetShaderInfoAMD',
+            'vkGetPhysicalDeviceDisplayPropertiesKHR',
+            'vkGetPhysicalDeviceDisplayProperties2KHR',
+            'vkGetPhysicalDeviceDisplayPlanePropertiesKHR',
+            'vkGetDisplayPlaneSupportedDisplaysKHR',
+            'vkGetDisplayModePropertiesKHR',
+            'vkGetDisplayModeProperties2KHR',
+            'vkGetPhysicalDeviceSurfaceFormatsKHR',
+            'vkGetPhysicalDeviceSurfacePresentModesKHR',
+            'vkGetPhysicalDevicePresentRectanglesKHR',
+            'vkGetPastPresentationTimingGOOGLE',
+            'vkGetSwapchainImagesKHR',
+            'vkEnumerateInstanceLayerProperties',
+            'vkEnumerateDeviceLayerProperties',
+            'vkEnumerateInstanceExtensionProperties',
+            'vkEnumerateDeviceExtensionProperties',
+            'vkGetPhysicalDeviceCalibrateableTimeDomainsEXT',
+        ]
         return_type_indent = ''
         if (resulttype.text == 'VkResult'):
             return_type_indent = '    '
-            self.appendSection('command', '    if (VK_SUCCESS == result) {')
+            if name in alt_ret_codes:
+                self.appendSection('command', '    if ((VK_SUCCESS == result) || (VK_INCOMPLETE == result)) {')
+            else:
+                self.appendSection('command', '    if (VK_SUCCESS == result) {')
         self.appendSection('command', '%s    for (auto intercept : global_interceptor_list) {' % return_type_indent)
         self.appendSection('command', '%s        std::lock_guard<std::mutex> lock(intercept->layer_mutex);' % return_type_indent)
         self.appendSection('command', '%s        intercept->PostCallRecord%s(%s);' % (return_type_indent,api_function_name[2:], paramstext))