diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/vector_math.h | 3 | ||||
| -rw-r--r-- | src/video_core/shader/shader.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/shader/shader_interpreter.cpp | 74 |
3 files changed, 43 insertions, 38 deletions
diff --git a/src/common/vector_math.h b/src/common/vector_math.h index 2d56f168c..a57d86d88 100644 --- a/src/common/vector_math.h +++ b/src/common/vector_math.h | |||
| @@ -60,7 +60,6 @@ public: | |||
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | Vec2() = default; | 62 | Vec2() = default; |
| 63 | Vec2(const T a[2]) : x(a[0]), y(a[1]) {} | ||
| 64 | Vec2(const T& _x, const T& _y) : x(_x), y(_y) {} | 63 | Vec2(const T& _x, const T& _y) : x(_x), y(_y) {} |
| 65 | 64 | ||
| 66 | template <typename T2> | 65 | template <typename T2> |
| @@ -199,7 +198,6 @@ public: | |||
| 199 | } | 198 | } |
| 200 | 199 | ||
| 201 | Vec3() = default; | 200 | Vec3() = default; |
| 202 | Vec3(const T a[3]) : x(a[0]), y(a[1]), z(a[2]) {} | ||
| 203 | Vec3(const T& _x, const T& _y, const T& _z) : x(_x), y(_y), z(_z) {} | 201 | Vec3(const T& _x, const T& _y, const T& _z) : x(_x), y(_y), z(_z) {} |
| 204 | 202 | ||
| 205 | template <typename T2> | 203 | template <typename T2> |
| @@ -405,7 +403,6 @@ public: | |||
| 405 | } | 403 | } |
| 406 | 404 | ||
| 407 | Vec4() = default; | 405 | Vec4() = default; |
| 408 | Vec4(const T a[4]) : x(a[0]), y(a[1]), z(a[2]), w(a[3]) {} | ||
| 409 | Vec4(const T& _x, const T& _y, const T& _z, const T& _w) : x(_x), y(_y), z(_z), w(_w) {} | 406 | Vec4(const T& _x, const T& _y, const T& _z, const T& _w) : x(_x), y(_y), z(_z), w(_w) {} |
| 410 | 407 | ||
| 411 | template <typename T2> | 408 | template <typename T2> |
diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp index 272f3ffe1..3febe739c 100644 --- a/src/video_core/shader/shader.cpp +++ b/src/video_core/shader/shader.cpp | |||
| @@ -146,10 +146,8 @@ DebugData<true> ShaderSetup::ProduceDebugInfo(const InputVertex& input, int num_ | |||
| 146 | state.debug.max_opdesc_id = 0; | 146 | state.debug.max_opdesc_id = 0; |
| 147 | 147 | ||
| 148 | // Setup input register table | 148 | // Setup input register table |
| 149 | boost::fill(state.registers.input, Math::Vec4<float24>::AssignToAll(float24::Zero())); | ||
| 149 | const auto& attribute_register_map = config.input_register_map; | 150 | const auto& attribute_register_map = config.input_register_map; |
| 150 | float24 dummy_register; | ||
| 151 | boost::fill(state.registers.input, &dummy_register); | ||
| 152 | |||
| 153 | for (unsigned i = 0; i < num_attributes; i++) | 151 | for (unsigned i = 0; i < num_attributes; i++) |
| 154 | state.registers.input[attribute_register_map.GetRegisterForAttribute(i)] = input.attr[i]; | 152 | state.registers.input[attribute_register_map.GetRegisterForAttribute(i)] = input.attr[i]; |
| 155 | 153 | ||
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 = |