Commit 90d251aa by Ben Clayton

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/+/31008Tested-by: 's avatarBen Clayton <bclayton@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
parent 6ef19361
...@@ -2479,6 +2479,13 @@ namespace glsl ...@@ -2479,6 +2479,13 @@ namespace glsl
int stride = (argumentInfo.typedMemberInfo.matrixStride > 0) ? argumentInfo.typedMemberInfo.matrixStride : argumentInfo.typedMemberInfo.arrayStride; int stride = (argumentInfo.typedMemberInfo.matrixStride > 0) ? argumentInfo.typedMemberInfo.matrixStride : argumentInfo.typedMemberInfo.arrayStride;
parameter.index = argumentInfo.typedMemberInfo.offset + argumentInfo.clampedIndex * stride; 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())) if(!IsSampler(arg->getBasicType()))
...@@ -2493,6 +2500,14 @@ namespace glsl ...@@ -2493,6 +2500,14 @@ namespace glsl
parameter.type = registerType(arg); parameter.type = registerType(arg);
parameter.index = registerIndex(arg) + index; parameter.index = registerIndex(arg) + index;
parameter.mask = writeMask(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) void OutputASM::copy(TIntermTyped *dst, TIntermNode *src, int offset)
......
...@@ -190,6 +190,7 @@ namespace sw ...@@ -190,6 +190,7 @@ namespace sw
Register operator[](int i) Register operator[](int i)
{ {
ASSERT(i < size);
if(indirectAddressable) if(indirectAddressable)
{ {
return Register(x[0][i], y[0][i], z[0][i], w[0][i]); return Register(x[0][i], y[0][i], z[0][i], w[0][i]);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment