mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	shader_ir/other: Implement IPA.IDX
This commit is contained in:
		
							parent
							
								
									5321cdd276
								
							
						
					
					
						commit
						d4df803b2b
					
				| @ -596,6 +596,7 @@ union Instruction { | |||||||
|     } alu; |     } alu; | ||||||
| 
 | 
 | ||||||
|     union { |     union { | ||||||
|  |         BitField<38, 1, u64> idx; | ||||||
|         BitField<51, 1, u64> saturate; |         BitField<51, 1, u64> saturate; | ||||||
|         BitField<52, 2, IpaSampleMode> sample_mode; |         BitField<52, 2, IpaSampleMode> sample_mode; | ||||||
|         BitField<54, 2, IpaInterpMode> interp_mode; |         BitField<54, 2, IpaInterpMode> interp_mode; | ||||||
|  | |||||||
| @ -130,15 +130,18 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) { | |||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
|     case OpCode::Id::IPA: { |     case OpCode::Id::IPA: { | ||||||
|         const auto& attribute = instr.attribute.fmt28; |         const bool is_physical = instr.ipa.idx && instr.gpr8.Value() != 0xff; | ||||||
|  | 
 | ||||||
|  |         const auto attribute = instr.attribute.fmt28; | ||||||
|         const Tegra::Shader::IpaMode input_mode{instr.ipa.interp_mode.Value(), |         const Tegra::Shader::IpaMode input_mode{instr.ipa.interp_mode.Value(), | ||||||
|                                                 instr.ipa.sample_mode.Value()}; |                                                 instr.ipa.sample_mode.Value()}; | ||||||
| 
 | 
 | ||||||
|         const Node attr = GetInputAttribute(attribute.index, attribute.element); |         Node value = is_physical ? GetPhysicalInputAttribute(instr.gpr8) | ||||||
|         Node value = attr; |                                  : GetInputAttribute(attribute.index, attribute.element); | ||||||
|         const Tegra::Shader::Attribute::Index index = attribute.index.Value(); |         const Tegra::Shader::Attribute::Index index = attribute.index.Value(); | ||||||
|         if (index >= Tegra::Shader::Attribute::Index::Attribute_0 && |         const bool is_generic = index >= Tegra::Shader::Attribute::Index::Attribute_0 && | ||||||
|             index <= Tegra::Shader::Attribute::Index::Attribute_31) { |                                 index <= Tegra::Shader::Attribute::Index::Attribute_31; | ||||||
|  |         if (is_generic || is_physical) { | ||||||
|             // TODO(Blinkhawk): There are cases where a perspective attribute use PASS.
 |             // TODO(Blinkhawk): There are cases where a perspective attribute use PASS.
 | ||||||
|             // In theory by setting them as perspective, OpenGL does the perspective correction.
 |             // In theory by setting them as perspective, OpenGL does the perspective correction.
 | ||||||
|             // A way must figured to reverse the last step of it.
 |             // A way must figured to reverse the last step of it.
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 ReinUsesLisp
						ReinUsesLisp