aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_opengl
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2018-08-20 22:15:18 -0400
committerGitHub <noreply@github.com>2018-08-20 22:15:18 -0400
commite33452f7e8c80c8eb6e4704af6b53f7fb7aa596d (patch)
treed679cafd3f06525d2f0995d8fb8dedcd0d0234c1 /src/video_core/renderer_opengl
parent5aaee2ff8dcb2ce396aa7e8556f61f6a02f2488c (diff)
parent2ae88feea771942afc3ec3422685725e5abd0e78 (diff)
Merge pull request #1131 from bunnei/impl-tex3d-texcube
gl_shader_decompiler: Implement TextureCube/Texture3D for TEX/TEXS.
Diffstat (limited to 'src/video_core/renderer_opengl')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index 214a5fa9a..6fb663bbc 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -1568,6 +1568,14 @@ private:
coord = "vec3 coords = vec3(" + x + ", " + y + ", " + z + ");";
break;
}
+ case Tegra::Shader::TextureType::TextureCube: {
+ std::string x = regs.GetRegisterAsFloat(instr.gpr8);
+ std::string y = regs.GetRegisterAsFloat(instr.gpr8.Value() + 1);
+ std::string z = regs.GetRegisterAsFloat(instr.gpr8.Value() + 2);
+ ASSERT(instr.gpr20.Value() == Register::ZeroIndex);
+ coord = "vec3 coords = vec3(" + x + ", " + y + ", " + z + ");";
+ break;
+ }
default:
LOG_CRITICAL(HW_GPU, "Unhandled texture type {}",
static_cast<u32>(instr.tex.texture_type.Value()));
@@ -1613,6 +1621,13 @@ private:
}
break;
}
+ case Tegra::Shader::TextureType::Texture3D: {
+ std::string x = regs.GetRegisterAsFloat(instr.gpr8);
+ std::string y = regs.GetRegisterAsFloat(instr.gpr20);
+ std::string z = regs.GetRegisterAsFloat(instr.gpr20.Value() + 1);
+ coord = "vec3 coords = vec3(" + x + ", " + y + ", " + z + ");";
+ break;
+ }
case Tegra::Shader::TextureType::TextureCube: {
std::string x = regs.GetRegisterAsFloat(instr.gpr8);
std::string y = regs.GetRegisterAsFloat(instr.gpr8.Value() + 1);