rasterizer_accelerated.h 1.2 KB

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