mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 20:28:04 +02:00
main/fbobject: throw invalid operation when get_attachment fails if needed
In most cases, if a call to get_attachment fails is because attachment
is a INVALID_ENUM. But for some specific cases, if COLOR_ATTACHMENTm
(where m >= MAX_COLOR_ATTACHMENTS) is used, it should raise an
INVALID_OPERATION exception instead.
Fixes:
GL45-CTS.direct_state_access.framebuffers_get_attachment_parameter_errors
GL45-CTS.direct_state_access.framebuffers_renderbuffer_attachment_errors
v2: extra new line before quote block. Include "color attachment" on both
new message errors (Nicolai).
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
c6eb3aeba5
commit
84e3e12b25
1 changed files with 42 additions and 7 deletions
|
|
@ -3495,6 +3495,7 @@ framebuffer_renderbuffer(struct gl_context *ctx,
|
|||
const char *func)
|
||||
{
|
||||
struct gl_renderbuffer_attachment *att;
|
||||
bool is_color_attachment;
|
||||
|
||||
if (_mesa_is_winsys_fbo(fb)) {
|
||||
/* Can't attach new renderbuffers to a window system framebuffer */
|
||||
|
|
@ -3503,11 +3504,29 @@ framebuffer_renderbuffer(struct gl_context *ctx,
|
|||
return;
|
||||
}
|
||||
|
||||
att = get_attachment(ctx, fb, attachment, NULL);
|
||||
att = get_attachment(ctx, fb, attachment, &is_color_attachment);
|
||||
if (att == NULL) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"%s(invalid attachment %s)", func,
|
||||
_mesa_enum_to_string(attachment));
|
||||
/*
|
||||
* From OpenGL 4.5 spec, section 9.2.7 "Attaching Renderbuffer Images to
|
||||
* a Framebuffer":
|
||||
*
|
||||
* "An INVALID_OPERATION error is generated if attachment is COLOR_-
|
||||
* ATTACHMENTm where m is greater than or equal to the value of
|
||||
* MAX_COLOR_- ATTACHMENTS ."
|
||||
*
|
||||
* If we are at this point, is because the attachment is not valid, so
|
||||
* if is_color_attachment is true, is because of the previous reason.
|
||||
*/
|
||||
if (is_color_attachment) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"%s(invalid color attachment %s)", func,
|
||||
_mesa_enum_to_string(attachment));
|
||||
} else {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"%s(invalid attachment %s)", func,
|
||||
_mesa_enum_to_string(attachment));
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -3609,6 +3628,7 @@ _mesa_get_framebuffer_attachment_parameter(struct gl_context *ctx,
|
|||
GLint *params, const char *caller)
|
||||
{
|
||||
const struct gl_renderbuffer_attachment *att;
|
||||
bool is_color_attachment;
|
||||
GLenum err;
|
||||
|
||||
/* The error code for an attachment type of GL_NONE differs between APIs.
|
||||
|
|
@ -3676,12 +3696,27 @@ _mesa_get_framebuffer_attachment_parameter(struct gl_context *ctx,
|
|||
}
|
||||
else {
|
||||
/* user-created framebuffer FBO */
|
||||
att = get_attachment(ctx, buffer, attachment, NULL);
|
||||
att = get_attachment(ctx, buffer, attachment, &is_color_attachment);
|
||||
}
|
||||
|
||||
if (att == NULL) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "%s(invalid attachment %s)", caller,
|
||||
_mesa_enum_to_string(attachment));
|
||||
/*
|
||||
* From OpenGL 4.5 spec, section 9.2.3 "Framebuffer Object Queries":
|
||||
*
|
||||
* "An INVALID_OPERATION error is generated if a framebuffer object
|
||||
* is bound to target and attachment is COLOR_ATTACHMENTm where m is
|
||||
* greater than or equal to the value of MAX_COLOR_ATTACHMENTS."
|
||||
*
|
||||
* If we are at this point, is because the attachment is not valid, so
|
||||
* if is_color_attachment is true, is because of the previous reason.
|
||||
*/
|
||||
if (is_color_attachment) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "%s(invalid color attachment %s)",
|
||||
caller, _mesa_enum_to_string(attachment));
|
||||
} else {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "%s(invalid attachment %s)", caller,
|
||||
_mesa_enum_to_string(attachment));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue