svga: Ensure SWTNL is created after HWTNL.
authorJosé Fonseca <jfonseca@vmware.com>
Fri, 18 Feb 2011 14:29:48 +0000 (14:29 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Fri, 18 Feb 2011 16:43:40 +0000 (16:43 +0000)
Matches the internal driver layering, and prevents null svga->hwtnl
dereferencing from inside the swtnl.

src/gallium/drivers/svga/svga_context.c

index 2b8a70d18f1c2e96eca3be14ef6d00af8875cf60..9bcf6571bd324b9b4315a7289869b961f55c5a9d 100644 (file)
@@ -126,9 +126,6 @@ struct pipe_context *svga_context_create( struct pipe_screen *screen,
    svga->debug.no_line_width = debug_get_option_no_line_width();
    svga->debug.force_hw_line_stipple = debug_get_option_force_hw_line_stipple();
 
-   if (!svga_init_swtnl(svga))
-      goto no_swtnl;
-
    svga->fs_bm = util_bitmask_create();
    if (svga->fs_bm == NULL)
       goto no_fs_bm;
@@ -157,6 +154,8 @@ struct pipe_context *svga_context_create( struct pipe_screen *screen,
    if (svga->hwtnl == NULL)
       goto no_hwtnl;
 
+   if (!svga_init_swtnl(svga))
+      goto no_swtnl;
 
    ret = svga_emit_initial_state( svga );
    if (ret)
@@ -179,6 +178,8 @@ struct pipe_context *svga_context_create( struct pipe_screen *screen,
    return &svga->pipe;
 
 no_state:
+   svga_destroy_swtnl(svga);
+no_swtnl:
    svga_hwtnl_destroy( svga->hwtnl );
 no_hwtnl:
    u_upload_destroy( svga->upload_vb );
@@ -189,8 +190,6 @@ no_upload_ib:
 no_vs_bm:
    util_bitmask_destroy( svga->fs_bm );
 no_fs_bm:
-   svga_destroy_swtnl(svga);
-no_swtnl:
    svga->swc->destroy(svga->swc);
 no_swc:
    FREE(svga);