dri/nouveau: Fix swrast fallbacks when the read and draw buffers aren't the same.

This commit is contained in:
Francisco Jerez 2010-03-22 18:25:30 +01:00
parent fe7d0e6dc8
commit 199fab25b7

View file

@ -32,7 +32,6 @@
#include "swrast/swrast.h"
#define LOCAL_VARS \
struct gl_framebuffer *fb = ctx->DrawBuffer; \
struct nouveau_surface *s = &to_nouveau_renderbuffer(rb)->surface; \
GLuint p; \
(void)p;
@ -45,12 +44,12 @@
#define HW_CLIPLOOP() { \
int minx = 0; \
int miny = 0; \
int maxx = fb->Width; \
int maxy = fb->Height;
int maxx = rb->Width; \
int maxy = rb->Height;
#define HW_ENDCLIPLOOP() }
#define Y_FLIP(y) (fb->Name ? (y) : rb->Height - 1 - (y))
#define Y_FLIP(y) (rb->Name ? (y) : rb->Height - 1 - (y))
/* RGB565 span functions */
#define SPANTMP_PIXEL_FMT GL_RGB
@ -143,18 +142,29 @@ texture_unit_map_unmap(GLcontext *ctx, struct gl_texture_unit *u, GLboolean map)
ctx->Driver.UnmapTexture(ctx, u->_Current);
}
static void
framebuffer_map_unmap(struct gl_framebuffer *fb, GLboolean map)
{
int i;
for (i = 0; i < fb->_NumColorDrawBuffers; i++)
renderbuffer_map_unmap(fb->_ColorDrawBuffers[i], map);
renderbuffer_map_unmap(fb->_ColorReadBuffer, map);
if (fb->_DepthBuffer)
renderbuffer_map_unmap(fb->_DepthBuffer->Wrapped, map);
}
static void
span_map_unmap(GLcontext *ctx, GLboolean map)
{
int i;
for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++)
renderbuffer_map_unmap(ctx->DrawBuffer->_ColorDrawBuffers[i], map);
framebuffer_map_unmap(ctx->DrawBuffer, map);
renderbuffer_map_unmap(ctx->DrawBuffer->_ColorReadBuffer, map);
if (ctx->DrawBuffer->_DepthBuffer)
renderbuffer_map_unmap(ctx->DrawBuffer->_DepthBuffer->Wrapped, map);
if (ctx->ReadBuffer != ctx->DrawBuffer)
framebuffer_map_unmap(ctx->ReadBuffer, map);
for (i = 0; i < ctx->Const.MaxTextureUnits; i++)
texture_unit_map_unmap(ctx, &ctx->Texture.Unit[i], map);