rasterizer_accelerated.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. std::array<CacheEntry, 0x2000000> cached_pages;
  33. Core::Memory::Memory& cpu_memory;
  34. };
  35. } // namespace VideoCore