Support matrix stack overflow/underflow errors. Change-Id: Ie3caee1128c8227397a74378fcefdf9e128fc6bf Reviewed-on: https://swiftshader-review.googlesource.com/3761 Reviewed-by: Nicolas Capens <capn@google.com> Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLES_CM/Context.cpp b/src/OpenGL/libGLES_CM/Context.cpp index b8ce8d6..2027f41 100644 --- a/src/OpenGL/libGLES_CM/Context.cpp +++ b/src/OpenGL/libGLES_CM/Context.cpp
@@ -162,6 +162,8 @@ mInvalidOperation = false; mOutOfMemory = false; mInvalidFramebufferOperation = false; + mMatrixStackOverflow = false; + mMatrixStackUnderflow = false; lighting = false; @@ -2649,6 +2651,16 @@ mInvalidFramebufferOperation = true; } +void Context::recordMatrixStackOverflow() +{ + mMatrixStackOverflow = true; +} + +void Context::recordMatrixStackUnderflow() +{ + mMatrixStackUnderflow = true; +} + // Get one of the recorded errors and clear its flag, if any. // [OpenGL ES 2.0.24] section 2.5 page 13. GLenum Context::getError() @@ -2688,6 +2700,20 @@ return GL_INVALID_FRAMEBUFFER_OPERATION_OES; } + if(mMatrixStackOverflow) + { + mMatrixStackOverflow = false; + + return GL_INVALID_FRAMEBUFFER_OPERATION_OES; + } + + if(mMatrixStackUnderflow) + { + mMatrixStackUnderflow = false; + + return GL_INVALID_FRAMEBUFFER_OPERATION_OES; + } + return GL_NO_ERROR; }
diff --git a/src/OpenGL/libGLES_CM/Context.h b/src/OpenGL/libGLES_CM/Context.h index b16a9c5..8ade0c9 100644 --- a/src/OpenGL/libGLES_CM/Context.h +++ b/src/OpenGL/libGLES_CM/Context.h
@@ -461,6 +461,8 @@ void recordInvalidOperation(); void recordOutOfMemory(); void recordInvalidFramebufferOperation(); + void recordMatrixStackOverflow(); + void recordMatrixStackUnderflow(); GLenum getError(); @@ -533,6 +535,8 @@ bool mInvalidOperation; bool mOutOfMemory; bool mInvalidFramebufferOperation; + bool mMatrixStackOverflow; + bool mMatrixStackUnderflow; bool mHasBeenCurrent;
diff --git a/src/OpenGL/libGLES_CM/main.cpp b/src/OpenGL/libGLES_CM/main.cpp index 381cee1..9ec5656 100644 --- a/src/OpenGL/libGLES_CM/main.cpp +++ b/src/OpenGL/libGLES_CM/main.cpp
@@ -135,6 +135,14 @@ context->recordInvalidFramebufferOperation(); TRACE("\t! Error generated: invalid framebuffer operation\n"); break; + case GL_STACK_OVERFLOW: + context->recordMatrixStackOverflow(); + TRACE("\t! Error generated: matrix stack overflow\n"); + break; + case GL_STACK_UNDERFLOW: + context->recordMatrixStackUnderflow(); + TRACE("\t! Error generated: matrix stack underflow\n"); + break; default: UNREACHABLE(errorCode); } }