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/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index f16afed..c560600 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -4726,22 +4726,23 @@
return error(GL_INVALID_ENUM);
}
- if(width < 0 || height < 0 || samples < 0)
+ if(width < 0 || height < 0 || samples < 0 ||
+ width > es2::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE ||
+ height > es2::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE)
{
return error(GL_INVALID_VALUE);
}
+ if(samples > es2::IMPLEMENTATION_MAX_SAMPLES ||
+ (sw::Surface::isNonNormalizedInteger(es2sw::ConvertRenderbufferFormat(internalformat)) && samples > 0))
+ {
+ return error(GL_INVALID_OPERATION);
+ }
+
es2::Context *context = es2::getContext();
if(context)
{
- if(width > es2::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE ||
- height > es2::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE ||
- samples > es2::IMPLEMENTATION_MAX_SAMPLES)
- {
- return error(GL_INVALID_VALUE);
- }
-
GLuint handle = context->getRenderbufferName();
if(handle == 0)
{