diff options
| author | 2018-11-08 06:08:00 -0500 | |
|---|---|---|
| committer | 2018-11-08 06:16:38 -0500 | |
| commit | 9046f764bfb0097b827c585514f284124a61effd (patch) | |
| tree | 4c287a55151114f70b2104e4df1e90af1d52073f | |
| parent | gl_resource_manager: Amend clang-format discrepancies (diff) | |
| download | yuzu-9046f764bfb0097b827c585514f284124a61effd.tar.gz yuzu-9046f764bfb0097b827c585514f284124a61effd.tar.xz yuzu-9046f764bfb0097b827c585514f284124a61effd.zip | |
rasterizer_cache: Remove reliance on the System singleton
Rather than have a transparent dependency, we can make it explicit in
the interface. This also gets rid of the need to put the core include in
a header.
Diffstat (limited to '')
9 files changed, 25 insertions, 10 deletions
diff --git a/src/video_core/rasterizer_cache.h b/src/video_core/rasterizer_cache.h index 0a3b3951e..81918feb3 100644 --- a/src/video_core/rasterizer_cache.h +++ b/src/video_core/rasterizer_cache.h | |||
| @@ -10,10 +10,8 @@ | |||
| 10 | #include <boost/range/iterator_range_core.hpp> | 10 | #include <boost/range/iterator_range_core.hpp> |
| 11 | 11 | ||
| 12 | #include "common/common_types.h" | 12 | #include "common/common_types.h" |
| 13 | #include "core/core.h" | ||
| 14 | #include "core/settings.h" | 13 | #include "core/settings.h" |
| 15 | #include "video_core/rasterizer_interface.h" | 14 | #include "video_core/rasterizer_interface.h" |
| 16 | #include "video_core/renderer_base.h" | ||
| 17 | 15 | ||
| 18 | class RasterizerCacheObject { | 16 | class RasterizerCacheObject { |
| 19 | public: | 17 | public: |
| @@ -64,6 +62,8 @@ class RasterizerCache : NonCopyable { | |||
| 64 | friend class RasterizerCacheObject; | 62 | friend class RasterizerCacheObject; |
| 65 | 63 | ||
| 66 | public: | 64 | public: |
| 65 | explicit RasterizerCache(VideoCore::RasterizerInterface& rasterizer) : rasterizer{rasterizer} {} | ||
| 66 | |||
| 67 | /// Write any cached resources overlapping the specified region back to memory | 67 | /// Write any cached resources overlapping the specified region back to memory |
| 68 | void FlushRegion(Tegra::GPUVAddr addr, size_t size) { | 68 | void FlushRegion(Tegra::GPUVAddr addr, size_t size) { |
| 69 | const auto& objects{GetSortedObjectsFromRegion(addr, size)}; | 69 | const auto& objects{GetSortedObjectsFromRegion(addr, size)}; |
| @@ -109,14 +109,12 @@ protected: | |||
| 109 | void Register(const T& object) { | 109 | void Register(const T& object) { |
| 110 | object->SetIsRegistered(true); | 110 | object->SetIsRegistered(true); |
| 111 | object_cache.add({GetInterval(object), ObjectSet{object}}); | 111 | object_cache.add({GetInterval(object), ObjectSet{object}}); |
| 112 | auto& rasterizer = Core::System::GetInstance().Renderer().Rasterizer(); | ||
| 113 | rasterizer.UpdatePagesCachedCount(object->GetAddr(), object->GetSizeInBytes(), 1); | 112 | rasterizer.UpdatePagesCachedCount(object->GetAddr(), object->GetSizeInBytes(), 1); |
| 114 | } | 113 | } |
| 115 | 114 | ||
| 116 | /// Unregisters an object from the cache | 115 | /// Unregisters an object from the cache |
| 117 | void Unregister(const T& object) { | 116 | void Unregister(const T& object) { |
| 118 | object->SetIsRegistered(false); | 117 | object->SetIsRegistered(false); |
| 119 | auto& rasterizer = Core::System::GetInstance().Renderer().Rasterizer(); | ||
| 120 | rasterizer.UpdatePagesCachedCount(object->GetAddr(), object->GetSizeInBytes(), -1); | 118 | rasterizer.UpdatePagesCachedCount(object->GetAddr(), object->GetSizeInBytes(), -1); |
| 121 | 119 | ||
| 122 | // Only flush if use_accurate_gpu_emulation is enabled, as it incurs a performance hit | 120 | // Only flush if use_accurate_gpu_emulation is enabled, as it incurs a performance hit |
| @@ -177,4 +175,5 @@ private: | |||
| 177 | 175 | ||
| 178 | ObjectCache object_cache; ///< Cache of objects | 176 | ObjectCache object_cache; ///< Cache of objects |
| 179 | u64 modified_ticks{}; ///< Counter of cache state ticks, used for in-order flushing | 177 | u64 modified_ticks{}; ///< Counter of cache state ticks, used for in-order flushing |
| 178 | VideoCore::RasterizerInterface& rasterizer; | ||
| 180 | }; | 179 | }; |
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp index 41a54b3e7..075192c3f 100644 --- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp | |||
| @@ -9,10 +9,12 @@ | |||
| 9 | #include "core/core.h" | 9 | #include "core/core.h" |
| 10 | #include "core/memory.h" | 10 | #include "core/memory.h" |
| 11 | #include "video_core/renderer_opengl/gl_buffer_cache.h" | 11 | #include "video_core/renderer_opengl/gl_buffer_cache.h" |
| 12 | #include "video_core/renderer_opengl/gl_rasterizer.h" | ||
| 12 | 13 | ||
| 13 | namespace OpenGL { | 14 | namespace OpenGL { |
| 14 | 15 | ||
| 15 | OGLBufferCache::OGLBufferCache(std::size_t size) : stream_buffer(GL_ARRAY_BUFFER, size) {} | 16 | OGLBufferCache::OGLBufferCache(RasterizerOpenGL& rasterizer, std::size_t size) |
| 17 | : RasterizerCache{rasterizer}, stream_buffer(GL_ARRAY_BUFFER, size) {} | ||
| 16 | 18 | ||
| 17 | GLintptr OGLBufferCache::UploadMemory(Tegra::GPUVAddr gpu_addr, std::size_t size, | 19 | GLintptr OGLBufferCache::UploadMemory(Tegra::GPUVAddr gpu_addr, std::size_t size, |
| 18 | std::size_t alignment, bool cache) { | 20 | std::size_t alignment, bool cache) { |
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h index be29dc8be..91fca3f6c 100644 --- a/src/video_core/renderer_opengl/gl_buffer_cache.h +++ b/src/video_core/renderer_opengl/gl_buffer_cache.h | |||
| @@ -15,6 +15,8 @@ | |||
| 15 | 15 | ||
| 16 | namespace OpenGL { | 16 | namespace OpenGL { |
| 17 | 17 | ||
| 18 | class RasterizerOpenGL; | ||
| 19 | |||
| 18 | struct CachedBufferEntry final : public RasterizerCacheObject { | 20 | struct CachedBufferEntry final : public RasterizerCacheObject { |
| 19 | VAddr GetAddr() const override { | 21 | VAddr GetAddr() const override { |
| 20 | return addr; | 22 | return addr; |
| @@ -35,7 +37,7 @@ struct CachedBufferEntry final : public RasterizerCacheObject { | |||
| 35 | 37 | ||
| 36 | class OGLBufferCache final : public RasterizerCache<std::shared_ptr<CachedBufferEntry>> { | 38 | class OGLBufferCache final : public RasterizerCache<std::shared_ptr<CachedBufferEntry>> { |
| 37 | public: | 39 | public: |
| 38 | explicit OGLBufferCache(std::size_t size); | 40 | explicit OGLBufferCache(RasterizerOpenGL& rasterizer, std::size_t size); |
| 39 | 41 | ||
| 40 | /// Uploads data from a guest GPU address. Returns host's buffer offset where it's been | 42 | /// Uploads data from a guest GPU address. Returns host's buffer offset where it's been |
| 41 | /// allocated. | 43 | /// allocated. |
diff --git a/src/video_core/renderer_opengl/gl_primitive_assembler.cpp b/src/video_core/renderer_opengl/gl_primitive_assembler.cpp index 741f14bc3..d9ed08437 100644 --- a/src/video_core/renderer_opengl/gl_primitive_assembler.cpp +++ b/src/video_core/renderer_opengl/gl_primitive_assembler.cpp | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | #include <array> | 6 | #include <array> |
| 7 | #include "common/assert.h" | 7 | #include "common/assert.h" |
| 8 | #include "common/common_types.h" | 8 | #include "common/common_types.h" |
| 9 | #include "core/core.h" | ||
| 9 | #include "core/memory.h" | 10 | #include "core/memory.h" |
| 10 | #include "video_core/renderer_opengl/gl_buffer_cache.h" | 11 | #include "video_core/renderer_opengl/gl_buffer_cache.h" |
| 11 | #include "video_core/renderer_opengl/gl_primitive_assembler.h" | 12 | #include "video_core/renderer_opengl/gl_primitive_assembler.h" |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index bb263b6aa..f266015b7 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -79,7 +79,8 @@ struct DrawParameters { | |||
| 79 | }; | 79 | }; |
| 80 | 80 | ||
| 81 | RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& window, ScreenInfo& info) | 81 | RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& window, ScreenInfo& info) |
| 82 | : emu_window{window}, screen_info{info}, buffer_cache(STREAM_BUFFER_SIZE) { | 82 | : res_cache{*this}, shader_cache{*this}, emu_window{window}, screen_info{info}, |
| 83 | buffer_cache(*this, STREAM_BUFFER_SIZE) { | ||
| 83 | // Create sampler objects | 84 | // Create sampler objects |
| 84 | for (std::size_t i = 0; i < texture_samplers.size(); ++i) { | 85 | for (std::size_t i = 0; i < texture_samplers.size(); ++i) { |
| 85 | texture_samplers[i].Create(); | 86 | texture_samplers[i].Create(); |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 49d63e6f3..c8864cce8 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include "core/memory.h" | 15 | #include "core/memory.h" |
| 16 | #include "core/settings.h" | 16 | #include "core/settings.h" |
| 17 | #include "video_core/engines/maxwell_3d.h" | 17 | #include "video_core/engines/maxwell_3d.h" |
| 18 | #include "video_core/renderer_opengl/gl_rasterizer.h" | ||
| 18 | #include "video_core/renderer_opengl/gl_rasterizer_cache.h" | 19 | #include "video_core/renderer_opengl/gl_rasterizer_cache.h" |
| 19 | #include "video_core/renderer_opengl/gl_state.h" | 20 | #include "video_core/renderer_opengl/gl_state.h" |
| 20 | #include "video_core/renderer_opengl/utils.h" | 21 | #include "video_core/renderer_opengl/utils.h" |
| @@ -1172,7 +1173,8 @@ void CachedSurface::UploadGLTexture(GLuint read_fb_handle, GLuint draw_fb_handle | |||
| 1172 | UploadGLMipmapTexture(i, read_fb_handle, draw_fb_handle); | 1173 | UploadGLMipmapTexture(i, read_fb_handle, draw_fb_handle); |
| 1173 | } | 1174 | } |
| 1174 | 1175 | ||
| 1175 | RasterizerCacheOpenGL::RasterizerCacheOpenGL() { | 1176 | RasterizerCacheOpenGL::RasterizerCacheOpenGL(RasterizerOpenGL& rasterizer) |
| 1177 | : RasterizerCache{rasterizer} { | ||
| 1176 | read_framebuffer.Create(); | 1178 | read_framebuffer.Create(); |
| 1177 | draw_framebuffer.Create(); | 1179 | draw_framebuffer.Create(); |
| 1178 | copy_pbo.Create(); | 1180 | copy_pbo.Create(); |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.h b/src/video_core/renderer_opengl/gl_rasterizer_cache.h index c0b6bc4e6..494f6b903 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.h +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.h | |||
| @@ -264,6 +264,8 @@ struct hash<SurfaceReserveKey> { | |||
| 264 | 264 | ||
| 265 | namespace OpenGL { | 265 | namespace OpenGL { |
| 266 | 266 | ||
| 267 | class RasterizerOpenGL; | ||
| 268 | |||
| 267 | class CachedSurface final : public RasterizerCacheObject { | 269 | class CachedSurface final : public RasterizerCacheObject { |
| 268 | public: | 270 | public: |
| 269 | CachedSurface(const SurfaceParams& params); | 271 | CachedSurface(const SurfaceParams& params); |
| @@ -311,7 +313,7 @@ private: | |||
| 311 | 313 | ||
| 312 | class RasterizerCacheOpenGL final : public RasterizerCache<Surface> { | 314 | class RasterizerCacheOpenGL final : public RasterizerCache<Surface> { |
| 313 | public: | 315 | public: |
| 314 | RasterizerCacheOpenGL(); | 316 | explicit RasterizerCacheOpenGL(RasterizerOpenGL& rasterizer); |
| 315 | 317 | ||
| 316 | /// Get a surface based on the texture configuration | 318 | /// Get a surface based on the texture configuration |
| 317 | Surface GetTextureSurface(const Tegra::Texture::FullTextureInfo& config, | 319 | Surface GetTextureSurface(const Tegra::Texture::FullTextureInfo& config, |
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index 9522fd344..d7fb50a85 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp | |||
| @@ -6,10 +6,10 @@ | |||
| 6 | #include "core/core.h" | 6 | #include "core/core.h" |
| 7 | #include "core/memory.h" | 7 | #include "core/memory.h" |
| 8 | #include "video_core/engines/maxwell_3d.h" | 8 | #include "video_core/engines/maxwell_3d.h" |
| 9 | #include "video_core/renderer_opengl/gl_rasterizer.h" | ||
| 9 | #include "video_core/renderer_opengl/gl_shader_cache.h" | 10 | #include "video_core/renderer_opengl/gl_shader_cache.h" |
| 10 | #include "video_core/renderer_opengl/gl_shader_manager.h" | 11 | #include "video_core/renderer_opengl/gl_shader_manager.h" |
| 11 | #include "video_core/renderer_opengl/utils.h" | 12 | #include "video_core/renderer_opengl/utils.h" |
| 12 | #include "video_core/utils.h" | ||
| 13 | 13 | ||
| 14 | namespace OpenGL { | 14 | namespace OpenGL { |
| 15 | 15 | ||
| @@ -135,6 +135,8 @@ GLuint CachedShader::LazyGeometryProgram(OGLProgram& target_program, | |||
| 135 | return target_program.handle; | 135 | return target_program.handle; |
| 136 | }; | 136 | }; |
| 137 | 137 | ||
| 138 | ShaderCacheOpenGL::ShaderCacheOpenGL(RasterizerOpenGL& rasterizer) : RasterizerCache{rasterizer} {} | ||
| 139 | |||
| 138 | Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) { | 140 | Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) { |
| 139 | const VAddr program_addr{GetShaderAddress(program)}; | 141 | const VAddr program_addr{GetShaderAddress(program)}; |
| 140 | 142 | ||
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.h b/src/video_core/renderer_opengl/gl_shader_cache.h index a210f1731..016ab18f9 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.h +++ b/src/video_core/renderer_opengl/gl_shader_cache.h | |||
| @@ -16,6 +16,8 @@ | |||
| 16 | namespace OpenGL { | 16 | namespace OpenGL { |
| 17 | 17 | ||
| 18 | class CachedShader; | 18 | class CachedShader; |
| 19 | class RasterizerOpenGL; | ||
| 20 | |||
| 19 | using Shader = std::shared_ptr<CachedShader>; | 21 | using Shader = std::shared_ptr<CachedShader>; |
| 20 | using Maxwell = Tegra::Engines::Maxwell3D::Regs; | 22 | using Maxwell = Tegra::Engines::Maxwell3D::Regs; |
| 21 | 23 | ||
| @@ -104,6 +106,8 @@ private: | |||
| 104 | 106 | ||
| 105 | class ShaderCacheOpenGL final : public RasterizerCache<Shader> { | 107 | class ShaderCacheOpenGL final : public RasterizerCache<Shader> { |
| 106 | public: | 108 | public: |
| 109 | explicit ShaderCacheOpenGL(RasterizerOpenGL& rasterizer); | ||
| 110 | |||
| 107 | /// Gets the current specified shader stage program | 111 | /// Gets the current specified shader stage program |
| 108 | Shader GetStageProgram(Maxwell::ShaderProgram program); | 112 | Shader GetStageProgram(Maxwell::ShaderProgram program); |
| 109 | }; | 113 | }; |