mesa: handle some cases of 0x0 render targets
authorAlan Hourihane <alanh@vmware.com>
Wed, 14 Jan 2009 16:53:22 +0000 (16:53 +0000)
committerAlan Hourihane <alanh@vmware.com>
Wed, 14 Jan 2009 16:53:22 +0000 (16:53 +0000)
src/mesa/state_tracker/st_atom_framebuffer.c
src/mesa/state_tracker/st_cb_fbo.c
src/mesa/state_tracker/st_gen_mipmap.c

index ca1a719a9ac720e5a1fc34a37eeb0fd04cb58c79..e14f55681cd6c6e90f2eac8a1e5586cc0c3a2e52 100644 (file)
@@ -55,10 +55,11 @@ update_renderbuffer_surface(struct st_context *st,
    int rtt_width = strb->Base.Width;
    int rtt_height = strb->Base.Height;
 
-   if (!strb->surface ||
-       strb->surface->texture != texture ||
-       strb->surface->width != rtt_width ||
-       strb->surface->height != rtt_height) {
+   if (texture &&
+       (!strb->surface ||
+        strb->surface->texture != texture ||
+        strb->surface->width != rtt_width ||
+        strb->surface->height != rtt_height)) {
       GLuint level;
       /* find matching mipmap level size */
       for (level = 0; level <= texture->last_level; level++) {
index eece7dee112aad6484fabf64890b24cc1acd9c53..45a05421f8ecd56437458364db221a3de80eefac 100644 (file)
@@ -388,8 +388,6 @@ st_render_texture(GLcontext *ctx,
    /*printf("***** render to texture level %d: %d x %d\n", att->TextureLevel, rb->Width, rb->Height);*/
 
    pt = st_get_texobj_texture(att->Texture);
-   assert(pt);
-   /*printf("***** pipe texture %d x %d\n", pt->width[0], pt->height[0]);*/
 
    pipe_texture_reference( &strb->texture, pt );
 
@@ -397,7 +395,10 @@ st_render_texture(GLcontext *ctx,
 
    /* the new surface will be created during framebuffer validation */
 
-   init_renderbuffer_bits(strb, pt->format);
+   if (pt) {
+      /*printf("***** pipe texture %d x %d\n", pt->width[0], pt->height[0]);*/
+      init_renderbuffer_bits(strb, pt->format);
+   }
 
    /*
    printf("RENDER TO TEXTURE obj=%p pt=%p surf=%p  %d x %d\n",
index a15faf732ca6b9fe07ea7e7560c315543751fa55..9e5c35072a1bff2bda552c2123de77803787870c 100644 (file)
@@ -160,9 +160,14 @@ st_generate_mipmap(GLcontext *ctx, GLenum target,
    struct st_context *st = ctx->st;
    struct pipe_texture *pt = st_get_texobj_texture(texObj);
    const uint baseLevel = texObj->BaseLevel;
-   const uint lastLevel = pt->last_level;
+   uint lastLevel;
    uint dstLevel;
 
+   if (!pt)
+      return;
+
+   lastLevel = pt->last_level;
+
    if (!st_render_mipmap(st, target, pt, baseLevel, lastLevel)) {
       fallback_generate_mipmap(ctx, target, texObj);
    }