[Mesa-dev] [PATCH] intel: FBOs with texture border are unsupported

Kenneth Graunke kenneth at whitecape.org
Wed Feb 1 20:17:43 PST 2012


On 02/01/2012 09:31 AM, Ian Romanick wrote:
> From: Ian Romanick<ian.d.romanick at intel.com>
>
> FBOs differ from textures in a significant way.  With textures, we can
> strip the border and get correct rendering except when the application
> fetches texels outside [0,1].
>
> With an FBO, the pixel at (0,0) is in the border.  The
> ARB_framebuffer_object spec says:
>
>      "If the attached image is a texture image, then the window
>      coordinates (x[w], y[w]) correspond to the texel (i, j, k), from
>      figure 3.10 as follows:
>
>                             i = (x[w] - b)
>
>                             j = (y[w] - b)
>
>                             k = (layer - b)
>
>      where<b>  is the texture image's border width..."
>
> Since the border doesn't exist, we can never render any pixels in the
> correct location.  Just mark these FBOs FRAMEBUFFER_UNSUPPORTED.
>
> Signed-off-by: Ian Romanick<ian.d.romanick at intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=42336
> ---
>   src/mesa/drivers/dri/intel/intel_fbo.c |   13 +++++++++++++
>   1 files changed, 13 insertions(+), 0 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c
> index 2ba43ac..62ed754 100644
> --- a/src/mesa/drivers/dri/intel/intel_fbo.c
> +++ b/src/mesa/drivers/dri/intel/intel_fbo.c
> @@ -746,6 +746,7 @@ intel_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
>
>      for (i = 0; i<  Elements(fb->Attachment); i++) {
>         struct gl_renderbuffer *rb;
> +      struct gl_texture_object *tex;
>         struct intel_renderbuffer *irb;
>
>         if (fb->Attachment[i].Type == GL_NONE)
> @@ -762,6 +763,18 @@ intel_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
>   	 continue;
>         }
>
> +      tex = fb->Attachment[i].Texture;
> +      if (tex != NULL) {
> +	 const unsigned face = fb->Attachment[i].CubeMapFace;
> +	 const unsigned level = fb->Attachment[i].TextureLevel;
> +
> +	 if (tex->Image[face][level]->Border) {
> +	    DBG("texture with border\n");
> +	    fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
> +	    continue;
> +	 }
> +      }
> +
>         irb = intel_renderbuffer(rb);
>         if (irb == NULL) {
>   	 DBG("software rendering renderbuffer\n");

Yeah, I think flagging these as unsupported is best.  They aren't, and 
the application already has to check for FBO completeness, so they 
should be prepared to handle this.  Plus, seriously, who uses this crap?

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>


More information about the mesa-dev mailing list