diff --git a/src/Device/Blitter.cpp b/src/Device/Blitter.cpp
index b366b72..629b5be 100644
--- a/src/Device/Blitter.cpp
+++ b/src/Device/Blitter.cpp
@@ -1295,7 +1295,7 @@
 
 	void Blitter::ApplyScaleAndClamp(Float4 &value, const State &state, bool preScaled)
 	{
-		float4 scale, unscale;
+		float4 scale{}, unscale{};
 
 		if(state.clearOperation &&
 		   state.sourceFormat.isNonNormalizedInteger() &&
diff --git a/src/Pipeline/Constants.cpp b/src/Pipeline/Constants.cpp
index 5902c4b..5095cbe 100644
--- a/src/Pipeline/Constants.cpp
+++ b/src/Pipeline/Constants.cpp
@@ -290,17 +290,43 @@
 			sRGBtoLinear12_16[i] = (unsigned short)(clamp(sw::sRGBtoLinear((float)i / 0x0FFF) * 0xFFFF + 0.5f, 0.0f, (float)0xFFFF));
 		}
 
+		// VK_SAMPLE_COUNT_4_BIT
+		// https://www.khronos.org/registry/vulkan/specs/1.1/html/vkspec.html#primsrast-multisampling
+		constexpr float sampleLocations4[][2] = {
+			{0.375, 0.125},
+			{0.875, 0.375},
+			{0.125, 0.625},
+			{0.625, 0.875},
+		};
+
+		// Vulkan spec sample positions are relative to 0,0 in top left corner, with Y+ going down.
+		// Convert to our space, with 0,0 in center, and Y+ going up.
+		constexpr float4 X[4] = {
+			sw::replicate(sampleLocations4[0][0] - 0.5f), // -0.125
+			sw::replicate(sampleLocations4[1][0] - 0.5f), // +0.375
+			sw::replicate(sampleLocations4[2][0] - 0.5f), // -0.375
+			sw::replicate(sampleLocations4[3][0] - 0.5f), // +0.125
+		};
+
+		constexpr float4 Y[4] = {
+			sw::replicate(-(sampleLocations4[0][1] - 0.5f)), // +0.375
+			sw::replicate(-(sampleLocations4[1][1] - 0.5f)), // +0.125
+			sw::replicate(-(sampleLocations4[2][1] - 0.5f)), // -0.125
+			sw::replicate(-(sampleLocations4[3][1] - 0.5f)), // -0.375
+		};
+
 		for(int q = 0; q < 4; q++)
 		{
 			for(int c = 0; c < 16; c++)
 			{
 				for(int i = 0; i < 4; i++)
 				{
-					const float X[4] = {+0.3125f, -0.3125f, -0.1250f, +0.1250f};
-					const float Y[4] = {+0.1250f, -0.1250f, +0.3125f, -0.3125f};
+					// Reorder sample points for centroid computation
+					const float Xs[4] = { X[1][0], X[2][0], X[0][0], X[3][0] };
+					const float Ys[4] = { Y[1][0], Y[2][0], Y[0][0], Y[3][0] };
 
-					sampleX[q][c][i] = c & (1 << i) ? X[q] : 0.0f;
-					sampleY[q][c][i] = c & (1 << i) ? Y[q] : 0.0f;
+					sampleX[q][c][i] = c & (1 << i) ? Xs[q] : 0.0f;
+					sampleY[q][c][i] = c & (1 << i) ? Ys[q] : 0.0f;
 					weight[c][i] = c & (1 << i) ? 1.0f : 0.0f;
 				}
 			}
@@ -312,16 +338,6 @@
 		memcpy(&this->Xf, &Xf, sizeof(Xf));
 		memcpy(&this->Yf, &Yf, sizeof(Yf));
 
-		static const float4 X[4] = {{-0.3125f, -0.3125f, -0.3125f, -0.3125f},
-					                {+0.3125f, +0.3125f, +0.3125f, +0.3125f},
-					                {+0.1250f, +0.1250f, +0.1250f, +0.1250f},
-					                {-0.1250f, -0.1250f, -0.1250f, -0.1250f}};
-
-		static const float4 Y[4] = {{-0.1250f, -0.1250f, -0.1250f, -0.1250f},
-		                            {+0.1250f, +0.1250f, +0.1250f, +0.1250f},
-		                            {-0.3125f, -0.3125f, -0.3125f, -0.3125f},
-		                            {+0.3125f, +0.3125f, +0.3125f, +0.3125f}};
-
 		memcpy(&this->X, &X, sizeof(X));
 		memcpy(&this->Y, &Y, sizeof(Y));
 
diff --git a/src/System/Types.hpp b/src/System/Types.hpp
index cd08ed5..70c084d 100644
--- a/src/System/Types.hpp
+++ b/src/System/Types.hpp
@@ -127,28 +127,14 @@
 		}
 	});
 
-	inline float4 vector(float x, float y, float z, float w)
+	inline constexpr float4 vector(float x, float y, float z, float w)
 	{
-		float4 v;
-
-		v.x = x;
-		v.y = y;
-		v.z = z;
-		v.w = w;
-
-		return v;
+		return { x, y, z, w };
 	}
 
-	inline float4 replicate(float f)
+	inline constexpr float4 replicate(float f)
 	{
-		float4 v;
-
-		v.x = f;
-		v.y = f;
-		v.z = f;
-		v.w = f;
-
-		return v;
+		return vector(f, f, f, f);
 	}
 
 	#define OFFSET(s,m) (int)(size_t)&reinterpret_cast<const volatile char&>((((s*)0)->m))
