rasterizer_accelerated.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <array>
  5. #include <atomic>
  6. #include "common/common_types.h"
  7. #include "video_core/rasterizer_interface.h"
  8. namespace Core::Memory {
  9. class Memory;
  10. }
  11. namespace VideoCore {
  12. /// Implements the shared part in GPU accelerated rasterizers in RasterizerInterface.
  13. class RasterizerAccelerated : public RasterizerInterface {
  14. public:
  15. explicit RasterizerAccelerated(Core::Memory::Memory& cpu_memory_);
  16. ~RasterizerAccelerated() override;
  17. void UpdatePagesCachedCount(VAddr addr, u64 size, int delta) override;
  18. private:
  19. class CacheEntry final {
  20. public:
  21. CacheEntry() = default;
  22. std::atomic_uint16_t& Count(std::size_t page) {
  23. return values[page & 3];
  24. }
  25. const std::atomic_uint16_t& Count(std::size_t page) const {
  26. return values[page & 3];
  27. }
  28. private:
  29. std::array<std::atomic_uint16_t, 4> values{};
  30. };
  31. static_assert(sizeof(CacheEntry) == 8, "CacheEntry should be 8 bytes!");
  32. using CachedPages = std::array<CacheEntry, 0x2000000>;
  33. std::unique_ptr<CachedPages> cached_pages;
  34. Core::Memory::Memory& cpu_memory;
  35. };
  36. } // namespace VideoCore