diff --git a/src/Pipeline/PixelProgram.cpp b/src/Pipeline/PixelProgram.cpp
index 809a03c..705ccf5 100644
--- a/src/Pipeline/PixelProgram.cpp
+++ b/src/Pipeline/PixelProgram.cpp
@@ -242,10 +242,14 @@
 	it = spirvShader->outputBuiltins.find(spv::BuiltInFragDepth);
 	if(it != spirvShader->outputBuiltins.end())
 	{
-		oDepth = routine.getVariable(it->second.Id)[it->second.FirstComponent];
-		if(state.depthClamp)
+		for(unsigned int q : samples)
 		{
-			oDepth = Min(Max(oDepth, Float4(state.minDepthClamp)), Float4(state.maxDepthClamp));
+			z[q] = routine.getVariable(it->second.Id)[it->second.FirstComponent];
+
+			if(state.depthClamp)
+			{
+				z[q] = Min(Max(z[q], Float4(state.minDepthClamp)), Float4(state.maxDepthClamp));
+			}
 		}
 	}
 }
diff --git a/src/Pipeline/PixelRoutine.cpp b/src/Pipeline/PixelRoutine.cpp
index db35edd..069544d 100644
--- a/src/Pipeline/PixelRoutine.cpp
+++ b/src/Pipeline/PixelRoutine.cpp
@@ -148,6 +148,11 @@
 
 		If(depthPass || !earlyFragmentTests)
 		{
+			if(earlyFragmentTests)
+			{
+				writeDepth(zBuffer, x, zMask, samples);
+			}
+
 			Float4 yyyy = Float4(Float(y)) + *Pointer<Float4>(primitive + OFFSET(Primitive, yQuad), 16);
 
 			// Centroid locations
@@ -310,9 +315,12 @@
 					}
 				}
 
-				If(depthPass || earlyFragmentTests)
+				If(depthPass)
 				{
-					writeDepth(zBuffer, x, zMask, samples);
+					if(!earlyFragmentTests)
+					{
+						writeDepth(zBuffer, x, zMask, samples);
+					}
 
 					rasterOperation(cBuffer, x, sMask, zMask, cMask, samples);
 
@@ -420,11 +428,6 @@
 {
 	Float4 Z = z;
 
-	if(spirvShader && spirvShader->getModes().DepthReplacing)
-	{
-		Z = oDepth;
-	}
-
 	Pointer<Byte> buffer = zBuffer + 4 * x;
 	Int pitch = *Pointer<Int>(data + OFFSET(DrawData, depthPitchB));
 
@@ -497,11 +500,6 @@
 {
 	Short4 Z = convertFixed16(z, true);
 
-	if(spirvShader && spirvShader->getModes().DepthReplacing)
-	{
-		Z = convertFixed16(oDepth, true);
-	}
-
 	Pointer<Byte> buffer = zBuffer + 2 * x;
 	Int pitch = *Pointer<Int>(data + OFFSET(DrawData, depthPitchB));
 
@@ -665,11 +663,6 @@
 {
 	Float4 Z = z;
 
-	if(spirvShader && spirvShader->getModes().DepthReplacing)
-	{
-		Z = oDepth;
-	}
-
 	Pointer<Byte> buffer = zBuffer + 4 * x;
 	Int pitch = *Pointer<Int>(data + OFFSET(DrawData, depthPitchB));
 
@@ -697,11 +690,6 @@
 {
 	Short4 Z = As<Short4>(convertFixed16(z, true));
 
-	if(spirvShader && spirvShader->getModes().DepthReplacing)
-	{
-		Z = As<Short4>(convertFixed16(oDepth, true));
-	}
-
 	Pointer<Byte> buffer = zBuffer + 2 * x;
 	Int pitch = *Pointer<Int>(data + OFFSET(DrawData, depthPitchB));
 
diff --git a/src/Pipeline/PixelRoutine.hpp b/src/Pipeline/PixelRoutine.hpp
index cc24a46..c1e6c0c 100644
--- a/src/Pipeline/PixelRoutine.hpp
+++ b/src/Pipeline/PixelRoutine.hpp
@@ -46,9 +46,6 @@
 	SpirvRoutine routine;
 	const vk::DescriptorSet::Bindings &descriptorSets;
 
-	// Depth output
-	Float4 oDepth;
-
 	virtual void setBuiltins(Int &x, Int &y, Float4 (&z)[4], Float4 &w, Int cMask[4], const SampleSet &samples) = 0;
 	virtual void executeShader(Int cMask[4], Int sMask[4], Int zMask[4], const SampleSet &samples) = 0;
 	virtual Bool alphaTest(Int cMask[4], const SampleSet &samples) = 0;
