From ce36ad454ecd4707a77916fdb79954c8924b50ee Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Fri, 12 Dec 2014 17:55:43 +0100 Subject: Pica/VertexShader: Support negating src2. --- src/video_core/vertex_shader.cpp | 11 +++++++++-- src/video_core/vertex_shader.h | 1 - 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/video_core/vertex_shader.cpp b/src/video_core/vertex_shader.cpp index 064a703e..c5c5261f 100644 --- a/src/video_core/vertex_shader.cpp +++ b/src/video_core/vertex_shader.cpp @@ -10,10 +10,10 @@ #include -#include "debug_utils/debug_utils.h" #include "pica.h" #include "vertex_shader.h" +#include "debug_utils/debug_utils.h" using nihstro::Instruction; using nihstro::RegisterType; @@ -99,6 +99,7 @@ static void ProcessShaderCode(VertexShaderState& state) { const SwizzlePattern& swizzle = *(SwizzlePattern*)&swizzle_data[instr.common.operand_desc_id]; const bool negate_src1 = (swizzle.negate_src1 != 0); + const bool negate_src2 = (swizzle.negate_src2 != 0); float24 src1[4] = { src1_[(int)swizzle.GetSelectorSrc1(0)], @@ -112,12 +113,18 @@ static void ProcessShaderCode(VertexShaderState& state) { src1[2] = src1[2] * float24::FromFloat32(-1); src1[3] = src1[3] * float24::FromFloat32(-1); } - const float24 src2[4] = { + float24 src2[4] = { src2_[(int)swizzle.GetSelectorSrc2(0)], src2_[(int)swizzle.GetSelectorSrc2(1)], src2_[(int)swizzle.GetSelectorSrc2(2)], src2_[(int)swizzle.GetSelectorSrc2(3)], }; + if (negate_src2) { + src2[0] = src2[0] * float24::FromFloat32(-1); + src2[1] = src2[1] * float24::FromFloat32(-1); + src2[2] = src2[2] * float24::FromFloat32(-1); + src2[3] = src2[3] * float24::FromFloat32(-1); + } switch (instr.opcode) { case Instruction::OpCode::ADD: diff --git a/src/video_core/vertex_shader.h b/src/video_core/vertex_shader.h index 13176980..2f6ff590 100644 --- a/src/video_core/vertex_shader.h +++ b/src/video_core/vertex_shader.h @@ -66,7 +66,6 @@ struct OutputVertex { static_assert(std::is_pod::value, "Structure is not POD"); static_assert(sizeof(OutputVertex) == 32 * sizeof(float), "OutputVertex has invalid size"); - void SubmitShaderMemoryChange(u32 addr, u32 value); void SubmitSwizzleDataChange(u32 addr, u32 value); -- cgit v1.2.3