mesa: check draw buffer completeness on glClearBufferfv/glClearBufferuiv

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>
This commit is contained in:
Dmitriy Nester 2020-04-30 16:25:04 +03:00
parent f1a40a26a9
commit 58bb817257

View 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: