mesa: handle some cases of 0x0 render targets
[mesa.git] / src / mesa / state_tracker / st_cb_fbo.c
index 7245798d0da511b7108fe2a9d9408017660977a3..45a05421f8ecd56437458364db221a3de80eefac 100644 (file)
@@ -170,6 +170,7 @@ st_renderbuffer_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
                                                   0, 0, 0,
                                                   surface_usage );
 
+   assert(strb->surface->texture);
    assert(strb->surface->buffer);
    assert(strb->surface->format);
    assert(strb->surface->block.size);
@@ -387,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 );
 
@@ -396,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",
@@ -422,9 +424,10 @@ st_finish_render_texture(GLcontext *ctx,
    struct pipe_screen *screen = ctx->st->pipe->screen;
    struct st_renderbuffer *strb = st_renderbuffer(att->Renderbuffer);
 
-   assert(strb);
+   if (!strb)
+      return;
 
-   ctx->st->pipe->flush(ctx->st->pipe, PIPE_FLUSH_RENDER_CACHE, NULL);
+   st_flush( ctx->st, PIPE_FLUSH_RENDER_CACHE, NULL );
 
    if (strb->surface)
       screen->tex_surface_release( screen, &strb->surface );