// Copyright 2019 yuzu Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include "common/common_types.h" #include "video_core/gpu.h" namespace VideoCommon { class MapIntervalBase { public: MapIntervalBase(const VAddr start, const VAddr end, const GPUVAddr gpu_addr) : start{start}, end{end}, gpu_addr{gpu_addr} {} void SetCpuAddress(VAddr new_cpu_addr) { cpu_addr = new_cpu_addr; } VAddr GetCpuAddress() const { return cpu_addr; } GPUVAddr GetGpuAddress() const { return gpu_addr; } bool IsInside(const VAddr other_start, const VAddr other_end) const { return (start <= other_start && other_end <= end); } bool operator==(const MapIntervalBase& rhs) const { return std::tie(start, end) == std::tie(rhs.start, rhs.end); } bool operator!=(const MapIntervalBase& rhs) const { return !operator==(rhs); } void MarkAsRegistered(const bool registered) { is_registered = registered; } bool IsRegistered() const { return is_registered; } void SetMemoryMarked(bool is_memory_marked_) { is_memory_marked = is_memory_marked_; } bool IsMemoryMarked() const { return is_memory_marked; } void SetSyncPending(bool is_sync_pending_) { is_sync_pending = is_sync_pending_; } bool IsSyncPending() const { return is_sync_pending; } VAddr GetStart() const { return start; } VAddr GetEnd() const { return end; } void MarkAsModified(const bool is_modified_, const u64 tick) { is_modified = is_modified_; ticks = tick; } bool IsModified() const { return is_modified; } u64 GetModificationTick() const { return ticks; } void MarkAsWritten(const bool is_written_) { is_written = is_written_; } bool IsWritten() const { return is_written; } private: VAddr start; VAddr end; GPUVAddr gpu_addr; VAddr cpu_addr{}; bool is_written{}; bool is_modified{}; bool is_registered{}; bool is_memory_marked{}; bool is_sync_pending{}; u64 ticks{}; }; } // namespace VideoCommon