summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2019-05-30 14:01:40 -0300
committerGravatar ReinUsesLisp2019-05-30 14:01:40 -0300
commite72b9044a0f5e4adf1c06a0af2b8f0d9f9005b7a (patch)
tree0868402593214d948a05323c459142c3597e7912 /src
parentgl_shader_cache: Add commentaries explaining the intention in shaders creation (diff)
downloadyuzu-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.cpp15
-rw-r--r--src/video_core/renderer_opengl/gl_shader_cache.h1
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 {
35namespace { 35namespace {
36 36
37/// Gets the address for the specified shader stage program 37/// Gets the address for the specified shader stage program
38GPUVAddr GetShaderAddress(Maxwell::ShaderProgram program) { 38GPUVAddr 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
351ShaderCacheOpenGL::ShaderCacheOpenGL(RasterizerOpenGL& rasterizer, Core::System& system, 351ShaderCacheOpenGL::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
355void ShaderCacheOpenGL::LoadDiskCache(const std::atomic_bool& stop_loading, 356void 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
548Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) { 549Shader 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;