mirror of https://git.suyu.dev/suyu/suyu
Shader_IR: Address Feedback
This commit is contained in:
parent
cd0f5dfc17
commit
c8473f399e
|
@ -1815,7 +1815,7 @@ private:
|
||||||
ASSERT(meta);
|
ASSERT(meta);
|
||||||
|
|
||||||
std::string expr = GenerateTexture(operation, "Grad", {TextureDerivates{}, TextureAoffi{}});
|
std::string expr = GenerateTexture(operation, "Grad", {TextureDerivates{}, TextureAoffi{}});
|
||||||
return {expr + GetSwizzle(meta->element), Type::Float};
|
return {std::move(expr) + GetSwizzle(meta->element), Type::Float};
|
||||||
}
|
}
|
||||||
|
|
||||||
Expression ImageLoad(Operation operation) {
|
Expression ImageLoad(Operation operation) {
|
||||||
|
|
|
@ -135,17 +135,18 @@ u32 ShaderIR::DecodeArithmeticInteger(NodeBlock& bb, u32 pc) {
|
||||||
case OpCode::Id::FLO_IMM: {
|
case OpCode::Id::FLO_IMM: {
|
||||||
Node value;
|
Node value;
|
||||||
if (instr.flo.invert) {
|
if (instr.flo.invert) {
|
||||||
op_b = Operation(OperationCode::IBitwiseNot, NO_PRECISE, op_b);
|
op_b = Operation(OperationCode::IBitwiseNot, NO_PRECISE, std::move(op_b));
|
||||||
}
|
}
|
||||||
if (instr.flo.is_signed) {
|
if (instr.flo.is_signed) {
|
||||||
value = Operation(OperationCode::IBitMSB, NO_PRECISE, op_b);
|
value = Operation(OperationCode::IBitMSB, NO_PRECISE, std::move(op_b));
|
||||||
} else {
|
} else {
|
||||||
value = Operation(OperationCode::UBitMSB, NO_PRECISE, op_b);
|
value = Operation(OperationCode::UBitMSB, NO_PRECISE, std::move(op_b));
|
||||||
}
|
}
|
||||||
if (instr.flo.sh) {
|
if (instr.flo.sh) {
|
||||||
value = Operation(OperationCode::UBitwiseXor, NO_PRECISE, value, Immediate(31));
|
value =
|
||||||
|
Operation(OperationCode::UBitwiseXor, NO_PRECISE, std::move(value), Immediate(31));
|
||||||
}
|
}
|
||||||
SetRegister(bb, instr.gpr0, value);
|
SetRegister(bb, instr.gpr0, std::move(value));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OpCode::Id::SEL_C:
|
case OpCode::Id::SEL_C:
|
||||||
|
|
|
@ -147,8 +147,7 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {
|
||||||
case OpCode::Id::TXD: {
|
case OpCode::Id::TXD: {
|
||||||
UNIMPLEMENTED_IF_MSG(instr.txd.UsesMiscMode(TextureMiscMode::AOFFI),
|
UNIMPLEMENTED_IF_MSG(instr.txd.UsesMiscMode(TextureMiscMode::AOFFI),
|
||||||
"AOFFI is not implemented");
|
"AOFFI is not implemented");
|
||||||
const auto is_array = static_cast<bool>(instr.txd.is_array != 0);
|
UNIMPLEMENTED_IF_MSG(instr.txd.is_array != 0, "TXD Array is not implemented");
|
||||||
UNIMPLEMENTED_IF_MSG(is_array, "TXD Array is not implemented");
|
|
||||||
|
|
||||||
u64 base_reg = instr.gpr8.Value();
|
u64 base_reg = instr.gpr8.Value();
|
||||||
const auto derivate_reg = instr.gpr20.Value();
|
const auto derivate_reg = instr.gpr20.Value();
|
||||||
|
@ -173,10 +172,8 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {
|
||||||
|
|
||||||
Node4 values;
|
Node4 values;
|
||||||
for (u32 element = 0; element < values.size(); ++element) {
|
for (u32 element = 0; element < values.size(); ++element) {
|
||||||
auto coords_copy = coords;
|
|
||||||
MetaTexture meta{sampler, {}, {}, {}, derivates, {}, {}, {}, element};
|
MetaTexture meta{sampler, {}, {}, {}, derivates, {}, {}, {}, element};
|
||||||
values[element] =
|
values[element] = Operation(OperationCode::TextureGradient, std::move(meta), coords);
|
||||||
Operation(OperationCode::TextureGradient, meta, std::move(coords_copy));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WriteTexInstructionFloat(bb, instr, values);
|
WriteTexInstructionFloat(bb, instr, values);
|
||||||
|
|
Loading…
Reference in New Issue