null_rasterizer.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "common/alignment.h"
  4. #include "video_core/control/channel_state.h"
  5. #include "video_core/host1x/host1x.h"
  6. #include "video_core/memory_manager.h"
  7. #include "video_core/renderer_null/null_rasterizer.h"
  8. namespace Null {
  9. AccelerateDMA::AccelerateDMA() = default;
  10. bool AccelerateDMA::BufferCopy(GPUVAddr start_address, GPUVAddr end_address, u64 amount) {
  11. return true;
  12. }
  13. bool AccelerateDMA::BufferClear(GPUVAddr src_address, u64 amount, u32 value) {
  14. return true;
  15. }
  16. RasterizerNull::RasterizerNull(Tegra::GPU& gpu) : m_gpu{gpu} {}
  17. RasterizerNull::~RasterizerNull() = default;
  18. void RasterizerNull::Draw(bool is_indexed, u32 instance_count) {}
  19. void RasterizerNull::DrawTexture() {}
  20. void RasterizerNull::Clear(u32 layer_count) {}
  21. void RasterizerNull::DispatchCompute() {}
  22. void RasterizerNull::ResetCounter(VideoCommon::QueryType type) {}
  23. void RasterizerNull::Query(GPUVAddr gpu_addr, VideoCommon::QueryType type,
  24. VideoCommon::QueryPropertiesFlags flags, u32 payload, u32 subreport) {
  25. if (!gpu_memory) {
  26. return;
  27. }
  28. if (True(flags & VideoCommon::QueryPropertiesFlags::HasTimeout)) {
  29. u64 ticks = m_gpu.GetTicks();
  30. gpu_memory->Write<u64>(gpu_addr + 8, ticks);
  31. gpu_memory->Write<u64>(gpu_addr, static_cast<u64>(payload));
  32. } else {
  33. gpu_memory->Write<u32>(gpu_addr, payload);
  34. }
  35. }
  36. void RasterizerNull::BindGraphicsUniformBuffer(size_t stage, u32 index, GPUVAddr gpu_addr,
  37. u32 size) {}
  38. void RasterizerNull::DisableGraphicsUniformBuffer(size_t stage, u32 index) {}
  39. void RasterizerNull::FlushAll() {}
  40. void RasterizerNull::FlushRegion(DAddr addr, u64 size, VideoCommon::CacheType) {}
  41. bool RasterizerNull::MustFlushRegion(DAddr addr, u64 size, VideoCommon::CacheType) {
  42. return false;
  43. }
  44. void RasterizerNull::InvalidateRegion(DAddr addr, u64 size, VideoCommon::CacheType) {}
  45. bool RasterizerNull::OnCPUWrite(PAddr addr, u64 size) {
  46. return false;
  47. }
  48. void RasterizerNull::OnCacheInvalidation(PAddr addr, u64 size) {}
  49. VideoCore::RasterizerDownloadArea RasterizerNull::GetFlushArea(PAddr addr, u64 size) {
  50. VideoCore::RasterizerDownloadArea new_area{
  51. .start_address = Common::AlignDown(addr, Core::DEVICE_PAGESIZE),
  52. .end_address = Common::AlignUp(addr + size, Core::DEVICE_PAGESIZE),
  53. .preemtive = true,
  54. };
  55. return new_area;
  56. }
  57. void RasterizerNull::InvalidateGPUCache() {}
  58. void RasterizerNull::UnmapMemory(DAddr addr, u64 size) {}
  59. void RasterizerNull::ModifyGPUMemory(size_t as_id, GPUVAddr addr, u64 size) {}
  60. void RasterizerNull::SignalFence(std::function<void()>&& func) {
  61. func();
  62. }
  63. void RasterizerNull::SyncOperation(std::function<void()>&& func) {
  64. func();
  65. }
  66. void RasterizerNull::SignalSyncPoint(u32 value) {
  67. auto& syncpoint_manager = m_gpu.Host1x().GetSyncpointManager();
  68. syncpoint_manager.IncrementGuest(value);
  69. syncpoint_manager.IncrementHost(value);
  70. }
  71. void RasterizerNull::SignalReference() {}
  72. void RasterizerNull::ReleaseFences(bool) {}
  73. void RasterizerNull::FlushAndInvalidateRegion(DAddr addr, u64 size, VideoCommon::CacheType) {}
  74. void RasterizerNull::WaitForIdle() {}
  75. void RasterizerNull::FragmentBarrier() {}
  76. void RasterizerNull::TiledCacheBarrier() {}
  77. void RasterizerNull::FlushCommands() {}
  78. void RasterizerNull::TickFrame() {}
  79. Tegra::Engines::AccelerateDMAInterface& RasterizerNull::AccessAccelerateDMA() {
  80. return m_accelerate_dma;
  81. }
  82. bool RasterizerNull::AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src,
  83. const Tegra::Engines::Fermi2D::Surface& dst,
  84. const Tegra::Engines::Fermi2D::Config& copy_config) {
  85. return true;
  86. }
  87. void RasterizerNull::AccelerateInlineToMemory(GPUVAddr address, size_t copy_size,
  88. std::span<const u8> memory) {}
  89. bool RasterizerNull::AccelerateDisplay(const Tegra::FramebufferConfig& config,
  90. DAddr framebuffer_addr, u32 pixel_stride) {
  91. return true;
  92. }
  93. void RasterizerNull::LoadDiskResources(u64 title_id, std::stop_token stop_loading,
  94. const VideoCore::DiskResourceLoadCallback& callback) {}
  95. void RasterizerNull::InitializeChannel(Tegra::Control::ChannelState& channel) {
  96. CreateChannel(channel);
  97. }
  98. void RasterizerNull::BindChannel(Tegra::Control::ChannelState& channel) {
  99. BindToChannel(channel.bind_id);
  100. }
  101. void RasterizerNull::ReleaseChannel(s32 channel_id) {
  102. EraseChannel(channel_id);
  103. }
  104. } // namespace Null