layers: Handle static arrays in codegen

Update safe_struct codegen to handle the case of a static array
in a struct. This removes exceptions for VkDebugMarkerMarkerInfoEXT
and VkPipelineColorBlendStateCreateInfo so they can be treated
as all other structs.
diff --git a/vk_helper.py b/vk_helper.py
index ab99f63..a405d57 100755
--- a/vk_helper.py
+++ b/vk_helper.py
@@ -1563,7 +1563,7 @@
 
     # If struct has sType or ptr members, generate safe type
     def _hasSafeStruct(self, s):
-        exceptions = ['VkPhysicalDeviceFeatures', 'VkPipelineColorBlendStateCreateInfo', 'VkDebugMarkerMarkerInfoEXT']
+        exceptions = ['VkPhysicalDeviceFeatures']
         if s in exceptions:
             return False
         if 'sType' == self.struct_dict[s][0]['name']:
@@ -1713,23 +1713,34 @@
                                 destruct_txt += '    if (%s)\n' % (m_name)
                                 destruct_txt += '        delete[] %s;\n' % (m_name)
                 elif self.struct_dict[s][m]['array']:
-                    # Init array ptr to NULL
-                    init_list += '\n\t%s(NULL),' % (m_name)
-                    init_func_txt += '    %s = NULL;\n' % (m_name)
-                    array_element = 'pInStruct->%s[i]' % (m_name)
-                    if is_type(self.struct_dict[s][m]['type'], 'struct') and self._hasSafeStruct(self.struct_dict[s][m]['type']):
-                        array_element = '%s(&pInStruct->%s[i])' % (self._getSafeStructName(self.struct_dict[s][m]['type']), m_name)
-                    construct_txt += '    if (%s && pInStruct->%s) {\n' % (self.struct_dict[s][m]['array_size'], m_name)
-                    construct_txt += '        %s = new %s[%s];\n' % (m_name, m_type, self.struct_dict[s][m]['array_size'])
-                    destruct_txt += '    if (%s)\n' % (m_name)
-                    destruct_txt += '        delete[] %s;\n' % (m_name)
-                    construct_txt += '        for (uint32_t i=0; i<%s; ++i) {\n' % (self.struct_dict[s][m]['array_size'])
-                    if 'safe_' in m_type:
-                        construct_txt += '            %s[i].initialize(&pInStruct->%s[i]);\n' % (m_name, m_name)
+                    if not self.struct_dict[s][m]['dyn_array']:
+                        # Handle static array case
+                        array_init_str = ''
+                        for i in range(int(self.struct_dict[s][m]['array_size'])):
+                            array_init_str += 'pInStruct->%s[%d], ' % (m_name, i)
+                        array_init_str = array_init_str.strip().rstrip(',')
+                        init_list += '\n\t%s{%s},' % (m_name, array_init_str)
+                        init_func_txt += '    for (uint32_t i=0; i<%s; ++i) {\n' % (self.struct_dict[s][m]['array_size'])
+                        init_func_txt += '        %s[i] = pInStruct->%s[i];\n' % (m_name, m_name)
+                        init_func_txt += '    }\n'
                     else:
-                        construct_txt += '            %s[i] = %s;\n' % (m_name, array_element)
-                    construct_txt += '        }\n'
-                    construct_txt += '    }\n'
+                        # Init array ptr to NULL
+                        init_list += '\n\t%s(NULL),' % (m_name)
+                        init_func_txt += '    %s = NULL;\n' % (m_name)
+                        array_element = 'pInStruct->%s[i]' % (m_name)
+                        if is_type(self.struct_dict[s][m]['type'], 'struct') and self._hasSafeStruct(self.struct_dict[s][m]['type']):
+                            array_element = '%s(&pInStruct->%s[i])' % (self._getSafeStructName(self.struct_dict[s][m]['type']), m_name)
+                        construct_txt += '    if (%s && pInStruct->%s) {\n' % (self.struct_dict[s][m]['array_size'], m_name)
+                        construct_txt += '        %s = new %s[%s];\n' % (m_name, m_type, self.struct_dict[s][m]['array_size'])
+                        destruct_txt += '    if (%s)\n' % (m_name)
+                        destruct_txt += '        delete[] %s;\n' % (m_name)
+                        construct_txt += '        for (uint32_t i=0; i<%s; ++i) {\n' % (self.struct_dict[s][m]['array_size'])
+                        if 'safe_' in m_type:
+                            construct_txt += '            %s[i].initialize(&pInStruct->%s[i]);\n' % (m_name, m_name)
+                        else:
+                            construct_txt += '            %s[i] = %s;\n' % (m_name, array_element)
+                        construct_txt += '        }\n'
+                        construct_txt += '    }\n'
                 elif self.struct_dict[s][m]['ptr']:
                     construct_txt += '    if (pInStruct->%s)\n' % (m_name)
                     construct_txt += '        %s = new %s(pInStruct->%s);\n' % (m_name, m_type, m_name)