[Mesa-dev] [PATCH 5/6] mesa: Make Mesa core set up wrapped texture renderbuffer state.

Eric Anholt eric at anholt.net
Tue Apr 30 12:56:36 PDT 2013


Everyone was doing effectively the same thing, except for some funky code
reuse in Intel, and swrast mistakenly recomputing _BaseFormat instead of
using the texture's _BaseFormat.  swrast's sRGB handling is left in place,
though it should be done by using _mesa_get_render_format() at render time
instead (as-is, it will miss updates to GL_FRAMEBUFFER_SRGB).
---
 src/mesa/drivers/dri/intel/intel_fbo.c     |  6 ------
 src/mesa/drivers/dri/nouveau/nouveau_fbo.c | 18 ------------------
 src/mesa/main/fbobject.c                   |  7 +++++++
 src/mesa/state_tracker/st_cb_fbo.c         |  5 -----
 src/mesa/swrast/s_texrender.c              |  5 -----
 5 files changed, 7 insertions(+), 34 deletions(-)

diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c
index a3817eb..f037445 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.c
+++ b/src/mesa/drivers/dri/intel/intel_fbo.c
@@ -489,12 +489,6 @@ intel_renderbuffer_update_wrapper(struct intel_context *intel,
    struct intel_mipmap_tree *mt = intel_image->mt;
    int level = image->Level;
 
-   rb->Format = image->TexFormat;
-   rb->InternalFormat = image->InternalFormat;
-   rb->_BaseFormat = image->_BaseFormat;
-   rb->NumSamples = mt->num_samples;
-   rb->Width = image->Width2;
-   rb->Height = image->Height2;
    rb->Delete = intel_delete_renderbuffer;
    rb->AllocStorage = intel_nop_alloc_storage;
 
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
index adead3d..a692051 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
@@ -247,21 +247,6 @@ nouveau_framebuffer_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *
 	context_dirty(ctx, FRAMEBUFFER);
 }
 
-static GLenum
-get_tex_format(struct gl_texture_image *ti)
-{
-	switch (ti->TexFormat) {
-	case MESA_FORMAT_ARGB8888:
-		return GL_RGBA8;
-	case MESA_FORMAT_XRGB8888:
-		return GL_RGB8;
-	case MESA_FORMAT_RGB565:
-		return GL_RGB5;
-	default:
-		return GL_NONE;
-	}
-}
-
 static void
 nouveau_render_texture(struct gl_context *ctx, struct gl_framebuffer *fb,
 		       struct gl_renderbuffer_attachment *att)
@@ -271,9 +256,6 @@ nouveau_render_texture(struct gl_context *ctx, struct gl_framebuffer *fb,
 		att->Texture->Image[att->CubeMapFace][att->TextureLevel];
 
 	/* Update the renderbuffer fields from the texture. */
-	set_renderbuffer_format(rb, get_tex_format(ti));
-	rb->Width = ti->Width;
-	rb->Height = ti->Height;
 	nouveau_surface_ref(&to_nouveau_teximage(ti)->surface,
 			    &to_nouveau_renderbuffer(rb)->surface);
 
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 26d1cce..d88c062 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -380,6 +380,13 @@ _mesa_update_texture_renderbuffer(struct gl_context *ctx,
       rb->AllocStorage = NULL;
    }
 
+   rb->_BaseFormat = texImage->_BaseFormat;
+   rb->Format = texImage->TexFormat;
+   rb->InternalFormat = texImage->InternalFormat;
+   rb->Width = texImage->Width2;
+   rb->Height = texImage->Height2;
+   rb->NumSamples = texImage->NumSamples;
+
    ctx->Driver.RenderTexture(ctx, fb, att);
 }
 
diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index affe656..aa245d3 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -414,11 +414,6 @@ st_render_texture(struct gl_context *ctx,
    strb->rtt_level = att->TextureLevel;
    strb->rtt_face = att->CubeMapFace;
    strb->rtt_slice = att->Zoffset;
-   rb->NumSamples = texImage->NumSamples;
-   rb->Width = texImage->Width2;
-   rb->Height = texImage->Height2;
-   rb->_BaseFormat = texImage->_BaseFormat;
-   rb->InternalFormat = texImage->InternalFormat;
 
    pipe_resource_reference( &strb->texture, pt );
 
diff --git a/src/mesa/swrast/s_texrender.c b/src/mesa/swrast/s_texrender.c
index f56a0d5..00b3ca5 100644
--- a/src/mesa/swrast/s_texrender.c
+++ b/src/mesa/swrast/s_texrender.c
@@ -50,11 +50,6 @@ update_wrapper(struct gl_context *ctx, struct gl_renderbuffer_attachment *att)
       zOffset = att->Zoffset;
    }
 
-   rb->Width = swImage->Base.Width;
-   rb->Height = swImage->Base.Height;
-   rb->InternalFormat = swImage->Base.InternalFormat;
-   rb->_BaseFormat = _mesa_get_format_base_format(format);
-
    /* Want to store linear values, not sRGB */
    rb->Format = _mesa_get_srgb_format_linear(format);
 
-- 
1.8.3.rc0



More information about the mesa-dev mailing list