layers: MR181/GL102 Fix unique_objects to correctly assign local vars under ptrs
authorTobin Ehlis <tobine@google.com>
Fri, 29 Jan 2016 16:24:46 +0000 (09:24 -0700)
committerMark Lobodzinski <mark@lunarg.com>
Fri, 29 Jan 2016 18:21:03 +0000 (11:21 -0700)
If a variable that needs to be restored is below a ptr, then need to declare
it at the top level, but only assign it if the ptr(s) that it's below are
non-null.

vk-layer-generate.py

index e72a9a5..b0235f0 100755 (executable)
@@ -2120,7 +2120,13 @@ class UniqueObjectsSubcommand(Subcommand):
                     indent = indent[4:]
                     pre_code += '%s}\n' % (indent)
                     if not first_level_param: # embedded in a ptr/struct so need to undo the update
-                        decls += '    %s local_%s = %s%s;\n' % (struct_uses[obj], name, prefix, name)
+                        if '->' in prefix:
+                            # Since this variable is embedded under a ptr, need to decl up front, but wait
+                            #  to assign it inside of the "if" block(s) for surrounding ptr(s)
+                            decls += '    %s local_%s = VK_NULL_HANDLE;\n' % (struct_uses[obj], name)
+                            pre_code = '%slocal_%s = %s%s;\n%s' % (indent, name, prefix, name, pre_code)
+                        else:
+                            decls += '    %s local_%s = %s%s;\n' % (struct_uses[obj], name, prefix, name)
                         post_code += '%sif (%s%s) {\n' %(indent, prefix, name)
                         post_code += '%s    %s* p%s = (%s*)%s%s%s;\n' % (indent, struct_uses[obj], name, struct_uses[obj], deref_txt, prefix, name)
                         post_code += '%s    *p%s = local_%s;\n' % (indent, name, name)