mesa: consolidate framebuffer target lookup code
This commit is contained in:
@@ -159,6 +159,29 @@ invalidate_framebuffer(struct gl_framebuffer *fb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the gl_framebuffer object which corresponds to the given
|
||||||
|
* framebuffer target, such as GL_DRAW_FRAMEBUFFER.
|
||||||
|
* Check support for GL_EXT_framebuffer_blit to determine if certain
|
||||||
|
* targets are legal.
|
||||||
|
* \return gl_framebuffer pointer or NULL if target is illegal
|
||||||
|
*/
|
||||||
|
static struct gl_framebuffer *
|
||||||
|
get_framebuffer_target(struct gl_context *ctx, GLenum target)
|
||||||
|
{
|
||||||
|
switch (target) {
|
||||||
|
case GL_DRAW_FRAMEBUFFER:
|
||||||
|
return ctx->Extensions.EXT_framebuffer_blit ? ctx->DrawBuffer : NULL;
|
||||||
|
case GL_READ_FRAMEBUFFER:
|
||||||
|
return ctx->Extensions.EXT_framebuffer_blit ? ctx->ReadBuffer : NULL;
|
||||||
|
case GL_FRAMEBUFFER_EXT:
|
||||||
|
return ctx->DrawBuffer;
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given a GL_*_ATTACHMENTn token, return a pointer to the corresponding
|
* Given a GL_*_ATTACHMENTn token, return a pointer to the corresponding
|
||||||
* gl_renderbuffer_attachment object.
|
* gl_renderbuffer_attachment object.
|
||||||
@@ -1677,29 +1700,10 @@ _mesa_CheckFramebufferStatusEXT(GLenum target)
|
|||||||
|
|
||||||
ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
|
ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
|
||||||
|
|
||||||
switch (target) {
|
buffer = get_framebuffer_target(ctx, target);
|
||||||
#if FEATURE_EXT_framebuffer_blit
|
if (!buffer) {
|
||||||
case GL_DRAW_FRAMEBUFFER_EXT:
|
|
||||||
if (!ctx->Extensions.EXT_framebuffer_blit) {
|
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM, "glCheckFramebufferStatus(target)");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
buffer = ctx->DrawBuffer;
|
|
||||||
break;
|
|
||||||
case GL_READ_FRAMEBUFFER_EXT:
|
|
||||||
if (!ctx->Extensions.EXT_framebuffer_blit) {
|
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM, "glCheckFramebufferStatus(target)");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
buffer = ctx->ReadBuffer;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case GL_FRAMEBUFFER_EXT:
|
|
||||||
buffer = ctx->DrawBuffer;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM, "glCheckFramebufferStatus(target)");
|
_mesa_error(ctx, GL_INVALID_ENUM, "glCheckFramebufferStatus(target)");
|
||||||
return 0; /* formerly GL_FRAMEBUFFER_STATUS_ERROR_EXT */
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buffer->Name == 0) {
|
if (buffer->Name == 0) {
|
||||||
@@ -1729,33 +1733,16 @@ framebuffer_texture(struct gl_context *ctx, const char *caller, GLenum target,
|
|||||||
struct gl_renderbuffer_attachment *att;
|
struct gl_renderbuffer_attachment *att;
|
||||||
struct gl_texture_object *texObj = NULL;
|
struct gl_texture_object *texObj = NULL;
|
||||||
struct gl_framebuffer *fb;
|
struct gl_framebuffer *fb;
|
||||||
GLboolean error = GL_FALSE;
|
|
||||||
|
|
||||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||||
|
|
||||||
switch (target) {
|
fb = get_framebuffer_target(ctx, target);
|
||||||
case GL_READ_FRAMEBUFFER_EXT:
|
if (!fb) {
|
||||||
error = !ctx->Extensions.EXT_framebuffer_blit;
|
|
||||||
fb = ctx->ReadBuffer;
|
|
||||||
break;
|
|
||||||
case GL_DRAW_FRAMEBUFFER_EXT:
|
|
||||||
error = !ctx->Extensions.EXT_framebuffer_blit;
|
|
||||||
/* fall-through */
|
|
||||||
case GL_FRAMEBUFFER_EXT:
|
|
||||||
fb = ctx->DrawBuffer;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
error = GL_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (error) {
|
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||||
"glFramebufferTexture%sEXT(target=0x%x)", caller, target);
|
"glFramebufferTexture%sEXT(target=0x%x)", caller, target);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(fb);
|
|
||||||
|
|
||||||
/* check framebuffer binding */
|
/* check framebuffer binding */
|
||||||
if (fb->Name == 0) {
|
if (fb->Name == 0) {
|
||||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||||
@@ -1936,31 +1923,9 @@ _mesa_FramebufferRenderbufferEXT(GLenum target, GLenum attachment,
|
|||||||
|
|
||||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||||
|
|
||||||
switch (target) {
|
fb = get_framebuffer_target(ctx, target);
|
||||||
#if FEATURE_EXT_framebuffer_blit
|
if (!fb) {
|
||||||
case GL_DRAW_FRAMEBUFFER_EXT:
|
_mesa_error(ctx, GL_INVALID_ENUM, "glFramebufferRenderbufferEXT(target)");
|
||||||
if (!ctx->Extensions.EXT_framebuffer_blit) {
|
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
|
||||||
"glFramebufferRenderbufferEXT(target)");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fb = ctx->DrawBuffer;
|
|
||||||
break;
|
|
||||||
case GL_READ_FRAMEBUFFER_EXT:
|
|
||||||
if (!ctx->Extensions.EXT_framebuffer_blit) {
|
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
|
||||||
"glFramebufferRenderbufferEXT(target)");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fb = ctx->ReadBuffer;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case GL_FRAMEBUFFER_EXT:
|
|
||||||
fb = ctx->DrawBuffer;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
|
||||||
"glFramebufferRenderbufferEXT(target)");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2040,29 +2005,8 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,
|
|||||||
|
|
||||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||||
|
|
||||||
switch (target) {
|
buffer = get_framebuffer_target(ctx, target);
|
||||||
#if FEATURE_EXT_framebuffer_blit
|
if (!buffer) {
|
||||||
case GL_DRAW_FRAMEBUFFER_EXT:
|
|
||||||
if (!ctx->Extensions.EXT_framebuffer_blit) {
|
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
|
||||||
"glGetFramebufferAttachmentParameterivEXT(target)");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
buffer = ctx->DrawBuffer;
|
|
||||||
break;
|
|
||||||
case GL_READ_FRAMEBUFFER_EXT:
|
|
||||||
if (!ctx->Extensions.EXT_framebuffer_blit) {
|
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
|
||||||
"glGetFramebufferAttachmentParameterivEXT(target)");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
buffer = ctx->ReadBuffer;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case GL_FRAMEBUFFER_EXT:
|
|
||||||
buffer = ctx->DrawBuffer;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||||
"glGetFramebufferAttachmentParameterivEXT(target)");
|
"glGetFramebufferAttachmentParameterivEXT(target)");
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user