summaryrefslogtreecommitdiffstats
path: root/src/video_core/shader/glsl_decompiler.h
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2018-12-21 01:45:49 +0100
committerReinUsesLisp <reinuseslisp@airmail.cc>2019-01-15 21:54:50 +0100
commit0c6fb456e0abae4f6552960543e2aabbb3985f7f (patch)
tree22171752fe9afe2c35984e7e7376ff89bafaa908 /src/video_core/shader/glsl_decompiler.h
parentshader_ir: Add condition code helper (diff)
downloadyuzu-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.h88
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