|
|
|
@ -121,6 +121,25 @@ Node ShaderIR::GetLocalMemory(Node address) { |
|
|
|
return StoreNode(LmemNode(address)); |
|
|
|
} |
|
|
|
|
|
|
|
Node ShaderIR::GetOperandAbsNegFloat(Node value, bool absolute, bool negate) { |
|
|
|
if (absolute) { |
|
|
|
value = Operation(OperationCode::FAbsolute, NO_PRECISE, value); |
|
|
|
} |
|
|
|
if (negate) { |
|
|
|
value = Operation(OperationCode::FNegate, NO_PRECISE, value); |
|
|
|
} |
|
|
|
return value; |
|
|
|
} |
|
|
|
|
|
|
|
Node ShaderIR::GetSaturatedFloat(Node value, bool saturate) { |
|
|
|
if (!saturate) { |
|
|
|
return value; |
|
|
|
} |
|
|
|
const Node positive_zero = Immediate(std::copysignf(0, 1)); |
|
|
|
const Node positive_one = Immediate(1.0f); |
|
|
|
return Operation(OperationCode::FClamp, NO_PRECISE, value, positive_zero, positive_one); |
|
|
|
} |
|
|
|
|
|
|
|
void ShaderIR::SetRegister(BasicBlock& bb, Register dest, Node src) { |
|
|
|
bb.push_back(Operation(OperationCode::Assign, GetRegister(dest), src)); |
|
|
|
} |
|
|
|
|