From 6ef0aa123fafdd19c62dcabb64dd210c5fe423b3 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 16 Mar 2014 16:21:12 -0700 Subject: [PATCH] softgpu: Use SSE for the secondary color. It's easy to speed up this code since it's so hot. --- GPU/Software/Rasterizer.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/GPU/Software/Rasterizer.cpp b/GPU/Software/Rasterizer.cpp index c7f66265c7..78ca3d6347 100644 --- a/GPU/Software/Rasterizer.cpp +++ b/GPU/Software/Rasterizer.cpp @@ -1040,8 +1040,7 @@ inline void ApplyTexturing(Vec4 &prim_color, float s, float t, int maxTexLe texcolor = (t * (0x100 - frac_v) + b * frac_v) / (256 * 256); #endif } - Vec4 out = GetTextureFunctionOutput(prim_color, texcolor); - prim_color = out; + prim_color = GetTextureFunctionOutput(prim_color, texcolor); } #if defined(_M_SSE) @@ -1194,8 +1193,15 @@ void DrawTriangleSlice( } } - if (!clearMode) + if (!clearMode) { + // TODO: Tried making Vec4 do this, but things got slower. +#if defined(_M_SSE) + const __m128i sec = _mm_and_si128(sec_color.ivec, _mm_set_epi32(0, -1, -1, -1)); + prim_color.ivec = _mm_add_epi32(prim_color.ivec, sec); +#else prim_color += Vec4(sec_color, 0); +#endif + } // TODO: Fogging