diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/shader/decode/arithmetic_integer.cpp | 6 | ||||
| -rw-r--r-- | src/video_core/shader/decode/image.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/shader/decode/other.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/shader/decode/shift.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/shader/decode/video.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/shader/decode/warp.cpp | 7 |
6 files changed, 12 insertions, 11 deletions
diff --git a/src/video_core/shader/decode/arithmetic_integer.cpp b/src/video_core/shader/decode/arithmetic_integer.cpp index b73f6536e..a33d242e9 100644 --- a/src/video_core/shader/decode/arithmetic_integer.cpp +++ b/src/video_core/shader/decode/arithmetic_integer.cpp | |||
| @@ -144,7 +144,7 @@ u32 ShaderIR::DecodeArithmeticInteger(NodeBlock& bb, u32 pc) { | |||
| 144 | case OpCode::Id::ICMP_IMM: { | 144 | case OpCode::Id::ICMP_IMM: { |
| 145 | const Node zero = Immediate(0); | 145 | const Node zero = Immediate(0); |
| 146 | 146 | ||
| 147 | const auto [op_b, test] = [&]() -> std::pair<Node, Node> { | 147 | const auto [op_rhs, test] = [&]() -> std::pair<Node, Node> { |
| 148 | switch (opcode->get().GetId()) { | 148 | switch (opcode->get().GetId()) { |
| 149 | case OpCode::Id::ICMP_CR: | 149 | case OpCode::Id::ICMP_CR: |
| 150 | return {GetConstBuffer(instr.cbuf34.index, instr.cbuf34.offset), | 150 | return {GetConstBuffer(instr.cbuf34.index, instr.cbuf34.offset), |
| @@ -161,10 +161,10 @@ u32 ShaderIR::DecodeArithmeticInteger(NodeBlock& bb, u32 pc) { | |||
| 161 | return {zero, zero}; | 161 | return {zero, zero}; |
| 162 | } | 162 | } |
| 163 | }(); | 163 | }(); |
| 164 | const Node op_a = GetRegister(instr.gpr8); | 164 | const Node op_lhs = GetRegister(instr.gpr8); |
| 165 | const Node comparison = | 165 | const Node comparison = |
| 166 | GetPredicateComparisonInteger(instr.icmp.cond, instr.icmp.is_signed != 0, test, zero); | 166 | GetPredicateComparisonInteger(instr.icmp.cond, instr.icmp.is_signed != 0, test, zero); |
| 167 | SetRegister(bb, instr.gpr0, Operation(OperationCode::Select, comparison, op_a, op_b)); | 167 | SetRegister(bb, instr.gpr0, Operation(OperationCode::Select, comparison, op_lhs, op_rhs)); |
| 168 | break; | 168 | break; |
| 169 | } | 169 | } |
| 170 | case OpCode::Id::LOP_C: | 170 | case OpCode::Id::LOP_C: |
diff --git a/src/video_core/shader/decode/image.cpp b/src/video_core/shader/decode/image.cpp index 95ec1cdd9..b02d2cb95 100644 --- a/src/video_core/shader/decode/image.cpp +++ b/src/video_core/shader/decode/image.cpp | |||
| @@ -144,8 +144,8 @@ u32 ShaderIR::DecodeImage(NodeBlock& bb, u32 pc) { | |||
| 144 | 144 | ||
| 145 | Image& ShaderIR::GetImage(Tegra::Shader::Image image, Tegra::Shader::ImageType type) { | 145 | Image& ShaderIR::GetImage(Tegra::Shader::Image image, Tegra::Shader::ImageType type) { |
| 146 | const auto offset{static_cast<std::size_t>(image.index.Value())}; | 146 | const auto offset{static_cast<std::size_t>(image.index.Value())}; |
| 147 | if (const auto image = TryUseExistingImage(offset, type)) { | 147 | if (const auto existing_image = TryUseExistingImage(offset, type)) { |
| 148 | return *image; | 148 | return *existing_image; |
| 149 | } | 149 | } |
| 150 | 150 | ||
| 151 | const std::size_t next_index{used_images.size()}; | 151 | const std::size_t next_index{used_images.size()}; |
diff --git a/src/video_core/shader/decode/other.cpp b/src/video_core/shader/decode/other.cpp index d46e0f823..116b95f76 100644 --- a/src/video_core/shader/decode/other.cpp +++ b/src/video_core/shader/decode/other.cpp | |||
| @@ -67,7 +67,7 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) { | |||
| 67 | break; | 67 | break; |
| 68 | } | 68 | } |
| 69 | case OpCode::Id::MOV_SYS: { | 69 | case OpCode::Id::MOV_SYS: { |
| 70 | const Node value = [&]() { | 70 | const Node value = [this, instr] { |
| 71 | switch (instr.sys20) { | 71 | switch (instr.sys20) { |
| 72 | case SystemVariable::Ydirection: | 72 | case SystemVariable::Ydirection: |
| 73 | return Operation(OperationCode::YNegate); | 73 | return Operation(OperationCode::YNegate); |
diff --git a/src/video_core/shader/decode/shift.cpp b/src/video_core/shader/decode/shift.cpp index f6ee68a54..d419e9c45 100644 --- a/src/video_core/shader/decode/shift.cpp +++ b/src/video_core/shader/decode/shift.cpp | |||
| @@ -18,7 +18,7 @@ u32 ShaderIR::DecodeShift(NodeBlock& bb, u32 pc) { | |||
| 18 | const auto opcode = OpCode::Decode(instr); | 18 | const auto opcode = OpCode::Decode(instr); |
| 19 | 19 | ||
| 20 | Node op_a = GetRegister(instr.gpr8); | 20 | Node op_a = GetRegister(instr.gpr8); |
| 21 | Node op_b = [&]() { | 21 | Node op_b = [this, instr] { |
| 22 | if (instr.is_b_imm) { | 22 | if (instr.is_b_imm) { |
| 23 | return Immediate(instr.alu.GetSignedImm20_20()); | 23 | return Immediate(instr.alu.GetSignedImm20_20()); |
| 24 | } else if (instr.is_b_gpr) { | 24 | } else if (instr.is_b_gpr) { |
diff --git a/src/video_core/shader/decode/video.cpp b/src/video_core/shader/decode/video.cpp index 97fc6f9b1..b047cf870 100644 --- a/src/video_core/shader/decode/video.cpp +++ b/src/video_core/shader/decode/video.cpp | |||
| @@ -23,7 +23,7 @@ u32 ShaderIR::DecodeVideo(NodeBlock& bb, u32 pc) { | |||
| 23 | const Node op_a = | 23 | const Node op_a = |
| 24 | GetVideoOperand(GetRegister(instr.gpr8), instr.video.is_byte_chunk_a, instr.video.signed_a, | 24 | GetVideoOperand(GetRegister(instr.gpr8), instr.video.is_byte_chunk_a, instr.video.signed_a, |
| 25 | instr.video.type_a, instr.video.byte_height_a); | 25 | instr.video.type_a, instr.video.byte_height_a); |
| 26 | const Node op_b = [&]() { | 26 | const Node op_b = [this, instr] { |
| 27 | if (instr.video.use_register_b) { | 27 | if (instr.video.use_register_b) { |
| 28 | return GetVideoOperand(GetRegister(instr.gpr20), instr.video.is_byte_chunk_b, | 28 | return GetVideoOperand(GetRegister(instr.gpr20), instr.video.is_byte_chunk_b, |
| 29 | instr.video.signed_b, instr.video.type_b, | 29 | instr.video.signed_b, instr.video.type_b, |
diff --git a/src/video_core/shader/decode/warp.cpp b/src/video_core/shader/decode/warp.cpp index a8e481b3c..fa8a250cc 100644 --- a/src/video_core/shader/decode/warp.cpp +++ b/src/video_core/shader/decode/warp.cpp | |||
| @@ -46,9 +46,10 @@ u32 ShaderIR::DecodeWarp(NodeBlock& bb, u32 pc) { | |||
| 46 | break; | 46 | break; |
| 47 | } | 47 | } |
| 48 | case OpCode::Id::SHFL: { | 48 | case OpCode::Id::SHFL: { |
| 49 | Node mask = instr.shfl.is_mask_imm ? Immediate(static_cast<u32>(instr.shfl.mask_imm)) | 49 | Node width = [this, instr] { |
| 50 | : GetRegister(instr.gpr39); | 50 | Node mask = instr.shfl.is_mask_imm ? Immediate(static_cast<u32>(instr.shfl.mask_imm)) |
| 51 | Node width = [&] { | 51 | : GetRegister(instr.gpr39); |
| 52 | |||
| 52 | // Convert the obscure SHFL mask back into GL_NV_shader_thread_shuffle's width. This has | 53 | // Convert the obscure SHFL mask back into GL_NV_shader_thread_shuffle's width. This has |
| 53 | // been done reversing Nvidia's math. It won't work on all cases due to SHFL having | 54 | // been done reversing Nvidia's math. It won't work on all cases due to SHFL having |
| 54 | // different parameters that don't properly map to GLSL's interface, but it should work | 55 | // different parameters that don't properly map to GLSL's interface, but it should work |