null_rasterizer.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include "common/common_types.h"
  5. #include "video_core/control/channel_state_cache.h"
  6. #include "video_core/engines/maxwell_dma.h"
  7. #include "video_core/rasterizer_accelerated.h"
  8. #include "video_core/rasterizer_interface.h"
  9. namespace Core {
  10. class System;
  11. }
  12. namespace Null {
  13. class RasterizerNull;
  14. class AccelerateDMA : public Tegra::Engines::AccelerateDMAInterface {
  15. public:
  16. explicit AccelerateDMA();
  17. bool BufferCopy(GPUVAddr start_address, GPUVAddr end_address, u64 amount) override;
  18. bool BufferClear(GPUVAddr src_address, u64 amount, u32 value) override;
  19. };
  20. class RasterizerNull final : public VideoCore::RasterizerAccelerated,
  21. protected VideoCommon::ChannelSetupCaches<VideoCommon::ChannelInfo> {
  22. public:
  23. explicit RasterizerNull(Core::Memory::Memory& cpu_memory, Tegra::GPU& gpu);
  24. ~RasterizerNull() override;
  25. void Draw(bool is_indexed, u32 instance_count) override;
  26. void Clear(u32 layer_count) override;
  27. void DispatchCompute() override;
  28. void ResetCounter(VideoCore::QueryType type) override;
  29. void Query(GPUVAddr gpu_addr, VideoCore::QueryType type, std::optional<u64> timestamp) override;
  30. void BindGraphicsUniformBuffer(size_t stage, u32 index, GPUVAddr gpu_addr, u32 size) override;
  31. void DisableGraphicsUniformBuffer(size_t stage, u32 index) override;
  32. void FlushAll() override;
  33. void FlushRegion(VAddr addr, u64 size) override;
  34. bool MustFlushRegion(VAddr addr, u64 size) override;
  35. void InvalidateRegion(VAddr addr, u64 size) override;
  36. void OnCPUWrite(VAddr addr, u64 size) override;
  37. void InvalidateGPUCache() override;
  38. void UnmapMemory(VAddr addr, u64 size) override;
  39. void ModifyGPUMemory(size_t as_id, GPUVAddr addr, u64 size) override;
  40. void SignalFence(std::function<void()>&& func) override;
  41. void SyncOperation(std::function<void()>&& func) override;
  42. void SignalSyncPoint(u32 value) override;
  43. void SignalReference() override;
  44. void ReleaseFences() override;
  45. void FlushAndInvalidateRegion(VAddr addr, u64 size) override;
  46. void WaitForIdle() override;
  47. void FragmentBarrier() override;
  48. void TiledCacheBarrier() override;
  49. void FlushCommands() override;
  50. void TickFrame() override;
  51. bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src,
  52. const Tegra::Engines::Fermi2D::Surface& dst,
  53. const Tegra::Engines::Fermi2D::Config& copy_config) override;
  54. Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override;
  55. void AccelerateInlineToMemory(GPUVAddr address, size_t copy_size,
  56. std::span<const u8> memory) override;
  57. bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr,
  58. u32 pixel_stride) override;
  59. void LoadDiskResources(u64 title_id, std::stop_token stop_loading,
  60. const VideoCore::DiskResourceLoadCallback& callback) override;
  61. void InitializeChannel(Tegra::Control::ChannelState& channel) override;
  62. void BindChannel(Tegra::Control::ChannelState& channel) override;
  63. void ReleaseChannel(s32 channel_id) override;
  64. private:
  65. Tegra::GPU& m_gpu;
  66. AccelerateDMA m_accelerate_dma;
  67. };
  68. } // namespace Null