diff options
| author | lizzie <lizzie@eden-emu.dev> | 2026-02-16 21:51:46 +0100 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-02-16 21:51:46 +0100 |
| commit | 86e02acebab93d3f202c359424141cd887d1b70b (patch) | |
| tree | 47c271b8d93e4ada8c917b41111a2952bf36efc9 /src/video_core/texture_cache/texture_cache.h | |
| parent | 50ec0892c64a4d85be6c263cf0a620c3b96dbace (diff) | |
[video_core] remove static texture scratch buffer and just use something allocated on vec (#3560)
Signed-off-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3560
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src/video_core/texture_cache/texture_cache.h')
| -rw-r--r-- | src/video_core/texture_cache/texture_cache.h | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index 603a042ba2..9f31c68cd2 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -45,8 +45,8 @@ TextureCache<P>::TextureCache(Runtime& runtime_, Tegra::MaxwellDeviceMemoryManag sampler_descriptor.cubemap_anisotropy.Assign(1); // These values were chosen based on typical peak swizzle data sizes seen in some titles - static constexpr size_t SWIZZLE_DATA_BUFFER_INITIAL_CAPACITY = 8_MiB; - static constexpr size_t UNSWIZZLE_DATA_BUFFER_INITIAL_CAPACITY = 1_MiB; + constexpr size_t SWIZZLE_DATA_BUFFER_INITIAL_CAPACITY = 8_MiB; + constexpr size_t UNSWIZZLE_DATA_BUFFER_INITIAL_CAPACITY = 1_MiB; swizzle_data_buffer.resize_destructive(SWIZZLE_DATA_BUFFER_INITIAL_CAPACITY); unswizzle_data_buffer.resize_destructive(UNSWIZZLE_DATA_BUFFER_INITIAL_CAPACITY); @@ -1403,13 +1403,9 @@ void TextureCache<P>::QueueAsyncDecode(Image& image, ImageId image_id) { decode->image_id = image_id; async_decodes.push_back(std::move(decode)); - static Common::ScratchBuffer<u8> local_unswizzle_data_buffer; - local_unswizzle_data_buffer.resize_destructive(image.unswizzled_size_bytes); - Tegra::Memory::GpuGuestMemory<u8, Tegra::Memory::GuestMemoryFlags::UnsafeRead> swizzle_data( - *gpu_memory, image.gpu_addr, image.guest_size_bytes, &swizzle_data_buffer); - - auto copies = UnswizzleImage(*gpu_memory, image.gpu_addr, image.info, swizzle_data, - local_unswizzle_data_buffer); + std::vector<u8> local_unswizzle_data_buffer(image.unswizzled_size_bytes, 0); + Tegra::Memory::GpuGuestMemory<u8, Tegra::Memory::GuestMemoryFlags::UnsafeRead> swizzle_data(*gpu_memory, image.gpu_addr, image.guest_size_bytes, &swizzle_data_buffer); + auto copies = UnswizzleImage(*gpu_memory, image.gpu_addr, image.info, swizzle_data, local_unswizzle_data_buffer); const size_t out_size = MapSizeBytes(image); auto func = [out_size, copies, info = image.info, @@ -1678,7 +1674,7 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, DA return; } join_overlaps_found.insert(overlap_id); - static constexpr bool strict_size = true; + constexpr bool strict_size = true; const std::optional<OverlapResult> solution = ResolveOverlap( new_info, gpu_addr, cpu_addr, overlap, strict_size, broken_views, native_bgr); if (solution) { @@ -1689,7 +1685,7 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, DA join_copies_to_do.emplace_back(JoinCopy{false, overlap_id}); return; } - static constexpr auto options = RelaxedOptions::Size | RelaxedOptions::Format; + constexpr auto options = RelaxedOptions::Size | RelaxedOptions::Format; const ImageBase new_image_base(new_info, gpu_addr, cpu_addr); if (IsSubresource(new_info, overlap, gpu_addr, options, broken_views, native_bgr)) { join_left_aliased_ids.push_back(overlap_id); @@ -1858,7 +1854,7 @@ std::optional<typename TextureCache<P>::BlitImages> TextureCache<P>::GetBlitImag const Tegra::Engines::Fermi2D::Surface& dst, const Tegra::Engines::Fermi2D::Surface& src, const Tegra::Engines::Fermi2D::Config& copy) { - static constexpr auto FIND_OPTIONS = RelaxedOptions::Samples; + constexpr auto FIND_OPTIONS = RelaxedOptions::Samples; const GPUVAddr dst_addr = dst.Address(); const GPUVAddr src_addr = src.Address(); ImageInfo dst_info(dst); @@ -2040,7 +2036,7 @@ void TextureCache<P>::TrimInactiveSamplers(size_t budget) { if (channel_state->samplers.empty()) { return; } - static constexpr size_t SAMPLER_GC_SLACK = 1024; + constexpr size_t SAMPLER_GC_SLACK = 1024; auto mark_active = [](auto& set, SamplerId id) { if (!id || id == CORRUPT_ID || id == NULL_SAMPLER_ID) { return; @@ -2149,7 +2145,7 @@ template <class P> template <typename Func> void TextureCache<P>::ForEachImageInRegion(DAddr cpu_addr, size_t size, Func&& func) { using FuncReturn = typename std::invoke_result<Func, ImageId, Image&>::type; - static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>; + constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>; boost::container::small_vector<ImageId, 32> images; boost::container::small_vector<ImageMapId, 32> maps; ForEachCPUPage(cpu_addr, size, [this, &images, &maps, cpu_addr, size, func](u64 page) { @@ -2202,7 +2198,7 @@ template <typename Func> void TextureCache<P>::ForEachImageInRegionGPU(size_t as_id, GPUVAddr gpu_addr, size_t size, Func&& func) { using FuncReturn = typename std::invoke_result<Func, ImageId, Image&>::type; - static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>; + constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>; boost::container::small_vector<ImageId, 8> images; auto storage_id = getStorageID(as_id); if (!storage_id) { @@ -2251,7 +2247,7 @@ template <typename Func> void TextureCache<P>::ForEachSparseImageInRegion(size_t as_id, GPUVAddr gpu_addr, size_t size, Func&& func) { using FuncReturn = typename std::invoke_result<Func, ImageId, Image&>::type; - static constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>; + constexpr bool BOOL_BREAK = std::is_same_v<FuncReturn, bool>; boost::container::small_vector<ImageId, 8> images; auto storage_id = getStorageID(as_id); if (!storage_id) { @@ -2299,7 +2295,7 @@ template <class P> template <typename Func> void TextureCache<P>::ForEachSparseSegment(ImageBase& image, Func&& func) { using FuncReturn = typename std::invoke_result<Func, GPUVAddr, DAddr, size_t>::type; - static constexpr bool RETURNS_BOOL = std::is_same_v<FuncReturn, bool>; + constexpr bool RETURNS_BOOL = std::is_same_v<FuncReturn, bool>; const auto segments = gpu_memory->GetSubmappedRange(image.gpu_addr, image.guest_size_bytes); for (const auto& [gpu_addr, size] : segments) { std::optional<DAddr> cpu_addr = gpu_memory->GpuToCpuAddress(gpu_addr); |
