|
|
@ -0,0 +1,58 @@ |
|
|
|
|
|
// Copyright 2018 yuzu Emulator Project
|
|
|
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
#include <queue>
|
|
|
|
|
|
#include "common/assert.h"
|
|
|
|
|
|
#include "common/common_types.h"
|
|
|
|
|
|
#include "video_core/renderer_opengl/gl_shader_decompiler.h"
|
|
|
|
|
|
|
|
|
|
|
|
namespace Maxwell3D { |
|
|
|
|
|
namespace Shader { |
|
|
|
|
|
namespace Decompiler { |
|
|
|
|
|
|
|
|
|
|
|
constexpr u32 PROGRAM_END = MAX_PROGRAM_CODE_LENGTH; |
|
|
|
|
|
|
|
|
|
|
|
class Impl { |
|
|
|
|
|
public: |
|
|
|
|
|
Impl(const std::array<u32, MAX_PROGRAM_CODE_LENGTH>& program_code, |
|
|
|
|
|
const std::array<u32, MAX_SWIZZLE_DATA_LENGTH>& swizzle_data, u32 main_offset, |
|
|
|
|
|
const std::function<std::string(u32)>& inputreg_getter, |
|
|
|
|
|
const std::function<std::string(u32)>& outputreg_getter, bool sanitize_mul, |
|
|
|
|
|
const std::string& emit_cb, const std::string& setemit_cb) |
|
|
|
|
|
: program_code(program_code), swizzle_data(swizzle_data), main_offset(main_offset), |
|
|
|
|
|
inputreg_getter(inputreg_getter), outputreg_getter(outputreg_getter), |
|
|
|
|
|
sanitize_mul(sanitize_mul), emit_cb(emit_cb), setemit_cb(setemit_cb) {} |
|
|
|
|
|
|
|
|
|
|
|
std::string Decompile() { |
|
|
|
|
|
UNIMPLEMENTED(); |
|
|
|
|
|
return {}; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
|
const std::array<u32, MAX_PROGRAM_CODE_LENGTH>& program_code; |
|
|
|
|
|
const std::array<u32, MAX_SWIZZLE_DATA_LENGTH>& swizzle_data; |
|
|
|
|
|
u32 main_offset; |
|
|
|
|
|
const std::function<std::string(u32)>& inputreg_getter; |
|
|
|
|
|
const std::function<std::string(u32)>& outputreg_getter; |
|
|
|
|
|
bool sanitize_mul; |
|
|
|
|
|
const std::string& emit_cb; |
|
|
|
|
|
const std::string& setemit_cb; |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
std::string DecompileProgram(const std::array<u32, MAX_PROGRAM_CODE_LENGTH>& program_code, |
|
|
|
|
|
const std::array<u32, MAX_SWIZZLE_DATA_LENGTH>& swizzle_data, |
|
|
|
|
|
u32 main_offset, |
|
|
|
|
|
const std::function<std::string(u32)>& inputreg_getter, |
|
|
|
|
|
const std::function<std::string(u32)>& outputreg_getter, |
|
|
|
|
|
bool sanitize_mul, const std::string& emit_cb, |
|
|
|
|
|
const std::string& setemit_cb) { |
|
|
|
|
|
Impl impl(program_code, swizzle_data, main_offset, inputreg_getter, outputreg_getter, |
|
|
|
|
|
sanitize_mul, emit_cb, setemit_cb); |
|
|
|
|
|
return impl.Decompile(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} // namespace Decompiler
|
|
|
|
|
|
} // namespace Shader
|
|
|
|
|
|
} // namespace Maxwell3D
|