mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-25 22:57:22 +00:00
renderer_gl: Port over gl_shader_decompiler module from Citra.
This commit is contained in:
parent
a3e10b1a72
commit
4bdb46e4c2
3 changed files with 87 additions and 0 deletions
|
@ -16,6 +16,8 @@ add_library(video_core STATIC
|
||||||
renderer_opengl/gl_rasterizer_cache.cpp
|
renderer_opengl/gl_rasterizer_cache.cpp
|
||||||
renderer_opengl/gl_rasterizer_cache.h
|
renderer_opengl/gl_rasterizer_cache.h
|
||||||
renderer_opengl/gl_resource_manager.h
|
renderer_opengl/gl_resource_manager.h
|
||||||
|
renderer_opengl/gl_shader_decompiler.cpp
|
||||||
|
renderer_opengl/gl_shader_decompiler.h
|
||||||
renderer_opengl/gl_shader_util.cpp
|
renderer_opengl/gl_shader_util.cpp
|
||||||
renderer_opengl/gl_shader_util.h
|
renderer_opengl/gl_shader_util.h
|
||||||
renderer_opengl/gl_state.cpp
|
renderer_opengl/gl_state.cpp
|
||||||
|
|
58
src/video_core/renderer_opengl/gl_shader_decompiler.cpp
Normal file
58
src/video_core/renderer_opengl/gl_shader_decompiler.cpp
Normal file
|
@ -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
|
27
src/video_core/renderer_opengl/gl_shader_decompiler.h
Normal file
27
src/video_core/renderer_opengl/gl_shader_decompiler.h
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright 2018 yuzu Emulator Project
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
#include <functional>
|
||||||
|
#include <string>
|
||||||
|
#include "common/common_types.h"
|
||||||
|
|
||||||
|
namespace Maxwell3D {
|
||||||
|
namespace Shader {
|
||||||
|
namespace Decompiler {
|
||||||
|
|
||||||
|
constexpr size_t MAX_PROGRAM_CODE_LENGTH{0x100000};
|
||||||
|
constexpr size_t MAX_SWIZZLE_DATA_LENGTH{0x100000};
|
||||||
|
|
||||||
|
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 = "");
|
||||||
|
|
||||||
|
} // namespace Decompiler
|
||||||
|
} // namespace Shader
|
||||||
|
} // namespace Maxwell3D
|
Loading…
Reference in a new issue