summaryrefslogtreecommitdiffstats
path: root/src/video_core/texture_cache/surface_base.cpp
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2019-05-09 00:27:29 +0200
committerReinUsesLisp <reinuseslisp@airmail.cc>2019-06-21 02:36:12 +0200
commitb347543e8341ae323ea232d47df2c144fe21c739 (patch)
treeca0e48c61dea6e78b073a885ec4e5f96755f7cc1 /src/video_core/texture_cache/surface_base.cpp
parenttexture_cache: Correct premature texceptions (diff)
downloadyuzu-b347543e8341ae323ea232d47df2c144fe21c739.tar
yuzu-b347543e8341ae323ea232d47df2c144fe21c739.tar.gz
yuzu-b347543e8341ae323ea232d47df2c144fe21c739.tar.bz2
yuzu-b347543e8341ae323ea232d47df2c144fe21c739.tar.lz
yuzu-b347543e8341ae323ea232d47df2c144fe21c739.tar.xz
yuzu-b347543e8341ae323ea232d47df2c144fe21c739.tar.zst
yuzu-b347543e8341ae323ea232d47df2c144fe21c739.zip
Diffstat (limited to 'src/video_core/texture_cache/surface_base.cpp')
-rw-r--r--src/video_core/texture_cache/surface_base.cpp22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/video_core/texture_cache/surface_base.cpp b/src/video_core/texture_cache/surface_base.cpp
index dc5013240..36ca72b4a 100644
--- a/src/video_core/texture_cache/surface_base.cpp
+++ b/src/video_core/texture_cache/surface_base.cpp
@@ -19,19 +19,27 @@ using Tegra::Texture::ConvertFromGuestToHost;
using VideoCore::MortonSwizzleMode;
SurfaceBaseImpl::SurfaceBaseImpl(GPUVAddr gpu_addr, const SurfaceParams& params)
- : params{params}, gpu_addr{gpu_addr}, layer_size{params.GetGuestLayerSize()},
- guest_memory_size{params.GetGuestSizeInBytes()}, host_memory_size{
- params.GetHostSizeInBytes()} {
- mipmap_offsets.reserve(params.num_levels);
- mipmap_sizes.reserve(params.num_levels);
+ : params{params}, mipmap_sizes(params.num_levels),
+ mipmap_offsets(params.num_levels), gpu_addr{gpu_addr}, host_memory_size{
+ params.GetHostSizeInBytes()} {
std::size_t offset = 0;
for (u32 level = 0; level < params.num_levels; ++level) {
const std::size_t mipmap_size{params.GetGuestMipmapSize(level)};
- mipmap_sizes.push_back(mipmap_size);
- mipmap_offsets.push_back(offset);
+ mipmap_sizes[level] = mipmap_size;
+ mipmap_offsets[level] = offset;
offset += mipmap_size;
}
+ layer_size = offset;
+ if (params.is_layered) {
+ if (params.is_tiled) {
+ layer_size =
+ SurfaceParams::AlignLayered(layer_size, params.block_height, params.block_depth);
+ }
+ guest_memory_size = layer_size * params.depth;
+ } else {
+ guest_memory_size = layer_size;
+ }
}
void SurfaceBaseImpl::SwizzleFunc(MortonSwizzleMode mode, u8* memory, const SurfaceParams& params,