Eliminate unscale constants

Several of them were already unused, and the remaining ones allow
for more constant folding when included in Reactor routines as
immediate constants instead of being loaded explicitily from the
Constants structure. It also improves readability.

Bug: b/175073806
Change-Id: Ib1853dd75f9ad7e7f0ab1f87ce29c25d47a88d48
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/67428
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
diff --git a/src/Pipeline/Constants.cpp b/src/Pipeline/Constants.cpp
index d5f2b25..1937e8b 100644
--- a/src/Pipeline/Constants.cpp
+++ b/src/Pipeline/Constants.cpp
@@ -304,26 +304,6 @@
 	memcpy(&this->Xf, &Xf, sizeof(Xf));
 	memcpy(&this->Yf, &Yf, sizeof(Yf));
 
-	static const float4 unscaleByte = { 1.0f / 0xFF, 1.0f / 0xFF, 1.0f / 0xFF, 1.0f / 0xFF };
-	static const float4 unscaleSByte = { 1.0f / 0x7F, 1.0f / 0x7F, 1.0f / 0x7F, 1.0f / 0x7F };
-	static const float4 unscaleShort = { 1.0f / 0x7FFF, 1.0f / 0x7FFF, 1.0f / 0x7FFF, 1.0f / 0x7FFF };
-	static const float4 unscaleUShort = { 1.0f / 0xFFFF, 1.0f / 0xFFFF, 1.0f / 0xFFFF, 1.0f / 0xFFFF };
-
-	// NOTE: Using "1.0f / 0x7FFFFFF" below results in a compiler error, e.g.:
-	// error: implicit conversion from 'int' to 'float' changes value from 2147483646 to 2147483648
-	static const float4 unscaleInt = { (float)(1.0 / 0x7FFFFFFF), (float)(1.0 / 0x7FFFFFFF), (float)(1.0 / 0x7FFFFFFF), (float)(1.0 / 0x7FFFFFFF) };
-	static const float4 unscaleUInt = { (float)(1.0 / 0xFFFFFFFF), (float)(1.0 / 0xFFFFFFFF), (float)(1.0 / 0xFFFFFFFF), (float)(1.0 / 0xFFFFFFFF) };
-
-	static const float4 unscaleFixed = { 1.0f / 0x00010000, 1.0f / 0x00010000, 1.0f / 0x00010000, 1.0f / 0x00010000 };
-
-	memcpy(&this->unscaleByte, &unscaleByte, sizeof(unscaleByte));
-	memcpy(&this->unscaleSByte, &unscaleSByte, sizeof(unscaleSByte));
-	memcpy(&this->unscaleShort, &unscaleShort, sizeof(unscaleShort));
-	memcpy(&this->unscaleUShort, &unscaleUShort, sizeof(unscaleUShort));
-	memcpy(&this->unscaleInt, &unscaleInt, sizeof(unscaleInt));
-	memcpy(&this->unscaleUInt, &unscaleUInt, sizeof(unscaleUInt));
-	memcpy(&this->unscaleFixed, &unscaleFixed, sizeof(unscaleFixed));
-
 	for(int i = 0; i <= 0xFFFF; i++)
 	{
 		half2float[i] = (float)reinterpret_cast<half &>(i);
diff --git a/src/Pipeline/Constants.hpp b/src/Pipeline/Constants.hpp
index 9fd0b88..a939a7c 100644
--- a/src/Pipeline/Constants.hpp
+++ b/src/Pipeline/Constants.hpp
@@ -136,14 +136,6 @@
 		sw::SampleLocationsY[3],
 	};
 
-	float4 unscaleByte;
-	float4 unscaleSByte;
-	float4 unscaleShort;
-	float4 unscaleUShort;
-	float4 unscaleInt;
-	float4 unscaleUInt;
-	float4 unscaleFixed;
-
 	float half2float[65536];
 };
 
diff --git a/src/Pipeline/VertexRoutine.cpp b/src/Pipeline/VertexRoutine.cpp
index 771dcd7..36ce92c 100644
--- a/src/Pipeline/VertexRoutine.cpp
+++ b/src/Pipeline/VertexRoutine.cpp
@@ -16,8 +16,8 @@
 
 #include "Constants.hpp"
 #include "SpirvShader.hpp"
-#include "Device/Renderer.hpp"
 #include "Device/Clipper.hpp"
+#include "Device/Renderer.hpp"
 #include "Device/Vertex.hpp"
 #include "System/Debug.hpp"
 #include "System/Half.hpp"
@@ -256,10 +256,10 @@
 
 		transpose4xN(v.x, v.y, v.z, v.w, componentCount);
 
