1
0
Fork 0
forked from suyu/suyu

Shader_IR: Address Feedback

This commit is contained in:
Fernando Sahmkow 2019-11-18 07:34:34 -04:00
parent cd0f5dfc17
commit c8473f399e
3 changed files with 9 additions and 11 deletions

View file

@ -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) {

View file

@ -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:

View file

@ -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);