diff options
author | bunnei <bunneidev@gmail.com> | 2019-05-09 19:19:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-09 19:19:22 +0200 |
commit | c27b81cb85d11b4c31f38c15a5e8e6d7c7211df2 (patch) | |
tree | c91fe87f5a025effd3941d38653cda0920c68962 /src/video_core/engines/engine_upload.h | |
parent | Merge pull request #2440 from lioncash/dynarmic (diff) | |
parent | Refactors and name corrections. (diff) | |
download | yuzu-c27b81cb85d11b4c31f38c15a5e8e6d7c7211df2.tar yuzu-c27b81cb85d11b4c31f38c15a5e8e6d7c7211df2.tar.gz yuzu-c27b81cb85d11b4c31f38c15a5e8e6d7c7211df2.tar.bz2 yuzu-c27b81cb85d11b4c31f38c15a5e8e6d7c7211df2.tar.lz yuzu-c27b81cb85d11b4c31f38c15a5e8e6d7c7211df2.tar.xz yuzu-c27b81cb85d11b4c31f38c15a5e8e6d7c7211df2.tar.zst yuzu-c27b81cb85d11b4c31f38c15a5e8e6d7c7211df2.zip |
Diffstat (limited to 'src/video_core/engines/engine_upload.h')
-rw-r--r-- | src/video_core/engines/engine_upload.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/video_core/engines/engine_upload.h b/src/video_core/engines/engine_upload.h new file mode 100644 index 000000000..9c6e0d21c --- /dev/null +++ b/src/video_core/engines/engine_upload.h @@ -0,0 +1,75 @@ +// Copyright 2019 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <cstddef> +#include <vector> +#include "common/bit_field.h" +#include "common/common_funcs.h" +#include "common/common_types.h" + +namespace Tegra { +class MemoryManager; +} + +namespace Tegra::Engines::Upload { + +struct Registers { + u32 line_length_in; + u32 line_count; + + struct { + u32 address_high; + u32 address_low; + u32 pitch; + union { + BitField<0, 4, u32> block_width; + BitField<4, 4, u32> block_height; + BitField<8, 4, u32> block_depth; + }; + u32 width; + u32 height; + u32 depth; + u32 z; + u32 x; + u32 y; + + GPUVAddr Address() const { + return static_cast<GPUVAddr>((static_cast<GPUVAddr>(address_high) << 32) | address_low); + } + + u32 BlockWidth() const { + return 1U << block_width.Value(); + } + + u32 BlockHeight() const { + return 1U << block_height.Value(); + } + + u32 BlockDepth() const { + return 1U << block_depth.Value(); + } + } dest; +}; + +class State { +public: + State(MemoryManager& memory_manager, Registers& regs); + ~State() = default; + + void ProcessExec(const bool is_linear); + void ProcessData(const u32 data, const bool is_last_call); + +private: + u32 write_offset = 0; + u32 copy_size = 0; + std::vector<u8> inner_buffer; + std::vector<u8> tmp_buffer; + bool is_linear = false; + Registers& regs; + MemoryManager& memory_manager; +}; + +} // namespace Tegra::Engines::Upload |