diff options
| author | 2019-11-18 07:34:34 -0400 | |
|---|---|---|
| committer | 2019-11-18 07:34:34 -0400 | |
| commit | c8473f399e745993d2b9980f4ef62fa6a208ec3d (patch) | |
| tree | af8d64c9a361cb600ec2521f05b5faef0bb76da0 /src | |
| parent | Shader_IR: Implement TXD instruction. (diff) | |
| download | yuzu-c8473f399e745993d2b9980f4ef62fa6a208ec3d.tar.gz yuzu-c8473f399e745993d2b9980f4ef62fa6a208ec3d.tar.xz yuzu-c8473f399e745993d2b9980f4ef62fa6a208ec3d.zip | |
Shader_IR: Address Feedback
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/shader/decode/arithmetic_integer.cpp | 11 | ||||
| -rw-r--r-- | src/video_core/shader/decode/texture.cpp | 7 |
3 files changed, 9 insertions, 11 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index 49f0b1620..f7b77711a 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp | |||
| @@ -1815,7 +1815,7 @@ private: | |||
| 1815 | ASSERT(meta); | 1815 | ASSERT(meta); |
| 1816 | 1816 | ||
| 1817 | std::string expr = GenerateTexture(operation, "Grad", {TextureDerivates{}, TextureAoffi{}}); | 1817 | std::string expr = GenerateTexture(operation, "Grad", {TextureDerivates{}, TextureAoffi{}}); |
| 1818 | return {expr + GetSwizzle(meta->element), Type::Float}; | 1818 | return {std::move(expr) + GetSwizzle(meta->element), Type::Float}; |
| 1819 | } | 1819 | } |
| 1820 | 1820 | ||
| 1821 | Expression ImageLoad(Operation operation) { | 1821 | Expression ImageLoad(Operation operation) { |
diff --git a/src/video_core/shader/decode/arithmetic_integer.cpp b/src/video_core/shader/decode/arithmetic_integer.cpp index 9208b7bef..371fae127 100644 --- a/src/video_core/shader/decode/arithmetic_integer.cpp +++ b/src/video_core/shader/decode/arithmetic_integer.cpp | |||
| @@ -135,17 +135,18 @@ u32 ShaderIR::DecodeArithmeticInteger(NodeBlock& bb, u32 pc) { | |||
| 135 | case OpCode::Id::FLO_IMM: { | 135 | case OpCode::Id::FLO_IMM: { |
| 136 | Node value; | 136 | Node value; |
| 137 | if (instr.flo.invert) { | 137 | if (instr.flo.invert) { |
| 138 | op_b = Operation(OperationCode::IBitwiseNot, NO_PRECISE, op_b); | 138 | op_b = Operation(OperationCode::IBitwiseNot, NO_PRECISE, std::move(op_b)); |
| 139 | } | 139 | } |
| 140 | if (instr.flo.is_signed) { | 140 | if (instr.flo.is_signed) { |
| 141 | value = Operation(OperationCode::IBitMSB, NO_PRECISE, op_b); | 141 | value = Operation(OperationCode::IBitMSB, NO_PRECISE, std::move(op_b)); |
| 142 | } else { | 142 | } else { |
| 143 | value = Operation(OperationCode::UBitMSB, NO_PRECISE, op_b); | 143 | value = Operation(OperationCode::UBitMSB, NO_PRECISE, std::move(op_b)); |
| 144 | } | 144 | } |
| 145 | if (instr.flo.sh) { | 145 | if (instr.flo.sh) { |
| 146 | value = Operation(OperationCode::UBitwiseXor, NO_PRECISE, value, Immediate(31)); | 146 | value = |
| 147 | Operation(OperationCode::UBitwiseXor, NO_PRECISE, std::move(value), Immediate(31)); | ||
| 147 | } | 148 | } |
| 148 | SetRegister(bb, instr.gpr0, value); | 149 | SetRegister(bb, instr.gpr0, std::move(value)); |
| 149 | break; | 150 | break; |
| 150 | } | 151 | } |
| 151 | case OpCode::Id::SEL_C: | 152 | case OpCode::Id::SEL_C: |
diff --git a/src/video_core/shader/decode/texture.cpp b/src/video_core/shader/decode/texture.cpp index 0e501919d..9afba2495 100644 --- a/src/video_core/shader/decode/texture.cpp +++ b/src/video_core/shader/decode/texture.cpp | |||
| @@ -147,8 +147,7 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | |||
| 147 | case OpCode::Id::TXD: { | 147 | case OpCode::Id::TXD: { |
| 148 | UNIMPLEMENTED_IF_MSG(instr.txd.UsesMiscMode(TextureMiscMode::AOFFI), | 148 | UNIMPLEMENTED_IF_MSG(instr.txd.UsesMiscMode(TextureMiscMode::AOFFI), |
| 149 | "AOFFI is not implemented"); | 149 | "AOFFI is not implemented"); |
| 150 | const auto is_array = static_cast<bool>(instr.txd.is_array != 0); | 150 | UNIMPLEMENTED_IF_MSG(instr.txd.is_array != 0, "TXD Array is not implemented"); |
| 151 | UNIMPLEMENTED_IF_MSG(is_array, "TXD Array is not implemented"); | ||
| 152 | 151 | ||
| 153 | u64 base_reg = instr.gpr8.Value(); | 152 | u64 base_reg = instr.gpr8.Value(); |
| 154 | const auto derivate_reg = instr.gpr20.Value(); | 153 | const auto derivate_reg = instr.gpr20.Value(); |
| @@ -173,10 +172,8 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | |||
| 173 | 172 | ||
| 174 | Node4 values; | 173 | Node4 values; |
| 175 | for (u32 element = 0; element < values.size(); ++element) { | 174 | for (u32 element = 0; element < values.size(); ++element) { |
| 176 | auto coords_copy = coords; | ||
| 177 | MetaTexture meta{sampler, {}, {}, {}, derivates, {}, {}, {}, element}; | 175 | MetaTexture meta{sampler, {}, {}, {}, derivates, {}, {}, {}, element}; |
| 178 | values[element] = | 176 | values[element] = Operation(OperationCode::TextureGradient, std::move(meta), coords); |
| 179 | Operation(OperationCode::TextureGradient, meta, std::move(coords_copy)); | ||
| 180 | } | 177 | } |
| 181 | 178 | ||
| 182 | WriteTexInstructionFloat(bb, instr, values); | 179 | WriteTexInstructionFloat(bb, instr, values); |