mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Implemented TXQ dimension query type, used by SMO.
This commit is contained in:
		
							parent
							
								
									82a313a14c
								
							
						
					
					
						commit
						073a21ac0b
					
				| @ -244,6 +244,16 @@ enum class TextureType : u64 { | ||||
|     TextureCube = 3, | ||||
| }; | ||||
| 
 | ||||
| enum class TextureQueryType : u64 { | ||||
|     Dimension = 1, | ||||
|     TextureType = 2, | ||||
|     SamplePosition = 5, | ||||
|     Filter = 16, | ||||
|     LevelOfDetail = 18, | ||||
|     Wrap = 20, | ||||
|     BorderColor = 22, | ||||
| }; | ||||
| 
 | ||||
| enum class IpaInterpMode : u64 { Linear = 0, Perspective = 1, Flat = 2, Sc = 3 }; | ||||
| enum class IpaSampleMode : u64 { Default = 0, Centroid = 1, Offset = 2 }; | ||||
| 
 | ||||
| @ -518,6 +528,11 @@ union Instruction { | ||||
|         } | ||||
|     } tex; | ||||
| 
 | ||||
|     union { | ||||
|         BitField<22, 6, TextureQueryType> query_type; | ||||
|         BitField<31, 4, u64> component_mask; | ||||
|     } txq; | ||||
| 
 | ||||
|     union { | ||||
|         BitField<28, 1, u64> array; | ||||
|         BitField<29, 2, TextureType> texture_type; | ||||
| @ -670,7 +685,7 @@ public: | ||||
|         LDG, // Load from global memory
 | ||||
|         STG, // Store in global memory
 | ||||
|         TEX, | ||||
|         TXQ,  // Texture Query
 | ||||
|         TXQ,   // Texture Query
 | ||||
|         TEXS,  // Texture Fetch with scalar/non-vec4 source/destinations
 | ||||
|         TLDS,  // Texture Load with scalar/non-vec4 source/destinations
 | ||||
|         TLD4,  // Texture Load 4
 | ||||
|  | ||||
| @ -1920,6 +1920,26 @@ private: | ||||
|                 WriteTexsInstruction(instr, coord, texture); | ||||
|                 break; | ||||
|             } | ||||
|             case OpCode::Id::TXQ: { | ||||
|                 // TODO: the new commits on the texture refactor, change the way samplers work.
 | ||||
|                 // Sadly, not all texture instructions specify the type of texture their sampler
 | ||||
|                 // uses. This must be fixed at a later instance.
 | ||||
|                 const std::string sampler = | ||||
|                     GetSampler(instr.sampler, Tegra::Shader::TextureType::Texture2D, false); | ||||
|                 switch (instr.txq.query_type) { | ||||
|                 case Tegra::Shader::TextureQueryType::Dimension: { | ||||
|                     const std::string texture = "textureQueryLevels(" + sampler + ')'; | ||||
|                     regs.SetRegisterToInteger(instr.gpr0, true, 0, texture, 1, 1); | ||||
|                     break; | ||||
|                 } | ||||
|                 default: { | ||||
|                     LOG_CRITICAL(HW_GPU, "Unhandled texture query type: {}", | ||||
|                                  static_cast<u32>(instr.txq.query_type.Value())); | ||||
|                     UNREACHABLE(); | ||||
|                 } | ||||
|                 } | ||||
|                 break; | ||||
|             } | ||||
|             default: { | ||||
|                 LOG_CRITICAL(HW_GPU, "Unhandled memory instruction: {}", opcode->GetName()); | ||||
|                 UNREACHABLE(); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 FernandoS27
						FernandoS27