summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_null
diff options
context:
space:
mode:
authorGravatar liamwhite2024-01-22 10:55:39 -0500
committerGravatar GitHub2024-01-22 10:55:39 -0500
commit8bd10473d60503c7acddc399604a51b9c9947541 (patch)
treef713f84942681321fca27ba028e31d6c74a09013 /src/video_core/renderer_null
parentMerge pull request #12747 from t895/homescreen-widget (diff)
parentdevice_memory_manager: use unique_lock for update (diff)
downloadyuzu-8bd10473d60503c7acddc399604a51b9c9947541.tar.gz
yuzu-8bd10473d60503c7acddc399604a51b9c9947541.tar.xz
yuzu-8bd10473d60503c7acddc399604a51b9c9947541.zip
Merge pull request #12579 from FernandoS27/smmu
Core: Implement Device Mapping & GPU SMMU
Diffstat (limited to 'src/video_core/renderer_null')
-rw-r--r--src/video_core/renderer_null/null_rasterizer.cpp26
-rw-r--r--src/video_core/renderer_null/null_rasterizer.h23
-rw-r--r--src/video_core/renderer_null/renderer_null.cpp5
-rw-r--r--src/video_core/renderer_null/renderer_null.h3
4 files changed, 26 insertions, 31 deletions
diff --git a/src/video_core/renderer_null/null_rasterizer.cpp b/src/video_core/renderer_null/null_rasterizer.cpp
index 4f1d5b548..abfabb65b 100644
--- a/src/video_core/renderer_null/null_rasterizer.cpp
+++ b/src/video_core/renderer_null/null_rasterizer.cpp
@@ -2,7 +2,6 @@
2// SPDX-License-Identifier: GPL-2.0-or-later 2// SPDX-License-Identifier: GPL-2.0-or-later
3 3
4#include "common/alignment.h" 4#include "common/alignment.h"
5#include "core/memory.h"
6#include "video_core/control/channel_state.h" 5#include "video_core/control/channel_state.h"
7#include "video_core/host1x/host1x.h" 6#include "video_core/host1x/host1x.h"
8#include "video_core/memory_manager.h" 7#include "video_core/memory_manager.h"
@@ -19,8 +18,7 @@ bool AccelerateDMA::BufferClear(GPUVAddr src_address, u64 amount, u32 value) {
19 return true; 18 return true;
20} 19}
21 20
22RasterizerNull::RasterizerNull(Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu) 21RasterizerNull::RasterizerNull(Tegra::GPU& gpu) : m_gpu{gpu} {}
23 : RasterizerAccelerated(cpu_memory_), m_gpu{gpu} {}
24RasterizerNull::~RasterizerNull() = default; 22RasterizerNull::~RasterizerNull() = default;
25 23
26void RasterizerNull::Draw(bool is_indexed, u32 instance_count) {} 24void RasterizerNull::Draw(bool is_indexed, u32 instance_count) {}
@@ -45,25 +43,25 @@ void RasterizerNull::BindGraphicsUniformBuffer(size_t stage, u32 index, GPUVAddr
45 u32 size) {} 43 u32 size) {}
46void RasterizerNull::DisableGraphicsUniformBuffer(size_t stage, u32 index) {} 44void RasterizerNull::DisableGraphicsUniformBuffer(size_t stage, u32 index) {}
47void RasterizerNull::FlushAll() {} 45void RasterizerNull::FlushAll() {}
48void RasterizerNull::FlushRegion(VAddr addr, u64 size, VideoCommon::CacheType) {} 46void RasterizerNull::FlushRegion(DAddr addr, u64 size, VideoCommon::CacheType) {}
49bool RasterizerNull::MustFlushRegion(VAddr addr, u64 size, VideoCommon::CacheType) { 47bool RasterizerNull::MustFlushRegion(DAddr addr, u64 size, VideoCommon::CacheType) {
50 return false; 48 return false;
51} 49}
52void RasterizerNull::InvalidateRegion(VAddr addr, u64 size, VideoCommon::CacheType) {} 50void RasterizerNull::InvalidateRegion(DAddr addr, u64 size, VideoCommon::CacheType) {}
53bool RasterizerNull::OnCPUWrite(VAddr addr, u64 size) { 51bool RasterizerNull::OnCPUWrite(PAddr addr, u64 size) {
54 return false; 52 return false;
55} 53}
56void RasterizerNull::OnCacheInvalidation(VAddr addr, u64 size) {} 54void RasterizerNull::OnCacheInvalidation(PAddr addr, u64 size) {}
57VideoCore::RasterizerDownloadArea RasterizerNull::GetFlushArea(VAddr addr, u64 size) { 55VideoCore::RasterizerDownloadArea RasterizerNull::GetFlushArea(PAddr addr, u64 size) {
58 VideoCore::RasterizerDownloadArea new_area{ 56 VideoCore::RasterizerDownloadArea new_area{
59 .start_address = Common::AlignDown(addr, Core::Memory::YUZU_PAGESIZE), 57 .start_address = Common::AlignDown(addr, Core::DEVICE_PAGESIZE),
60 .end_address = Common::AlignUp(addr + size, Core::Memory::YUZU_PAGESIZE), 58 .end_address = Common::AlignUp(addr + size, Core::DEVICE_PAGESIZE),
61 .preemtive = true, 59 .preemtive = true,
62 }; 60 };
63 return new_area; 61 return new_area;
64} 62}
65void RasterizerNull::InvalidateGPUCache() {} 63void RasterizerNull::InvalidateGPUCache() {}
66void RasterizerNull::UnmapMemory(VAddr addr, u64 size) {} 64void RasterizerNull::UnmapMemory(DAddr addr, u64 size) {}
67void RasterizerNull::ModifyGPUMemory(size_t as_id, GPUVAddr addr, u64 size) {} 65void RasterizerNull::ModifyGPUMemory(size_t as_id, GPUVAddr addr, u64 size) {}
68void RasterizerNull::SignalFence(std::function<void()>&& func) { 66void RasterizerNull::SignalFence(std::function<void()>&& func) {
69 func(); 67 func();
@@ -78,7 +76,7 @@ void RasterizerNull::SignalSyncPoint(u32 value) {
78} 76}
79void RasterizerNull::SignalReference() {} 77void RasterizerNull::SignalReference() {}
80void RasterizerNull::ReleaseFences(bool) {} 78void RasterizerNull::ReleaseFences(bool) {}
81void RasterizerNull::FlushAndInvalidateRegion(VAddr addr, u64 size, VideoCommon::CacheType) {} 79void RasterizerNull::FlushAndInvalidateRegion(DAddr addr, u64 size, VideoCommon::CacheType) {}
82void RasterizerNull::WaitForIdle() {} 80void RasterizerNull::WaitForIdle() {}
83void RasterizerNull::FragmentBarrier() {} 81void RasterizerNull::FragmentBarrier() {}
84void RasterizerNull::TiledCacheBarrier() {} 82void RasterizerNull::TiledCacheBarrier() {}
@@ -95,7 +93,7 @@ bool RasterizerNull::AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surfac
95void RasterizerNull::AccelerateInlineToMemory(GPUVAddr address, size_t copy_size, 93void RasterizerNull::AccelerateInlineToMemory(GPUVAddr address, size_t copy_size,
96 std::span<const u8> memory) {} 94 std::span<const u8> memory) {}
97bool RasterizerNull::AccelerateDisplay(const Tegra::FramebufferConfig& config, 95bool RasterizerNull::AccelerateDisplay(const Tegra::FramebufferConfig& config,
98 VAddr framebuffer_addr, u32 pixel_stride) { 96 DAddr framebuffer_addr, u32 pixel_stride) {
99 return true; 97 return true;
100} 98}
101void RasterizerNull::LoadDiskResources(u64 title_id, std::stop_token stop_loading, 99void RasterizerNull::LoadDiskResources(u64 title_id, std::stop_token stop_loading,
diff --git a/src/video_core/renderer_null/null_rasterizer.h b/src/video_core/renderer_null/null_rasterizer.h
index 23001eeb8..a5789604f 100644
--- a/src/video_core/renderer_null/null_rasterizer.h
+++ b/src/video_core/renderer_null/null_rasterizer.h
@@ -6,7 +6,6 @@
6#include "common/common_types.h" 6#include "common/common_types.h"
7#include "video_core/control/channel_state_cache.h" 7#include "video_core/control/channel_state_cache.h"
8#include "video_core/engines/maxwell_dma.h" 8#include "video_core/engines/maxwell_dma.h"
9#include "video_core/rasterizer_accelerated.h"
10#include "video_core/rasterizer_interface.h" 9#include "video_core/rasterizer_interface.h"
11 10
12namespace Core { 11namespace Core {
@@ -32,10 +31,10 @@ public:
32 } 31 }
33}; 32};
34 33
35class RasterizerNull final : public VideoCore::RasterizerAccelerated, 34class RasterizerNull final : public VideoCore::RasterizerInterface,
36 protected VideoCommon::ChannelSetupCaches<VideoCommon::ChannelInfo> { 35 protected VideoCommon::ChannelSetupCaches<VideoCommon::ChannelInfo> {
37public: 36public:
38 explicit RasterizerNull(Core::Memory::Memory& cpu_memory, Tegra::GPU& gpu); 37 explicit RasterizerNull(Tegra::GPU& gpu);
39 ~RasterizerNull() override; 38 ~RasterizerNull() override;
40 39
41 void Draw(bool is_indexed, u32 instance_count) override; 40 void Draw(bool is_indexed, u32 instance_count) override;
@@ -48,17 +47,17 @@ public:
48 void BindGraphicsUniformBuffer(size_t stage, u32 index, GPUVAddr gpu_addr, u32 size) override; 47 void BindGraphicsUniformBuffer(size_t stage, u32 index, GPUVAddr gpu_addr, u32 size) override;
49 void DisableGraphicsUniformBuffer(size_t stage, u32 index) override; 48 void DisableGraphicsUniformBuffer(size_t stage, u32 index) override;
50 void FlushAll() override; 49 void FlushAll() override;
51 void FlushRegion(VAddr addr, u64 size, 50 void FlushRegion(DAddr addr, u64 size,
52 VideoCommon::CacheType which = VideoCommon::CacheType::All) override; 51 VideoCommon::CacheType which = VideoCommon::CacheType::All) override;
53 bool MustFlushRegion(VAddr addr, u64 size, 52 bool MustFlushRegion(DAddr addr, u64 size,
54 VideoCommon::CacheType which = VideoCommon::CacheType::All) override; 53 VideoCommon::CacheType which = VideoCommon::CacheType::All) override;
55 void InvalidateRegion(VAddr addr, u64 size, 54 void InvalidateRegion(DAddr addr, u64 size,
56 VideoCommon::CacheType which = VideoCommon::CacheType::All) override; 55 VideoCommon::CacheType which = VideoCommon::CacheType::All) override;
57 void OnCacheInvalidation(VAddr addr, u64 size) override; 56 void OnCacheInvalidation(DAddr addr, u64 size) override;
58 bool OnCPUWrite(VAddr addr, u64 size) override; 57 bool OnCPUWrite(DAddr addr, u64 size) override;
59 VideoCore::RasterizerDownloadArea GetFlushArea(VAddr addr, u64 size) override; 58 VideoCore::RasterizerDownloadArea GetFlushArea(DAddr addr, u64 size) override;
60 void InvalidateGPUCache() override; 59 void InvalidateGPUCache() override;
61 void UnmapMemory(VAddr addr, u64 size) override; 60 void UnmapMemory(DAddr addr, u64 size) override;
62 void ModifyGPUMemory(size_t as_id, GPUVAddr addr, u64 size) override; 61 void ModifyGPUMemory(size_t as_id, GPUVAddr addr, u64 size) override;
63 void SignalFence(std::function<void()>&& func) override; 62 void SignalFence(std::function<void()>&& func) override;
64 void SyncOperation(std::function<void()>&& func) override; 63 void SyncOperation(std::function<void()>&& func) override;
@@ -66,7 +65,7 @@ public:
66 void SignalReference() override; 65 void SignalReference() override;
67 void ReleaseFences(bool force) override; 66 void ReleaseFences(bool force) override;
68 void FlushAndInvalidateRegion( 67 void FlushAndInvalidateRegion(
69 VAddr addr, u64 size, VideoCommon::CacheType which = VideoCommon::CacheType::All) override; 68 DAddr addr, u64 size, VideoCommon::CacheType which = VideoCommon::CacheType::All) override;
70 void WaitForIdle() override; 69 void WaitForIdle() override;
71 void FragmentBarrier() override; 70 void FragmentBarrier() override;
72 void TiledCacheBarrier() override; 71 void TiledCacheBarrier() override;
@@ -78,7 +77,7 @@ public:
78 Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override; 77 Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override;
79 void AccelerateInlineToMemory(GPUVAddr address, size_t copy_size, 78 void AccelerateInlineToMemory(GPUVAddr address, size_t copy_size,
80 std::span<const u8> memory) override; 79 std::span<const u8> memory) override;
81 bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, 80 bool AccelerateDisplay(const Tegra::FramebufferConfig& config, DAddr framebuffer_addr,
82 u32 pixel_stride) override; 81 u32 pixel_stride) override;
83 void LoadDiskResources(u64 title_id, std::stop_token stop_loading, 82 void LoadDiskResources(u64 title_id, std::stop_token stop_loading,
84 const VideoCore::DiskResourceLoadCallback& callback) override; 83 const VideoCore::DiskResourceLoadCallback& callback) override;
diff --git a/src/video_core/renderer_null/renderer_null.cpp b/src/video_core/renderer_null/renderer_null.cpp
index be92cc2f4..078feb925 100644
--- a/src/video_core/renderer_null/renderer_null.cpp
+++ b/src/video_core/renderer_null/renderer_null.cpp
@@ -7,10 +7,9 @@
7 7
8namespace Null { 8namespace Null {
9 9
10RendererNull::RendererNull(Core::Frontend::EmuWindow& emu_window, Core::Memory::Memory& cpu_memory, 10RendererNull::RendererNull(Core::Frontend::EmuWindow& emu_window, Tegra::GPU& gpu,
11 Tegra::GPU& gpu,
12 std::unique_ptr<Core::Frontend::GraphicsContext> context_) 11 std::unique_ptr<Core::Frontend::GraphicsContext> context_)
13 : RendererBase(emu_window, std::move(context_)), m_gpu(gpu), m_rasterizer(cpu_memory, gpu) {} 12 : RendererBase(emu_window, std::move(context_)), m_gpu(gpu), m_rasterizer(gpu) {}
14 13
15RendererNull::~RendererNull() = default; 14RendererNull::~RendererNull() = default;
16 15
diff --git a/src/video_core/renderer_null/renderer_null.h b/src/video_core/renderer_null/renderer_null.h
index 967ff5645..9531b43f6 100644
--- a/src/video_core/renderer_null/renderer_null.h
+++ b/src/video_core/renderer_null/renderer_null.h
@@ -13,8 +13,7 @@ namespace Null {
13 13
14class RendererNull final : public VideoCore::RendererBase { 14class RendererNull final : public VideoCore::RendererBase {
15public: 15public:
16 explicit RendererNull(Core::Frontend::EmuWindow& emu_window, Core::Memory::Memory& cpu_memory, 16 explicit RendererNull(Core::Frontend::EmuWindow& emu_window, Tegra::GPU& gpu,
17 Tegra::GPU& gpu,
18 std::unique_ptr<Core::Frontend::GraphicsContext> context); 17 std::unique_ptr<Core::Frontend::GraphicsContext> context);
19 ~RendererNull() override; 18 ~RendererNull() override;
20 19