Framebuffer related validity checks
Added validity checks for RenderbufferStorageMultisample
and BlitFramebuffer, mostly missing checks for using
integer types or depth/stencil framebuffers with
multisampling, which is not allowed.
Fixes all failures in:
dEQP-GLES3.functional.negative_api.buffer*
Change-Id: Ie1db21a3b9f1ca71ed660a2758d43f24846acdf1
Reviewed-on: https://swiftshader-review.googlesource.com/14048
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/libGLESv2/libGLESv3.cpp b/src/OpenGL/libGLESv2/libGLESv3.cpp
index 92813e2..aae9782 100644
--- a/src/OpenGL/libGLESv2/libGLESv3.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv3.cpp
@@ -1498,7 +1498,12 @@
switch(filter)
{
case GL_NEAREST:
+ break;
case GL_LINEAR:
+ if((mask & GL_DEPTH_BUFFER_BIT) || (mask & GL_STENCIL_BUFFER_BIT))
+ {
+ return error(GL_INVALID_OPERATION);
+ }
break;
default:
return error(GL_INVALID_ENUM);
@@ -1547,7 +1552,7 @@
{
if(!textureObject)
{
- return error(GL_INVALID_VALUE);
+ return error(GL_INVALID_OPERATION);
}
textarget = textureObject->getTarget();
@@ -1575,9 +1580,17 @@
{
case GL_DRAW_FRAMEBUFFER:
case GL_FRAMEBUFFER:
+ if(context->getDrawFramebufferName() == 0)
+ {
+ return error(GL_INVALID_OPERATION);
+ }
framebuffer = context->getDrawFramebuffer();
break;
case GL_READ_FRAMEBUFFER:
+ if(context->getReadFramebufferName() == 0)
+ {
+ return error(GL_INVALID_OPERATION);
+ }
framebuffer = context->getReadFramebuffer();
break;
default: