Currently, when overflowing the number of temporary registers
allowed, SwiftShader will crash somewhere in the generated
code. This cl adds an early check to prevent the crash and
instead output an error message to the user.
Bug chromium:814987
Change-Id: Idadda21ee14298662763d986ee1283a5114c1c01
Reviewed-on: https://swiftshader-review.googlesource.com/18388
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
MAX_PROGRAM_TEXEL_OFFSET = 7,
MAX_TEXTURE_LOD = MIPMAP_LEVELS - 2, // Trilinear accesses lod+1
RENDERTARGETS = 8,
+ NUM_TEMPORARY_REGISTERS = 4096,
};
}
int OutputASM::temporaryRegister(TIntermTyped *temporary)
{
- return allocate(temporaries, temporary);
+ int index = allocate(temporaries, temporary);
+ if(index >= sw::NUM_TEMPORARY_REGISTERS)
+ {
+ mContext.error(temporary->getLine(),
+ "Too many temporary registers required to compile shader",
+ pixelShader ? "pixel shader" : "vertex shader");
+ }
+ return index;
}
void OutputASM::setPixelShaderInputs(const TType& type, int var, bool flat)
private:
// Temporary registers
- RegisterArray<4096> r;
+ RegisterArray<NUM_TEMPORARY_REGISTERS> r;
// Color outputs
Vector4f c[RENDERTARGETS];
private:
const VertexShader *const shader;
- RegisterArray<4096> r; // Temporary registers
+ RegisterArray<NUM_TEMPORARY_REGISTERS> r; // Temporary registers
Vector4f a0;
Array<Int, 4> aL;
Vector4f p0;