diff options
| author | 2019-01-13 22:05:53 -0300 | |
|---|---|---|
| committer | 2019-02-06 22:20:57 -0300 | |
| commit | 0ed5d728ca12e407685b62802dec69b455f1a528 (patch) | |
| tree | d421d986e0a250cea73bd2675ec234af29a96997 /src | |
| parent | file_util: Add shader directory (diff) | |
| download | yuzu-0ed5d728ca12e407685b62802dec69b455f1a528.tar.gz yuzu-0ed5d728ca12e407685b62802dec69b455f1a528.tar.xz yuzu-0ed5d728ca12e407685b62802dec69b455f1a528.zip | |
rasterizer_interface: Add disk cache entry for the rasterizer
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/core.cpp | 3 | ||||
| -rw-r--r-- | src/video_core/rasterizer_interface.h | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 5 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.h | 1 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_cache.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_cache.h | 3 |
6 files changed, 17 insertions, 0 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp index 572814e4b..c8d7c442a 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp | |||
| @@ -175,6 +175,9 @@ struct System::Impl { | |||
| 175 | return static_cast<ResultStatus>(static_cast<u32>(ResultStatus::ErrorLoader) + | 175 | return static_cast<ResultStatus>(static_cast<u32>(ResultStatus::ErrorLoader) + |
| 176 | static_cast<u32>(load_result)); | 176 | static_cast<u32>(load_result)); |
| 177 | } | 177 | } |
| 178 | |||
| 179 | renderer->Rasterizer().LoadDiskResources(); | ||
| 180 | |||
| 178 | status = ResultStatus::Success; | 181 | status = ResultStatus::Success; |
| 179 | return status; | 182 | return status; |
| 180 | } | 183 | } |
diff --git a/src/video_core/rasterizer_interface.h b/src/video_core/rasterizer_interface.h index 4c08bb148..bb4bc0e36 100644 --- a/src/video_core/rasterizer_interface.h +++ b/src/video_core/rasterizer_interface.h | |||
| @@ -61,5 +61,8 @@ public: | |||
| 61 | 61 | ||
| 62 | /// Increase/decrease the number of object in pages touching the specified region | 62 | /// Increase/decrease the number of object in pages touching the specified region |
| 63 | virtual void UpdatePagesCachedCount(Tegra::GPUVAddr addr, u64 size, int delta) {} | 63 | virtual void UpdatePagesCachedCount(Tegra::GPUVAddr addr, u64 size, int delta) {} |
| 64 | |||
| 65 | /// Initialize disk cached resources for the game being emulated | ||
| 66 | virtual void LoadDiskResources() {} | ||
| 64 | }; | 67 | }; |
| 65 | } // namespace VideoCore | 68 | } // namespace VideoCore |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index c806b7da7..18aafe767 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include "core/settings.h" | 22 | #include "core/settings.h" |
| 23 | #include "video_core/engines/maxwell_3d.h" | 23 | #include "video_core/engines/maxwell_3d.h" |
| 24 | #include "video_core/renderer_opengl/gl_rasterizer.h" | 24 | #include "video_core/renderer_opengl/gl_rasterizer.h" |
| 25 | #include "video_core/renderer_opengl/gl_shader_cache.h" | ||
| 25 | #include "video_core/renderer_opengl/gl_shader_gen.h" | 26 | #include "video_core/renderer_opengl/gl_shader_gen.h" |
| 26 | #include "video_core/renderer_opengl/maxwell_to_gl.h" | 27 | #include "video_core/renderer_opengl/maxwell_to_gl.h" |
| 27 | #include "video_core/renderer_opengl/renderer_opengl.h" | 28 | #include "video_core/renderer_opengl/renderer_opengl.h" |
| @@ -477,6 +478,10 @@ void RasterizerOpenGL::UpdatePagesCachedCount(VAddr addr, u64 size, int delta) { | |||
| 477 | cached_pages.add({pages_interval, delta}); | 478 | cached_pages.add({pages_interval, delta}); |
| 478 | } | 479 | } |
| 479 | 480 | ||
| 481 | void RasterizerOpenGL::LoadDiskResources() { | ||
| 482 | shader_cache.LoadDiskCache(); | ||
| 483 | } | ||
| 484 | |||
| 480 | std::pair<bool, bool> RasterizerOpenGL::ConfigureFramebuffers( | 485 | std::pair<bool, bool> RasterizerOpenGL::ConfigureFramebuffers( |
| 481 | OpenGLState& current_state, bool using_color_fb, bool using_depth_fb, bool preserve_contents, | 486 | OpenGLState& current_state, bool using_color_fb, bool using_depth_fb, bool preserve_contents, |
| 482 | std::optional<std::size_t> single_color_target) { | 487 | std::optional<std::size_t> single_color_target) { |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 7f2bf0f8b..ed7091f18 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h | |||
| @@ -60,6 +60,7 @@ public: | |||
| 60 | u32 pixel_stride) override; | 60 | u32 pixel_stride) override; |
| 61 | bool AccelerateDrawBatch(bool is_indexed) override; | 61 | bool AccelerateDrawBatch(bool is_indexed) override; |
| 62 | void UpdatePagesCachedCount(Tegra::GPUVAddr addr, u64 size, int delta) override; | 62 | void UpdatePagesCachedCount(Tegra::GPUVAddr addr, u64 size, int delta) override; |
| 63 | void LoadDiskResources() override; | ||
| 63 | 64 | ||
| 64 | /// Maximum supported size that a constbuffer can have in bytes. | 65 | /// Maximum supported size that a constbuffer can have in bytes. |
| 65 | static constexpr std::size_t MaxConstbufferSize = 0x10000; | 66 | static constexpr std::size_t MaxConstbufferSize = 0x10000; |
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index 6174f7074..363b941f3 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp | |||
| @@ -225,6 +225,8 @@ void CachedShader::CalculateProperties() { | |||
| 225 | 225 | ||
| 226 | ShaderCacheOpenGL::ShaderCacheOpenGL(RasterizerOpenGL& rasterizer) : RasterizerCache{rasterizer} {} | 226 | ShaderCacheOpenGL::ShaderCacheOpenGL(RasterizerOpenGL& rasterizer) : RasterizerCache{rasterizer} {} |
| 227 | 227 | ||
| 228 | void ShaderCacheOpenGL::LoadDiskCache() {} | ||
| 229 | |||
| 228 | Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) { | 230 | Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) { |
| 229 | if (!Core::System::GetInstance().GPU().Maxwell3D().dirty_flags.shaders) { | 231 | if (!Core::System::GetInstance().GPU().Maxwell3D().dirty_flags.shaders) { |
| 230 | return last_shaders[static_cast<u32>(program)]; | 232 | return last_shaders[static_cast<u32>(program)]; |
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.h b/src/video_core/renderer_opengl/gl_shader_cache.h index 904d15dd0..5e72912f5 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.h +++ b/src/video_core/renderer_opengl/gl_shader_cache.h | |||
| @@ -103,6 +103,9 @@ class ShaderCacheOpenGL final : public RasterizerCache<Shader> { | |||
| 103 | public: | 103 | public: |
| 104 | explicit ShaderCacheOpenGL(RasterizerOpenGL& rasterizer); | 104 | explicit ShaderCacheOpenGL(RasterizerOpenGL& rasterizer); |
| 105 | 105 | ||
| 106 | /// Loads disk cache for the current game | ||
| 107 | void LoadDiskCache(); | ||
| 108 | |||
| 106 | /// Gets the current specified shader stage program | 109 | /// Gets the current specified shader stage program |
| 107 | Shader GetStageProgram(Maxwell::ShaderProgram program); | 110 | Shader GetStageProgram(Maxwell::ShaderProgram program); |
| 108 | 111 | ||