main: Add entry point for NamedFramebufferRenderbuffer.

[Fredrik: - Remove the DummyRenderbuffer checks now that they are
            done in _mesa_lookup_renderbuffer_err.
          - Fix the <renderbuffertarget> name in error messages.
          - Make the error message in _mesa_framebuffer_renderbuffer
            reflect that <fb> might not be the bound framebuffer.
          - Remove EXT suffixes from GL tokens.]

Reviewed-by: Fredrik Höglund <fredrik@kde.org>
Signed-off-by: Fredrik Höglund <fredrik@kde.org>
This commit is contained in:
Laura Ekstrand
2015-02-27 17:27:30 -08:00
committed by Fredrik Höglund
parent 3d100372f1
commit a29318bf0a
4 changed files with 105 additions and 44 deletions
@@ -159,6 +159,13 @@
<param name="framebuffers" type="GLuint *" />
</function>
<function name="NamedFramebufferRenderbuffer" offset="assign">
<param name="framebuffer" type="GLuint" />
<param name="attachment" type="GLenum" />
<param name="renderbuffertarget" type="GLenum" />
<param name="renderbuffer" type="GLuint" />
</function>
<!-- Renderbuffer object functions -->
<function name="CreateRenderbuffers" offset="assign">
+85 -44
View File
@@ -2896,71 +2896,37 @@ _mesa_FramebufferTexture(GLenum target, GLenum attachment,
}
void GLAPIENTRY
_mesa_FramebufferRenderbuffer(GLenum target, GLenum attachment,
GLenum renderbufferTarget,
GLuint renderbuffer)
void
_mesa_framebuffer_renderbuffer(struct gl_context *ctx,
struct gl_framebuffer *fb,
GLenum attachment,
struct gl_renderbuffer *rb,
const char *func)
{
struct gl_renderbuffer_attachment *att;
struct gl_framebuffer *fb;
struct gl_renderbuffer *rb;
GET_CURRENT_CONTEXT(ctx);
fb = get_framebuffer_target(ctx, target);
if (!fb) {
_mesa_error(ctx, GL_INVALID_ENUM,
"glFramebufferRenderbuffer(target)");
return;
}
if (renderbufferTarget != GL_RENDERBUFFER_EXT) {
_mesa_error(ctx, GL_INVALID_ENUM,
"glFramebufferRenderbuffer(renderbufferTarget)");
return;
}
if (_mesa_is_winsys_fbo(fb)) {
/* Can't attach new renderbuffers to a window system framebuffer */
_mesa_error(ctx, GL_INVALID_OPERATION, "glFramebufferRenderbuffer");
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(window-system framebuffer)", func);
return;
}
att = get_attachment(ctx, fb, attachment);
if (att == NULL) {
_mesa_error(ctx, GL_INVALID_ENUM,
"glFramebufferRenderbuffer(invalid attachment %s)",
"%s(invalid attachment %s)", func,
_mesa_lookup_enum_by_nr(attachment));
return;
}
if (renderbuffer) {
rb = _mesa_lookup_renderbuffer(ctx, renderbuffer);
if (!rb) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glFramebufferRenderbuffer(non-existant"
" renderbuffer %u)", renderbuffer);
return;
}
else if (rb == &DummyRenderbuffer) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glFramebufferRenderbuffer(renderbuffer %u)",
renderbuffer);
return;
}
}
else {
/* remove renderbuffer attachment */
rb = NULL;
}
if (attachment == GL_DEPTH_STENCIL_ATTACHMENT &&
rb && rb->Format != MESA_FORMAT_NONE) {
/* make sure the renderbuffer is a depth/stencil format */
const GLenum baseFormat = _mesa_get_format_base_format(rb->Format);
if (baseFormat != GL_DEPTH_STENCIL) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glFramebufferRenderbuffer(renderbuffer"
" is not DEPTH_STENCIL format)");
"%s(renderbuffer is not DEPTH_STENCIL format)", func);
return;
}
}
@@ -2977,6 +2943,81 @@ _mesa_FramebufferRenderbuffer(GLenum target, GLenum attachment,
}
void GLAPIENTRY
_mesa_FramebufferRenderbuffer(GLenum target, GLenum attachment,
GLenum renderbuffertarget,
GLuint renderbuffer)
{
struct gl_framebuffer *fb;
struct gl_renderbuffer *rb;
GET_CURRENT_CONTEXT(ctx);
fb = get_framebuffer_target(ctx, target);
if (!fb) {
_mesa_error(ctx, GL_INVALID_ENUM,
"glFramebufferRenderbuffer(invalid target %s)",
_mesa_lookup_enum_by_nr(target));
return;
}
if (renderbuffertarget != GL_RENDERBUFFER) {
_mesa_error(ctx, GL_INVALID_ENUM,
"glFramebufferRenderbuffer(renderbuffertarget is not "
"GL_RENDERBUFFER)");
return;
}
if (renderbuffer) {
rb = _mesa_lookup_renderbuffer_err(ctx, renderbuffer,
"glFramebufferRenderbuffer");
if (!rb)
return;
}
else {
/* remove renderbuffer attachment */
rb = NULL;
}
_mesa_framebuffer_renderbuffer(ctx, fb, attachment, rb,
"glFramebufferRenderbuffer");
}
void GLAPIENTRY
_mesa_NamedFramebufferRenderbuffer(GLuint framebuffer, GLenum attachment,
GLenum renderbuffertarget,
GLuint renderbuffer)
{
struct gl_framebuffer *fb;
struct gl_renderbuffer *rb;
GET_CURRENT_CONTEXT(ctx);
fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
"glNamedFramebufferRenderbuffer");
if (renderbuffertarget != GL_RENDERBUFFER) {
_mesa_error(ctx, GL_INVALID_ENUM,
"glNamedFramebufferRenderbuffer(renderbuffertarget is not "
"GL_RENDERBUFFER)");
return;
}
if (renderbuffer) {
rb = _mesa_lookup_renderbuffer_err(ctx, renderbuffer,
"glNamedFramebufferRenderbuffer");
if (!rb)
return;
}
else {
/* remove renderbuffer attachment */
rb = NULL;
}
_mesa_framebuffer_renderbuffer(ctx, fb, attachment, rb,
"glNamedFramebufferRenderbuffer");
}
void GLAPIENTRY
_mesa_GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment,
GLenum pname, GLint *params)
+12
View File
@@ -87,6 +87,13 @@ _mesa_FramebufferRenderbuffer_sw(struct gl_context *ctx,
GLenum attachment,
struct gl_renderbuffer *rb);
extern void
_mesa_framebuffer_renderbuffer(struct gl_context *ctx,
struct gl_framebuffer *fb,
GLenum attachment,
struct gl_renderbuffer *rb,
const char *func);
extern void
_mesa_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb);
@@ -206,6 +213,11 @@ _mesa_FramebufferRenderbuffer(GLenum target, GLenum attachment,
GLenum renderbuffertarget,
GLuint renderbuffer);
extern void GLAPIENTRY
_mesa_NamedFramebufferRenderbuffer(GLuint framebuffer, GLenum attachment,
GLenum renderbuffertarget,
GLuint renderbuffer);
extern void GLAPIENTRY
_mesa_GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment,
GLenum pname, GLint *params);
+1
View File
@@ -981,6 +981,7 @@ const struct function gl_core_functions_possible[] = {
{ "glGetNamedBufferPointerv", 45, -1 },
{ "glGetNamedBufferSubData", 45, -1 },
{ "glCreateFramebuffers", 45, -1 },
{ "glNamedFramebufferRenderbuffer", 45, -1 },
{ "glCreateRenderbuffers", 45, -1 },
{ "glNamedRenderbufferStorage", 45, -1 },
{ "glNamedRenderbufferStorageMultisample", 45, -1 },