From 34bf5819574b082ce1f89f60e941c7f955ecb946 Mon Sep 17 00:00:00 2001
From: Magnus Norddahl <dpjudas@users.noreply.github.com>
Date: Wed, 30 Nov 2016 08:51:39 +0100
Subject: [PATCH] Fix new blend mode

---
 src/r_drawers.cpp                               | 10 ++++++++++
 tools/drawergen/fixedfunction/drawercodegen.cpp |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/r_drawers.cpp b/src/r_drawers.cpp
index ab45ad939c..66cbdd7501 100644
--- a/src/r_drawers.cpp
+++ b/src/r_drawers.cpp
@@ -106,6 +106,7 @@ extern "C"
 	void TriDrawNormal8_10_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
 	void TriDrawNormal8_11_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
 	void TriDrawNormal8_12_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
+	void TriDrawNormal8_13_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
 	void TriDrawNormal32_0_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
 	void TriDrawNormal32_1_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
 	void TriDrawNormal32_2_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
@@ -133,6 +134,7 @@ extern "C"
 	void TriFillNormal8_10_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
 	void TriFillNormal8_11_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
 	void TriFillNormal8_12_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
+	void TriFillNormal8_13_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
 	void TriFillNormal32_0_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
 	void TriFillNormal32_1_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
 	void TriFillNormal32_2_SSE2(const TriDrawTriangleArgs *, WorkerThreadData *);
@@ -286,6 +288,7 @@ Drawers::Drawers()
 	TriDrawNormal8.push_back(TriDrawNormal8_10_SSE2);
 	TriDrawNormal8.push_back(TriDrawNormal8_11_SSE2);
 	TriDrawNormal8.push_back(TriDrawNormal8_12_SSE2);
+	TriDrawNormal8.push_back(TriDrawNormal8_13_SSE2);
 	TriDrawNormal32.push_back(TriDrawNormal32_0_SSE2);
 	TriDrawNormal32.push_back(TriDrawNormal32_1_SSE2);
 	TriDrawNormal32.push_back(TriDrawNormal32_2_SSE2);
@@ -299,6 +302,7 @@ Drawers::Drawers()
 	TriDrawNormal32.push_back(TriDrawNormal32_10_SSE2);
 	TriDrawNormal32.push_back(TriDrawNormal32_11_SSE2);
 	TriDrawNormal32.push_back(TriDrawNormal32_12_SSE2);
+	TriDrawNormal32.push_back(TriDrawNormal32_13_SSE2);
 	TriFillNormal8.push_back(TriFillNormal8_0_SSE2);
 	TriFillNormal8.push_back(TriFillNormal8_1_SSE2);
 	TriFillNormal8.push_back(TriFillNormal8_2_SSE2);
@@ -312,6 +316,7 @@ Drawers::Drawers()
 	TriFillNormal8.push_back(TriFillNormal8_10_SSE2);
 	TriFillNormal8.push_back(TriFillNormal8_11_SSE2);
 	TriFillNormal8.push_back(TriFillNormal8_12_SSE2);
+	TriFillNormal8.push_back(TriFillNormal8_13_SSE2);
 	TriFillNormal32.push_back(TriFillNormal32_0_SSE2);
 	TriFillNormal32.push_back(TriFillNormal32_1_SSE2);
 	TriFillNormal32.push_back(TriFillNormal32_2_SSE2);
@@ -325,6 +330,7 @@ Drawers::Drawers()
 	TriFillNormal32.push_back(TriFillNormal32_10_SSE2);
 	TriFillNormal32.push_back(TriFillNormal32_11_SSE2);
 	TriFillNormal32.push_back(TriFillNormal32_12_SSE2);
+	TriFillNormal32.push_back(TriFillNormal32_13_SSE2);
 	TriDrawSubsector8.push_back(TriDrawSubsector8_0_SSE2);
 	TriDrawSubsector8.push_back(TriDrawSubsector8_1_SSE2);
 	TriDrawSubsector8.push_back(TriDrawSubsector8_2_SSE2);
@@ -338,6 +344,7 @@ Drawers::Drawers()
 	TriDrawSubsector8.push_back(TriDrawSubsector8_10_SSE2);
 	TriDrawSubsector8.push_back(TriDrawSubsector8_11_SSE2);
 	TriDrawSubsector8.push_back(TriDrawSubsector8_12_SSE2);
+	TriDrawSubsector8.push_back(TriDrawSubsector8_13_SSE2);
 	TriDrawSubsector32.push_back(TriDrawSubsector32_0_SSE2);
 	TriDrawSubsector32.push_back(TriDrawSubsector32_1_SSE2);
 	TriDrawSubsector32.push_back(TriDrawSubsector32_2_SSE2);
@@ -351,6 +358,7 @@ Drawers::Drawers()
 	TriDrawSubsector32.push_back(TriDrawSubsector32_10_SSE2);
 	TriDrawSubsector32.push_back(TriDrawSubsector32_11_SSE2);
 	TriDrawSubsector32.push_back(TriDrawSubsector32_12_SSE2);
+	TriDrawSubsector32.push_back(TriDrawSubsector32_13_SSE2);
 	TriFillSubsector8.push_back(TriFillSubsector8_0_SSE2);
 	TriFillSubsector8.push_back(TriFillSubsector8_1_SSE2);
 	TriFillSubsector8.push_back(TriFillSubsector8_2_SSE2);
@@ -364,6 +372,7 @@ Drawers::Drawers()
 	TriFillSubsector8.push_back(TriFillSubsector8_10_SSE2);
 	TriFillSubsector8.push_back(TriFillSubsector8_11_SSE2);
 	TriFillSubsector8.push_back(TriFillSubsector8_12_SSE2);
+	TriFillSubsector8.push_back(TriFillSubsector8_13_SSE2);
 	TriFillSubsector32.push_back(TriFillSubsector32_0_SSE2);
 	TriFillSubsector32.push_back(TriFillSubsector32_1_SSE2);
 	TriFillSubsector32.push_back(TriFillSubsector32_2_SSE2);
@@ -377,6 +386,7 @@ Drawers::Drawers()
 	TriFillSubsector32.push_back(TriFillSubsector32_10_SSE2);
 	TriFillSubsector32.push_back(TriFillSubsector32_11_SSE2);
 	TriFillSubsector32.push_back(TriFillSubsector32_12_SSE2);
+	TriFillSubsector32.push_back(TriFillSubsector32_13_SSE2);
 	TriStencil = TriStencil_SSE2;
 	TriStencilClose = TriStencilClose_SSE2;
 }
diff --git a/tools/drawergen/fixedfunction/drawercodegen.cpp b/tools/drawergen/fixedfunction/drawercodegen.cpp
index a4ad1a9410..ccff40ac04 100644
--- a/tools/drawergen/fixedfunction/drawercodegen.cpp
+++ b/tools/drawergen/fixedfunction/drawercodegen.cpp
@@ -165,5 +165,5 @@ SSAVec4i DrawerCodegen::blend_add_srccolor_oneminussrccolor(SSAVec4i fg, SSAVec4
 {
 	SSAVec4i fgcolor = fg + (fg >> 7); // 255 -> 256
 	SSAVec4i inv_fgcolor = SSAVec4i(256) - fgcolor;
-	return fg + (bg * inv_fgcolor + 128) >> 8;
+	return fg + ((bg * inv_fgcolor + 128) >> 8);
 }