diff options
author | bunnei <bunneidev@gmail.com> | 2019-03-16 05:05:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-16 05:05:24 +0100 |
commit | 47b622825ca0ff664044abdf2d64a141452a8d1c (patch) | |
tree | ff18141caee2b1a460e6d5e22283e78c073880b0 /src/video_core/renderer_opengl/gl_global_cache.cpp | |
parent | Merge pull request #2048 from FearlessTobi/port-3924 (diff) | |
parent | gpu: Use host address for caching instead of guest address. (diff) | |
download | yuzu-47b622825ca0ff664044abdf2d64a141452a8d1c.tar yuzu-47b622825ca0ff664044abdf2d64a141452a8d1c.tar.gz yuzu-47b622825ca0ff664044abdf2d64a141452a8d1c.tar.bz2 yuzu-47b622825ca0ff664044abdf2d64a141452a8d1c.tar.lz yuzu-47b622825ca0ff664044abdf2d64a141452a8d1c.tar.xz yuzu-47b622825ca0ff664044abdf2d64a141452a8d1c.tar.zst yuzu-47b622825ca0ff664044abdf2d64a141452a8d1c.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/renderer_opengl/gl_global_cache.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/video_core/renderer_opengl/gl_global_cache.cpp b/src/video_core/renderer_opengl/gl_global_cache.cpp index 7161d1dea..a2c509c24 100644 --- a/src/video_core/renderer_opengl/gl_global_cache.cpp +++ b/src/video_core/renderer_opengl/gl_global_cache.cpp @@ -15,12 +15,13 @@ namespace OpenGL { -CachedGlobalRegion::CachedGlobalRegion(VAddr addr, u32 size) : addr{addr}, size{size} { +CachedGlobalRegion::CachedGlobalRegion(VAddr cpu_addr, u32 size, u8* host_ptr) + : cpu_addr{cpu_addr}, size{size}, RasterizerCacheObject{host_ptr} { buffer.Create(); // Bind and unbind the buffer so it gets allocated by the driver glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer.handle); glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); - LabelGLObject(GL_BUFFER, buffer.handle, addr, "GlobalMemory"); + LabelGLObject(GL_BUFFER, buffer.handle, cpu_addr, "GlobalMemory"); } void CachedGlobalRegion::Reload(u32 size_) { @@ -35,7 +36,7 @@ void CachedGlobalRegion::Reload(u32 size_) { // TODO(Rodrigo): Get rid of Memory::GetPointer with a staging buffer glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer.handle); - glBufferData(GL_SHADER_STORAGE_BUFFER, size, Memory::GetPointer(addr), GL_DYNAMIC_DRAW); + glBufferData(GL_SHADER_STORAGE_BUFFER, size, GetHostPtr(), GL_DYNAMIC_DRAW); } GlobalRegion GlobalRegionCacheOpenGL::TryGetReservedGlobalRegion(VAddr addr, u32 size) const { @@ -46,11 +47,11 @@ GlobalRegion GlobalRegionCacheOpenGL::TryGetReservedGlobalRegion(VAddr addr, u32 return search->second; } -GlobalRegion GlobalRegionCacheOpenGL::GetUncachedGlobalRegion(VAddr addr, u32 size) { +GlobalRegion GlobalRegionCacheOpenGL::GetUncachedGlobalRegion(VAddr addr, u32 size, u8* host_ptr) { GlobalRegion region{TryGetReservedGlobalRegion(addr, size)}; if (!region) { // No reserved surface available, create a new one and reserve it - region = std::make_shared<CachedGlobalRegion>(addr, size); + region = std::make_shared<CachedGlobalRegion>(addr, size, host_ptr); ReserveGlobalRegion(region); } region->Reload(size); @@ -58,7 +59,7 @@ GlobalRegion GlobalRegionCacheOpenGL::GetUncachedGlobalRegion(VAddr addr, u32 si } void GlobalRegionCacheOpenGL::ReserveGlobalRegion(GlobalRegion region) { - reserve.insert_or_assign(region->GetAddr(), std::move(region)); + reserve.insert_or_assign(region->GetCpuAddr(), std::move(region)); } GlobalRegionCacheOpenGL::GlobalRegionCacheOpenGL(RasterizerOpenGL& rasterizer) @@ -80,11 +81,12 @@ GlobalRegion GlobalRegionCacheOpenGL::GetGlobalRegion( ASSERT(actual_addr); // Look up global region in the cache based on address - GlobalRegion region = TryGet(*actual_addr); + const auto& host_ptr{Memory::GetPointer(*actual_addr)}; + GlobalRegion region{TryGet(host_ptr)}; if (!region) { // No global region found - create a new one - region = GetUncachedGlobalRegion(*actual_addr, size); + region = GetUncachedGlobalRegion(*actual_addr, size, host_ptr); Register(region); } |