summaryrefslogtreecommitdiff
path: root/src/video_core/vertex_shader.cpp
diff options
context:
space:
mode:
authorGravatar Tony Wasserka2014-12-12 17:55:43 +0100
committerGravatar Tony Wasserka2014-12-20 18:06:55 +0100
commitce36ad454ecd4707a77916fdb79954c8924b50ee (patch)
treeaecef25a336f7c0ca773629368792c85f6d0111e /src/video_core/vertex_shader.cpp
parentPica/DebugUtils: Replace duplicated SHBIN structures in favor of nihstro's ones. (diff)
downloadyuzu-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.cpp11
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
18using nihstro::Instruction; 18using nihstro::Instruction;
19using nihstro::RegisterType; 19using 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: