Implemented BRA CC conditional and FSET CC Setting
This commit is contained in:
		@@ -3254,6 +3254,10 @@ private:
 | 
			
		||||
                regs.SetRegisterToInteger(instr.gpr0, false, 0, predicate + " ? 0xFFFFFFFF : 0", 1,
 | 
			
		||||
                                          1);
 | 
			
		||||
            }
 | 
			
		||||
            if (instr.generates_cc.Value() != 0) {
 | 
			
		||||
                regs.SetInternalFlag(InternalFlag::ZeroFlag, predicate);
 | 
			
		||||
                LOG_WARNING(HW_GPU, "FSET Condition Code is incomplete");
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case OpCode::Type::IntegerSet: {
 | 
			
		||||
@@ -3530,11 +3534,17 @@ private:
 | 
			
		||||
                                     "BRA with constant buffers are not implemented");
 | 
			
		||||
 | 
			
		||||
                const Tegra::Shader::ConditionCode cc = instr.flow_condition_code;
 | 
			
		||||
                UNIMPLEMENTED_IF_MSG(cc != Tegra::Shader::ConditionCode::T,
 | 
			
		||||
                                     "BRA condition code used: {}", static_cast<u32>(cc));
 | 
			
		||||
 | 
			
		||||
                const u32 target = offset + instr.bra.GetBranchTarget();
 | 
			
		||||
                shader.AddLine("{ jmp_to = " + std::to_string(target) + "u; break; }");
 | 
			
		||||
                if (cc != Tegra::Shader::ConditionCode::T) {
 | 
			
		||||
                    const std::string condition_code = regs.GetConditionCode(cc);
 | 
			
		||||
                    shader.AddLine("if (" + condition_code + "){");
 | 
			
		||||
                    shader.scope++;
 | 
			
		||||
                    shader.AddLine("{ jmp_to = " + std::to_string(target) + "u; break; }");
 | 
			
		||||
                    shader.scope--;
 | 
			
		||||
                    shader.AddLine('}');
 | 
			
		||||
                } else {
 | 
			
		||||
                    shader.AddLine("{ jmp_to = " + std::to_string(target) + "u; break; }");
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            case OpCode::Id::IPA: {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user