void TransTableS::ResetMemory(const TTresetReason reason) { Wipe(); InitTT(); for (int k = 1; k <= 13; k++) { for (int h = 0; h < DDS_HANDS; h++) { rootnp[k][h] = &(posSearch[k][h][0]); posSearch[k][h][0].suitLengths = 0; posSearch[k][h][0].posSearchPoint = NULL; posSearch[k][h][0].left = NULL; posSearch[k][h][0].right = NULL; lenSetInd[k][h] = 1; } } #if defined(DDS_TT_STATS) statsResets.noOfResets++; statsResets.aggrResets[reason]++; #else UNUSED(reason); #endif return; }
bool TWPartition::Wipe_Encryption() { bool Save_Data_Media = Has_Data_Media; if (!UnMount(true)) return false; Current_File_System = Fstab_File_System; Is_Encrypted = false; Is_Decrypted = false; Decrypted_Block_Device = ""; Has_Data_Media = false; if (Wipe()) { Has_Data_Media = Save_Data_Media; if (Has_Data_Media && !Symlink_Mount_Point.empty()) { Recreate_Media_Folder(); } ui_print("You may need to reboot recovery to be able to use /data again.\n"); return true; } else { Has_Data_Media = Save_Data_Media; LOGE("Unable to format to remove encryption.\n"); return false; } return false; }
void Progress(unsigned uStep, unsigned uTotalSteps) { CheckMaxTime(); if (g_bQuiet) return; double dPct = ((uStep + 1)*100.0)/uTotalSteps; double MB = GetMemUseMB(); fprintf(g_fProgress, "%8.8s %12s Iter %3u %6.2f%% %s", ElapsedTimeAsStr(), MemToStr(MB), g_uIter, dPct, g_strDesc); if (g_bWipeDesc) { int n = g_nPrevDescLength - (int) strlen(g_strDesc); Wipe(n); g_bWipeDesc = false; } fprintf(g_fProgress, "\r"); g_uTotalSteps = uTotalSteps; }
CEgIStream::CEgIStream( unsigned short int inBufSize ) : mIsTied( false ), mReadBufSize ( inBufSize ), mBufPos( 0 ), mPos ( 0 ) { Wipe(); }
CEgIStream::CEgIStream( unsigned short int inBufSize ) { mReadBufSize = inBufSize; mIsTied = false; mBufPos = 0; mPos = 0; Wipe(); }
void VulkanRenderManager::StopThread() { if (useThread_ && run_) { run_ = false; // Stop the thread. for (int i = 0; i < vulkan_->GetInflightFrames(); i++) { auto &frameData = frameData_[i]; { std::unique_lock<std::mutex> lock(frameData.push_mutex); frameData.push_condVar.notify_all(); } { std::unique_lock<std::mutex> lock(frameData.pull_mutex); frameData.pull_condVar.notify_all(); } } thread_.join(); ILOG("Vulkan submission thread joined. Frame=%d", vulkan_->GetCurFrame()); // Eat whatever has been queued up for this frame if anything. Wipe(); // Wait for any fences to finish and be resignaled, so we don't have sync issues. // Also clean out any queued data, which might refer to things that might not be valid // when we restart... for (int i = 0; i < vulkan_->GetInflightFrames(); i++) { auto &frameData = frameData_[i]; _assert_(!frameData.readyForRun); _assert_(frameData.steps.empty()); if (frameData.hasInitCommands) { // Clear 'em out. This can happen on restart sometimes. vkEndCommandBuffer(frameData.initCmd); frameData.hasInitCommands = false; } frameData.readyForRun = false; for (size_t i = 0; i < frameData.steps.size(); i++) { delete frameData.steps[i]; } frameData.steps.clear(); std::unique_lock<std::mutex> lock(frameData.push_mutex); while (!frameData.readyForFence) { VLOG("PUSH: Waiting for frame[%d].readyForFence = 1 (stop)", i); frameData.push_condVar.wait(lock); } } } else { ILOG("Vulkan submission thread was already stopped."); } }
void TransTableS::ReturnAllMemory() { if (!TTInUse) return; TTInUse = 0; Wipe(); if (pw[0]) free(pw[0]); pw[0] = NULL; if (pn[0]) free(pn[0]); pn[0] = NULL; for (int k = 1; k <= 13; k++) { for (int h = 0; h < DDS_HANDS; h++) { if (pl[k][h][0]) free(pl[k][h][0]); pl[k][h][0] = NULL; } } if (pw) free(pw); pw = NULL; if (pn) free(pn); pn = NULL; if (aggp) free(aggp); aggp = NULL; return; }
bool hash<HashValueType>::LoadHash(FILE * hf) //description: loads hash table from a binary file //precondition: hf must be open for reeading in binary mode { UNSIGNED_4B_TYPE x, hi, bsz, hsz = sizeof(UNSIGNED_4B_TYPE); Wipe(); fread(&bsz, hsz, 1, hf); //datablock size if (bsz != sizeof(HashValueType)) return false; fread(&FixedExpand, hsz, 1, hf); //FixedExpand fread(&FlexbExpand, sizeof(REALNUM_TYPE), 1, hf); //FlexbExpand; fread(&nHASH, hsz, 1, hf);//# hash entries KEYS.resize(nHASH); INX.resize(nHASH); HASH.resize(nHASH); for (x = ZERO; x < nHASH; x++) { fread(&KEYS[x], bsz, 1, hf); fread(&INX[x], hsz, 1, hf); } for (x = ZERO; x < nHASH; x++) { fread(&bsz, hsz, 1, hf); while (bsz) { fread(&hi, hsz, 1, hf); HASH[x].Insert(hi); bsz--; } } return true; }
void VulkanTexture::Unlock() { vkUnmapMemory(vulkan_->GetDevice(), mappableMemory); VkCommandBuffer cmd = vulkan_->GetInitCommandBuffer(); // if we already have an image, queue it for destruction and forget it. Wipe(); if (!needStaging) { // If we can use the linear tiled image as a texture, just do it image = mappableImage; mem = mappableMemory; TransitionImageLayout(cmd, image, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); // Make sure we don't accidentally delete the main image. mappableImage = VK_NULL_HANDLE; mappableMemory = VK_NULL_HANDLE; } else { VkImageCreateInfo image_create_info = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO }; image_create_info.imageType = VK_IMAGE_TYPE_2D; image_create_info.format = format_; image_create_info.extent.width = tex_width; image_create_info.extent.height = tex_height; image_create_info.extent.depth = 1; image_create_info.mipLevels = 1; image_create_info.arrayLayers = 1; image_create_info.samples = VK_SAMPLE_COUNT_1_BIT; image_create_info.queueFamilyIndexCount = 0; image_create_info.pQueueFamilyIndices = NULL; image_create_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; image_create_info.flags = 0; // The mappable image cannot be our texture, so create an optimally tiled image and blit to it image_create_info.tiling = VK_IMAGE_TILING_OPTIMAL; image_create_info.usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; image_create_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; VkResult res = vkCreateImage(vulkan_->GetDevice(), &image_create_info, NULL, &image); assert(res == VK_SUCCESS); vkGetImageMemoryRequirements(vulkan_->GetDevice(), image, &mem_reqs); VkMemoryAllocateInfo mem_alloc = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; mem_alloc.memoryTypeIndex = 0; mem_alloc.allocationSize = mem_reqs.size; // Find memory type - don't specify any mapping requirements bool pass = vulkan_->MemoryTypeFromProperties(mem_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &mem_alloc.memoryTypeIndex); assert(pass); res = vkAllocateMemory(vulkan_->GetDevice(), &mem_alloc, NULL, &mem); assert(res == VK_SUCCESS); res = vkBindImageMemory(vulkan_->GetDevice(), image, mem, 0); assert(res == VK_SUCCESS); // Since we're going to blit from the mappable image, set its layout to SOURCE_OPTIMAL TransitionImageLayout(cmd, mappableImage, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); TransitionImageLayout(cmd, image, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); VkImageCopy copy_region; copy_region.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; copy_region.srcSubresource.mipLevel = 0; copy_region.srcSubresource.baseArrayLayer = 0; copy_region.srcSubresource.layerCount = 1; copy_region.srcOffset.x = 0; copy_region.srcOffset.y = 0; copy_region.srcOffset.z = 0; copy_region.dstSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; copy_region.dstSubresource.mipLevel = 0; copy_region.dstSubresource.baseArrayLayer = 0; copy_region.dstSubresource.layerCount = 1; copy_region.dstOffset.x = 0; copy_region.dstOffset.y = 0; copy_region.dstOffset.z = 0; copy_region.extent.width = tex_width; copy_region.extent.height = tex_height; copy_region.extent.depth = 1; // Put the copy command into the command buffer vkCmdCopyImage(cmd, mappableImage, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ©_region); assert(res == VK_SUCCESS); // Set the layout for the texture image from DESTINATION_OPTIMAL to SHADER_READ_ONLY TransitionImageLayout(cmd, image, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); // Then drop the temporary mappable image - although should not be necessary... vulkan_->Delete().QueueDeleteImage(mappableImage); vulkan_->Delete().QueueDeleteDeviceMemory(mappableMemory); mappableImage = VK_NULL_HANDLE; mappableMemory = VK_NULL_HANDLE; } VkImageViewCreateInfo view_info = { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO }; view_info.image = image; view_info.viewType = VK_IMAGE_VIEW_TYPE_2D; view_info.format = format_; view_info.components.r = VK_COMPONENT_SWIZZLE_R; view_info.components.g = VK_COMPONENT_SWIZZLE_G; view_info.components.b = VK_COMPONENT_SWIZZLE_B; view_info.components.a = VK_COMPONENT_SWIZZLE_A; view_info.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; view_info.subresourceRange.baseMipLevel = 0; view_info.subresourceRange.levelCount = 1; view_info.subresourceRange.baseArrayLayer = 0; view_info.subresourceRange.layerCount = 1; VkResult res = vkCreateImageView(vulkan_->GetDevice(), &view_info, NULL, &view); assert(res == VK_SUCCESS); }
bool VulkanTexture::CreateDirect(int w, int h, int numMips, VkFormat format, VkImageLayout initialLayout, VkImageUsageFlags usage, const VkComponentMapping *mapping) { Wipe(); VkCommandBuffer cmd = vulkan_->GetInitCommandBuffer(); tex_width = w; tex_height = h; numMips_ = numMips; format_ = format; VkImageAspectFlags aspect = IsDepthStencilFormat(format) ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT; VkImageCreateInfo image_create_info = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO }; image_create_info.imageType = VK_IMAGE_TYPE_2D; image_create_info.format = format_; image_create_info.extent.width = tex_width; image_create_info.extent.height = tex_height; image_create_info.extent.depth = 1; image_create_info.mipLevels = numMips; image_create_info.arrayLayers = 1; image_create_info.samples = VK_SAMPLE_COUNT_1_BIT; image_create_info.flags = 0; image_create_info.tiling = VK_IMAGE_TILING_OPTIMAL; image_create_info.usage = usage; if (initialLayout == VK_IMAGE_LAYOUT_PREINITIALIZED) { image_create_info.initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZED; } else { image_create_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; } VkResult res = vkCreateImage(vulkan_->GetDevice(), &image_create_info, NULL, &image); if (res != VK_SUCCESS) { assert(res == VK_ERROR_OUT_OF_HOST_MEMORY || res == VK_ERROR_OUT_OF_DEVICE_MEMORY || res == VK_ERROR_TOO_MANY_OBJECTS); return false; } // Write a command to transition the image to the requested layout, if it's not already that layout. if (initialLayout != VK_IMAGE_LAYOUT_UNDEFINED && initialLayout != VK_IMAGE_LAYOUT_PREINITIALIZED) { TransitionImageLayout(cmd, image, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_UNDEFINED, initialLayout); } vkGetImageMemoryRequirements(vulkan_->GetDevice(), image, &mem_reqs); if (allocator_) { offset_ = allocator_->Allocate(mem_reqs, &mem); if (offset_ == VulkanDeviceAllocator::ALLOCATE_FAILED) { return false; } } else { VkMemoryAllocateInfo mem_alloc = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; mem_alloc.memoryTypeIndex = 0; mem_alloc.allocationSize = mem_reqs.size; // Find memory type - don't specify any mapping requirements bool pass = vulkan_->MemoryTypeFromProperties(mem_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &mem_alloc.memoryTypeIndex); assert(pass); res = vkAllocateMemory(vulkan_->GetDevice(), &mem_alloc, NULL, &mem); if (res != VK_SUCCESS) { assert(res == VK_ERROR_OUT_OF_HOST_MEMORY || res == VK_ERROR_OUT_OF_DEVICE_MEMORY || res == VK_ERROR_TOO_MANY_OBJECTS); return false; } offset_ = 0; } res = vkBindImageMemory(vulkan_->GetDevice(), image, mem, offset_); if (res != VK_SUCCESS) { assert(res == VK_ERROR_OUT_OF_HOST_MEMORY || res == VK_ERROR_OUT_OF_DEVICE_MEMORY || res == VK_ERROR_TOO_MANY_OBJECTS); return false; } // Create the view while we're at it. VkImageViewCreateInfo view_info = { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO }; view_info.image = image; view_info.viewType = VK_IMAGE_VIEW_TYPE_2D; view_info.format = format_; if (mapping) { view_info.components = *mapping; } else { view_info.components.r = VK_COMPONENT_SWIZZLE_R; view_info.components.g = VK_COMPONENT_SWIZZLE_G; view_info.components.b = VK_COMPONENT_SWIZZLE_B; view_info.components.a = VK_COMPONENT_SWIZZLE_A; } view_info.subresourceRange.aspectMask = aspect; view_info.subresourceRange.baseMipLevel = 0; view_info.subresourceRange.levelCount = numMips; view_info.subresourceRange.baseArrayLayer = 0; view_info.subresourceRange.layerCount = 1; res = vkCreateImageView(vulkan_->GetDevice(), &view_info, NULL, &view); if (res != VK_SUCCESS) { assert(res == VK_ERROR_OUT_OF_HOST_MEMORY || res == VK_ERROR_OUT_OF_DEVICE_MEMORY || res == VK_ERROR_TOO_MANY_OBJECTS); return false; } return true; }
DQueue::~DQueue() { Wipe(); }
void VulkanTexture::CreateDirect(int w, int h, int numMips, VkFormat format, VkImageUsageFlags usage) { Wipe(); VkCommandBuffer cmd = vulkan_->GetInitCommandBuffer(); tex_width = w; tex_height = h; numMips_ = numMips; format_ = format; VkImageCreateInfo image_create_info = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO }; image_create_info.imageType = VK_IMAGE_TYPE_2D; image_create_info.format = format_; image_create_info.extent.width = tex_width; image_create_info.extent.height = tex_height; image_create_info.extent.depth = 1; image_create_info.mipLevels = numMips; image_create_info.arrayLayers = 1; image_create_info.samples = VK_SAMPLE_COUNT_1_BIT; image_create_info.flags = 0; image_create_info.tiling = VK_IMAGE_TILING_OPTIMAL; image_create_info.usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; image_create_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; VkResult res = vkCreateImage(vulkan_->GetDevice(), &image_create_info, NULL, &image); assert(res == VK_SUCCESS); vkGetImageMemoryRequirements(vulkan_->GetDevice(), image, &mem_reqs); VkMemoryAllocateInfo mem_alloc = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; mem_alloc.memoryTypeIndex = 0; mem_alloc.allocationSize = mem_reqs.size; // Find memory type - don't specify any mapping requirements bool pass = vulkan_->MemoryTypeFromProperties(mem_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &mem_alloc.memoryTypeIndex); assert(pass); res = vkAllocateMemory(vulkan_->GetDevice(), &mem_alloc, NULL, &mem); assert(res == VK_SUCCESS); res = vkBindImageMemory(vulkan_->GetDevice(), image, mem, 0); assert(res == VK_SUCCESS); // Since we're going to blit to the target, set its layout to TRANSFER_DST TransitionImageLayout(cmd, image, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); // Create the view while we're at it. VkImageViewCreateInfo view_info = {}; view_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; view_info.pNext = NULL; view_info.image = VK_NULL_HANDLE; view_info.viewType = VK_IMAGE_VIEW_TYPE_2D; view_info.format = format_; view_info.components.r = VK_COMPONENT_SWIZZLE_R; view_info.components.g = VK_COMPONENT_SWIZZLE_G; view_info.components.b = VK_COMPONENT_SWIZZLE_B; view_info.components.a = VK_COMPONENT_SWIZZLE_A; view_info.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; view_info.subresourceRange.baseMipLevel = 0; view_info.subresourceRange.levelCount = numMips; view_info.subresourceRange.baseArrayLayer = 0; view_info.subresourceRange.layerCount = 1; view_info.image = image; res = vkCreateImageView(vulkan_->GetDevice(), &view_info, NULL, &view); assert(res == VK_SUCCESS); }
bool TWPartition::Restore_Tar(string restore_folder) { size_t first_period, second_period; string Restore_File_System, Full_FileName, Command; int index = 0; char split_index[5]; TWFunc::GUI_Operation_Text(TW_RESTORE_TEXT, Display_Name, "Restoring"); LOGI("Restore filename is: %s\n", Backup_FileName.c_str()); // Parse backup filename to extract the file system before wiping first_period = Backup_FileName.find("."); if (first_period == string::npos) { LOGE("Unable to find file system (first period).\n"); return false; } Restore_File_System = Backup_FileName.substr(first_period + 1, Backup_FileName.size() - first_period - 1); second_period = Restore_File_System.find("."); if (second_period == string::npos) { LOGE("Unable to find file system (second period).\n"); return false; } Restore_File_System.resize(second_period); LOGI("Restore file system is: '%s'.\n", Restore_File_System.c_str()); Current_File_System = Restore_File_System; if (Has_Android_Secure) { ui_print("Wiping android secure...\n"); if (!Wipe_AndSec()) return false; } else if (!Wipe()) { ui_print("Wiping %s...\n", Display_Name.c_str()); return false; } if (!Mount(true)) return false; ui_print("Restoring %s...\n", Display_Name.c_str()); Full_FileName = restore_folder + "/" + Backup_FileName; if (!TWFunc::Path_Exists(Full_FileName)) { // Backup is multiple archives LOGI("Backup is multiple archives.\n"); sprintf(split_index, "%03i", index); Full_FileName = restore_folder + "/" + Backup_FileName + split_index; while (TWFunc::Path_Exists(Full_FileName)) { ui_print("Restoring archive %i...\n", index + 1); Command = "tar -xf '" + Full_FileName + "'"; LOGI("Restore command: '%s'\n", Command.c_str()); system(Command.c_str()); index++; sprintf(split_index, "%03i", index); Full_FileName = restore_folder + "/" + Backup_FileName + split_index; } if (index == 0) { LOGE("Error locating restore file: '%s'\n", Full_FileName.c_str()); return false; } } else { Command = "cd " + Backup_Path + " && tar -xf '" + Full_FileName + "'"; LOGI("Restore command: '%s'\n", Command.c_str()); system(Command.c_str()); } return true; }
void CEgIStream::invalidateBuf() { Wipe(); }