Merge pull request #1131 from bunnei/impl-tex3d-texcube

gl_shader_decompiler: Implement TextureCube/Texture3D for TEX/TEXS.
This commit is contained in:
bunnei 2018-08-20 22:15:18 -04:00 committed by GitHub
commit e33452f7e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 2 deletions

View File

@ -477,7 +477,9 @@ union Instruction {
if (texture_info >= 12 && texture_info <= 13) if (texture_info >= 12 && texture_info <= 13)
return TextureType::TextureCube; return TextureType::TextureCube;
UNIMPLEMENTED(); LOG_CRITICAL(HW_GPU, "Unhandled texture_info: {}",
static_cast<u32>(texture_info.Value()));
UNREACHABLE();
} }
bool IsArrayTexture() const { bool IsArrayTexture() const {
@ -523,7 +525,9 @@ union Instruction {
return TextureType::Texture3D; return TextureType::Texture3D;
} }
UNIMPLEMENTED(); LOG_CRITICAL(HW_GPU, "Unhandled texture_info: {}",
static_cast<u32>(texture_info.Value()));
UNREACHABLE();
} }
bool IsArrayTexture() const { bool IsArrayTexture() const {

View File

@ -1568,6 +1568,14 @@ private:
coord = "vec3 coords = vec3(" + x + ", " + y + ", " + z + ");"; coord = "vec3 coords = vec3(" + x + ", " + y + ", " + z + ");";
break; 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: default:
LOG_CRITICAL(HW_GPU, "Unhandled texture type {}", LOG_CRITICAL(HW_GPU, "Unhandled texture type {}",
static_cast<u32>(instr.tex.texture_type.Value())); static_cast<u32>(instr.tex.texture_type.Value()));
@ -1613,6 +1621,13 @@ private:
} }
break; 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: { case Tegra::Shader::TextureType::TextureCube: {
std::string x = regs.GetRegisterAsFloat(instr.gpr8); std::string x = regs.GetRegisterAsFloat(instr.gpr8);
std::string y = regs.GetRegisterAsFloat(instr.gpr8.Value() + 1); std::string y = regs.GetRegisterAsFloat(instr.gpr8.Value() + 1);