mesa: Make more consistent use of _mesa_is_{user,winsys}_fbo()
A lot of code was still differentiating between between winsys and user fbos by testing the fbo's name against zero. This converts everything in core mesa, the state tracker, and src/mesa/program over to use _mesa_is_user_fbo() and _mesa_is_winsys_fbo(). Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
e72f20641a
commit
284ad9c3b2
|
@ -1456,8 +1456,8 @@ _mesa_make_current( struct gl_context *newCtx,
|
|||
_glapi_set_dispatch(newCtx->CurrentDispatch);
|
||||
|
||||
if (drawBuffer && readBuffer) {
|
||||
ASSERT(drawBuffer->Name == 0);
|
||||
ASSERT(readBuffer->Name == 0);
|
||||
ASSERT(_mesa_is_winsys_fbo(drawBuffer));
|
||||
ASSERT(_mesa_is_winsys_fbo(readBuffer));
|
||||
_mesa_reference_framebuffer(&newCtx->WinSysDrawBuffer, drawBuffer);
|
||||
_mesa_reference_framebuffer(&newCtx->WinSysReadBuffer, readBuffer);
|
||||
|
||||
|
@ -1465,7 +1465,7 @@ _mesa_make_current( struct gl_context *newCtx,
|
|||
* Only set the context's Draw/ReadBuffer fields if they're NULL
|
||||
* or not bound to a user-created FBO.
|
||||
*/
|
||||
if (!newCtx->DrawBuffer || newCtx->DrawBuffer->Name == 0) {
|
||||
if (!newCtx->DrawBuffer || _mesa_is_winsys_fbo(newCtx->DrawBuffer)) {
|
||||
_mesa_reference_framebuffer(&newCtx->DrawBuffer, drawBuffer);
|
||||
/* Update the FBO's list of drawbuffers/renderbuffers.
|
||||
* For winsys FBOs this comes from the GL state (which may have
|
||||
|
@ -1473,7 +1473,7 @@ _mesa_make_current( struct gl_context *newCtx,
|
|||
*/
|
||||
_mesa_update_draw_buffers(newCtx);
|
||||
}
|
||||
if (!newCtx->ReadBuffer || newCtx->ReadBuffer->Name == 0) {
|
||||
if (!newCtx->ReadBuffer || _mesa_is_winsys_fbo(newCtx->ReadBuffer)) {
|
||||
_mesa_reference_framebuffer(&newCtx->ReadBuffer, readBuffer);
|
||||
}
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "state.h"
|
||||
#include "dispatch.h"
|
||||
#include "glformats.h"
|
||||
#include "fbobject.h"
|
||||
|
||||
|
||||
#if FEATURE_drawpix
|
||||
|
@ -240,7 +241,8 @@ _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height,
|
|||
goto end;
|
||||
}
|
||||
|
||||
if (ctx->ReadBuffer->Name != 0 && ctx->ReadBuffer->Visual.samples > 0) {
|
||||
if (_mesa_is_user_fbo(ctx->ReadBuffer) &&
|
||||
ctx->ReadBuffer->Visual.samples > 0) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glCopyPixels(multisample FBO)");
|
||||
goto end;
|
||||
|
|
|
@ -347,7 +347,7 @@ _mesa_resizebuffers( struct gl_context *ctx )
|
|||
GLuint newWidth, newHeight;
|
||||
struct gl_framebuffer *buffer = ctx->WinSysDrawBuffer;
|
||||
|
||||
assert(buffer->Name == 0);
|
||||
assert(_mesa_is_winsys_fbo(buffer));
|
||||
|
||||
/* ask device driver for size of output buffer */
|
||||
ctx->Driver.GetBufferSize( buffer, &newWidth, &newHeight );
|
||||
|
@ -364,7 +364,7 @@ _mesa_resizebuffers( struct gl_context *ctx )
|
|||
GLuint newWidth, newHeight;
|
||||
struct gl_framebuffer *buffer = ctx->WinSysReadBuffer;
|
||||
|
||||
assert(buffer->Name == 0);
|
||||
assert(_mesa_is_winsys_fbo(buffer));
|
||||
|
||||
/* ask device driver for size of read buffer */
|
||||
ctx->Driver.GetBufferSize( buffer, &newWidth, &newHeight );
|
||||
|
@ -444,7 +444,7 @@ _mesa_update_draw_buffer_bounds(struct gl_context *ctx)
|
|||
if (!buffer)
|
||||
return;
|
||||
|
||||
if (buffer->Name) {
|
||||
if (_mesa_is_user_fbo(buffer)) {
|
||||
/* user-created framebuffer size depends on the renderbuffers */
|
||||
update_framebuffer_size(ctx, buffer);
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#include "pbo.h"
|
||||
#include "state.h"
|
||||
#include "glformats.h"
|
||||
#include "fbobject.h"
|
||||
|
||||
|
||||
/**
|
||||
|
@ -722,7 +723,8 @@ _mesa_ReadnPixelsARB( GLint x, GLint y, GLsizei width, GLsizei height,
|
|||
}
|
||||
}
|
||||
|
||||
if (ctx->ReadBuffer->Name != 0 && ctx->ReadBuffer->Visual.samples > 0) {
|
||||
if (_mesa_is_user_fbo(ctx->ReadBuffer) &&
|
||||
ctx->ReadBuffer->Visual.samples > 0) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(multisample FBO)");
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include "main/imports.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/fbobject.h"
|
||||
#include "prog_statevars.h"
|
||||
#include "prog_parameter.h"
|
||||
|
||||
|
@ -574,7 +575,7 @@ _mesa_fetch_state(struct gl_context *ctx, const gl_state_index state[],
|
|||
case STATE_FB_WPOS_Y_TRANSFORM:
|
||||
/* A driver may negate this conditional by using ZW swizzle
|
||||
* instead of XY (based on e.g. some other state). */
|
||||
if (ctx->DrawBuffer->Name != 0) {
|
||||
if (_mesa_is_user_fbo(ctx->DrawBuffer)) {
|
||||
/* Identity (XY) followed by flipping Y upside down (ZW). */
|
||||
value[0] = 1.0F;
|
||||
value[1] = 0.0F;
|
||||
|
|
|
@ -43,7 +43,9 @@ static INLINE struct st_framebuffer *
|
|||
st_ws_framebuffer(struct gl_framebuffer *fb)
|
||||
{
|
||||
/* FBO cannot be casted. See st_new_framebuffer */
|
||||
return (struct st_framebuffer *) ((fb && !fb->Name) ? fb : NULL);
|
||||
if (fb && _mesa_is_winsys_fbo(fb))
|
||||
return (struct st_framebuffer *) fb;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void st_viewport(struct gl_context * ctx, GLint x, GLint y,
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "main/mtypes.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "state_tracker/st_api.h"
|
||||
#include "main/fbobject.h"
|
||||
|
||||
struct bitmap_cache;
|
||||
struct blit_state;
|
||||
|
@ -238,7 +239,7 @@ void st_invalidate_state(struct gl_context * ctx, GLuint new_state);
|
|||
static INLINE GLuint
|
||||
st_fb_orientation(const struct gl_framebuffer *fb)
|
||||
{
|
||||
if (fb && fb->Name == 0) {
|
||||
if (fb && _mesa_is_winsys_fbo(fb)) {
|
||||
/* Drawing into a window (on-screen buffer).
|
||||
*
|
||||
* Negate Y scale to flip image vertically.
|
||||
|
|
|
@ -64,7 +64,9 @@ static INLINE struct st_framebuffer *
|
|||
st_ws_framebuffer(struct gl_framebuffer *fb)
|
||||
{
|
||||
/* FBO cannot be casted. See st_new_framebuffer */
|
||||
return (struct st_framebuffer *) ((fb && !fb->Name) ? fb : NULL);
|
||||
if (fb && _mesa_is_winsys_fbo(fb))
|
||||
return (struct st_framebuffer *) fb;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue