summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/shader/shader_interpreter.cpp74
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 =