diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-04-24 06:44:14 +0200 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-04-26 06:38:51 +0200 |
commit | ddd82ef42b7bb7bea4c80edeb96bca8512580df3 (patch) | |
tree | b2b09f597fe519128d065f034d51103f478e6776 /src/video_core/shader/memory_util.h | |
parent | Merge pull request #3768 from H27CK/cmd-title-fmt (diff) | |
download | yuzu-ddd82ef42b7bb7bea4c80edeb96bca8512580df3.tar yuzu-ddd82ef42b7bb7bea4c80edeb96bca8512580df3.tar.gz yuzu-ddd82ef42b7bb7bea4c80edeb96bca8512580df3.tar.bz2 yuzu-ddd82ef42b7bb7bea4c80edeb96bca8512580df3.tar.lz yuzu-ddd82ef42b7bb7bea4c80edeb96bca8512580df3.tar.xz yuzu-ddd82ef42b7bb7bea4c80edeb96bca8512580df3.tar.zst yuzu-ddd82ef42b7bb7bea4c80edeb96bca8512580df3.zip |
Diffstat (limited to 'src/video_core/shader/memory_util.h')
-rw-r--r-- | src/video_core/shader/memory_util.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/video_core/shader/memory_util.h b/src/video_core/shader/memory_util.h new file mode 100644 index 000000000..be90d24fd --- /dev/null +++ b/src/video_core/shader/memory_util.h @@ -0,0 +1,47 @@ +// Copyright 2020 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/common_types.h" +#include "video_core/engines/maxwell_3d.h" +#include "video_core/engines/shader_type.h" + +namespace Core { +class System; +} + +namespace Tegra { +class MemoryManager; +} + +namespace VideoCommon::Shader { + +using ProgramCode = std::vector<u64>; + +constexpr u32 STAGE_MAIN_OFFSET = 10; +constexpr u32 KERNEL_MAIN_OFFSET = 0; + +/// Gets the address for the specified shader stage program +GPUVAddr GetShaderAddress(Core::System& system, + Tegra::Engines::Maxwell3D::Regs::ShaderProgram program); + +/// Gets if the current instruction offset is a scheduler instruction +bool IsSchedInstruction(std::size_t offset, std::size_t main_offset); + +/// Calculates the size of a program stream +std::size_t CalculateProgramSize(const ProgramCode& program, bool is_compute); + +/// Gets the shader program code from memory for the specified address +ProgramCode GetShaderCode(Tegra::MemoryManager& memory_manager, GPUVAddr gpu_addr, + const u8* host_ptr, bool is_compute); + +/// Hashes one (or two) program streams +u64 GetUniqueIdentifier(Tegra::Engines::ShaderType shader_type, bool is_a, const ProgramCode& code, + const ProgramCode& code_b = {}); + +} // namespace VideoCommon::Shader |