diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2018-12-21 01:45:49 +0100 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-01-15 21:54:50 +0100 |
commit | 0c6fb456e0abae4f6552960543e2aabbb3985f7f (patch) | |
tree | 22171752fe9afe2c35984e7e7376ff89bafaa908 /src/video_core/shader/glsl_decompiler.h | |
parent | shader_ir: Add condition code helper (diff) | |
download | yuzu-0c6fb456e0abae4f6552960543e2aabbb3985f7f.tar yuzu-0c6fb456e0abae4f6552960543e2aabbb3985f7f.tar.gz yuzu-0c6fb456e0abae4f6552960543e2aabbb3985f7f.tar.bz2 yuzu-0c6fb456e0abae4f6552960543e2aabbb3985f7f.tar.lz yuzu-0c6fb456e0abae4f6552960543e2aabbb3985f7f.tar.xz yuzu-0c6fb456e0abae4f6552960543e2aabbb3985f7f.tar.zst yuzu-0c6fb456e0abae4f6552960543e2aabbb3985f7f.zip |
Diffstat (limited to 'src/video_core/shader/glsl_decompiler.h')
-rw-r--r-- | src/video_core/shader/glsl_decompiler.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/video_core/shader/glsl_decompiler.h b/src/video_core/shader/glsl_decompiler.h new file mode 100644 index 000000000..7be461f1b --- /dev/null +++ b/src/video_core/shader/glsl_decompiler.h @@ -0,0 +1,88 @@ +// Copyright 2018 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <array> +#include <string> +#include <utility> +#include <vector> +#include "common/common_types.h" +#include "video_core/engines/maxwell_3d.h" +#include "video_core/shader/shader_ir.h" + +namespace VideoCommon::Shader { +class ShaderIR; +} + +namespace OpenGL::GLShader { + +using Maxwell = Tegra::Engines::Maxwell3D::Regs; + +class ConstBufferEntry : public VideoCommon::Shader::ConstBuffer { +public: + explicit ConstBufferEntry(const VideoCommon::Shader::ConstBuffer& entry, + Maxwell::ShaderStage stage, const std::string& name, u32 index) + : VideoCommon::Shader::ConstBuffer{entry}, stage{stage}, name{name}, index{index} {} + + const std::string& GetName() const { + return name; + } + + Maxwell::ShaderStage GetStage() const { + return stage; + } + + u32 GetIndex() const { + return index; + } + + u32 GetHash() const { + return (static_cast<u32>(stage) << 16) | index; + } + +private: + std::string name; + Maxwell::ShaderStage stage{}; + u32 index{}; +}; + +class SamplerEntry : public VideoCommon::Shader::Sampler { +public: + explicit SamplerEntry(const VideoCommon::Shader::Sampler& entry, Maxwell::ShaderStage stage, + const std::string& name) + : VideoCommon::Shader::Sampler{entry}, stage{stage}, name{name} {} + + const std::string& GetName() const { + return name; + } + + Maxwell::ShaderStage GetStage() const { + return stage; + } + + u32 GetHash() const { + return (static_cast<u32>(stage) << 16) | GetIndex(); + } + +private: + std::string name; + Maxwell::ShaderStage stage{}; +}; + +struct ShaderEntries { + std::vector<ConstBufferEntry> const_buffers; + std::vector<SamplerEntry> samplers; + std::array<bool, Maxwell::NumClipDistances> clip_distances{}; + std::size_t shader_length{}; +}; + +using ProgramResult = std::pair<std::string, ShaderEntries>; + +std::string GetCommonDeclarations(); + +ProgramResult Decompile(const VideoCommon::Shader::ShaderIR& ir, Maxwell::ShaderStage stage, + const std::string& suffix); + +} // namespace OpenGL::GLShader
\ No newline at end of file |