Browse Source

radeon: port more front fixes from intel.

Port fixes to read buffer from front.
tags/mesa_7_6_rc1
Dave Airlie 16 years ago
parent
commit
bb4c703587

+ 11
- 0
src/mesa/drivers/dri/radeon/radeon_common.c View File

@@ -823,6 +823,17 @@ void radeonDrawBuffer( GLcontext *ctx, GLenum mode )

void radeonReadBuffer( GLcontext *ctx, GLenum mode )
{
if ((ctx->DrawBuffer != NULL) && (ctx->DrawBuffer->Name == 0)) {
struct radeon_context *const rmesa = RADEON_CONTEXT(ctx);
const GLboolean was_front_buffer_reading = rmesa->is_front_buffer_reading;
rmesa->is_front_buffer_reading = (mode == GL_FRONT_LEFT)
|| (mode == GL_FRONT);

if (!was_front_buffer_reading && rmesa->is_front_buffer_reading) {
radeon_update_renderbuffers(rmesa->dri.context,
rmesa->dri.context->driReadablePriv);
}
}
/* nothing, until we implement h/w glRead/CopyPixels or CopyTexImage */
if (ctx->ReadBuffer == ctx->DrawBuffer) {
/* This will update FBO completeness status.

+ 4
- 1
src/mesa/drivers/dri/radeon/radeon_common_context.c View File

@@ -487,7 +487,10 @@ radeon_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable)
struct radeon_renderbuffer *stencil_rb;

i = 0;
if (draw->color_rb[0]) {
if ((radeon->is_front_buffer_rendering ||
radeon->is_front_buffer_reading ||
!draw->color_rb[1])
&& draw->color_rb[0]) {
attachments[i++] = __DRI_BUFFER_FRONT_LEFT;
attachments[i++] = radeon_bits_per_pixel(draw->color_rb[0]);
}

+ 9
- 0
src/mesa/drivers/dri/radeon/radeon_common_context.h View File

@@ -467,6 +467,15 @@ struct radeon_context {
*/
GLboolean is_front_buffer_rendering;

/**
* Track whether front-buffer is the current read target.
*
* This is closely associated with is_front_buffer_rendering, but may
* be set separately. The DRI2 fake front buffer must be referenced
* either way.
*/
GLboolean is_front_buffer_reading;

/* info for radeon_clear_tris() */
struct {
struct gl_array_object *arrayObj;

Loading…
Cancel
Save