diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-06-01 09:49:35 +0200 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-06-08 10:01:00 +0200 |
commit | 3c2ae53b4c574deb4f9afe3104c7d022c53c5281 (patch) | |
tree | a66e762e1fadaebdd05b7f13a6dade2ed5129aa6 | |
parent | texture_cache: Implement rendering to 3D textures (diff) | |
download | yuzu-3c2ae53b4c574deb4f9afe3104c7d022c53c5281.tar yuzu-3c2ae53b4c574deb4f9afe3104c7d022c53c5281.tar.gz yuzu-3c2ae53b4c574deb4f9afe3104c7d022c53c5281.tar.bz2 yuzu-3c2ae53b4c574deb4f9afe3104c7d022c53c5281.tar.lz yuzu-3c2ae53b4c574deb4f9afe3104c7d022c53c5281.tar.xz yuzu-3c2ae53b4c574deb4f9afe3104c7d022c53c5281.tar.zst yuzu-3c2ae53b4c574deb4f9afe3104c7d022c53c5281.zip |
-rw-r--r-- | src/video_core/renderer_opengl/gl_texture_cache.cpp | 4 | ||||
-rw-r--r-- | src/video_core/texture_cache/surface_params.cpp | 4 | ||||
-rw-r--r-- | src/video_core/texture_cache/texture_cache.h | 7 |
3 files changed, 10 insertions, 5 deletions
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index 46df15dfc..61505879b 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp @@ -557,8 +557,8 @@ void TextureCacheOpenGL::ImageBlit(View& src_view, View& dst_view, const Tegra::Engines::Fermi2D::Config& copy_config) { const auto& src_params{src_view->GetSurfaceParams()}; const auto& dst_params{dst_view->GetSurfaceParams()}; - UNIMPLEMENTED_IF(src_params.target == SurfaceTarget::Texture3D); - UNIMPLEMENTED_IF(dst_params.target == SurfaceTarget::Texture3D); + UNIMPLEMENTED_IF(src_params.depth != 1); + UNIMPLEMENTED_IF(dst_params.depth != 1); state_tracker.NotifyScissor0(); state_tracker.NotifyFramebuffer(); diff --git a/src/video_core/texture_cache/surface_params.cpp b/src/video_core/texture_cache/surface_params.cpp index 642eeb850..6fe7c85ac 100644 --- a/src/video_core/texture_cache/surface_params.cpp +++ b/src/video_core/texture_cache/surface_params.cpp @@ -246,8 +246,8 @@ SurfaceParams SurfaceParams::CreateForFermiCopySurface( params.width = config.width; params.height = config.height; params.pitch = config.pitch; - // TODO(Rodrigo): Try to guess the surface target from depth and layer parameters - params.target = SurfaceTarget::Texture2D; + // TODO(Rodrigo): Try to guess texture arrays from parameters + params.target = params.block_depth > 0 ? SurfaceTarget::Texture3D : SurfaceTarget::Texture2D; params.depth = 1; params.num_levels = 1; params.emulated_levels = 1; diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index 4ee0d76b9..60b95a854 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -755,6 +755,8 @@ private: } TSurface new_surface = GetUncachedSurface(gpu_addr, params); + LoadSurface(new_surface); + bool modified = false; for (auto& surface : overlaps) { const SurfaceParams& src_params = surface->GetSurfaceParams(); @@ -763,7 +765,10 @@ private: src_params.block_height != params.block_height) { return std::nullopt; } - modified |= surface->IsModified(); + if (!surface->IsModified()) { + continue; + } + modified = true; const u32 offset = static_cast<u32>(surface->GetCpuAddr() - cpu_addr); const u32 slice = std::get<2>(params.GetBlockOffsetXYZ(offset)); |