@@ -515,7 +515,20 @@ def print_load(self, name, owner): # called for each parameter
515515 z .do ('%s = reader.read_uint32_t();' % self .name )
516516 z .do ('if (%s == LAVATUBE_VIRTUAL_QUEUE) %s = selected_queue_family_index;' % (self .name , self .name ))
517517 if not is_root : z .do ('%s = %s;' % (varname , self .name ))
518- elif (self .name == 'ppData' and self .funcname in ['vkMapMemory' , 'vkMapMemory2KHR' , 'vkMapMemory2' ]) or self .name == 'pHostPointer' :
518+ elif self .name == 'pHostPointer' :
519+ if self .funcname in ['VkMemoryToImageCopy' , 'VkImageToMemoryCopy' ]:
520+ tmp_uuint64t = z .tmp ('uint64_t' )
521+ z .do ('%s = reader.read_uint64_t();' % tmp_uuint64t )
522+ z .do ('if (%s > 0)' % tmp_uuint64t )
523+ z .brace_begin ()
524+ tmp_uuint8t_ptr = z .tmpmem ('uint8_t' , tmp_uuint64t )
525+ z .do ('reader.read_array(%s, %s);' % (tmp_uuint8t_ptr , tmp_uuint64t ))
526+ z .do ('%s = %s;' % (varname , tmp_uuint8t_ptr ))
527+ z .brace_end ()
528+ z .do ('else %s = nullptr;' % varname )
529+ else :
530+ z .decl ('%s%s%s' % (self .mod , self .type , self .param_ptrstr ), self .name )
531+ elif (self .name == 'ppData' and self .funcname in ['vkMapMemory' , 'vkMapMemory2KHR' , 'vkMapMemory2' ]):
519532 z .decl ('%s%s%s' % (self .mod , self .type , self .param_ptrstr ), self .name )
520533 elif self .name == 'pfnUserCallback' and self .funcname == 'VkDebugUtilsMessengerCreateInfoEXT' :
521534 z .do ('%s = messenger_callback; // hijacking this pointer with our own callback function' % varname )
@@ -834,10 +847,24 @@ def print_save(self, name, owner, postprocess = False): # called for each parame
834847 z .do ('initialDataSize = 0;' )
835848 elif (self .name == 'pInitialData' and self .funcname == 'VkPipelineCacheCreateInfo' ):
836849 z .do ('assert(false); // pInitialData' )
837- elif (self .name == 'ppData' and self .funcname in ['vkMapMemory' , 'vkMapMemory2KHR' , 'vkMapMemory2' ]) or self .name == 'pHostPointer' :
850+ elif self .name == 'pHostPointer' :
851+ if self .funcname in ['VkMemoryToImageCopy' , 'VkImageToMemoryCopy' ]:
852+ z .decl ('uint64_t' , 'host_copy_size' )
853+ z .do ('host_copy_size = host_image_copy_size(writer.host_copy_format, &sptr->imageSubresource, &sptr->imageExtent, sptr->memoryRowLength, sptr->memoryImageHeight);' )
854+ z .do ('writer.write_uint64_t(host_copy_size);' )
855+ z .do ('if (host_copy_size > 0 && sptr->pHostPointer) writer.write_array(reinterpret_cast<const char*>(sptr->pHostPointer), host_copy_size);' )
856+ else :
857+ pass
858+ elif (self .name == 'ppData' and self .funcname in ['vkMapMemory' , 'vkMapMemory2KHR' , 'vkMapMemory2' ]):
838859 pass
839860 elif self .structure :
840- self .print_struct (self .type , varname , owner , size = self .length )
861+ if self .name == 'pRegions' and self .type in ['VkMemoryToImageCopy' , 'VkImageToMemoryCopy' ] and self .funcname in ['VkCopyMemoryToImageInfo' , 'VkCopyImageToMemoryInfo' ]:
862+ z .decl ('VkFormat' , 'prev_host_copy_format' , custom = 'writer.host_copy_format' )
863+ z .do ('writer.host_copy_format = image_data ? image_data->format : VK_FORMAT_UNDEFINED;' )
864+ self .print_struct (self .type , varname , owner , size = self .length )
865+ z .do ('writer.host_copy_format = prev_host_copy_format;' )
866+ else :
867+ self .print_struct (self .type , varname , owner , size = self .length )
841868 elif self .funcname in ['VkDebugMarkerObjectNameInfoEXT' , 'VkDebugMarkerObjectTagInfoEXT' , 'vkDebugReportMessageEXT' ] and self .name == 'object' :
842869 z .do ('auto* object_data = debug_object_trackable(writer.parent->records, %sobjectType, %s);' % (owner , varname ))
843870 z .do ('writer.write_handle(object_data);' )
0 commit comments