Add special case to wrap abstract types
AHardwareBuffer and ANativeWindow are abstract objects we cannot copy.
Just save the pointer.
Bug: 219
Change-Id: I9f3b7b3fd4d6fb63d05dceaa2edc283a59a89838
diff --git a/scripts/helper_file_generator.py b/scripts/helper_file_generator.py
index 003e7a5..fb7d1d2 100644
--- a/scripts/helper_file_generator.py
+++ b/scripts/helper_file_generator.py
@@ -767,12 +767,6 @@
safe_struct_helper_source = '\n'
safe_struct_helper_source += '#include "vk_safe_struct.h"\n'
safe_struct_helper_source += '#include <string.h>\n'
- safe_struct_helper_source += '#ifdef VK_USE_PLATFORM_ANDROID_KHR\n'
- safe_struct_helper_source += '#if __ANDROID_API__ < __ANDROID_API_O__\n'
- safe_struct_helper_source += 'struct AHardwareBuffer {};\n'
- safe_struct_helper_source += '#endif\n'
- safe_struct_helper_source += '#endif\n'
-
safe_struct_helper_source += '\n'
safe_struct_helper_source += self.GenerateSafeStructSource()
return safe_struct_helper_source
@@ -787,6 +781,12 @@
'VkAndroidSurfaceCreateInfoKHR',
'VkWin32SurfaceCreateInfoKHR'
]
+
+ # For abstract types just want to save the pointer away
+ # since we cannot make a copy.
+ abstract_types = ['AHardwareBuffer',
+ 'ANativeWindow',
+ ]
for item in self.structMembers:
if self.NeedSafeStruct(item) == False:
continue
@@ -1018,21 +1018,24 @@
else:
default_init_list += '\n %s(nullptr),' % (member.name)
init_list += '\n %s(nullptr),' % (member.name)
- init_func_txt += ' %s = nullptr;\n' % (member.name)
- if 'pNext' != member.name and 'void' not in m_type:
- if not member.isstaticarray and (member.len is None or '/' in member.len):
- construct_txt += ' if (in_struct->%s) {\n' % member.name
- construct_txt += ' %s = new %s(*in_struct->%s);\n' % (member.name, m_type, member.name)
- construct_txt += ' }\n'
- destruct_txt += ' if (%s)\n' % member.name
- destruct_txt += ' delete %s;\n' % member.name
- else:
- construct_txt += ' if (in_struct->%s) {\n' % member.name
- construct_txt += ' %s = new %s[in_struct->%s];\n' % (member.name, m_type, member.len)
- construct_txt += ' memcpy ((void *)%s, (void *)in_struct->%s, sizeof(%s)*in_struct->%s);\n' % (member.name, member.name, m_type, member.len)
- construct_txt += ' }\n'
- destruct_txt += ' if (%s)\n' % member.name
- destruct_txt += ' delete[] %s;\n' % member.name
+ if m_type in abstract_types:
+ construct_txt += ' %s = in_struct->%s;\n' % (member.name, member.name)
+ else:
+ init_func_txt += ' %s = nullptr;\n' % (member.name)
+ if 'pNext' != member.name and 'void' not in m_type:
+ if not member.isstaticarray and (member.len is None or '/' in member.len):
+ construct_txt += ' if (in_struct->%s) {\n' % member.name
+ construct_txt += ' %s = new %s(*in_struct->%s);\n' % (member.name, m_type, member.name)
+ construct_txt += ' }\n'
+ destruct_txt += ' if (%s)\n' % member.name
+ destruct_txt += ' delete %s;\n' % member.name
+ else:
+ construct_txt += ' if (in_struct->%s) {\n' % member.name
+ construct_txt += ' %s = new %s[in_struct->%s];\n' % (member.name, m_type, member.len)
+ construct_txt += ' memcpy ((void *)%s, (void *)in_struct->%s, sizeof(%s)*in_struct->%s);\n' % (member.name, member.name, m_type, member.len)
+ construct_txt += ' }\n'
+ destruct_txt += ' if (%s)\n' % member.name
+ destruct_txt += ' delete[] %s;\n' % member.name
elif member.isstaticarray or member.len is not None:
if member.len is None:
# Extract length of static array by grabbing val between []