diff options
author | ameerj <aj662@drexel.edu> | 2020-10-27 04:07:36 +0100 |
---|---|---|
committer | ameerj <aj662@drexel.edu> | 2020-10-27 04:07:36 +0100 |
commit | eb67a45ca82bc01ac843c853fd3c17f2a90e0250 (patch) | |
tree | 11e78a1b728ef0a608fae43d966b613eb4e6d58a /src/video_core/command_classes/host1x.cpp | |
parent | Merge pull request #4827 from lioncash/trunc (diff) | |
download | yuzu-eb67a45ca82bc01ac843c853fd3c17f2a90e0250.tar yuzu-eb67a45ca82bc01ac843c853fd3c17f2a90e0250.tar.gz yuzu-eb67a45ca82bc01ac843c853fd3c17f2a90e0250.tar.bz2 yuzu-eb67a45ca82bc01ac843c853fd3c17f2a90e0250.tar.lz yuzu-eb67a45ca82bc01ac843c853fd3c17f2a90e0250.tar.xz yuzu-eb67a45ca82bc01ac843c853fd3c17f2a90e0250.tar.zst yuzu-eb67a45ca82bc01ac843c853fd3c17f2a90e0250.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/command_classes/host1x.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/video_core/command_classes/host1x.cpp b/src/video_core/command_classes/host1x.cpp new file mode 100644 index 000000000..a5234ee47 --- /dev/null +++ b/src/video_core/command_classes/host1x.cpp @@ -0,0 +1,39 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "common/assert.h" +#include "video_core/command_classes/host1x.h" +#include "video_core/gpu.h" + +Tegra::Host1x::Host1x(GPU& gpu_) : gpu(gpu_) {} + +Tegra::Host1x::~Host1x() = default; + +void Tegra::Host1x::StateWrite(u32 offset, u32 arguments) { + u8* const state_offset = reinterpret_cast<u8*>(&state) + offset * sizeof(u32); + std::memcpy(state_offset, &arguments, sizeof(u32)); +} + +void Tegra::Host1x::ProcessMethod(Host1x::Method method, const std::vector<u32>& arguments) { + StateWrite(static_cast<u32>(method), arguments[0]); + switch (method) { + case Method::WaitSyncpt: + Execute(arguments[0]); + break; + case Method::LoadSyncptPayload32: + syncpoint_value = arguments[0]; + break; + case Method::WaitSyncpt32: + Execute(arguments[0]); + break; + default: + UNIMPLEMENTED_MSG("Host1x method 0x{:X}", static_cast<u32>(method)); + break; + } +} + +void Tegra::Host1x::Execute(u32 data) { + // This method waits on a valid syncpoint. + // TODO: Implement when proper Async is in place +} |