Implement TMML_B
This commit is contained in:
		 Fernando Sahmkow
					Fernando Sahmkow
				
			
				
					committed by
					
						 FernandoS27
						FernandoS27
					
				
			
			
				
	
			
			
			 FernandoS27
						FernandoS27
					
				
			
						parent
						
							ac3ba9a33e
						
					
				
				
					commit
					189bd1980c
				
			| @@ -40,7 +40,7 @@ static std::size_t GetCoordCount(TextureType texture_type) { | ||||
| u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | ||||
|     const Instruction instr = {program_code[pc]}; | ||||
|     const auto opcode = OpCode::Decode(instr); | ||||
|  | ||||
|     bool is_bindless = false; | ||||
|     switch (opcode->get().GetId()) { | ||||
|     case OpCode::Id::TEX: { | ||||
|         if (instr.tex.UsesMiscMode(TextureMiscMode::NODEP)) { | ||||
| @@ -185,6 +185,8 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | ||||
|         } | ||||
|         break; | ||||
|     } | ||||
|     case OpCode::Id::TMML_B: | ||||
|         is_bindless = true; | ||||
|     case OpCode::Id::TMML: { | ||||
|         UNIMPLEMENTED_IF_MSG(instr.tmml.UsesMiscMode(Tegra::Shader::TextureMiscMode::NDV), | ||||
|                              "NDV is not implemented"); | ||||
| @@ -195,7 +197,9 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | ||||
|  | ||||
|         auto texture_type = instr.tmml.texture_type.Value(); | ||||
|         const bool is_array = instr.tmml.array != 0; | ||||
|         const auto& sampler = GetSampler(instr.sampler, texture_type, is_array, false); | ||||
|         const auto& sampler = !is_bindless | ||||
|                                   ? GetSampler(instr.sampler, texture_type, is_array, false) | ||||
|                                   : GetBindlessSampler(instr.gpr20, texture_type, is_array, false); | ||||
|  | ||||
|         std::vector<Node> coords; | ||||
|  | ||||
| @@ -271,11 +275,12 @@ const Sampler& ShaderIR::GetSampler(const Tegra::Shader::Sampler& sampler, Textu | ||||
|     return *used_samplers.emplace(entry).first; | ||||
| } | ||||
|  | ||||
| const Sampler& ShaderIR::GetBindlessSampler(const Tegra::Shader::Register& reg, | ||||
|                                             TextureType type, bool is_array, bool is_shadow) { | ||||
| const Sampler& ShaderIR::GetBindlessSampler(const Tegra::Shader::Register& reg, TextureType type, | ||||
|                                             bool is_array, bool is_shadow) { | ||||
|  | ||||
|     const Node sampler_register = GetRegister(reg); | ||||
|     const Node base_sampler = TrackCbuf(sampler_register, global_code, static_cast<s64>(global_code.size())); | ||||
|     const Node base_sampler = | ||||
|         TrackCbuf(sampler_register, global_code, static_cast<s64>(global_code.size())); | ||||
|     const auto cbuf = std::get_if<CbufNode>(base_sampler); | ||||
|     const auto cbuf_offset_imm = std::get_if<ImmediateNode>(cbuf->GetOffset()); | ||||
|     ASSERT(cbuf_offset_imm != nullptr); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user