mesa: check draw buffer completeness on glClearBufferfv/glClearBufferuiv
authorDmitriy Nester <dmitriynester@gmail.com>
Thu, 30 Apr 2020 13:25:04 +0000 (16:25 +0300)
committerDmitriy Nester <dmitriynester@gmail.com>
Mon, 4 May 2020 10:16:30 +0000 (13:16 +0300)
From OpenGL 4.6, section 9.4.4 "Effects of Framebuffer Completeness on
Framebuffer Operations", page 332:

"An INVALID_FRAMEBUFFER_OPERATION error is generated by attempts to render
to or read from a framebuffer which is not framebuffer complete.
This error is generated regardless of whether fragments are actually read
from or written to the framebuffer. For example, it is generated when a
rendering command is called and the framebuffer is incomplete, even if
RASTERIZER_DISCARD is enabled."

Signed-off-by: Dmytro Nester <dmytro.nester@globallogic.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4833>

src/mesa/main/clear.c

index fda4df5952808a6129b763fca42a64a9e7a25460..ca0ecd95b8cb2dc3b972db4fa52c134a3f7b5c49 100644 (file)
@@ -467,6 +467,12 @@ clear_bufferuiv(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
       _mesa_update_state( ctx );
    }
 
+   if (!no_error && ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE) {
+      _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION,
+                  "glClearBufferuiv(incomplete framebuffer)");
+      return;
+   }
+
    switch (buffer) {
    case GL_COLOR:
       {
@@ -555,6 +561,12 @@ clear_bufferfv(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
       _mesa_update_state( ctx );
    }
 
+   if (!no_error && ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE) {
+      _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION,
+                  "glClearBufferfv(incomplete framebuffer)");
+      return;
+   }
+
    switch (buffer) {
    case GL_DEPTH:
       /* Page 264 (page 280 of the PDF) of the OpenGL 3.0 spec says: