mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	texture_cache: Use unordered_map::find instead of operator[] on hot code
This commit is contained in:
		
							parent
							
								
									d2b2557542
								
							
						
					
					
						commit
						b8b6f94ba9
					
				@ -310,18 +310,20 @@ public:
 | 
				
			|||||||
        dst_surface.first->MarkAsModified(true, Tick());
 | 
					        dst_surface.first->MarkAsModified(true, Tick());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TSurface TryFindFramebufferSurface(VAddr addr) {
 | 
					    TSurface TryFindFramebufferSurface(VAddr addr) const {
 | 
				
			||||||
        if (!addr) {
 | 
					        if (!addr) {
 | 
				
			||||||
            return nullptr;
 | 
					            return nullptr;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        const VAddr page = addr >> registry_page_bits;
 | 
					        const VAddr page = addr >> registry_page_bits;
 | 
				
			||||||
        std::vector<TSurface>& list = registry[page];
 | 
					        const auto it = registry.find(page);
 | 
				
			||||||
        for (auto& surface : list) {
 | 
					        if (it == registry.end()) {
 | 
				
			||||||
            if (surface->GetCpuAddr() == addr) {
 | 
					            return nullptr;
 | 
				
			||||||
                return surface;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return nullptr;
 | 
					        const auto& list = it->second;
 | 
				
			||||||
 | 
					        const auto found = std::find_if(list.begin(), list.end(), [addr](const auto& surface) {
 | 
				
			||||||
 | 
					            return surface->GetCpuAddr() == addr;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        return found != list.end() ? *found : nullptr;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    u64 Tick() {
 | 
					    u64 Tick() {
 | 
				
			||||||
@ -1130,18 +1132,20 @@ private:
 | 
				
			|||||||
            return {};
 | 
					            return {};
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        const VAddr cpu_addr_end = cpu_addr + size;
 | 
					        const VAddr cpu_addr_end = cpu_addr + size;
 | 
				
			||||||
        VAddr start = cpu_addr >> registry_page_bits;
 | 
					 | 
				
			||||||
        const VAddr end = (cpu_addr_end - 1) >> registry_page_bits;
 | 
					        const VAddr end = (cpu_addr_end - 1) >> registry_page_bits;
 | 
				
			||||||
        VectorSurface surfaces;
 | 
					        VectorSurface surfaces;
 | 
				
			||||||
        while (start <= end) {
 | 
					        for (VAddr start = cpu_addr >> registry_page_bits; start <= end; ++start) {
 | 
				
			||||||
            std::vector<TSurface>& list = registry[start];
 | 
					            const auto it = registry.find(start);
 | 
				
			||||||
            for (auto& surface : list) {
 | 
					            if (it == registry.end()) {
 | 
				
			||||||
                if (!surface->IsPicked() && surface->Overlaps(cpu_addr, cpu_addr_end)) {
 | 
					                continue;
 | 
				
			||||||
                    surface->MarkAsPicked(true);
 | 
					            }
 | 
				
			||||||
                    surfaces.push_back(surface);
 | 
					            for (auto& surface : it->second) {
 | 
				
			||||||
                }
 | 
					                if (surface->IsPicked() || !surface->Overlaps(cpu_addr, cpu_addr_end)) {
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                surface->MarkAsPicked(true);
 | 
				
			||||||
 | 
					                surfaces.push_back(surface);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            start++;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        for (auto& surface : surfaces) {
 | 
					        for (auto& surface : surfaces) {
 | 
				
			||||||
            surface->MarkAsPicked(false);
 | 
					            surface->MarkAsPicked(false);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user