diff options
| author | 2014-12-12 17:55:43 +0100 | |
|---|---|---|
| committer | 2014-12-20 18:06:55 +0100 | |
| commit | ce36ad454ecd4707a77916fdb79954c8924b50ee (patch) | |
| tree | aecef25a336f7c0ca773629368792c85f6d0111e /src/video_core/vertex_shader.cpp | |
| parent | Pica/DebugUtils: Replace duplicated SHBIN structures in favor of nihstro's ones. (diff) | |
| download | yuzu-ce36ad454ecd4707a77916fdb79954c8924b50ee.tar.gz yuzu-ce36ad454ecd4707a77916fdb79954c8924b50ee.tar.xz yuzu-ce36ad454ecd4707a77916fdb79954c8924b50ee.zip | |
Pica/VertexShader: Support negating src2.
Diffstat (limited to 'src/video_core/vertex_shader.cpp')
| -rw-r--r-- | src/video_core/vertex_shader.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/video_core/vertex_shader.cpp b/src/video_core/vertex_shader.cpp index 064a703eb..c5c5261fe 100644 --- a/src/video_core/vertex_shader.cpp +++ b/src/video_core/vertex_shader.cpp | |||
| @@ -10,10 +10,10 @@ | |||
| 10 | 10 | ||
| 11 | #include <nihstro/shader_bytecode.h> | 11 | #include <nihstro/shader_bytecode.h> |
| 12 | 12 | ||
| 13 | #include "debug_utils/debug_utils.h" | ||
| 14 | 13 | ||
| 15 | #include "pica.h" | 14 | #include "pica.h" |
| 16 | #include "vertex_shader.h" | 15 | #include "vertex_shader.h" |
| 16 | #include "debug_utils/debug_utils.h" | ||
| 17 | 17 | ||
| 18 | using nihstro::Instruction; | 18 | using nihstro::Instruction; |
| 19 | using nihstro::RegisterType; | 19 | using nihstro::RegisterType; |
| @@ -99,6 +99,7 @@ static void ProcessShaderCode(VertexShaderState& state) { | |||
| 99 | 99 | ||
| 100 | const SwizzlePattern& swizzle = *(SwizzlePattern*)&swizzle_data[instr.common.operand_desc_id]; | 100 | const SwizzlePattern& swizzle = *(SwizzlePattern*)&swizzle_data[instr.common.operand_desc_id]; |
| 101 | const bool negate_src1 = (swizzle.negate_src1 != 0); | 101 | const bool negate_src1 = (swizzle.negate_src1 != 0); |
| 102 | const bool negate_src2 = (swizzle.negate_src2 != 0); | ||
| 102 | 103 | ||
| 103 | float24 src1[4] = { | 104 | float24 src1[4] = { |
| 104 | src1_[(int)swizzle.GetSelectorSrc1(0)], | 105 | src1_[(int)swizzle.GetSelectorSrc1(0)], |
| @@ -112,12 +113,18 @@ static void ProcessShaderCode(VertexShaderState& state) { | |||
| 112 | src1[2] = src1[2] * float24::FromFloat32(-1); | 113 | src1[2] = src1[2] * float24::FromFloat32(-1); |
| 113 | src1[3] = src1[3] * float24::FromFloat32(-1); | 114 | src1[3] = src1[3] * float24::FromFloat32(-1); |
| 114 | } | 115 | } |
| 115 | const float24 src2[4] = { | 116 | float24 src2[4] = { |
| 116 | src2_[(int)swizzle.GetSelectorSrc2(0)], | 117 | src2_[(int)swizzle.GetSelectorSrc2(0)], |
| 117 | src2_[(int)swizzle.GetSelectorSrc2(1)], | 118 | src2_[(int)swizzle.GetSelectorSrc2(1)], |
| 118 | src2_[(int)swizzle.GetSelectorSrc2(2)], | 119 | src2_[(int)swizzle.GetSelectorSrc2(2)], |
| 119 | src2_[(int)swizzle.GetSelectorSrc2(3)], | 120 | src2_[(int)swizzle.GetSelectorSrc2(3)], |
| 120 | }; | 121 | }; |
| 122 | if (negate_src2) { | ||
| 123 | src2[0] = src2[0] * float24::FromFloat32(-1); | ||
| 124 | src2[1] = src2[1] * float24::FromFloat32(-1); | ||
| 125 | src2[2] = src2[2] * float24::FromFloat32(-1); | ||
| 126 | src2[3] = src2[3] * float24::FromFloat32(-1); | ||
| 127 | } | ||
| 121 | 128 | ||
| 122 | switch (instr.opcode) { | 129 | switch (instr.opcode) { |
| 123 | case Instruction::OpCode::ADD: | 130 | case Instruction::OpCode::ADD: |