diff options
| author | 2018-10-09 19:28:58 -0400 | |
|---|---|---|
| committer | 2018-10-16 11:31:00 -0400 | |
| commit | 0be7e8228952c2e08644e4ebc56aa0274042bdae (patch) | |
| tree | 227db4acf1d8b116c3b792048c7b35bf4a5f5e30 /src | |
| parent | gl_rasterizer_cache: Reintroduce code for handling swizzle and flush to guest... (diff) | |
| download | yuzu-0be7e8228952c2e08644e4ebc56aa0274042bdae.tar.gz yuzu-0be7e8228952c2e08644e4ebc56aa0274042bdae.tar.xz yuzu-0be7e8228952c2e08644e4ebc56aa0274042bdae.zip | |
rasterizer_cache: Reintroduce method for flushing.
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/rasterizer_cache.h | 17 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_buffer_cache.h | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_cache.h | 3 |
3 files changed, 23 insertions, 0 deletions
diff --git a/src/video_core/rasterizer_cache.h b/src/video_core/rasterizer_cache.h index 083b283b0..4a34491a9 100644 --- a/src/video_core/rasterizer_cache.h +++ b/src/video_core/rasterizer_cache.h | |||
| @@ -17,6 +17,22 @@ | |||
| 17 | template <class T> | 17 | template <class T> |
| 18 | class RasterizerCache : NonCopyable { | 18 | class RasterizerCache : NonCopyable { |
| 19 | public: | 19 | public: |
| 20 | /// Write any cached resources overlapping the region back to memory (if dirty) | ||
| 21 | void FlushRegion(Tegra::GPUVAddr addr, size_t size) { | ||
| 22 | if (size == 0) | ||
| 23 | return; | ||
| 24 | |||
| 25 | const ObjectInterval interval{addr, addr + size}; | ||
| 26 | for (auto& pair : boost::make_iterator_range(object_cache.equal_range(interval))) { | ||
| 27 | for (auto& cached_object : pair.second) { | ||
| 28 | if (!cached_object) | ||
| 29 | continue; | ||
| 30 | |||
| 31 | cached_object->Flush(); | ||
| 32 | } | ||
| 33 | } | ||
| 34 | } | ||
| 35 | |||
| 20 | /// Mark the specified region as being invalidated | 36 | /// Mark the specified region as being invalidated |
| 21 | void InvalidateRegion(VAddr addr, u64 size) { | 37 | void InvalidateRegion(VAddr addr, u64 size) { |
| 22 | if (size == 0) | 38 | if (size == 0) |
| @@ -71,6 +87,7 @@ protected: | |||
| 71 | void Unregister(const T& object) { | 87 | void Unregister(const T& object) { |
| 72 | auto& rasterizer = Core::System::GetInstance().Renderer().Rasterizer(); | 88 | auto& rasterizer = Core::System::GetInstance().Renderer().Rasterizer(); |
| 73 | rasterizer.UpdatePagesCachedCount(object->GetAddr(), object->GetSizeInBytes(), -1); | 89 | rasterizer.UpdatePagesCachedCount(object->GetAddr(), object->GetSizeInBytes(), -1); |
| 90 | object->Flush(); | ||
| 74 | object_cache.subtract({GetInterval(object), ObjectSet{object}}); | 91 | object_cache.subtract({GetInterval(object), ObjectSet{object}}); |
| 75 | } | 92 | } |
| 76 | 93 | ||
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h index 965976334..b389ca684 100644 --- a/src/video_core/renderer_opengl/gl_buffer_cache.h +++ b/src/video_core/renderer_opengl/gl_buffer_cache.h | |||
| @@ -24,6 +24,9 @@ struct CachedBufferEntry final { | |||
| 24 | return size; | 24 | return size; |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | // We do not have to flush this cache as things in it are never modified by us. | ||
| 28 | void Flush() {} | ||
| 29 | |||
| 27 | VAddr addr; | 30 | VAddr addr; |
| 28 | std::size_t size; | 31 | std::size_t size; |
| 29 | GLintptr offset; | 32 | GLintptr offset; |
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.h b/src/video_core/renderer_opengl/gl_shader_cache.h index 7bb287f56..d9157ec3c 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.h +++ b/src/video_core/renderer_opengl/gl_shader_cache.h | |||
| @@ -33,6 +33,9 @@ public: | |||
| 33 | return GLShader::MAX_PROGRAM_CODE_LENGTH * sizeof(u64); | 33 | return GLShader::MAX_PROGRAM_CODE_LENGTH * sizeof(u64); |
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | // We do not have to flush this cache as things in it are never modified by us. | ||
| 37 | void Flush() {} | ||
| 38 | |||
| 36 | /// Gets the shader entries for the shader | 39 | /// Gets the shader entries for the shader |
| 37 | const GLShader::ShaderEntries& GetShaderEntries() const { | 40 | const GLShader::ShaderEntries& GetShaderEntries() const { |
| 38 | return entries; | 41 | return entries; |