diff options
| author | 2019-05-30 14:01:40 -0300 | |
|---|---|---|
| committer | 2019-05-30 14:01:40 -0300 | |
| commit | e72b9044a0f5e4adf1c06a0af2b8f0d9f9005b7a (patch) | |
| tree | 0868402593214d948a05323c459142c3597e7912 /src | |
| parent | gl_shader_cache: Add commentaries explaining the intention in shaders creation (diff) | |
| download | yuzu-e72b9044a0f5e4adf1c06a0af2b8f0d9f9005b7a.tar.gz yuzu-e72b9044a0f5e4adf1c06a0af2b8f0d9f9005b7a.tar.xz yuzu-e72b9044a0f5e4adf1c06a0af2b8f0d9f9005b7a.zip | |
gl_shader_cache: Store a system class and drop global accessors
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_cache.cpp | 15 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_cache.h | 1 |
2 files changed, 9 insertions, 7 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index 34527d8e3..ac8a9e6b7 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp | |||
| @@ -35,8 +35,8 @@ struct UnspecializedShader { | |||
| 35 | namespace { | 35 | namespace { |
| 36 | 36 | ||
| 37 | /// Gets the address for the specified shader stage program | 37 | /// Gets the address for the specified shader stage program |
| 38 | GPUVAddr GetShaderAddress(Maxwell::ShaderProgram program) { | 38 | GPUVAddr GetShaderAddress(Core::System& system, Maxwell::ShaderProgram program) { |
| 39 | const auto& gpu{Core::System::GetInstance().GPU().Maxwell3D()}; | 39 | const auto& gpu{system.GPU().Maxwell3D()}; |
| 40 | const auto& shader_config{gpu.regs.shader_config[static_cast<std::size_t>(program)]}; | 40 | const auto& shader_config{gpu.regs.shader_config[static_cast<std::size_t>(program)]}; |
| 41 | return gpu.regs.code_address.CodeAddress() + shader_config.offset; | 41 | return gpu.regs.code_address.CodeAddress() + shader_config.offset; |
| 42 | } | 42 | } |
| @@ -350,7 +350,8 @@ ShaderDiskCacheUsage CachedShader::GetUsage(GLenum primitive_mode, | |||
| 350 | 350 | ||
| 351 | ShaderCacheOpenGL::ShaderCacheOpenGL(RasterizerOpenGL& rasterizer, Core::System& system, | 351 | ShaderCacheOpenGL::ShaderCacheOpenGL(RasterizerOpenGL& rasterizer, Core::System& system, |
| 352 | Core::Frontend::EmuWindow& emu_window, const Device& device) | 352 | Core::Frontend::EmuWindow& emu_window, const Device& device) |
| 353 | : RasterizerCache{rasterizer}, emu_window{emu_window}, device{device}, disk_cache{system} {} | 353 | : RasterizerCache{rasterizer}, system{system}, emu_window{emu_window}, device{device}, |
| 354 | disk_cache{system} {} | ||
| 354 | 355 | ||
| 355 | void ShaderCacheOpenGL::LoadDiskCache(const std::atomic_bool& stop_loading, | 356 | void ShaderCacheOpenGL::LoadDiskCache(const std::atomic_bool& stop_loading, |
| 356 | const VideoCore::DiskResourceLoadCallback& callback) { | 357 | const VideoCore::DiskResourceLoadCallback& callback) { |
| @@ -546,12 +547,12 @@ std::unordered_map<u64, UnspecializedShader> ShaderCacheOpenGL::GenerateUnspecia | |||
| 546 | } | 547 | } |
| 547 | 548 | ||
| 548 | Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) { | 549 | Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) { |
| 549 | if (!Core::System::GetInstance().GPU().Maxwell3D().dirty_flags.shaders) { | 550 | if (!system.GPU().Maxwell3D().dirty_flags.shaders) { |
| 550 | return last_shaders[static_cast<std::size_t>(program)]; | 551 | return last_shaders[static_cast<std::size_t>(program)]; |
| 551 | } | 552 | } |
| 552 | 553 | ||
| 553 | auto& memory_manager{Core::System::GetInstance().GPU().MemoryManager()}; | 554 | auto& memory_manager{system.GPU().MemoryManager()}; |
| 554 | const GPUVAddr program_addr{GetShaderAddress(program)}; | 555 | const GPUVAddr program_addr{GetShaderAddress(system, program)}; |
| 555 | 556 | ||
| 556 | // Look up shader in the cache based on address | 557 | // Look up shader in the cache based on address |
| 557 | const auto host_ptr{memory_manager.GetPointer(program_addr)}; | 558 | const auto host_ptr{memory_manager.GetPointer(program_addr)}; |
| @@ -564,7 +565,7 @@ Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) { | |||
| 564 | ProgramCode program_code{GetShaderCode(memory_manager, program_addr, host_ptr)}; | 565 | ProgramCode program_code{GetShaderCode(memory_manager, program_addr, host_ptr)}; |
| 565 | ProgramCode program_code_b; | 566 | ProgramCode program_code_b; |
| 566 | if (program == Maxwell::ShaderProgram::VertexA) { | 567 | if (program == Maxwell::ShaderProgram::VertexA) { |
| 567 | const GPUVAddr program_addr_b{GetShaderAddress(Maxwell::ShaderProgram::VertexB)}; | 568 | const GPUVAddr program_addr_b{GetShaderAddress(system, Maxwell::ShaderProgram::VertexB)}; |
| 568 | program_code_b = GetShaderCode(memory_manager, program_addr_b, | 569 | program_code_b = GetShaderCode(memory_manager, program_addr_b, |
| 569 | memory_manager.GetPointer(program_addr_b)); | 570 | memory_manager.GetPointer(program_addr_b)); |
| 570 | } | 571 | } |
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.h b/src/video_core/renderer_opengl/gl_shader_cache.h index 64e5a5594..09bd0761d 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.h +++ b/src/video_core/renderer_opengl/gl_shader_cache.h | |||
| @@ -137,6 +137,7 @@ private: | |||
| 137 | CachedProgram GeneratePrecompiledProgram(const ShaderDiskCacheDump& dump, | 137 | CachedProgram GeneratePrecompiledProgram(const ShaderDiskCacheDump& dump, |
| 138 | const std::set<GLenum>& supported_formats); | 138 | const std::set<GLenum>& supported_formats); |
| 139 | 139 | ||
| 140 | Core::System& system; | ||
| 140 | Core::Frontend::EmuWindow& emu_window; | 141 | Core::Frontend::EmuWindow& emu_window; |
| 141 | const Device& device; | 142 | const Device& device; |
| 142 | ShaderDiskCacheOpenGL disk_cache; | 143 | ShaderDiskCacheOpenGL disk_cache; |