Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2dc2afe2 authored by Nikita Gupta's avatar Nikita Gupta Committed by Android (Google) Code Review
Browse files

Merge changes from topic "vkjson_fix" into main

* changes:
  Fix nullpointer dereference at VKJson
  Update vkjson codegen
parents f113cae9 6616c482
Loading
Loading
Loading
Loading
+25 −5
Original line number Original line Diff line number Diff line
@@ -184,12 +184,22 @@ def generate_vk_core_struct_definition(f):
    vkJson_core_entries.append(f"{struct_name} {version.lower()}")
    vkJson_core_entries.append(f"{struct_name} {version.lower()}")


    f.write(f"struct {struct_name} {{\n")
    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 item in items:
      for struct_type, _ in item.items():
      for struct_type, _ in item.items():
        field_name = "properties" if "Properties" in struct_type else "features"
        field_name = "properties" if "Properties" in struct_type else "features"
        f.write(f"  {struct_type} {field_name};\n")
        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")
    f.write("};\n\n")


  return vkJson_core_entries
  return vkJson_core_entries
@@ -212,11 +222,6 @@ def generate_memset_statements(f):
    f.write(f"memset(&{variable_name}, 0, sizeof({class_name}));\n")
    f.write(f"memset(&{variable_name}, 0, sizeof({class_name}));\n")
    entries.append(f"{class_name} {variable_name}")
    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
  return entries




@@ -1757,6 +1762,21 @@ VkJsonDevice VkJsonGetDevice(VkPhysicalDevice physical_device) {
  if (device.properties.apiVersion >= VK_API_VERSION_1_4) {\n""")
  if (device.properties.apiVersion >= VK_API_VERSION_1_4) {\n""")
    f.write(cc_code_properties_14)
    f.write(cc_code_properties_14)
    f.write(f"vkGetPhysicalDeviceProperties2(physical_device, &properties);\n\n")
    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(cc_code_features_14)
    f.write(f"vkGetPhysicalDeviceFeatures2(physical_device, &features);\n\n")
    f.write(f"vkGetPhysicalDeviceFeatures2(physical_device, &features);\n\n")
    f.write("""\
    f.write("""\
+3 −0
Original line number Original line Diff line number Diff line
@@ -36,6 +36,9 @@
#include <type_traits>
#include <type_traits>
#include <utility>
#include <utility>


/*
 * This file is autogenerated by vkjson_generator.py. Do not edit directly.
 */
namespace {
namespace {


/*
/*
+21 −4
Original line number Original line Diff line number Diff line
@@ -33,6 +33,9 @@
#undef max
#undef max
#endif
#endif


/*
 * This file is autogenerated by vkjson_generator.py. Do not edit directly.
 */
struct VkJsonLayer {
struct VkJsonLayer {
  VkLayerProperties properties;
  VkLayerProperties properties;
  std::vector<VkExtensionProperties> extensions;
  std::vector<VkExtensionProperties> extensions;
@@ -263,23 +266,41 @@ struct VkJsonKHRDriverProperties {
};
};


struct VkJsonCore11 {
struct VkJsonCore11 {
  VkJsonCore11() {
    memset(&properties, 0, sizeof(VkPhysicalDeviceVulkan11Properties));
    memset(&features, 0, sizeof(VkPhysicalDeviceVulkan11Features));
  }
  VkPhysicalDeviceVulkan11Properties properties;
  VkPhysicalDeviceVulkan11Properties properties;
  VkPhysicalDeviceVulkan11Features features;
  VkPhysicalDeviceVulkan11Features features;
};
};


struct VkJsonCore12 {
struct VkJsonCore12 {
  VkJsonCore12() {
    memset(&properties, 0, sizeof(VkPhysicalDeviceVulkan12Properties));
    memset(&features, 0, sizeof(VkPhysicalDeviceVulkan12Features));
  }
  VkPhysicalDeviceVulkan12Properties properties;
  VkPhysicalDeviceVulkan12Properties properties;
  VkPhysicalDeviceVulkan12Features features;
  VkPhysicalDeviceVulkan12Features features;
};
};


struct VkJsonCore13 {
struct VkJsonCore13 {
  VkJsonCore13() {
    memset(&properties, 0, sizeof(VkPhysicalDeviceVulkan13Properties));
    memset(&features, 0, sizeof(VkPhysicalDeviceVulkan13Features));
  }
  VkPhysicalDeviceVulkan13Properties properties;
  VkPhysicalDeviceVulkan13Properties properties;
  VkPhysicalDeviceVulkan13Features features;
  VkPhysicalDeviceVulkan13Features features;
};
};


struct VkJsonCore14 {
struct VkJsonCore14 {
  VkJsonCore14() {
    memset(&properties, 0, sizeof(VkPhysicalDeviceVulkan14Properties));
    memset(&features, 0, sizeof(VkPhysicalDeviceVulkan14Features));
  }
  VkPhysicalDeviceVulkan14Properties properties;
  VkPhysicalDeviceVulkan14Properties properties;
  VkPhysicalDeviceVulkan14Features features;
  VkPhysicalDeviceVulkan14Features features;
  std::vector<VkImageLayout> copy_src_layouts;
  std::vector<VkImageLayout> copy_dst_layouts;
};
};


struct VkJsonDevice {
struct VkJsonDevice {
@@ -306,10 +327,6 @@ struct VkJsonDevice {
           sizeof(VkPhysicalDeviceSamplerYcbcrConversionFeatures));
           sizeof(VkPhysicalDeviceSamplerYcbcrConversionFeatures));
    memset(&shader_draw_parameter_features, 0,
    memset(&shader_draw_parameter_features, 0,
           sizeof(VkPhysicalDeviceShaderDrawParameterFeatures));
           sizeof(VkPhysicalDeviceShaderDrawParameterFeatures));
    memset(&core11, 0, sizeof(VkJsonCore11));
    memset(&core12, 0, sizeof(VkJsonCore12));
    memset(&core13, 0, sizeof(VkJsonCore13));
    memset(&core14, 0, sizeof(VkJsonCore14));
  }
  }
  VkJsonKHRVariablePointers khr_variable_pointers;
  VkJsonKHRVariablePointers khr_variable_pointers;
  VkJsonKHRShaderFloat16Int8 khr_shader_float16_int8;
  VkJsonKHRShaderFloat16Int8 khr_shader_float16_int8;
+20 −0
Original line number Original line Diff line number Diff line
@@ -27,6 +27,9 @@
#include <algorithm>
#include <algorithm>
#include <utility>
#include <utility>


/*
 * This file is autogenerated by vkjson_generator.py. Do not edit directly.
 */
namespace {
namespace {


bool EnumerateExtensions(const char* layer_name,
bool EnumerateExtensions(const char* layer_name,
@@ -512,6 +515,23 @@ VkJsonDevice VkJsonGetDevice(VkPhysicalDevice physical_device) {


    vkGetPhysicalDeviceProperties2(physical_device, &properties);
    vkGetPhysicalDeviceProperties2(physical_device, &properties);


    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);
    }

    device.core14.features.sType =
    device.core14.features.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES;
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES;
    device.core14.features.pNext = features.pNext;
    device.core14.features.pNext = features.pNext;