diff options
author | bunnei <bunneidev@gmail.com> | 2018-04-15 18:12:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-15 18:12:17 +0200 |
commit | 34264879b359107ec0c2fdb6af4b17faf52e4a6a (patch) | |
tree | f283b7d9b9014488dabd45e97f5687c2d67e842d /src/video_core/renderer_opengl/gl_shader_gen.cpp | |
parent | Merge pull request #328 from Subv/constbuffers (diff) | |
parent | shaders: Expose hints about used const buffers. (diff) | |
download | yuzu-34264879b359107ec0c2fdb6af4b17faf52e4a6a.tar yuzu-34264879b359107ec0c2fdb6af4b17faf52e4a6a.tar.gz yuzu-34264879b359107ec0c2fdb6af4b17faf52e4a6a.tar.bz2 yuzu-34264879b359107ec0c2fdb6af4b17faf52e4a6a.tar.lz yuzu-34264879b359107ec0c2fdb6af4b17faf52e4a6a.tar.xz yuzu-34264879b359107ec0c2fdb6af4b17faf52e4a6a.tar.zst yuzu-34264879b359107ec0c2fdb6af4b17faf52e4a6a.zip |
Diffstat (limited to 'src/video_core/renderer_opengl/gl_shader_gen.cpp')
-rw-r--r-- | src/video_core/renderer_opengl/gl_shader_gen.cpp | 54 |
1 files changed, 48 insertions, 6 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index 524c2cfb5..aeea1c805 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -3,18 +3,60 @@ // Refer to the license.txt file included. #include "common/assert.h" +#include "video_core/engines/maxwell_3d.h" +#include "video_core/renderer_opengl/gl_shader_decompiler.h" #include "video_core/renderer_opengl/gl_shader_gen.h" namespace GLShader { -std::string GenerateVertexShader(const ShaderSetup& setup, const MaxwellVSConfig& config) { - UNREACHABLE(); - return {}; +using Tegra::Engines::Maxwell3D; + +static constexpr u32 PROGRAM_OFFSET{10}; + +ProgramResult GenerateVertexShader(const ShaderSetup& setup, const MaxwellVSConfig& config) { + std::string out = "#version 430 core\n"; + out += "#extension GL_ARB_separate_shader_objects : enable\n\n"; + out += Decompiler::GetCommonDeclarations(); + + ProgramResult program = Decompiler::DecompileProgram(setup.program_code, PROGRAM_OFFSET, + Maxwell3D::Regs::ShaderStage::Vertex) + .get_value_or({}); + out += R"( + +out gl_PerVertex { + vec4 gl_Position; +}; + +void main() { + exec_shader(); +} + +)"; + out += program.first; + return {out, program.second}; +} + +ProgramResult GenerateFragmentShader(const ShaderSetup& setup, const MaxwellFSConfig& config) { + std::string out = "#version 430 core\n"; + out += "#extension GL_ARB_separate_shader_objects : enable\n\n"; + out += Decompiler::GetCommonDeclarations(); + + ProgramResult program = Decompiler::DecompileProgram(setup.program_code, PROGRAM_OFFSET, + Maxwell3D::Regs::ShaderStage::Fragment) + .get_value_or({}); + out += R"( + +out vec4 color; + +uniform sampler2D tex[32]; + +void main() { + exec_shader(); } -std::string GenerateFragmentShader(const ShaderSetup& setup, const MaxwellFSConfig& config) { - UNREACHABLE(); - return {}; +)"; + out += program.first; + return {out, program.second}; } } // namespace GLShader |