Commit ba0716cc by Nicolas Capens Committed by Alexis Hétu

Fixed shader-varying-packing-restrictions.html

Return an error instead of asserting when exceeding the number of available varying variables. Change-Id: Ia4d76897b4b214a5b3bdd37cd420c0437faa216a Reviewed-on: https://swiftshader-review.googlesource.com/1451Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent 8dcce86d
...@@ -1943,8 +1943,14 @@ namespace sh ...@@ -1943,8 +1943,14 @@ namespace sh
int componentCount = varying->getNominalSize(); int componentCount = varying->getNominalSize();
int registerCount = varying->totalRegisterCount(); int registerCount = varying->totalRegisterCount();
if(pixelShader && (var + registerCount) <= sw::PixelShader::MAX_INPUT_VARYINGS) if(pixelShader)
{ {
if((var + registerCount) > sw::PixelShader::MAX_INPUT_VARYINGS)
{
mContext.error(varying->getLine(), "Varyings packing failed: Too many varyings", "fragment shader");
return 0;
}
if(varying->getQualifier() == EvqPointCoord) if(varying->getQualifier() == EvqPointCoord)
{ {
ASSERT(varying->isRegister()); ASSERT(varying->isRegister());
...@@ -1964,8 +1970,14 @@ namespace sh ...@@ -1964,8 +1970,14 @@ namespace sh
} }
} }
} }
else if(vertexShader && (var + registerCount) <= sw::VertexShader::MAX_OUTPUT_VARYINGS) else if(vertexShader)
{ {
if((var + registerCount) > sw::VertexShader::MAX_OUTPUT_VARYINGS)
{
mContext.error(varying->getLine(), "Varyings packing failed: Too many varyings", "vertex shader");
return 0;
}
if(varying->getQualifier() == EvqPosition) if(varying->getQualifier() == EvqPosition)
{ {
ASSERT(varying->isRegister()); ASSERT(varying->isRegister());
......
...@@ -1943,8 +1943,14 @@ namespace sh ...@@ -1943,8 +1943,14 @@ namespace sh
int componentCount = varying->getNominalSize(); int componentCount = varying->getNominalSize();
int registerCount = varying->totalRegisterCount(); int registerCount = varying->totalRegisterCount();
if(pixelShader && (var + registerCount) <= sw::PixelShader::MAX_INPUT_VARYINGS) if(pixelShader)
{ {
if((var + registerCount) > sw::PixelShader::MAX_INPUT_VARYINGS)
{
mContext.error(varying->getLine(), "Varyings packing failed: Too many varyings", "fragment shader");
return 0;
}
if(varying->getQualifier() == EvqPointCoord) if(varying->getQualifier() == EvqPointCoord)
{ {
ASSERT(varying->isRegister()); ASSERT(varying->isRegister());
...@@ -1964,8 +1970,14 @@ namespace sh ...@@ -1964,8 +1970,14 @@ namespace sh
} }
} }
} }
else if(vertexShader && (var + registerCount) <= sw::VertexShader::MAX_OUTPUT_VARYINGS) else if(vertexShader)
{ {
if((var + registerCount) > sw::VertexShader::MAX_OUTPUT_VARYINGS)
{
mContext.error(varying->getLine(), "Varyings packing failed: Too many varyings", "vertex shader");
return 0;
}
if(varying->getQualifier() == EvqPosition) if(varying->getQualifier() == EvqPosition)
{ {
ASSERT(varying->isRegister()); ASSERT(varying->isRegister());
......
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