diff --git a/icd/generated/vksc_output_struct_sanitizer.cpp b/icd/generated/vksc_output_struct_sanitizer.cpp index fb996a4..27bfab5 100644 --- a/icd/generated/vksc_output_struct_sanitizer.cpp +++ b/icd/generated/vksc_output_struct_sanitizer.cpp @@ -620,15 +620,19 @@ void ConvertOutStructToVulkanSC void ConvertOutStructToVulkanSC(VkDrmFormatModifierPropertiesListEXT* p) { - for (uint32_t i = 0; i < p->drmFormatModifierCount; ++i) { - ConvertOutStructToVulkanSC(&p->pDrmFormatModifierProperties[i]); + if (p->pDrmFormatModifierProperties != nullptr) { + for (uint32_t i = 0; i < p->drmFormatModifierCount; ++i) { + ConvertOutStructToVulkanSC(&p->pDrmFormatModifierProperties[i]); + } } } template <> void ConvertOutStructToVulkanSC(VkDrmFormatModifierPropertiesList2EXT* p) { - for (uint32_t i = 0; i < p->drmFormatModifierCount; ++i) { - ConvertOutStructToVulkanSC(&p->pDrmFormatModifierProperties[i]); + if (p->pDrmFormatModifierProperties != nullptr) { + for (uint32_t i = 0; i < p->drmFormatModifierCount; ++i) { + ConvertOutStructToVulkanSC(&p->pDrmFormatModifierProperties[i]); + } } } diff --git a/scripts/generators/output_struct_sanitizer_generator.py b/scripts/generators/output_struct_sanitizer_generator.py index 666eb5f..432d0f0 100644 --- a/scripts/generators/output_struct_sanitizer_generator.py +++ b/scripts/generators/output_struct_sanitizer_generator.py @@ -153,16 +153,30 @@ def generateSource(self): if member.type in self.all_output_structs: assert(not member.const) if member.length: - # Array case - out.append(f''' - for (uint32_t i = 0; i < p->{member.length}; ++i) {{ - ConvertOutStructToVulkanSC<{member.type}>(&p->{member.name}[i]); - }} - ''') + if member.pointer: + # Pointer to array case + out.append(f''' + if (p->{member.name} != nullptr) {{ + for (uint32_t i = 0; i < p->{member.length}; ++i) {{ + ConvertOutStructToVulkanSC<{member.type}>(&p->{member.name}[i]); + }} + }} + ''') + else: + # Embedded array case + out.append(f''' + for (uint32_t i = 0; i < p->{member.length}; ++i) {{ + ConvertOutStructToVulkanSC<{member.type}>(&p->{member.name}[i]); + }} + ''') else: if member.pointer: # Pointer case - out.append(f'ConvertOutStructToVulkanSC<{member.type}>(p->{member.name});') + out.append(f''' + if (p->{member.name} != nullptr) {{ + ConvertOutStructToVulkanSC<{member.type}>(p->{member.name}); + }} + ''') else: # Embedded case out.append(f'ConvertOutStructToVulkanSC<{member.type}>(&p->{member.name});')