mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	GPU: Perform negation after absolute value in the float shader instructions.
This commit is contained in:
		
							parent
							
								
									0e13d9cb7b
								
							
						
					
					
						commit
						38989bef43
					
				@ -822,21 +822,24 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        switch (opcode->GetType()) {
 | 
					        switch (opcode->GetType()) {
 | 
				
			||||||
        case OpCode::Type::Arithmetic: {
 | 
					        case OpCode::Type::Arithmetic: {
 | 
				
			||||||
            std::string op_a = instr.alu.negate_a ? "-" : "";
 | 
					            std::string op_a = regs.GetRegisterAsFloat(instr.gpr8);
 | 
				
			||||||
            op_a += regs.GetRegisterAsFloat(instr.gpr8);
 | 
					 | 
				
			||||||
            if (instr.alu.abs_a) {
 | 
					            if (instr.alu.abs_a) {
 | 
				
			||||||
                op_a = "abs(" + op_a + ')';
 | 
					                op_a = "abs(" + op_a + ')';
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            std::string op_b = instr.alu.negate_b ? "-" : "";
 | 
					            if (instr.alu.negate_a) {
 | 
				
			||||||
 | 
					                op_a = "-(" + op_a + ')';
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            std::string op_b;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (instr.is_b_imm) {
 | 
					            if (instr.is_b_imm) {
 | 
				
			||||||
                op_b += GetImmediate19(instr);
 | 
					                op_b = GetImmediate19(instr);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                if (instr.is_b_gpr) {
 | 
					                if (instr.is_b_gpr) {
 | 
				
			||||||
                    op_b += regs.GetRegisterAsFloat(instr.gpr20);
 | 
					                    op_b = regs.GetRegisterAsFloat(instr.gpr20);
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    op_b += regs.GetUniform(instr.cbuf34.index, instr.cbuf34.offset,
 | 
					                    op_b = regs.GetUniform(instr.cbuf34.index, instr.cbuf34.offset,
 | 
				
			||||||
                                           GLSLRegister::Type::Float);
 | 
					                                           GLSLRegister::Type::Float);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -845,6 +848,10 @@ private:
 | 
				
			|||||||
                op_b = "abs(" + op_b + ')';
 | 
					                op_b = "abs(" + op_b + ')';
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (instr.alu.negate_b) {
 | 
				
			||||||
 | 
					                op_b = "-(" + op_b + ')';
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            switch (opcode->GetId()) {
 | 
					            switch (opcode->GetId()) {
 | 
				
			||||||
            case OpCode::Id::MOV_C:
 | 
					            case OpCode::Id::MOV_C:
 | 
				
			||||||
            case OpCode::Id::MOV_R: {
 | 
					            case OpCode::Id::MOV_R: {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user