| @@ -2026,9 +2026,12 @@ private: | ||||
|                 break; | ||||
|             } | ||||
|             case OpCode::Id::TLDS: { | ||||
|                 ASSERT(instr.tlds.GetTextureType() == Tegra::Shader::TextureType::Texture2D); | ||||
|                 ASSERT(instr.tlds.IsArrayTexture() == false); | ||||
|                 std::string coord; | ||||
|                 const Tegra::Shader::TextureType texture_type{instr.tlds.GetTextureType()}; | ||||
|                 const bool is_array{instr.tlds.IsArrayTexture()}; | ||||
|  | ||||
|                 ASSERT(texture_type == Tegra::Shader::TextureType::Texture2D); | ||||
|                 ASSERT(is_array == false); | ||||
|  | ||||
|                 ASSERT_MSG(!instr.tlds.UsesMiscMode(Tegra::Shader::TextureMiscMode::NODEP), | ||||
|                            "NODEP is not implemented"); | ||||
| @@ -2037,9 +2040,14 @@ private: | ||||
|                 ASSERT_MSG(!instr.tlds.UsesMiscMode(Tegra::Shader::TextureMiscMode::MZ), | ||||
|                            "MZ is not implemented"); | ||||
|  | ||||
|                 switch (instr.tlds.GetTextureType()) { | ||||
|                 switch (texture_type) { | ||||
|                 case Tegra::Shader::TextureType::Texture1D: { | ||||
|                     const std::string x = regs.GetRegisterAsInteger(instr.gpr8); | ||||
|                     coord = "int coords = " + x + ';'; | ||||
|                     break; | ||||
|                 } | ||||
|                 case Tegra::Shader::TextureType::Texture2D: { | ||||
|                     if (instr.tlds.IsArrayTexture()) { | ||||
|                     if (is_array) { | ||||
|                         LOG_CRITICAL(HW_GPU, "Unhandled 2d array texture"); | ||||
|                         UNREACHABLE(); | ||||
|                     } else { | ||||
| @@ -2051,11 +2059,11 @@ private: | ||||
|                 } | ||||
|                 default: | ||||
|                     LOG_CRITICAL(HW_GPU, "Unhandled texture type {}", | ||||
|                                  static_cast<u32>(instr.tlds.GetTextureType())); | ||||
|                                  static_cast<u32>(texture_type)); | ||||
|                     UNREACHABLE(); | ||||
|                 } | ||||
|                 const std::string sampler = GetSampler(instr.sampler, instr.tlds.GetTextureType(), | ||||
|                                                        instr.tlds.IsArrayTexture()); | ||||
|  | ||||
|                 const std::string sampler = GetSampler(instr.sampler, texture_type, is_array); | ||||
|                 const std::string texture = "texelFetch(" + sampler + ", coords, 0)"; | ||||
|                 WriteTexsInstruction(instr, coord, texture); | ||||
|                 break; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user