mesa: use _mesa_is_user_fbo() and _mesa_is_winsys_fbo() functions
Rather than testing the fbo's name against zero. Reviewed-by: José Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
185ee042ac
commit
36ede89687
|
@ -35,6 +35,7 @@
|
|||
#include "colormac.h"
|
||||
#include "context.h"
|
||||
#include "enums.h"
|
||||
#include "fbobject.h"
|
||||
#include "mtypes.h"
|
||||
|
||||
|
||||
|
@ -56,7 +57,7 @@ supported_buffer_bitmask(const struct gl_context *ctx,
|
|||
{
|
||||
GLbitfield mask = 0x0;
|
||||
|
||||
if (fb->Name > 0) {
|
||||
if (_mesa_is_user_fbo(fb)) {
|
||||
/* A user-created renderbuffer */
|
||||
GLuint i;
|
||||
ASSERT(ctx->Extensions.EXT_framebuffer_object);
|
||||
|
@ -357,7 +358,7 @@ updated_drawbuffers(struct gl_context *ctx)
|
|||
struct gl_framebuffer *fb = ctx->DrawBuffer;
|
||||
|
||||
/* Flag the FBO as requiring validation. */
|
||||
if (fb->Name != 0) {
|
||||
if (_mesa_is_user_fbo(fb)) {
|
||||
fb->_Status = 0;
|
||||
}
|
||||
}
|
||||
|
@ -452,7 +453,7 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
|
|||
fb->ColorDrawBuffer[buf] = GL_NONE;
|
||||
}
|
||||
|
||||
if (fb->Name == 0) {
|
||||
if (_mesa_is_winsys_fbo(fb)) {
|
||||
/* also set context drawbuffer state */
|
||||
for (buf = 0; buf < ctx->Const.MaxDrawBuffers; buf++) {
|
||||
if (ctx->Color.DrawBuffer[buf] != fb->ColorDrawBuffer[buf]) {
|
||||
|
@ -476,7 +477,7 @@ _mesa_update_draw_buffers(struct gl_context *ctx)
|
|||
GLuint i;
|
||||
|
||||
/* should be a window system FBO */
|
||||
assert(ctx->DrawBuffer->Name == 0);
|
||||
assert(_mesa_is_winsys_fbo(ctx->DrawBuffer));
|
||||
|
||||
for (i = 0; i < ctx->Const.MaxDrawBuffers; i++)
|
||||
buffers[i] = ctx->Color.DrawBuffer[i];
|
||||
|
@ -497,7 +498,7 @@ _mesa_readbuffer(struct gl_context *ctx, GLenum buffer, GLint bufferIndex)
|
|||
{
|
||||
struct gl_framebuffer *fb = ctx->ReadBuffer;
|
||||
|
||||
if (fb->Name == 0) {
|
||||
if (_mesa_is_winsys_fbo(fb)) {
|
||||
/* Only update the per-context READ_BUFFER state if we're bound to
|
||||
* a window-system framebuffer.
|
||||
*/
|
||||
|
@ -533,7 +534,7 @@ _mesa_ReadBuffer(GLenum buffer)
|
|||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
_mesa_debug(ctx, "glReadBuffer %s\n", _mesa_lookup_enum_by_nr(buffer));
|
||||
|
||||
if (fb->Name > 0 && buffer == GL_NONE) {
|
||||
if (_mesa_is_user_fbo(fb) && buffer == GL_NONE) {
|
||||
/* This is legal for user-created framebuffer objects */
|
||||
srcBuffer = -1;
|
||||
}
|
||||
|
|
|
@ -79,26 +79,6 @@ static struct gl_renderbuffer DummyRenderbuffer;
|
|||
static struct gl_framebuffer IncompleteFramebuffer;
|
||||
|
||||
|
||||
/**
|
||||
* Is the given FBO a user-created FBO?
|
||||
*/
|
||||
static inline GLboolean
|
||||
is_user_fbo(const struct gl_framebuffer *fb)
|
||||
{
|
||||
return fb->Name != 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is the given FBO a window system FBO (like an X window)?
|
||||
*/
|
||||
static inline GLboolean
|
||||
is_winsys_fbo(const struct gl_framebuffer *fb)
|
||||
{
|
||||
return fb->Name == 0;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
delete_dummy_renderbuffer(struct gl_renderbuffer *rb)
|
||||
{
|
||||
|
@ -214,7 +194,7 @@ _mesa_get_attachment(struct gl_context *ctx, struct gl_framebuffer *fb,
|
|||
{
|
||||
GLuint i;
|
||||
|
||||
assert(is_user_fbo(fb));
|
||||
assert(_mesa_is_user_fbo(fb));
|
||||
|
||||
switch (attachment) {
|
||||
case GL_COLOR_ATTACHMENT0_EXT:
|
||||
|
@ -265,7 +245,7 @@ static struct gl_renderbuffer_attachment *
|
|||
_mesa_get_fb0_attachment(struct gl_context *ctx, struct gl_framebuffer *fb,
|
||||
GLenum attachment)
|
||||
{
|
||||
assert(is_winsys_fbo(fb));
|
||||
assert(_mesa_is_winsys_fbo(fb));
|
||||
|
||||
switch (attachment) {
|
||||
case GL_FRONT_LEFT:
|
||||
|
@ -711,7 +691,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
|
|||
GLint i;
|
||||
GLuint j;
|
||||
|
||||
assert(is_user_fbo(fb));
|
||||
assert(_mesa_is_user_fbo(fb));
|
||||
|
||||
numImages = 0;
|
||||
fb->Width = 0;
|
||||
|
@ -1009,10 +989,10 @@ _mesa_DeleteRenderbuffersEXT(GLsizei n, const GLuint *renderbuffers)
|
|||
_mesa_BindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
|
||||
}
|
||||
|
||||
if (is_user_fbo(ctx->DrawBuffer)) {
|
||||
if (_mesa_is_user_fbo(ctx->DrawBuffer)) {
|
||||
detach_renderbuffer(ctx, ctx->DrawBuffer, rb);
|
||||
}
|
||||
if (is_user_fbo(ctx->ReadBuffer)
|
||||
if (_mesa_is_user_fbo(ctx->ReadBuffer)
|
||||
&& ctx->ReadBuffer != ctx->DrawBuffer) {
|
||||
detach_renderbuffer(ctx, ctx->ReadBuffer, rb);
|
||||
}
|
||||
|
@ -1318,7 +1298,7 @@ invalidate_rb(GLuint key, void *data, void *userData)
|
|||
struct gl_renderbuffer *rb = (struct gl_renderbuffer *) userData;
|
||||
|
||||
/* If this is a user-created FBO */
|
||||
if (is_user_fbo(fb)) {
|
||||
if (_mesa_is_user_fbo(fb)) {
|
||||
GLuint i;
|
||||
for (i = 0; i < BUFFER_COUNT; i++) {
|
||||
struct gl_renderbuffer_attachment *att = fb->Attachment + i;
|
||||
|
@ -1609,7 +1589,7 @@ check_begin_texture_render(struct gl_context *ctx, struct gl_framebuffer *fb)
|
|||
GLuint i;
|
||||
ASSERT(ctx->Driver.RenderTexture);
|
||||
|
||||
if (is_winsys_fbo(fb))
|
||||
if (_mesa_is_winsys_fbo(fb))
|
||||
return; /* can't render to texture with winsys framebuffers */
|
||||
|
||||
for (i = 0; i < BUFFER_COUNT; i++) {
|
||||
|
@ -1629,7 +1609,7 @@ check_begin_texture_render(struct gl_context *ctx, struct gl_framebuffer *fb)
|
|||
static void
|
||||
check_end_texture_render(struct gl_context *ctx, struct gl_framebuffer *fb)
|
||||
{
|
||||
if (is_winsys_fbo(fb))
|
||||
if (_mesa_is_winsys_fbo(fb))
|
||||
return; /* can't render to texture with winsys framebuffers */
|
||||
|
||||
if (ctx->Driver.FinishRenderTexture) {
|
||||
|
@ -1882,7 +1862,7 @@ _mesa_CheckFramebufferStatusEXT(GLenum target)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (is_winsys_fbo(buffer)) {
|
||||
if (_mesa_is_winsys_fbo(buffer)) {
|
||||
/* The window system / default framebuffer is always complete */
|
||||
return GL_FRAMEBUFFER_COMPLETE_EXT;
|
||||
}
|
||||
|
@ -1944,7 +1924,7 @@ framebuffer_texture(struct gl_context *ctx, const char *caller, GLenum target,
|
|||
}
|
||||
|
||||
/* check framebuffer binding */
|
||||
if (is_winsys_fbo(fb)) {
|
||||
if (_mesa_is_winsys_fbo(fb)) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glFramebufferTexture%sEXT", caller);
|
||||
return;
|
||||
|
@ -2204,7 +2184,7 @@ _mesa_FramebufferRenderbufferEXT(GLenum target, GLenum attachment,
|
|||
return;
|
||||
}
|
||||
|
||||
if (is_winsys_fbo(fb)) {
|
||||
if (_mesa_is_winsys_fbo(fb)) {
|
||||
/* Can't attach new renderbuffers to a window system framebuffer */
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glFramebufferRenderbufferEXT");
|
||||
return;
|
||||
|
@ -2285,7 +2265,7 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,
|
|||
return;
|
||||
}
|
||||
|
||||
if (is_winsys_fbo(buffer)) {
|
||||
if (_mesa_is_winsys_fbo(buffer)) {
|
||||
/* Page 126 (page 136 of the PDF) of the OpenGL ES 2.0.25 spec
|
||||
* says:
|
||||
*
|
||||
|
@ -2332,7 +2312,8 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,
|
|||
|
||||
switch (pname) {
|
||||
case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT:
|
||||
*params = is_winsys_fbo(buffer) ? GL_FRAMEBUFFER_DEFAULT : att->Type;
|
||||
*params = _mesa_is_winsys_fbo(buffer)
|
||||
? GL_FRAMEBUFFER_DEFAULT : att->Type;
|
||||
return;
|
||||
case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT:
|
||||
if (att->Type == GL_RENDERBUFFER_EXT) {
|
||||
|
|
|
@ -32,6 +32,28 @@
|
|||
struct gl_context;
|
||||
struct gl_texture_object;
|
||||
|
||||
|
||||
/**
|
||||
* Is the given FBO a user-created FBO?
|
||||
*/
|
||||
static inline GLboolean
|
||||
_mesa_is_user_fbo(const struct gl_framebuffer *fb)
|
||||
{
|
||||
return fb->Name != 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is the given FBO a window system FBO (like an X window)?
|
||||
*/
|
||||
static inline GLboolean
|
||||
_mesa_is_winsys_fbo(const struct gl_framebuffer *fb)
|
||||
{
|
||||
return fb->Name == 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern void
|
||||
_mesa_init_fbobjects(struct gl_context *ctx);
|
||||
|
||||
|
|
|
@ -281,8 +281,8 @@ _mesa_resize_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
|
|||
* and return early.
|
||||
*/
|
||||
|
||||
/* For window system framebuffers, Name is zero */
|
||||
assert(fb->Name == 0);
|
||||
/* Can only resize win-sys framebuffer objects */
|
||||
assert(_mesa_is_winsys_fbo(fb));
|
||||
|
||||
for (i = 0; i < BUFFER_COUNT; i++) {
|
||||
struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
|
||||
|
@ -408,7 +408,7 @@ update_framebuffer_size(struct gl_context *ctx, struct gl_framebuffer *fb)
|
|||
GLuint i;
|
||||
|
||||
/* user-created framebuffers only */
|
||||
assert(fb->Name);
|
||||
assert(_mesa_is_user_fbo(fb));
|
||||
|
||||
for (i = 0; i < BUFFER_COUNT; i++) {
|
||||
struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
|
||||
|
@ -687,7 +687,7 @@ update_color_read_buffer(struct gl_context *ctx, struct gl_framebuffer *fb)
|
|||
static void
|
||||
update_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
|
||||
{
|
||||
if (fb->Name == 0) {
|
||||
if (_mesa_is_winsys_fbo(fb)) {
|
||||
/* This is a window-system framebuffer */
|
||||
/* Need to update the FB's GL_DRAW_BUFFER state to match the
|
||||
* context state (GL_READ_BUFFER too).
|
||||
|
|
|
@ -132,7 +132,7 @@ _mesa_add_renderbuffer(struct gl_framebuffer *fb,
|
|||
fb->Attachment[bufferName].Renderbuffer == NULL);
|
||||
|
||||
/* winsys vs. user-created buffer cross check */
|
||||
if (fb->Name) {
|
||||
if (_mesa_is_user_fbo(fb)) {
|
||||
assert(rb->Name);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -1900,7 +1900,7 @@ copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
|
|||
}
|
||||
|
||||
/* Check that the source buffer is complete */
|
||||
if (ctx->ReadBuffer->Name) {
|
||||
if (_mesa_is_user_fbo(ctx->ReadBuffer)) {
|
||||
if (ctx->ReadBuffer->_Status == 0) {
|
||||
_mesa_test_framebuffer_completeness(ctx, ctx->ReadBuffer);
|
||||
}
|
||||
|
@ -1999,7 +1999,7 @@ copytexsubimage_error_check1( struct gl_context *ctx, GLuint dimensions,
|
|||
GLenum target, GLint level)
|
||||
{
|
||||
/* Check that the source buffer is complete */
|
||||
if (ctx->ReadBuffer->Name) {
|
||||
if (_mesa_is_user_fbo(ctx->ReadBuffer)) {
|
||||
if (ctx->ReadBuffer->_Status == 0) {
|
||||
_mesa_test_framebuffer_completeness(ctx, ctx->ReadBuffer);
|
||||
}
|
||||
|
@ -2179,7 +2179,7 @@ check_rtt_cb(GLuint key, void *data, void *userData)
|
|||
const GLuint level = info->level, face = info->face;
|
||||
|
||||
/* If this is a user-created FBO */
|
||||
if (fb->Name) {
|
||||
if (_mesa_is_user_fbo(fb)) {
|
||||
GLuint i;
|
||||
/* check if any of the FBO's attachments point to 'texObj' */
|
||||
for (i = 0; i < BUFFER_COUNT; i++) {
|
||||
|
|
|
@ -893,7 +893,7 @@ unbind_texobj_from_fbo(struct gl_context *ctx,
|
|||
|
||||
for (i = 0; i < n; i++) {
|
||||
struct gl_framebuffer *fb = (i == 0) ? ctx->DrawBuffer : ctx->ReadBuffer;
|
||||
if (fb->Name) {
|
||||
if (_mesa_is_user_fbo(fb)) {
|
||||
GLuint j;
|
||||
for (j = 0; j < BUFFER_COUNT; j++) {
|
||||
if (fb->Attachment[j].Type == GL_TEXTURE &&
|
||||
|
|
Loading…
Reference in New Issue