diff options
| author | 2023-12-25 07:32:16 +0100 | |
|---|---|---|
| committer | 2024-01-18 21:12:30 -0500 | |
| commit | 0a2536a0df1f4aea406f2132d3edda0430acc9d1 (patch) | |
| tree | c0ad53890581c9c7e180c5ccb3b66e3c63e3ba64 /src/video_core/renderer_null | |
| parent | SMMU: Implement backing CPU page protect/unprotect (diff) | |
| download | yuzu-0a2536a0df1f4aea406f2132d3edda0430acc9d1.tar.gz yuzu-0a2536a0df1f4aea406f2132d3edda0430acc9d1.tar.xz yuzu-0a2536a0df1f4aea406f2132d3edda0430acc9d1.zip | |
SMMU: Initial adaptation to video_core.
Diffstat (limited to 'src/video_core/renderer_null')
| -rw-r--r-- | src/video_core/renderer_null/null_rasterizer.cpp | 21 | ||||
| -rw-r--r-- | src/video_core/renderer_null/null_rasterizer.h | 23 | ||||
| -rw-r--r-- | src/video_core/renderer_null/renderer_null.cpp | 5 | ||||
| -rw-r--r-- | src/video_core/renderer_null/renderer_null.h | 3 |
4 files changed, 24 insertions, 28 deletions
diff --git a/src/video_core/renderer_null/null_rasterizer.cpp b/src/video_core/renderer_null/null_rasterizer.cpp index 4f1d5b548..11b93fdc9 100644 --- a/src/video_core/renderer_null/null_rasterizer.cpp +++ b/src/video_core/renderer_null/null_rasterizer.cpp | |||
| @@ -19,8 +19,7 @@ bool AccelerateDMA::BufferClear(GPUVAddr src_address, u64 amount, u32 value) { | |||
| 19 | return true; | 19 | return true; |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | RasterizerNull::RasterizerNull(Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu) | 22 | RasterizerNull::RasterizerNull(Tegra::GPU& gpu) : m_gpu{gpu} {} |
| 23 | : RasterizerAccelerated(cpu_memory_), m_gpu{gpu} {} | ||
| 24 | RasterizerNull::~RasterizerNull() = default; | 23 | RasterizerNull::~RasterizerNull() = default; |
| 25 | 24 | ||
| 26 | void RasterizerNull::Draw(bool is_indexed, u32 instance_count) {} | 25 | void RasterizerNull::Draw(bool is_indexed, u32 instance_count) {} |
| @@ -45,16 +44,16 @@ void RasterizerNull::BindGraphicsUniformBuffer(size_t stage, u32 index, GPUVAddr | |||
| 45 | u32 size) {} | 44 | u32 size) {} |
| 46 | void RasterizerNull::DisableGraphicsUniformBuffer(size_t stage, u32 index) {} | 45 | void RasterizerNull::DisableGraphicsUniformBuffer(size_t stage, u32 index) {} |
| 47 | void RasterizerNull::FlushAll() {} | 46 | void RasterizerNull::FlushAll() {} |
| 48 | void RasterizerNull::FlushRegion(VAddr addr, u64 size, VideoCommon::CacheType) {} | 47 | void RasterizerNull::FlushRegion(DAddr addr, u64 size, VideoCommon::CacheType) {} |
| 49 | bool RasterizerNull::MustFlushRegion(VAddr addr, u64 size, VideoCommon::CacheType) { | 48 | bool RasterizerNull::MustFlushRegion(DAddr addr, u64 size, VideoCommon::CacheType) { |
| 50 | return false; | 49 | return false; |
| 51 | } | 50 | } |
| 52 | void RasterizerNull::InvalidateRegion(VAddr addr, u64 size, VideoCommon::CacheType) {} | 51 | void RasterizerNull::InvalidateRegion(DAddr addr, u64 size, VideoCommon::CacheType) {} |
| 53 | bool RasterizerNull::OnCPUWrite(VAddr addr, u64 size) { | 52 | bool RasterizerNull::OnCPUWrite(PAddr addr, u64 size) { |
| 54 | return false; | 53 | return false; |
| 55 | } | 54 | } |
| 56 | void RasterizerNull::OnCacheInvalidation(VAddr addr, u64 size) {} | 55 | void RasterizerNull::OnCacheInvalidation(PAddr addr, u64 size) {} |
| 57 | VideoCore::RasterizerDownloadArea RasterizerNull::GetFlushArea(VAddr addr, u64 size) { | 56 | VideoCore::RasterizerDownloadArea RasterizerNull::GetFlushArea(PAddr addr, u64 size) { |
| 58 | VideoCore::RasterizerDownloadArea new_area{ | 57 | VideoCore::RasterizerDownloadArea new_area{ |
| 59 | .start_address = Common::AlignDown(addr, Core::Memory::YUZU_PAGESIZE), | 58 | .start_address = Common::AlignDown(addr, Core::Memory::YUZU_PAGESIZE), |
| 60 | .end_address = Common::AlignUp(addr + size, Core::Memory::YUZU_PAGESIZE), | 59 | .end_address = Common::AlignUp(addr + size, Core::Memory::YUZU_PAGESIZE), |
| @@ -63,7 +62,7 @@ VideoCore::RasterizerDownloadArea RasterizerNull::GetFlushArea(VAddr addr, u64 s | |||
| 63 | return new_area; | 62 | return new_area; |
| 64 | } | 63 | } |
| 65 | void RasterizerNull::InvalidateGPUCache() {} | 64 | void RasterizerNull::InvalidateGPUCache() {} |
| 66 | void RasterizerNull::UnmapMemory(VAddr addr, u64 size) {} | 65 | void RasterizerNull::UnmapMemory(DAddr addr, u64 size) {} |
| 67 | void RasterizerNull::ModifyGPUMemory(size_t as_id, GPUVAddr addr, u64 size) {} | 66 | void RasterizerNull::ModifyGPUMemory(size_t as_id, GPUVAddr addr, u64 size) {} |
| 68 | void RasterizerNull::SignalFence(std::function<void()>&& func) { | 67 | void RasterizerNull::SignalFence(std::function<void()>&& func) { |
| 69 | func(); | 68 | func(); |
| @@ -78,7 +77,7 @@ void RasterizerNull::SignalSyncPoint(u32 value) { | |||
| 78 | } | 77 | } |
| 79 | void RasterizerNull::SignalReference() {} | 78 | void RasterizerNull::SignalReference() {} |
| 80 | void RasterizerNull::ReleaseFences(bool) {} | 79 | void RasterizerNull::ReleaseFences(bool) {} |
| 81 | void RasterizerNull::FlushAndInvalidateRegion(VAddr addr, u64 size, VideoCommon::CacheType) {} | 80 | void RasterizerNull::FlushAndInvalidateRegion(DAddr addr, u64 size, VideoCommon::CacheType) {} |
| 82 | void RasterizerNull::WaitForIdle() {} | 81 | void RasterizerNull::WaitForIdle() {} |
| 83 | void RasterizerNull::FragmentBarrier() {} | 82 | void RasterizerNull::FragmentBarrier() {} |
| 84 | void RasterizerNull::TiledCacheBarrier() {} | 83 | void RasterizerNull::TiledCacheBarrier() {} |
| @@ -95,7 +94,7 @@ bool RasterizerNull::AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surfac | |||
| 95 | void RasterizerNull::AccelerateInlineToMemory(GPUVAddr address, size_t copy_size, | 94 | void RasterizerNull::AccelerateInlineToMemory(GPUVAddr address, size_t copy_size, |
| 96 | std::span<const u8> memory) {} | 95 | std::span<const u8> memory) {} |
| 97 | bool RasterizerNull::AccelerateDisplay(const Tegra::FramebufferConfig& config, | 96 | bool RasterizerNull::AccelerateDisplay(const Tegra::FramebufferConfig& config, |
| 98 | VAddr framebuffer_addr, u32 pixel_stride) { | 97 | DAddr framebuffer_addr, u32 pixel_stride) { |
| 99 | return true; | 98 | return true; |
| 100 | } | 99 | } |
| 101 | void RasterizerNull::LoadDiskResources(u64 title_id, std::stop_token stop_loading, | 100 | void 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 | ||
| 12 | namespace Core { | 11 | namespace Core { |
| @@ -32,10 +31,10 @@ public: | |||
| 32 | } | 31 | } |
| 33 | }; | 32 | }; |
| 34 | 33 | ||
| 35 | class RasterizerNull final : public VideoCore::RasterizerAccelerated, | 34 | class RasterizerNull final : public VideoCore::RasterizerInterface, |
| 36 | protected VideoCommon::ChannelSetupCaches<VideoCommon::ChannelInfo> { | 35 | protected VideoCommon::ChannelSetupCaches<VideoCommon::ChannelInfo> { |
| 37 | public: | 36 | public: |
| 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 | ||
| 8 | namespace Null { | 8 | namespace Null { |
| 9 | 9 | ||
| 10 | RendererNull::RendererNull(Core::Frontend::EmuWindow& emu_window, Core::Memory::Memory& cpu_memory, | 10 | RendererNull::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 | ||
| 15 | RendererNull::~RendererNull() = default; | 14 | RendererNull::~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 | ||
| 14 | class RendererNull final : public VideoCore::RendererBase { | 14 | class RendererNull final : public VideoCore::RendererBase { |
| 15 | public: | 15 | public: |
| 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 | ||