gl_shader_decompiler: Add shader stage hint.

This commit is contained in:
bunnei 2018-04-09 22:07:30 -04:00
parent a992aac5eb
commit 50023bdae7
2 changed files with 12 additions and 5 deletions

View file

@ -128,8 +128,9 @@ private:
class GLSLGenerator {
public:
GLSLGenerator(const std::set<Subroutine>& subroutines, const ProgramCode& program_code,
u32 main_offset)
: subroutines(subroutines), program_code(program_code), main_offset(main_offset) {
u32 main_offset, Maxwell3D::Regs::ShaderStage stage)
: subroutines(subroutines), program_code(program_code), main_offset(main_offset),
stage(stage) {
Generate();
}
@ -429,6 +430,7 @@ private:
const std::set<Subroutine>& subroutines;
const ProgramCode& program_code;
const u32 main_offset;
Maxwell3D::Regs::ShaderStage stage;
ShaderWriter shader;
ShaderWriter declarations;
@ -443,10 +445,11 @@ std::string GetCommonDeclarations() {
return "bool exec_shader();";
}
boost::optional<std::string> DecompileProgram(const ProgramCode& program_code, u32 main_offset) {
boost::optional<std::string> DecompileProgram(const ProgramCode& program_code, u32 main_offset,
Maxwell3D::Regs::ShaderStage stage) {
try {
auto subroutines = ControlFlowAnalyzer(program_code, main_offset).GetSubroutines();
GLSLGenerator generator(subroutines, program_code, main_offset);
GLSLGenerator generator(subroutines, program_code, main_offset, stage);
return generator.GetShaderCode();
} catch (const DecompileFail& exception) {
LOG_ERROR(HW_GPU, "Shader decompilation failed: %s", exception.what());

View file

@ -7,14 +7,18 @@
#include <string>
#include <boost/optional.hpp>
#include "common/common_types.h"
#include "video_core/engines/maxwell_3d.h"
#include "video_core/renderer_opengl/gl_shader_gen.h"
namespace GLShader {
namespace Decompiler {
using Tegra::Engines::Maxwell3D;
std::string GetCommonDeclarations();
boost::optional<std::string> DecompileProgram(const ProgramCode& program_code, u32 main_offset);
boost::optional<std::string> DecompileProgram(const ProgramCode& program_code, u32 main_offset,
Maxwell3D::Regs::ShaderStage stage);
} // namespace Decompiler
} // namespace GLShader