mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	shader/decode: Implement S2R Tic
This commit is contained in:
		@@ -68,6 +68,13 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
 | 
			
		||||
            case SystemVariable::InvocationInfo:
 | 
			
		||||
                LOG_WARNING(HW_GPU, "MOV_SYS instruction with InvocationInfo is incomplete");
 | 
			
		||||
                return Immediate(0u);
 | 
			
		||||
            case SystemVariable::Tid: {
 | 
			
		||||
                Node value = Immediate(0);
 | 
			
		||||
                value = BitfieldInsert(value, Operation(OperationCode::LocalInvocationIdX), 0, 9);
 | 
			
		||||
                value = BitfieldInsert(value, Operation(OperationCode::LocalInvocationIdY), 16, 9);
 | 
			
		||||
                value = BitfieldInsert(value, Operation(OperationCode::LocalInvocationIdZ), 26, 5);
 | 
			
		||||
                return value;
 | 
			
		||||
            }
 | 
			
		||||
            case SystemVariable::TidX:
 | 
			
		||||
                return Operation(OperationCode::LocalInvocationIdX);
 | 
			
		||||
            case SystemVariable::TidY:
 | 
			
		||||
 
 | 
			
		||||
@@ -405,4 +405,9 @@ Node ShaderIR::BitfieldExtract(Node value, u32 offset, u32 bits) {
 | 
			
		||||
                     Immediate(offset), Immediate(bits));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Node ShaderIR::BitfieldInsert(Node base, Node insert, u32 offset, u32 bits) {
 | 
			
		||||
    return Operation(OperationCode::UBitfieldInsert, NO_PRECISE, base, insert, Immediate(offset),
 | 
			
		||||
                     Immediate(bits));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace VideoCommon::Shader
 | 
			
		||||
 
 | 
			
		||||
@@ -279,6 +279,9 @@ private:
 | 
			
		||||
    /// Extracts a sequence of bits from a node
 | 
			
		||||
    Node BitfieldExtract(Node value, u32 offset, u32 bits);
 | 
			
		||||
 | 
			
		||||
    /// Inserts a sequence of bits from a node
 | 
			
		||||
    Node BitfieldInsert(Node base, Node insert, u32 offset, u32 bits);
 | 
			
		||||
 | 
			
		||||
    void WriteTexInstructionFloat(NodeBlock& bb, Tegra::Shader::Instruction instr,
 | 
			
		||||
                                  const Node4& components);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user