Update vkjson codegen

Fixing vkJson null pointer dereference for Vulkan1.4 driver
by setting array values of VkPhysicalDeviceVulkan14Properties.

Test: adb shell cmd gpu vkjson
Bug: b/403413507
Flag: NONE infeasible
Change-Id: Ibc3f77ea4606c38da008a00294546a63c83889cb
diff --git a/vulkan/scripts/vkjson_generator.py b/vulkan/scripts/vkjson_generator.py
index 7dc55d9..6f621a1 100644
--- a/vulkan/scripts/vkjson_generator.py
+++ b/vulkan/scripts/vkjson_generator.py
@@ -184,12 +184,22 @@
     vkJson_core_entries.append(f"{struct_name} {version.lower()}")
 
     f.write(f"struct {struct_name} {{\n")
+    f.write(f"  {struct_name}() {{\n") # Start of constructor
+    for item in items:
+      for struct_type, _ in item.items():
+        field_name = "properties" if "Properties" in struct_type else "features"
+        f.write(f" memset(&{field_name}, 0, sizeof({struct_type}));\n")
+    f.write("  }\n")  # End of constructor
 
     for item in items:
       for struct_type, _ in item.items():
         field_name = "properties" if "Properties" in struct_type else "features"
         f.write(f"  {struct_type} {field_name};\n")
 
+    if version == "Core14":
+      f.write(f"std::vector<VkImageLayout> copy_src_layouts;\n")
+      f.write(f"std::vector<VkImageLayout> copy_dst_layouts;\n")
+
     f.write("};\n\n")
 
   return vkJson_core_entries
@@ -212,11 +222,6 @@
     f.write(f"memset(&{variable_name}, 0, sizeof({class_name}));\n")
     entries.append(f"{class_name} {variable_name}")
 
-  # Process vulkan core structs
-  for version in VK.VULKAN_CORES_AND_STRUCTS_MAPPING["versions"]:
-    struct_name = f"VkJson{version}"
-    f.write(f"memset(&{version.lower()}, 0, sizeof({struct_name}));\n")
-
   return entries
 
 
@@ -1757,6 +1762,21 @@
   if (device.properties.apiVersion >= VK_API_VERSION_1_4) {\n""")
     f.write(cc_code_properties_14)
     f.write(f"vkGetPhysicalDeviceProperties2(physical_device, &properties);\n\n")
+
+    f.write("""\
+if (device.core14.properties.copySrcLayoutCount > 0 || device.core14.properties.copyDstLayoutCount > 0 ) {
+  if (device.core14.properties.copySrcLayoutCount > 0) {
+    device.core14.copy_src_layouts.resize(device.core14.properties.copySrcLayoutCount);
+    device.core14.properties.pCopySrcLayouts = device.core14.copy_src_layouts.data();
+  }
+  if (device.core14.properties.copyDstLayoutCount > 0) {
+    device.core14.copy_dst_layouts.resize(device.core14.properties.copyDstLayoutCount);
+    device.core14.properties.pCopyDstLayouts = device.core14.copy_dst_layouts.data();
+  }
+  vkGetPhysicalDeviceProperties2(physical_device, &properties);
+}
+    \n""")
+
     f.write(cc_code_features_14)
     f.write(f"vkGetPhysicalDeviceFeatures2(physical_device, &features);\n\n")
     f.write("""\