diff options
| author | 2020-04-09 00:17:39 -0400 | |
|---|---|---|
| committer | 2020-04-09 00:17:39 -0400 | |
| commit | b96fd0bd0e562770399441c8164069d2437f00e7 (patch) | |
| tree | 44c8516bec954176e6c68796a660cfa82023b253 /src/video_core/shader | |
| parent | Merge pull request #3624 from Kewlan/fix-sl-sr-position (diff) | |
| parent | shader/other: Add error message for some S2R registers (diff) | |
| download | yuzu-b96fd0bd0e562770399441c8164069d2437f00e7.tar.gz yuzu-b96fd0bd0e562770399441c8164069d2437f00e7.tar.xz yuzu-b96fd0bd0e562770399441c8164069d2437f00e7.zip | |
Merge pull request #3601 from ReinUsesLisp/some-shader-encodings
video_core/shader: Add some instruction and S2R encodings
Diffstat (limited to 'src/video_core/shader')
| -rw-r--r-- | src/video_core/shader/decode/other.cpp | 12 | ||||
| -rw-r--r-- | src/video_core/shader/shader_ir.cpp | 3 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/video_core/shader/decode/other.cpp b/src/video_core/shader/decode/other.cpp index e6edec459..d4f95b18c 100644 --- a/src/video_core/shader/decode/other.cpp +++ b/src/video_core/shader/decode/other.cpp | |||
| @@ -71,18 +71,24 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) { | |||
| 71 | bb.push_back(Operation(OperationCode::Discard)); | 71 | bb.push_back(Operation(OperationCode::Discard)); |
| 72 | break; | 72 | break; |
| 73 | } | 73 | } |
| 74 | case OpCode::Id::MOV_SYS: { | 74 | case OpCode::Id::S2R: { |
| 75 | const Node value = [this, instr] { | 75 | const Node value = [this, instr] { |
| 76 | switch (instr.sys20) { | 76 | switch (instr.sys20) { |
| 77 | case SystemVariable::LaneId: | 77 | case SystemVariable::LaneId: |
| 78 | LOG_WARNING(HW_GPU, "MOV_SYS instruction with LaneId is incomplete"); | 78 | LOG_WARNING(HW_GPU, "S2R instruction with LaneId is incomplete"); |
| 79 | return Immediate(0U); | 79 | return Immediate(0U); |
| 80 | case SystemVariable::InvocationId: | 80 | case SystemVariable::InvocationId: |
| 81 | return Operation(OperationCode::InvocationId); | 81 | return Operation(OperationCode::InvocationId); |
| 82 | case SystemVariable::Ydirection: | 82 | case SystemVariable::Ydirection: |
| 83 | return Operation(OperationCode::YNegate); | 83 | return Operation(OperationCode::YNegate); |
| 84 | case SystemVariable::InvocationInfo: | 84 | case SystemVariable::InvocationInfo: |
| 85 | LOG_WARNING(HW_GPU, "MOV_SYS instruction with InvocationInfo is incomplete"); | 85 | LOG_WARNING(HW_GPU, "S2R instruction with InvocationInfo is incomplete"); |
| 86 | return Immediate(0U); | ||
| 87 | case SystemVariable::WscaleFactorXY: | ||
| 88 | UNIMPLEMENTED_MSG("S2R WscaleFactorXY is not implemented"); | ||
| 89 | return Immediate(0U); | ||
| 90 | case SystemVariable::WscaleFactorZ: | ||
| 91 | UNIMPLEMENTED_MSG("S2R WscaleFactorZ is not implemented"); | ||
| 86 | return Immediate(0U); | 92 | return Immediate(0U); |
| 87 | case SystemVariable::Tid: { | 93 | case SystemVariable::Tid: { |
| 88 | Node value = Immediate(0); | 94 | Node value = Immediate(0); |
diff --git a/src/video_core/shader/shader_ir.cpp b/src/video_core/shader/shader_ir.cpp index baf7188d2..8852c8a1b 100644 --- a/src/video_core/shader/shader_ir.cpp +++ b/src/video_core/shader/shader_ir.cpp | |||
| @@ -359,6 +359,9 @@ Node ShaderIR::GetConditionCode(Tegra::Shader::ConditionCode cc) const { | |||
| 359 | switch (cc) { | 359 | switch (cc) { |
| 360 | case Tegra::Shader::ConditionCode::NEU: | 360 | case Tegra::Shader::ConditionCode::NEU: |
| 361 | return GetInternalFlag(InternalFlag::Zero, true); | 361 | return GetInternalFlag(InternalFlag::Zero, true); |
| 362 | case Tegra::Shader::ConditionCode::FCSM_TR: | ||
| 363 | UNIMPLEMENTED_MSG("EXIT.FCSM_TR is not implemented"); | ||
| 364 | return MakeNode<PredicateNode>(Pred::NeverExecute, false); | ||
| 362 | default: | 365 | default: |
| 363 | UNIMPLEMENTED_MSG("Unimplemented condition code: {}", static_cast<u32>(cc)); | 366 | UNIMPLEMENTED_MSG("Unimplemented condition code: {}", static_cast<u32>(cc)); |
| 364 | return MakeNode<PredicateNode>(Pred::NeverExecute, false); | 367 | return MakeNode<PredicateNode>(Pred::NeverExecute, false); |