diff options
author | José Fonseca <[email protected]> | 2011-02-18 14:29:48 +0000 |
---|---|---|
committer | José Fonseca <[email protected]> | 2011-02-18 16:43:40 +0000 |
commit | 0cb6329e8941dc7937c8aeea4b2e83c77881bd3a (patch) | |
tree | b7d76d81f196ed338dde87ca58bd6e2384835c4a | |
parent | 15c3e21097ba6d410daaff525eb4eeeb5e1e481a (diff) |
svga: Ensure SWTNL is created after HWTNL.
Matches the internal driver layering, and prevents null svga->hwtnl
dereferencing from inside the swtnl.
-rw-r--r-- | src/gallium/drivers/svga/svga_context.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/gallium/drivers/svga/svga_context.c b/src/gallium/drivers/svga/svga_context.c index 2b8a70d18f1..9bcf6571bd3 100644 --- a/src/gallium/drivers/svga/svga_context.c +++ b/src/gallium/drivers/svga/svga_context.c @@ -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); |