diff --git a/src/ipa/rpi/pisp/pisp.cpp b/src/ipa/rpi/pisp/pisp.cpp
index ec7593ff..2abb59fa 100644
--- a/src/ipa/rpi/pisp/pisp.cpp
+++ b/src/ipa/rpi/pisp/pisp.cpp
@@ -80,36 +80,30 @@ int generateLut(const ipa::Pwl &pwl, uint32_t *lut, std::size_t lutSize,
 	if (pwl.empty())
 		return -EINVAL;
 
-	int lastY = 0;
+	int nextY = pwl.eval(0);
 	for (unsigned int i = 0; i < lutSize; i++) {
-		int x, y;
-		if (i < 32)
-			x = i * 512;
-		else if (i < 48)
-			x = (i - 32) * 1024 + 16384;
+		unsigned int nextI = i + 1;
+
+		int nextX;
+		if (nextI < 32)
+			nextX = nextI * 512;
+		else if (nextI < 48)
+			nextX = (nextI - 32) * 1024 + 16384;
 		else
-			x = std::min(65535u, (i - 48) * 2048 + 32768);
+			nextX = (nextI - 48) * 2048 + 32768;
 
-		y = pwl.eval(x);
-		if (y < 0 || (i && y < lastY)) {
-			LOG(IPARPI, Error)
-				<< "Malformed PWL for Gamma, disabling!";
-			return -1;
-		}
+		int y = nextY;
+		nextY = pwl.eval(nextX);
 
-		if (i) {
-			unsigned int slope = y - lastY;
-			if (slope >= (1u << SlopeBits)) {
-				slope = (1u << SlopeBits) - 1;
-				LOG(IPARPI, Info)
-					<< ("Maximum Gamma slope exceeded, adjusting!");
-				y = lastY + slope;
-			}
-			lut[i - 1] |= slope << PosBits;
+		unsigned int slope = nextY - y;
+		if (slope >= (1u << SlopeBits)) {
+			slope = (1u << SlopeBits) - 1;
+			LOG(IPARPI, Info)
+				<< "Maximum Gamma slope exceeded, adjusting!";
+			nextY = y + slope;
 		}
 
-		lut[i] = y;
-		lastY = y;
+		lut[i] = y | (slope << PosBits);
 	}
 
 	return 0;
