summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_opengl
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2023-12-25 07:32:16 +0100
committerGravatar Liam2024-01-18 21:12:30 -0500
commit0a2536a0df1f4aea406f2132d3edda0430acc9d1 (patch)
treec0ad53890581c9c7e180c5ccb3b66e3c63e3ba64 /src/video_core/renderer_opengl
parentSMMU: Implement backing CPU page protect/unprotect (diff)
downloadyuzu-0a2536a0df1f4aea406f2132d3edda0430acc9d1.tar.gz
yuzu-0a2536a0df1f4aea406f2132d3edda0430acc9d1.tar.xz
yuzu-0a2536a0df1f4aea406f2132d3edda0430acc9d1.zip
SMMU: Initial adaptation to video_core.
Diffstat (limited to 'src/video_core/renderer_opengl')
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.cpp7
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.h7
-rw-r--r--src/video_core/renderer_opengl/gl_query_cache.cpp4
-rw-r--r--src/video_core/renderer_opengl/gl_query_cache.h3
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp38
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.h24
-rw-r--r--src/video_core/renderer_opengl/gl_shader_cache.cpp11
-rw-r--r--src/video_core/renderer_opengl/gl_shader_cache.h11
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp9
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.h4
10 files changed, 61 insertions, 57 deletions
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
index 517ac14dd..ade72e1f9 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
@@ -47,11 +47,10 @@ constexpr std::array PROGRAM_LUT{
47} // Anonymous namespace 47} // Anonymous namespace
48 48
49Buffer::Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams null_params) 49Buffer::Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams null_params)
50 : VideoCommon::BufferBase<VideoCore::RasterizerInterface>(null_params) {} 50 : VideoCommon::BufferBase(null_params) {}
51 51
52Buffer::Buffer(BufferCacheRuntime& runtime, VideoCore::RasterizerInterface& rasterizer_, 52Buffer::Buffer(BufferCacheRuntime& runtime, DAddr cpu_addr_, u64 size_bytes_)
53 VAddr cpu_addr_, u64 size_bytes_) 53 : VideoCommon::BufferBase(cpu_addr_, size_bytes_) {
54 : VideoCommon::BufferBase<VideoCore::RasterizerInterface>(rasterizer_, cpu_addr_, size_bytes_) {
55 buffer.Create(); 54 buffer.Create();
56 if (runtime.device.HasDebuggingToolAttached()) { 55 if (runtime.device.HasDebuggingToolAttached()) {
57 const std::string name = fmt::format("Buffer 0x{:x}", CpuAddr()); 56 const std::string name = fmt::format("Buffer 0x{:x}", CpuAddr());
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h
index 2c18de166..e6ad030cb 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.h
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.h
@@ -10,7 +10,6 @@
10#include "common/common_types.h" 10#include "common/common_types.h"
11#include "video_core/buffer_cache/buffer_cache_base.h" 11#include "video_core/buffer_cache/buffer_cache_base.h"
12#include "video_core/buffer_cache/memory_tracker_base.h" 12#include "video_core/buffer_cache/memory_tracker_base.h"
13#include "video_core/rasterizer_interface.h"
14#include "video_core/renderer_opengl/gl_device.h" 13#include "video_core/renderer_opengl/gl_device.h"
15#include "video_core/renderer_opengl/gl_resource_manager.h" 14#include "video_core/renderer_opengl/gl_resource_manager.h"
16#include "video_core/renderer_opengl/gl_staging_buffer_pool.h" 15#include "video_core/renderer_opengl/gl_staging_buffer_pool.h"
@@ -19,9 +18,9 @@ namespace OpenGL {
19 18
20class BufferCacheRuntime; 19class BufferCacheRuntime;
21 20
22class Buffer : public VideoCommon::BufferBase<VideoCore::RasterizerInterface> { 21class Buffer : public VideoCommon::BufferBase {
23public: 22public:
24 explicit Buffer(BufferCacheRuntime&, VideoCore::RasterizerInterface& rasterizer, VAddr cpu_addr, 23 explicit Buffer(BufferCacheRuntime&, DAddr cpu_addr,
25 u64 size_bytes); 24 u64 size_bytes);
26 explicit Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams); 25 explicit Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams);
27 26
@@ -244,7 +243,7 @@ struct BufferCacheParams {
244 using Runtime = OpenGL::BufferCacheRuntime; 243 using Runtime = OpenGL::BufferCacheRuntime;
245 using Buffer = OpenGL::Buffer; 244 using Buffer = OpenGL::Buffer;
246 using Async_Buffer = OpenGL::StagingBufferMap; 245 using Async_Buffer = OpenGL::StagingBufferMap;
247 using MemoryTracker = VideoCommon::MemoryTrackerBase<VideoCore::RasterizerInterface>; 246 using MemoryTracker = VideoCommon::MemoryTrackerBase<Tegra::MaxwellDeviceMemoryManager>;
248 247
249 static constexpr bool IS_OPENGL = true; 248 static constexpr bool IS_OPENGL = true;
250 static constexpr bool HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS = true; 249 static constexpr bool HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS = true;
diff --git a/src/video_core/renderer_opengl/gl_query_cache.cpp b/src/video_core/renderer_opengl/gl_query_cache.cpp
index fef7360ed..567292e1c 100644
--- a/src/video_core/renderer_opengl/gl_query_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_query_cache.cpp
@@ -35,8 +35,8 @@ constexpr GLenum GetTarget(VideoCore::QueryType type) {
35 35
36} // Anonymous namespace 36} // Anonymous namespace
37 37
38QueryCache::QueryCache(RasterizerOpenGL& rasterizer_, Core::Memory::Memory& cpu_memory_) 38QueryCache::QueryCache(RasterizerOpenGL& rasterizer_, Tegra::MaxwellDeviceMemoryManager& device_memory_)
39 : QueryCacheLegacy(rasterizer_, cpu_memory_), gl_rasterizer{rasterizer_} { 39 : QueryCacheLegacy(rasterizer_, device_memory_), gl_rasterizer{rasterizer_} {
40 EnableCounters(); 40 EnableCounters();
41} 41}
42 42
diff --git a/src/video_core/renderer_opengl/gl_query_cache.h b/src/video_core/renderer_opengl/gl_query_cache.h
index 0721e0b3d..04a1b39c9 100644
--- a/src/video_core/renderer_opengl/gl_query_cache.h
+++ b/src/video_core/renderer_opengl/gl_query_cache.h
@@ -11,6 +11,7 @@
11#include "video_core/query_cache.h" 11#include "video_core/query_cache.h"
12#include "video_core/rasterizer_interface.h" 12#include "video_core/rasterizer_interface.h"
13#include "video_core/renderer_opengl/gl_resource_manager.h" 13#include "video_core/renderer_opengl/gl_resource_manager.h"
14#include "video_core/host1x/gpu_device_memory_manager.h"
14 15
15namespace Core { 16namespace Core {
16class System; 17class System;
@@ -28,7 +29,7 @@ using CounterStream = VideoCommon::CounterStreamBase<QueryCache, HostCounter>;
28class QueryCache final 29class QueryCache final
29 : public VideoCommon::QueryCacheLegacy<QueryCache, CachedQuery, CounterStream, HostCounter> { 30 : public VideoCommon::QueryCacheLegacy<QueryCache, CachedQuery, CounterStream, HostCounter> {
30public: 31public:
31 explicit QueryCache(RasterizerOpenGL& rasterizer_, Core::Memory::Memory& cpu_memory_); 32 explicit QueryCache(RasterizerOpenGL& rasterizer_, Tegra::MaxwellDeviceMemoryManager& device_memory_);
32 ~QueryCache(); 33 ~QueryCache();
33 34
34 OGLQuery AllocateQuery(VideoCore::QueryType type); 35 OGLQuery AllocateQuery(VideoCore::QueryType type);
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 7a5fad735..ca31e2fbd 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -70,18 +70,18 @@ std::optional<VideoCore::QueryType> MaxwellToVideoCoreQuery(VideoCommon::QueryTy
70} // Anonymous namespace 70} // Anonymous namespace
71 71
72RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, 72RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
73 Core::Memory::Memory& cpu_memory_, const Device& device_, 73 Tegra::MaxwellDeviceMemoryManager& device_memory_,
74 ScreenInfo& screen_info_, ProgramManager& program_manager_, 74 const Device& device_, ScreenInfo& screen_info_,
75 StateTracker& state_tracker_) 75 ProgramManager& program_manager_, StateTracker& state_tracker_)
76 : RasterizerAccelerated(cpu_memory_), gpu(gpu_), device(device_), screen_info(screen_info_), 76 : gpu(gpu_), device_memory(device_memory_), device(device_), screen_info(screen_info_),
77 program_manager(program_manager_), state_tracker(state_tracker_), 77 program_manager(program_manager_), state_tracker(state_tracker_),
78 texture_cache_runtime(device, program_manager, state_tracker, staging_buffer_pool), 78 texture_cache_runtime(device, program_manager, state_tracker, staging_buffer_pool),
79 texture_cache(texture_cache_runtime, *this), 79 texture_cache(texture_cache_runtime, device_memory_),
80 buffer_cache_runtime(device, staging_buffer_pool), 80 buffer_cache_runtime(device, staging_buffer_pool),
81 buffer_cache(*this, cpu_memory_, buffer_cache_runtime), 81 buffer_cache(device_memory_, buffer_cache_runtime),
82 shader_cache(*this, emu_window_, device, texture_cache, buffer_cache, program_manager, 82 shader_cache(device_memory_, emu_window_, device, texture_cache, buffer_cache,
83 state_tracker, gpu.ShaderNotify()), 83 program_manager, state_tracker, gpu.ShaderNotify()),
84 query_cache(*this, cpu_memory_), accelerate_dma(buffer_cache, texture_cache), 84 query_cache(*this, device_memory_), accelerate_dma(buffer_cache, texture_cache),
85 fence_manager(*this, gpu, texture_cache, buffer_cache, query_cache), 85 fence_manager(*this, gpu, texture_cache, buffer_cache, query_cache),
86 blit_image(program_manager_) {} 86 blit_image(program_manager_) {}
87 87
@@ -475,7 +475,7 @@ void RasterizerOpenGL::DisableGraphicsUniformBuffer(size_t stage, u32 index) {
475 475
476void RasterizerOpenGL::FlushAll() {} 476void RasterizerOpenGL::FlushAll() {}
477 477
478void RasterizerOpenGL::FlushRegion(VAddr addr, u64 size, VideoCommon::CacheType which) { 478void RasterizerOpenGL::FlushRegion(DAddr addr, u64 size, VideoCommon::CacheType which) {
479 MICROPROFILE_SCOPE(OpenGL_CacheManagement); 479 MICROPROFILE_SCOPE(OpenGL_CacheManagement);
480 if (addr == 0 || size == 0) { 480 if (addr == 0 || size == 0) {
481 return; 481 return;
@@ -493,7 +493,7 @@ void RasterizerOpenGL::FlushRegion(VAddr addr, u64 size, VideoCommon::CacheType
493 } 493 }
494} 494}
495 495
496bool RasterizerOpenGL::MustFlushRegion(VAddr addr, u64 size, VideoCommon::CacheType which) { 496bool RasterizerOpenGL::MustFlushRegion(DAddr addr, u64 size, VideoCommon::CacheType which) {
497 if ((True(which & VideoCommon::CacheType::BufferCache))) { 497 if ((True(which & VideoCommon::CacheType::BufferCache))) {
498 std::scoped_lock lock{buffer_cache.mutex}; 498 std::scoped_lock lock{buffer_cache.mutex};
499 if (buffer_cache.IsRegionGpuModified(addr, size)) { 499 if (buffer_cache.IsRegionGpuModified(addr, size)) {
@@ -510,7 +510,7 @@ bool RasterizerOpenGL::MustFlushRegion(VAddr addr, u64 size, VideoCommon::CacheT
510 return false; 510 return false;
511} 511}
512 512
513VideoCore::RasterizerDownloadArea RasterizerOpenGL::GetFlushArea(VAddr addr, u64 size) { 513VideoCore::RasterizerDownloadArea RasterizerOpenGL::GetFlushArea(DAddr addr, u64 size) {
514 { 514 {
515 std::scoped_lock lock{texture_cache.mutex}; 515 std::scoped_lock lock{texture_cache.mutex};
516 auto area = texture_cache.GetFlushArea(addr, size); 516 auto area = texture_cache.GetFlushArea(addr, size);
@@ -533,7 +533,7 @@ VideoCore::RasterizerDownloadArea RasterizerOpenGL::GetFlushArea(VAddr addr, u64
533 return new_area; 533 return new_area;
534} 534}
535 535
536void RasterizerOpenGL::InvalidateRegion(VAddr addr, u64 size, VideoCommon::CacheType which) { 536void RasterizerOpenGL::InvalidateRegion(DAddr addr, u64 size, VideoCommon::CacheType which) {
537 MICROPROFILE_SCOPE(OpenGL_CacheManagement); 537 MICROPROFILE_SCOPE(OpenGL_CacheManagement);
538 if (addr == 0 || size == 0) { 538 if (addr == 0 || size == 0) {
539 return; 539 return;
@@ -554,8 +554,9 @@ void RasterizerOpenGL::InvalidateRegion(VAddr addr, u64 size, VideoCommon::Cache
554 } 554 }
555} 555}
556 556
557bool RasterizerOpenGL::OnCPUWrite(VAddr addr, u64 size) { 557bool RasterizerOpenGL::OnCPUWrite(PAddr p_addr, u64 size) {
558 MICROPROFILE_SCOPE(OpenGL_CacheManagement); 558 MICROPROFILE_SCOPE(OpenGL_CacheManagement);
559 const DAddr addr = device_memory.GetAddressFromPAddr(p_addr);
559 if (addr == 0 || size == 0) { 560 if (addr == 0 || size == 0) {
560 return false; 561 return false;
561 } 562 }
@@ -576,8 +577,9 @@ bool RasterizerOpenGL::OnCPUWrite(VAddr addr, u64 size) {
576 return false; 577 return false;
577} 578}
578 579
579void RasterizerOpenGL::OnCacheInvalidation(VAddr addr, u64 size) { 580void RasterizerOpenGL::OnCacheInvalidation(PAddr p_addr, u64 size) {
580 MICROPROFILE_SCOPE(OpenGL_CacheManagement); 581 MICROPROFILE_SCOPE(OpenGL_CacheManagement);
582 const DAddr addr = device_memory.GetAddressFromPAddr(p_addr);
581 if (addr == 0 || size == 0) { 583 if (addr == 0 || size == 0) {
582 return; 584 return;
583 } 585 }
@@ -596,7 +598,7 @@ void RasterizerOpenGL::InvalidateGPUCache() {
596 gpu.InvalidateGPUCache(); 598 gpu.InvalidateGPUCache();
597} 599}
598 600
599void RasterizerOpenGL::UnmapMemory(VAddr addr, u64 size) { 601void RasterizerOpenGL::UnmapMemory(DAddr addr, u64 size) {
600 { 602 {
601 std::scoped_lock lock{texture_cache.mutex}; 603 std::scoped_lock lock{texture_cache.mutex};
602 texture_cache.UnmapMemory(addr, size); 604 texture_cache.UnmapMemory(addr, size);
@@ -635,7 +637,7 @@ void RasterizerOpenGL::ReleaseFences(bool force) {
635 fence_manager.WaitPendingFences(force); 637 fence_manager.WaitPendingFences(force);
636} 638}
637 639
638void RasterizerOpenGL::FlushAndInvalidateRegion(VAddr addr, u64 size, 640void RasterizerOpenGL::FlushAndInvalidateRegion(DAddr addr, u64 size,
639 VideoCommon::CacheType which) { 641 VideoCommon::CacheType which) {
640 if (Settings::IsGPULevelExtreme()) { 642 if (Settings::IsGPULevelExtreme()) {
641 FlushRegion(addr, size, which); 643 FlushRegion(addr, size, which);
@@ -739,7 +741,7 @@ void RasterizerOpenGL::AccelerateInlineToMemory(GPUVAddr address, size_t copy_si
739} 741}
740 742
741bool RasterizerOpenGL::AccelerateDisplay(const Tegra::FramebufferConfig& config, 743bool RasterizerOpenGL::AccelerateDisplay(const Tegra::FramebufferConfig& config,
742 VAddr framebuffer_addr, u32 pixel_stride) { 744 DAddr framebuffer_addr, u32 pixel_stride) {
743 if (framebuffer_addr == 0) { 745 if (framebuffer_addr == 0) {
744 return false; 746 return false;
745 } 747 }
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h
index ce3460938..f197774ed 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.h
+++ b/src/video_core/renderer_opengl/gl_rasterizer.h
@@ -14,7 +14,6 @@
14#include "common/common_types.h" 14#include "common/common_types.h"
15#include "video_core/control/channel_state_cache.h" 15#include "video_core/control/channel_state_cache.h"
16#include "video_core/engines/maxwell_dma.h" 16#include "video_core/engines/maxwell_dma.h"
17#include "video_core/rasterizer_accelerated.h"
18#include "video_core/rasterizer_interface.h" 17#include "video_core/rasterizer_interface.h"
19#include "video_core/renderer_opengl/blit_image.h" 18#include "video_core/renderer_opengl/blit_image.h"
20#include "video_core/renderer_opengl/gl_buffer_cache.h" 19#include "video_core/renderer_opengl/gl_buffer_cache.h"
@@ -72,11 +71,11 @@ private:
72 TextureCache& texture_cache; 71 TextureCache& texture_cache;
73}; 72};
74 73
75class RasterizerOpenGL : public VideoCore::RasterizerAccelerated, 74class RasterizerOpenGL : public VideoCore::RasterizerInterface,
76 protected VideoCommon::ChannelSetupCaches<VideoCommon::ChannelInfo> { 75 protected VideoCommon::ChannelSetupCaches<VideoCommon::ChannelInfo> {
77public: 76public:
78 explicit RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, 77 explicit RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
79 Core::Memory::Memory& cpu_memory_, const Device& device_, 78 Tegra::MaxwellDeviceMemoryManager& device_memory_, const Device& device_,
80 ScreenInfo& screen_info_, ProgramManager& program_manager_, 79 ScreenInfo& screen_info_, ProgramManager& program_manager_,
81 StateTracker& state_tracker_); 80 StateTracker& state_tracker_);
82 ~RasterizerOpenGL() override; 81 ~RasterizerOpenGL() override;
@@ -92,17 +91,17 @@ public:
92 void BindGraphicsUniformBuffer(size_t stage, u32 index, GPUVAddr gpu_addr, u32 size) override; 91 void BindGraphicsUniformBuffer(size_t stage, u32 index, GPUVAddr gpu_addr, u32 size) override;
93 void DisableGraphicsUniformBuffer(size_t stage, u32 index) override; 92 void DisableGraphicsUniformBuffer(size_t stage, u32 index) override;
94 void FlushAll() override; 93 void FlushAll() override;
95 void FlushRegion(VAddr addr, u64 size, 94 void FlushRegion(DAddr addr, u64 size,
96 VideoCommon::CacheType which = VideoCommon::CacheType::All) override; 95 VideoCommon::CacheType which = VideoCommon::CacheType::All) override;
97 bool MustFlushRegion(VAddr addr, u64 size, 96 bool MustFlushRegion(DAddr addr, u64 size,
98 VideoCommon::CacheType which = VideoCommon::CacheType::All) override; 97 VideoCommon::CacheType which = VideoCommon::CacheType::All) override;
99 VideoCore::RasterizerDownloadArea GetFlushArea(VAddr addr, u64 size) override; 98 VideoCore::RasterizerDownloadArea GetFlushArea(PAddr addr, u64 size) override;
100 void InvalidateRegion(VAddr addr, u64 size, 99 void InvalidateRegion(DAddr addr, u64 size,
101 VideoCommon::CacheType which = VideoCommon::CacheType::All) override; 100 VideoCommon::CacheType which = VideoCommon::CacheType::All) override;
102 void OnCacheInvalidation(VAddr addr, u64 size) override; 101 void OnCacheInvalidation(PAddr addr, u64 size) override;
103 bool OnCPUWrite(VAddr addr, u64 size) override; 102 bool OnCPUWrite(PAddr addr, u64 size) override;
104 void InvalidateGPUCache() override; 103 void InvalidateGPUCache() override;
105 void UnmapMemory(VAddr addr, u64 size) override; 104 void UnmapMemory(DAddr addr, u64 size) override;
106 void ModifyGPUMemory(size_t as_id, GPUVAddr addr, u64 size) override; 105 void ModifyGPUMemory(size_t as_id, GPUVAddr addr, u64 size) override;
107 void SignalFence(std::function<void()>&& func) override; 106 void SignalFence(std::function<void()>&& func) override;
108 void SyncOperation(std::function<void()>&& func) override; 107 void SyncOperation(std::function<void()>&& func) override;
@@ -110,7 +109,7 @@ public:
110 void SignalReference() override; 109 void SignalReference() override;
111 void ReleaseFences(bool force = true) override; 110 void ReleaseFences(bool force = true) override;
112 void FlushAndInvalidateRegion( 111 void FlushAndInvalidateRegion(
113 VAddr addr, u64 size, VideoCommon::CacheType which = VideoCommon::CacheType::All) override; 112 DAddr addr, u64 size, VideoCommon::CacheType which = VideoCommon::CacheType::All) override;
114 void WaitForIdle() override; 113 void WaitForIdle() override;
115 void FragmentBarrier() override; 114 void FragmentBarrier() override;
116 void TiledCacheBarrier() override; 115 void TiledCacheBarrier() override;
@@ -123,7 +122,7 @@ public:
123 Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override; 122 Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override;
124 void AccelerateInlineToMemory(GPUVAddr address, size_t copy_size, 123 void AccelerateInlineToMemory(GPUVAddr address, size_t copy_size,
125 std::span<const u8> memory) override; 124 std::span<const u8> memory) override;
126 bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, 125 bool AccelerateDisplay(const Tegra::FramebufferConfig& config, DAddr framebuffer_addr,
127 u32 pixel_stride) override; 126 u32 pixel_stride) override;
128 void LoadDiskResources(u64 title_id, std::stop_token stop_loading, 127 void LoadDiskResources(u64 title_id, std::stop_token stop_loading,
129 const VideoCore::DiskResourceLoadCallback& callback) override; 128 const VideoCore::DiskResourceLoadCallback& callback) override;
@@ -235,6 +234,7 @@ private:
235 VideoCommon::QueryPropertiesFlags flags, u32 payload, u32 subreport); 234 VideoCommon::QueryPropertiesFlags flags, u32 payload, u32 subreport);
236 235
237 Tegra::GPU& gpu; 236 Tegra::GPU& gpu;
237 Tegra::MaxwellDeviceMemoryManager& device_memory;
238 238
239 const Device& device; 239 const Device& device;
240 ScreenInfo& screen_info; 240 ScreenInfo& screen_info;
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp
index 30df41b7d..50462cdde 100644
--- a/src/video_core/renderer_opengl/gl_shader_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp
@@ -168,11 +168,12 @@ void SetXfbState(VideoCommon::TransformFeedbackState& state, const Maxwell& regs
168} 168}
169} // Anonymous namespace 169} // Anonymous namespace
170 170
171ShaderCache::ShaderCache(RasterizerOpenGL& rasterizer_, Core::Frontend::EmuWindow& emu_window_, 171ShaderCache::ShaderCache(Tegra::MaxwellDeviceMemoryManager& device_memory_,
172 const Device& device_, TextureCache& texture_cache_, 172 Core::Frontend::EmuWindow& emu_window_, const Device& device_,
173 BufferCache& buffer_cache_, ProgramManager& program_manager_, 173 TextureCache& texture_cache_, BufferCache& buffer_cache_,
174 StateTracker& state_tracker_, VideoCore::ShaderNotify& shader_notify_) 174 ProgramManager& program_manager_, StateTracker& state_tracker_,
175 : VideoCommon::ShaderCache{rasterizer_}, emu_window{emu_window_}, device{device_}, 175 VideoCore::ShaderNotify& shader_notify_)
176 : VideoCommon::ShaderCache{device_memory_}, emu_window{emu_window_}, device{device_},
176 texture_cache{texture_cache_}, buffer_cache{buffer_cache_}, program_manager{program_manager_}, 177 texture_cache{texture_cache_}, buffer_cache{buffer_cache_}, program_manager{program_manager_},
177 state_tracker{state_tracker_}, shader_notify{shader_notify_}, 178 state_tracker{state_tracker_}, shader_notify{shader_notify_},
178 use_asynchronous_shaders{device.UseAsynchronousShaders()}, 179 use_asynchronous_shaders{device.UseAsynchronousShaders()},
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.h b/src/video_core/renderer_opengl/gl_shader_cache.h
index 6b9732fca..5ac413529 100644
--- a/src/video_core/renderer_opengl/gl_shader_cache.h
+++ b/src/video_core/renderer_opengl/gl_shader_cache.h
@@ -17,7 +17,7 @@
17 17
18namespace Tegra { 18namespace Tegra {
19class MemoryManager; 19class MemoryManager;
20} 20} // namespace Tegra
21 21
22namespace OpenGL { 22namespace OpenGL {
23 23
@@ -28,10 +28,11 @@ using ShaderWorker = Common::StatefulThreadWorker<ShaderContext::Context>;
28 28
29class ShaderCache : public VideoCommon::ShaderCache { 29class ShaderCache : public VideoCommon::ShaderCache {
30public: 30public:
31 explicit ShaderCache(RasterizerOpenGL& rasterizer_, Core::Frontend::EmuWindow& emu_window_, 31 explicit ShaderCache(Tegra::MaxwellDeviceMemoryManager& device_memory_,
32 const Device& device_, TextureCache& texture_cache_, 32 Core::Frontend::EmuWindow& emu_window_, const Device& device_,
33 BufferCache& buffer_cache_, ProgramManager& program_manager_, 33 TextureCache& texture_cache_, BufferCache& buffer_cache_,
34 StateTracker& state_tracker_, VideoCore::ShaderNotify& shader_notify_); 34 ProgramManager& program_manager_, StateTracker& state_tracker_,
35 VideoCore::ShaderNotify& shader_notify_);
35 ~ShaderCache(); 36 ~ShaderCache();
36 37
37 void LoadDiskResources(u64 title_id, std::stop_token stop_loading, 38 void LoadDiskResources(u64 title_id, std::stop_token stop_loading,
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp
index 2933718b6..821a045ad 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp
@@ -144,12 +144,13 @@ void APIENTRY DebugHandler(GLenum source, GLenum type, GLuint id, GLenum severit
144 144
145RendererOpenGL::RendererOpenGL(Core::TelemetrySession& telemetry_session_, 145RendererOpenGL::RendererOpenGL(Core::TelemetrySession& telemetry_session_,
146 Core::Frontend::EmuWindow& emu_window_, 146 Core::Frontend::EmuWindow& emu_window_,
147 Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_, 147 Tegra::MaxwellDeviceMemoryManager& device_memory_, Tegra::GPU& gpu_,
148 std::unique_ptr<Core::Frontend::GraphicsContext> context_) 148 std::unique_ptr<Core::Frontend::GraphicsContext> context_)
149 : RendererBase{emu_window_, std::move(context_)}, telemetry_session{telemetry_session_}, 149 : RendererBase{emu_window_, std::move(context_)}, telemetry_session{telemetry_session_},
150 emu_window{emu_window_}, cpu_memory{cpu_memory_}, gpu{gpu_}, device{emu_window_}, 150 emu_window{emu_window_}, device_memory{device_memory_}, gpu{gpu_}, device{emu_window_},
151 state_tracker{}, program_manager{device}, 151 state_tracker{}, program_manager{device},
152 rasterizer(emu_window, gpu, cpu_memory, device, screen_info, program_manager, state_tracker) { 152 rasterizer(emu_window, gpu, device_memory, device, screen_info, program_manager,
153 state_tracker) {
153 if (Settings::values.renderer_debug && GLAD_GL_KHR_debug) { 154 if (Settings::values.renderer_debug && GLAD_GL_KHR_debug) {
154 glEnable(GL_DEBUG_OUTPUT); 155 glEnable(GL_DEBUG_OUTPUT);
155 glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); 156 glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
@@ -242,7 +243,7 @@ void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuf
242 const u32 bytes_per_pixel{VideoCore::Surface::BytesPerBlock(pixel_format)}; 243 const u32 bytes_per_pixel{VideoCore::Surface::BytesPerBlock(pixel_format)};
243 const u64 size_in_bytes{Tegra::Texture::CalculateSize( 244 const u64 size_in_bytes{Tegra::Texture::CalculateSize(
244 true, bytes_per_pixel, framebuffer.stride, framebuffer.height, 1, block_height_log2, 0)}; 245 true, bytes_per_pixel, framebuffer.stride, framebuffer.height, 1, block_height_log2, 0)};
245 const u8* const host_ptr{cpu_memory.GetPointer(framebuffer_addr)}; 246 const u8* const host_ptr{device_memory.GetPointer<u8>(framebuffer_addr)};
246 const std::span<const u8> input_data(host_ptr, size_in_bytes); 247 const std::span<const u8> input_data(host_ptr, size_in_bytes);
247 Tegra::Texture::UnswizzleTexture(gl_framebuffer_data, input_data, bytes_per_pixel, 248 Tegra::Texture::UnswizzleTexture(gl_framebuffer_data, input_data, bytes_per_pixel,
248 framebuffer.width, framebuffer.height, 1, block_height_log2, 249 framebuffer.width, framebuffer.height, 1, block_height_log2,
diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h
index b70607635..18699610a 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.h
+++ b/src/video_core/renderer_opengl/renderer_opengl.h
@@ -61,7 +61,7 @@ class RendererOpenGL final : public VideoCore::RendererBase {
61public: 61public:
62 explicit RendererOpenGL(Core::TelemetrySession& telemetry_session_, 62 explicit RendererOpenGL(Core::TelemetrySession& telemetry_session_,
63 Core::Frontend::EmuWindow& emu_window_, 63 Core::Frontend::EmuWindow& emu_window_,
64 Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_, 64 Tegra::MaxwellDeviceMemoryManager& device_memory_, Tegra::GPU& gpu_,
65 std::unique_ptr<Core::Frontend::GraphicsContext> context_); 65 std::unique_ptr<Core::Frontend::GraphicsContext> context_);
66 ~RendererOpenGL() override; 66 ~RendererOpenGL() override;
67 67
@@ -101,7 +101,7 @@ private:
101 101
102 Core::TelemetrySession& telemetry_session; 102 Core::TelemetrySession& telemetry_session;
103 Core::Frontend::EmuWindow& emu_window; 103 Core::Frontend::EmuWindow& emu_window;
104 Core::Memory::Memory& cpu_memory; 104 Tegra::MaxwellDeviceMemoryManager& device_memory;
105 Tegra::GPU& gpu; 105 Tegra::GPU& gpu;
106 106
107 Device device; 107 Device device;