OpenGL/compiler: Error if parameters spill max temp registers

Bug: chromium:950230
Bug: chromium:958072
Change-Id: Iaf806df9b35606c9f18d78c3a98f8d3a0d6b3a93
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/31008
Tested-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/OpenGL/compiler/OutputASM.cpp b/src/OpenGL/compiler/OutputASM.cpp
index 7ca0353..75f7167 100644
--- a/src/OpenGL/compiler/OutputASM.cpp
+++ b/src/OpenGL/compiler/OutputASM.cpp
@@ -2479,6 +2479,13 @@
 					int stride = (argumentInfo.typedMemberInfo.matrixStride > 0) ? argumentInfo.typedMemberInfo.matrixStride : argumentInfo.typedMemberInfo.arrayStride;
 					parameter.index = argumentInfo.typedMemberInfo.offset + argumentInfo.clampedIndex * stride;
 				}
+
+				if(parameter.index >= sw::NUM_TEMPORARY_REGISTERS)
+				{
+					mContext.error(arg->getLine(),
+						"Too many temporary registers required to compile shader",
+						pixelShader ? "pixel shader" : "vertex shader");
+				}
 			}
 
 			if(!IsSampler(arg->getBasicType()))
@@ -2493,6 +2500,14 @@
 		parameter.type = registerType(arg);
 		parameter.index = registerIndex(arg) + index;
 		parameter.mask = writeMask(arg, index);
+
+		if(parameter.index >= sw::NUM_TEMPORARY_REGISTERS)
+		{
+			mContext.error(arg->getLine(),
+				"Too many temporary registers required to compile shader",
+				pixelShader ? "pixel shader" : "vertex shader");
+		}
+
 	}
 
 	void OutputASM::copy(TIntermTyped *dst, TIntermNode *src, int offset)
diff --git a/src/Shader/ShaderCore.hpp b/src/Shader/ShaderCore.hpp
index 6b54428..27f6efd 100644
--- a/src/Shader/ShaderCore.hpp
+++ b/src/Shader/ShaderCore.hpp
@@ -190,6 +190,7 @@
 
 		Register operator[](int i)
 		{
+			ASSERT(i < size);
 			if(indirectAddressable)
 			{
 				return Register(x[0][i], y[0][i], z[0][i], w[0][i]);