mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +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, |     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 IpaInterpMode : u64 { Linear = 0, Perspective = 1, Flat = 2, Sc = 3 }; | ||||||
| enum class IpaSampleMode : u64 { Default = 0, Centroid = 1, Offset = 2 }; | enum class IpaSampleMode : u64 { Default = 0, Centroid = 1, Offset = 2 }; | ||||||
| 
 | 
 | ||||||
| @ -518,6 +528,11 @@ union Instruction { | |||||||
|         } |         } | ||||||
|     } tex; |     } tex; | ||||||
| 
 | 
 | ||||||
|  |     union { | ||||||
|  |         BitField<22, 6, TextureQueryType> query_type; | ||||||
|  |         BitField<31, 4, u64> component_mask; | ||||||
|  |     } txq; | ||||||
|  | 
 | ||||||
|     union { |     union { | ||||||
|         BitField<28, 1, u64> array; |         BitField<28, 1, u64> array; | ||||||
|         BitField<29, 2, TextureType> texture_type; |         BitField<29, 2, TextureType> texture_type; | ||||||
| @ -670,7 +685,7 @@ public: | |||||||
|         LDG, // Load from global memory
 |         LDG, // Load from global memory
 | ||||||
|         STG, // Store in global memory
 |         STG, // Store in global memory
 | ||||||
|         TEX, |         TEX, | ||||||
|         TXQ,  // Texture Query
 |         TXQ,   // Texture Query
 | ||||||
|         TEXS,  // Texture Fetch with scalar/non-vec4 source/destinations
 |         TEXS,  // Texture Fetch with scalar/non-vec4 source/destinations
 | ||||||
|         TLDS,  // Texture Load with scalar/non-vec4 source/destinations
 |         TLDS,  // Texture Load with scalar/non-vec4 source/destinations
 | ||||||
|         TLD4,  // Texture Load 4
 |         TLD4,  // Texture Load 4
 | ||||||
|  | |||||||
| @ -1920,6 +1920,26 @@ private: | |||||||
|                 WriteTexsInstruction(instr, coord, texture); |                 WriteTexsInstruction(instr, coord, texture); | ||||||
|                 break; |                 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: { |             default: { | ||||||
|                 LOG_CRITICAL(HW_GPU, "Unhandled memory instruction: {}", opcode->GetName()); |                 LOG_CRITICAL(HW_GPU, "Unhandled memory instruction: {}", opcode->GetName()); | ||||||
|                 UNREACHABLE(); |                 UNREACHABLE(); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 FernandoS27
						FernandoS27