gl_shader_cache: Store a system class and drop global accessors
This commit is contained in:
parent
ad321564ed
commit
e72b9044a0
|
@ -35,8 +35,8 @@ struct UnspecializedShader {
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
/// Gets the address for the specified shader stage program
|
/// Gets the address for the specified shader stage program
|
||||||
GPUVAddr GetShaderAddress(Maxwell::ShaderProgram program) {
|
GPUVAddr GetShaderAddress(Core::System& system, Maxwell::ShaderProgram program) {
|
||||||
const auto& gpu{Core::System::GetInstance().GPU().Maxwell3D()};
|
const auto& gpu{system.GPU().Maxwell3D()};
|
||||||
const auto& shader_config{gpu.regs.shader_config[static_cast<std::size_t>(program)]};
|
const auto& shader_config{gpu.regs.shader_config[static_cast<std::size_t>(program)]};
|
||||||
return gpu.regs.code_address.CodeAddress() + shader_config.offset;
|
return gpu.regs.code_address.CodeAddress() + shader_config.offset;
|
||||||
}
|
}
|
||||||
|
@ -350,7 +350,8 @@ ShaderDiskCacheUsage CachedShader::GetUsage(GLenum primitive_mode,
|
||||||
|
|
||||||
ShaderCacheOpenGL::ShaderCacheOpenGL(RasterizerOpenGL& rasterizer, Core::System& system,
|
ShaderCacheOpenGL::ShaderCacheOpenGL(RasterizerOpenGL& rasterizer, Core::System& system,
|
||||||
Core::Frontend::EmuWindow& emu_window, const Device& device)
|
Core::Frontend::EmuWindow& emu_window, const Device& device)
|
||||||
: RasterizerCache{rasterizer}, emu_window{emu_window}, device{device}, disk_cache{system} {}
|
: RasterizerCache{rasterizer}, system{system}, emu_window{emu_window}, device{device},
|
||||||
|
disk_cache{system} {}
|
||||||
|
|
||||||
void ShaderCacheOpenGL::LoadDiskCache(const std::atomic_bool& stop_loading,
|
void ShaderCacheOpenGL::LoadDiskCache(const std::atomic_bool& stop_loading,
|
||||||
const VideoCore::DiskResourceLoadCallback& callback) {
|
const VideoCore::DiskResourceLoadCallback& callback) {
|
||||||
|
@ -546,12 +547,12 @@ std::unordered_map<u64, UnspecializedShader> ShaderCacheOpenGL::GenerateUnspecia
|
||||||
}
|
}
|
||||||
|
|
||||||
Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) {
|
Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) {
|
||||||
if (!Core::System::GetInstance().GPU().Maxwell3D().dirty_flags.shaders) {
|
if (!system.GPU().Maxwell3D().dirty_flags.shaders) {
|
||||||
return last_shaders[static_cast<std::size_t>(program)];
|
return last_shaders[static_cast<std::size_t>(program)];
|
||||||
}
|
}
|
||||||
|
|
||||||
auto& memory_manager{Core::System::GetInstance().GPU().MemoryManager()};
|
auto& memory_manager{system.GPU().MemoryManager()};
|
||||||
const GPUVAddr program_addr{GetShaderAddress(program)};
|
const GPUVAddr program_addr{GetShaderAddress(system, program)};
|
||||||
|
|
||||||
// Look up shader in the cache based on address
|
// Look up shader in the cache based on address
|
||||||
const auto host_ptr{memory_manager.GetPointer(program_addr)};
|
const auto host_ptr{memory_manager.GetPointer(program_addr)};
|
||||||
|
@ -564,7 +565,7 @@ Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) {
|
||||||
ProgramCode program_code{GetShaderCode(memory_manager, program_addr, host_ptr)};
|
ProgramCode program_code{GetShaderCode(memory_manager, program_addr, host_ptr)};
|
||||||
ProgramCode program_code_b;
|
ProgramCode program_code_b;
|
||||||
if (program == Maxwell::ShaderProgram::VertexA) {
|
if (program == Maxwell::ShaderProgram::VertexA) {
|
||||||
const GPUVAddr program_addr_b{GetShaderAddress(Maxwell::ShaderProgram::VertexB)};
|
const GPUVAddr program_addr_b{GetShaderAddress(system, Maxwell::ShaderProgram::VertexB)};
|
||||||
program_code_b = GetShaderCode(memory_manager, program_addr_b,
|
program_code_b = GetShaderCode(memory_manager, program_addr_b,
|
||||||
memory_manager.GetPointer(program_addr_b));
|
memory_manager.GetPointer(program_addr_b));
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,6 +137,7 @@ private:
|
||||||
CachedProgram GeneratePrecompiledProgram(const ShaderDiskCacheDump& dump,
|
CachedProgram GeneratePrecompiledProgram(const ShaderDiskCacheDump& dump,
|
||||||
const std::set<GLenum>& supported_formats);
|
const std::set<GLenum>& supported_formats);
|
||||||
|
|
||||||
|
Core::System& system;
|
||||||
Core::Frontend::EmuWindow& emu_window;
|
Core::Frontend::EmuWindow& emu_window;
|
||||||
const Device& device;
|
const Device& device;
|
||||||
ShaderDiskCacheOpenGL disk_cache;
|
ShaderDiskCacheOpenGL disk_cache;
|
||||||
|
|
Reference in New Issue