-		if(componentCount >= 1) v.x *= *Pointer<Float4>(constants + OFFSET(Constants, unscaleByte));
-		if(componentCount >= 2) v.y *= *Pointer<Float4>(constants + OFFSET(Constants, unscaleByte));
-		if(componentCount >= 3) v.z *= *Pointer<Float4>(constants + OFFSET(Constants, unscaleByte));
-		if(componentCount >= 4) v.w *= *Pointer<Float4>(constants + OFFSET(Constants, unscaleByte));
+		if(componentCount >= 1) v.x *= (1.0f / 0xFF);
+		if(componentCount >= 2) v.y *= (1.0f / 0xFF);
+		if(componentCount >= 3) v.z *= (1.0f / 0xFF);
+		if(componentCount >= 4) v.w *= (1.0f / 0xFF);
 		break;
 	case VK_FORMAT_R8_UINT:
 	case VK_FORMAT_R8G8_UINT:
@@ -283,10 +283,10 @@
 
 		transpose4xN(v.x, v.y, v.z, v.w, componentCount);
 
-		if(componentCount >= 1) v.x = Max(v.x * *Pointer<Float4>(constants + OFFSET(Constants, unscaleSByte)), Float4(-1.0f));
-		if(componentCount >= 2) v.y = Max(v.y * *Pointer<Float4>(constants + OFFSET(Constants, unscaleSByte)), Float4(-1.0f));
-		if(componentCount >= 3) v.z = Max(v.z * *Pointer<Float4>(constants + OFFSET(Constants, unscaleSByte)), Float4(-1.0f));
-		if(componentCount >= 4) v.w = Max(v.w * *Pointer<Float4>(constants + OFFSET(Constants, unscaleSByte)), Float4(-1.0f));
+		if(componentCount >= 1) v.x = Max(v.x * (1.0f / 0x7F), Float4(-1.0f));
+		if(componentCount >= 2) v.y = Max(v.y * (1.0f / 0x7F), Float4(-1.0f));
+		if(componentCount >= 3) v.z = Max(v.z * (1.0f / 0x7F), Float4(-1.0f));
+		if(componentCount >= 4) v.w = Max(v.w * (1.0f / 0x7F), Float4(-1.0f));
 		break;
 	case VK_FORMAT_R8_USCALED:
 	case VK_FORMAT_R8G8_USCALED:
@@ -331,10 +331,10 @@
 
 		transpose4xN(v.x, v.y, v.z, v.w, componentCount);
 
-		if(componentCount >= 1) v.x *= *Pointer<Float4>(constants + OFFSET(Constants, unscaleUShort));
-		if(componentCount >= 2) v.y *= *Pointer<Float4>(constants + OFFSET(Constants, unscaleUShort));
-		if(componentCount >= 3) v.z *= *Pointer<Float4>(constants + OFFSET(Constants, unscaleUShort));
-		if(componentCount >= 4) v.w *= *Pointer<Float4>(constants + OFFSET(Constants, unscaleUShort));
+		if(componentCount >= 1) v.x *= (1.0f / 0xFFFF);
+		if(componentCount >= 2) v.y *= (1.0f / 0xFFFF);
+		if(componentCount >= 3) v.z *= (1.0f / 0xFFFF);
+		if(componentCount >= 4) v.w *= (1.0f / 0xFFFF);
 		break;
 	case VK_FORMAT_R16_SNORM:
 	case VK_FORMAT_R16G16_SNORM:
@@ -346,10 +346,10 @@
 
 		transpose4xN(v.x, v.y, v.z, v.w, componentCount);
 
-		if(componentCount >= 1) v.x = Max(v.x * *Pointer<Float4>(constants + OFFSET(Constants, unscaleShort)), Float4(-1.0f));
-		if(componentCount >= 2) v.y = Max(v.y * *Pointer<Float4>(constants + OFFSET(Constants, unscaleShort)), Float4(-1.0f));
-		if(componentCount >= 3) v.z = Max(v.z * *Pointer<Float4>(constants + OFFSET(Constants, unscaleShort)), Float4(-1.0f));
-		if(componentCount >= 4) v.w = Max(v.w * *Pointer<Float4>(constants + OFFSET(Constants, unscaleShort)), Float4(-1.0f));
+		if(componentCount >= 1) v.x = Max(v.x * (1.0f / 0x7FFF), Float4(-1.0f));
+		if(componentCount >= 2) v.y = Max(v.y * (1.0f / 0x7FFF), Float4(-1.0f));
+		if(componentCount >= 3) v.z = Max(v.z * (1.0f / 0x7FFF), Float4(-1.0f));
+		if(componentCount >= 4) v.w = Max(v.w * (1.0f / 0x7FFF), Float4(-1.0f));
 		break;
 	case VK_FORMAT_R16_USCALED:
 	case VK_FORMAT_R16G16_USCALED: