diff options
| author | 2016-09-15 23:18:58 -0700 | |
|---|---|---|
| committer | 2016-09-29 21:15:49 -0700 | |
| commit | d9a904f9cbce6fb37968aad0a82a944ee8b4d2e1 (patch) | |
| tree | 8afab771ef311616805b5a6dbca131a505ccb964 /src | |
| parent | Common: Remove dangerous Vec[234] array constructors (diff) | |
| download | yuzu-d9a904f9cbce6fb37968aad0a82a944ee8b4d2e1.tar.gz yuzu-d9a904f9cbce6fb37968aad0a82a944ee8b4d2e1.tar.xz yuzu-d9a904f9cbce6fb37968aad0a82a944ee8b4d2e1.zip | |
VideoCore: Shader interpreter cleanups
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/shader/shader_interpreter.cpp | 74 |
1 files changed, 42 insertions, 32 deletions
diff --git a/src/video_core/shader/shader_interpreter.cpp b/src/video_core/shader/shader_interpreter.cpp index 501d00b6b..6abb6761f 100644 --- a/src/video_core/shader/shader_interpreter.cpp +++ b/src/video_core/shader/shader_interpreter.cpp | |||
| @@ -116,32 +116,36 @@ void RunInterpreter(const ShaderSetup& setup, UnitState<Debug>& state, unsigned | |||
| 116 | : state.address_registers[instr.common.address_register_index - 1]; | 116 | : state.address_registers[instr.common.address_register_index - 1]; |
| 117 | 117 | ||
| 118 | const float24* src1_ = LookupSourceRegister(instr.common.GetSrc1(is_inverted) + | 118 | const float24* src1_ = LookupSourceRegister(instr.common.GetSrc1(is_inverted) + |
| 119 | (!is_inverted * address_offset)); | 119 | (is_inverted ? 0 : address_offset)); |
| 120 | const float24* src2_ = LookupSourceRegister(instr.common.GetSrc2(is_inverted) + | 120 | const float24* src2_ = LookupSourceRegister(instr.common.GetSrc2(is_inverted) + |
| 121 | (is_inverted * address_offset)); | 121 | (is_inverted ? address_offset : 0)); |
| 122 | 122 | ||
| 123 | const bool negate_src1 = ((bool)swizzle.negate_src1 != false); | 123 | const bool negate_src1 = ((bool)swizzle.negate_src1 != false); |
| 124 | const bool negate_src2 = ((bool)swizzle.negate_src2 != false); | 124 | const bool negate_src2 = ((bool)swizzle.negate_src2 != false); |
| 125 | 125 | ||
| 126 | float24 src1[4] = { | 126 | float24 src1[4] = { |
| 127 | src1_[(int)swizzle.GetSelectorSrc1(0)], src1_[(int)swizzle.GetSelectorSrc1(1)], | 127 | src1_[(int)swizzle.src1_selector_0.Value()], |
| 128 | src1_[(int)swizzle.GetSelectorSrc1(2)], src1_[(int)swizzle.GetSelectorSrc1(3)], | 128 | src1_[(int)swizzle.src1_selector_1.Value()], |
| 129 | src1_[(int)swizzle.src1_selector_2.Value()], | ||
| 130 | src1_[(int)swizzle.src1_selector_3.Value()], | ||
| 129 | }; | 131 | }; |
| 130 | if (negate_src1) { | 132 | if (negate_src1) { |
| 131 | src1[0] = src1[0] * float24::FromFloat32(-1); | 133 | src1[0] = -src1[0]; |
| 132 | src1[1] = src1[1] * float24::FromFloat32(-1); | 134 | src1[1] = -src1[1]; |
| 133 | src1[2] = src1[2] * float24::FromFloat32(-1); | 135 | src1[2] = -src1[2]; |
| 134 | src1[3] = src1[3] * float24::FromFloat32(-1); | 136 | src1[3] = -src1[3]; |
| 135 | } | 137 | } |
| 136 | float24 src2[4] = { | 138 | float24 src2[4] = { |
| 137 | src2_[(int)swizzle.GetSelectorSrc2(0)], src2_[(int)swizzle.GetSelectorSrc2(1)], | 139 | src2_[(int)swizzle.src2_selector_0.Value()], |
| 138 | src2_[(int)swizzle.GetSelectorSrc2(2)], src2_[(int)swizzle.GetSelectorSrc2(3)], | 140 | src2_[(int)swizzle.src2_selector_1.Value()], |
| 141 | src2_[(int)swizzle.src2_selector_2.Value()], | ||
| 142 | src2_[(int)swizzle.src2_selector_3.Value()], | ||
| 139 | }; | 143 | }; |
| 140 | if (negate_src2) { | 144 | if (negate_src2) { |
| 141 | src2[0] = src2[0] * float24::FromFloat32(-1); | 145 | src2[0] = -src2[0]; |
| 142 | src2[1] = src2[1] * float24::FromFloat32(-1); | 146 | src2[1] = -src2[1]; |
| 143 | src2[2] = src2[2] * float24::FromFloat32(-1); | 147 | src2[2] = -src2[2]; |
| 144 | src2[3] = src2[3] * float24::FromFloat32(-1); | 148 | src2[3] = -src2[3]; |
| 145 | } | 149 | } |
| 146 | 150 | ||
| 147 | float24* dest = | 151 | float24* dest = |
| @@ -451,34 +455,40 @@ void RunInterpreter(const ShaderSetup& setup, UnitState<Debug>& state, unsigned | |||
| 451 | const bool negate_src3 = ((bool)swizzle.negate_src3 != false); | 455 | const bool negate_src3 = ((bool)swizzle.negate_src3 != false); |
| 452 | 456 | ||
| 453 | float24 src1[4] = { | 457 | float24 src1[4] = { |
| 454 | src1_[(int)swizzle.GetSelectorSrc1(0)], src1_[(int)swizzle.GetSelectorSrc1(1)], | 458 | src1_[(int)swizzle.src1_selector_0.Value()], |
| 455 | src1_[(int)swizzle.GetSelectorSrc1(2)], src1_[(int)swizzle.GetSelectorSrc1(3)], | 459 | src1_[(int)swizzle.src1_selector_1.Value()], |
| 460 | src1_[(int)swizzle.src1_selector_2.Value()], | ||
| 461 | src1_[(int)swizzle.src1_selector_3.Value()], | ||
| 456 | }; | 462 | }; |
| 457 | if (negate_src1) { | 463 | if (negate_src1) { |
| 458 | src1[0] = src1[0] * float24::FromFloat32(-1); | 464 | src1[0] = -src1[0]; |
| 459 | src1[1] = src1[1] * float24::FromFloat32(-1); | 465 | src1[1] = -src1[1]; |
| 460 | src1[2] = src1[2] * float24::FromFloat32(-1); | 466 | src1[2] = -src1[2]; |
| 461 | src1[3] = src1[3] * float24::FromFloat32(-1); | 467 | src1[3] = -src1[3]; |
| 462 | } | 468 | } |
| 463 | float24 src2[4] = { | 469 | float24 src2[4] = { |
| 464 | src2_[(int)swizzle.GetSelectorSrc2(0)], src2_[(int)swizzle.GetSelectorSrc2(1)], | 470 | src2_[(int)swizzle.src2_selector_0.Value()], |
| 465 | src2_[(int)swizzle.GetSelectorSrc2(2)], src2_[(int)swizzle.GetSelectorSrc2(3)], | 471 | src2_[(int)swizzle.src2_selector_1.Value()], |
| 472 | src2_[(int)swizzle.src2_selector_2.Value()], | ||
| 473 | src2_[(int)swizzle.src2_selector_3.Value()], | ||
| 466 | }; | 474 | }; |
| 467 | if (negate_src2) { | 475 | if (negate_src2) { |
| 468 | src2[0] = src2[0] * float24::FromFloat32(-1); | 476 | src2[0] = -src2[0]; |
| 469 | src2[1] = src2[1] * float24::FromFloat32(-1); | 477 | src2[1] = -src2[1]; |
| 470 | src2[2] = src2[2] * float24::FromFloat32(-1); | 478 | src2[2] = -src2[2]; |
| 471 | src2[3] = src2[3] * float24::FromFloat32(-1); | 479 | src2[3] = -src2[3]; |
| 472 | } | 480 | } |
| 473 | float24 src3[4] = { | 481 | float24 src3[4] = { |
| 474 | src3_[(int)swizzle.GetSelectorSrc3(0)], src3_[(int)swizzle.GetSelectorSrc3(1)], | 482 | src3_[(int)swizzle.src3_selector_0.Value()], |
| 475 | src3_[(int)swizzle.GetSelectorSrc3(2)], src3_[(int)swizzle.GetSelectorSrc3(3)], | 483 | src3_[(int)swizzle.src3_selector_1.Value()], |
| 484 | src3_[(int)swizzle.src3_selector_2.Value()], | ||
| 485 | src3_[(int)swizzle.src3_selector_3.Value()], | ||
| 476 | }; | 486 | }; |
| 477 | if (negate_src3) { | 487 | if (negate_src3) { |
| 478 | src3[0] = src3[0] * float24::FromFloat32(-1); | 488 | src3[0] = -src3[0]; |
| 479 | src3[1] = src3[1] * float24::FromFloat32(-1); | 489 | src3[1] = -src3[1]; |
| 480 | src3[2] = src3[2] * float24::FromFloat32(-1); | 490 | src3[2] = -src3[2]; |
| 481 | src3[3] = src3[3] * float24::FromFloat32(-1); | 491 | src3[3] = -src3[3]; |
| 482 | } | 492 | } |
| 483 | 493 | ||
| 484 | float24* dest = | 494 | float24* dest = |