diff options
| author | Stenzek <stenzek@gmail.com> | 2019-03-31 14:11:53 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2019-04-21 12:41:15 +1000 |
| commit | 708bd3d9f7f375fba750561758abab77c99fa0af (patch) | |
| tree | edf44955def2713b8242166020662f5bb4bc6883 /Source/Core/VideoCommon/TextureCacheBase.h | |
| parent | dbaba0062a057836b31455d7abe3fea6a20b99d8 (diff) | |
TextureCache: Simplify XFB reconstruction
This also better handles in-memory interlaced XFB data placed by the CPU
by considering the stride from the VI.
Diffstat (limited to 'Source/Core/VideoCommon/TextureCacheBase.h')
| -rw-r--r-- | Source/Core/VideoCommon/TextureCacheBase.h | 55 |
1 files changed, 6 insertions, 49 deletions
diff --git a/Source/Core/VideoCommon/TextureCacheBase.h b/Source/Core/VideoCommon/TextureCacheBase.h index bd3ceab046..980b864aa1 100644 --- a/Source/Core/VideoCommon/TextureCacheBase.h +++ b/Source/Core/VideoCommon/TextureCacheBase.h @@ -77,42 +77,6 @@ struct EFBCopyFilterCoefficients float lower; }; -struct TextureLookupInformation -{ - u32 address; - - u32 block_width; - u32 block_height; - u32 bytes_per_block; - - u32 expanded_width; - u32 expanded_height; - u32 native_width; - u32 native_height; - u32 total_bytes; - u32 native_levels = 1; - u32 computed_levels; - - u64 base_hash; - u64 full_hash; - - TextureAndTLUTFormat full_format; - u32 tlut_address = 0; - - bool is_palette_texture = false; - u32 palette_size = 0; - - bool use_mipmaps = false; - - bool from_tmem = false; - u32 tmem_address_even = 0; - u32 tmem_address_odd = 0; - - int texture_cache_safety_color_sample_size = 0; // Default to safe hashing - - u8* src_data; -}; - class TextureCacheBase { private: @@ -138,6 +102,7 @@ public: // content, aren't just downscaled bool should_force_safe_hashing = false; // for XFB bool is_xfb_copy = false; + bool is_xfb_container = false; u64 id; bool reference_changed = false; // used by xfb to determine when a reference xfb changed @@ -243,20 +208,9 @@ public: TLUTFormat tlutfmt = TLUTFormat::IA8, bool use_mipmaps = false, u32 tex_levels = 1, bool from_tmem = false, u32 tmem_address_even = 0, u32 tmem_address_odd = 0); + TCacheEntry* GetXFBTexture(u32 address, u32 width, u32 height, u32 stride, + MathUtil::Rectangle<int>* display_rect); - TCacheEntry* GetXFBTexture(u32 address, u32 width, u32 height, TextureFormat texformat, - int textureCacheSafetyColorSampleSize); - std::optional<TextureLookupInformation> - ComputeTextureInformation(u32 address, u32 width, u32 height, TextureFormat texformat, - int textureCacheSafetyColorSampleSize, bool from_tmem, - u32 tmem_address_even, u32 tmem_address_odd, u32 tlutaddr, - TLUTFormat tlutfmt, u32 levels); - TCacheEntry* GetXFBFromCache(const TextureLookupInformation& tex_info); - TCacheEntry* GetTextureFromOverlappingTextures(const TextureLookupInformation& tex_info); - TCacheEntry* GetTextureFromMemory(const TextureLookupInformation& tex_info); - TCacheEntry* CreateNormalTexture(const TextureLookupInformation& tex_info, u32 layers); - void LoadTextureLevelZeroFromMemory(TCacheEntry* entry_to_update, - const TextureLookupInformation& tex_info, bool decode_on_gpu); virtual void BindTextures(); void CopyRenderTargetToTexture(u32 dstAddr, EFBCopyFormat dstFormat, u32 width, u32 height, u32 dstStride, bool is_depth_copy, const EFBRectangle& srcRect, @@ -322,10 +276,13 @@ private: void SetBackupConfig(const VideoConfig& config); + TCacheEntry* GetXFBFromCache(u32 address, u32 width, u32 height, u32 stride, u64 hash); + TCacheEntry* ApplyPaletteToEntry(TCacheEntry* entry, u8* palette, TLUTFormat tlutfmt); TCacheEntry* DoPartialTextureUpdates(TCacheEntry* entry_to_update, u8* palette, TLUTFormat tlutfmt); + void StitchXFBCopy(TCacheEntry* entry_to_update); void DumpTexture(TCacheEntry* entry, std::string basename, unsigned int level, bool is_arbitrary); void CheckTempSize(size_t required_size); |
