d3d1x: bind NULL CSOs before destroying default CSOs on context dtor
authorLuca Barbieri <luca@luca-barbieri.com>
Thu, 23 Sep 2010 01:49:17 +0000 (03:49 +0200)
committerLuca Barbieri <luca@luca-barbieri.com>
Thu, 23 Sep 2010 09:23:08 +0000 (11:23 +0200)
Otherwise softpipe and llvmpipe assert.

src/gallium/state_trackers/d3d1x/gd3d11/d3d11_context.h

index 7e49c3a2c5ef576a8162bf8adc9620039fbb63c3..3c789d3af059756e87d266c18f9af8a778f3897f 100644 (file)
@@ -267,14 +267,32 @@ struct GalliumD3D10Device : public GalliumD3D10ScreenImpl<threadsafe>
        {
                util_destroy_gen_mipmap(gen_mipmap);
                cso_destroy_context(cso_ctx);
+
+               pipe->bind_vertex_elements_state(pipe, 0);
                pipe->delete_vertex_elements_state(pipe, default_input_layout);
+
+               pipe->bind_rasterizer_state(pipe, 0);
                pipe->delete_rasterizer_state(pipe, default_rasterizer);
+
+               pipe->bind_depth_stencil_alpha_state(pipe, 0);
                pipe->delete_depth_stencil_alpha_state(pipe, default_depth_stencil);
+
+               pipe->bind_blend_state(pipe, 0);
                pipe->delete_blend_state(pipe, default_blend);
+
+               pipe->bind_fragment_sampler_states(pipe, 0, 0);
+               pipe->bind_vertex_sampler_states(pipe, 0, 0);
+               if(pipe->bind_geometry_sampler_states)
+                       pipe->bind_geometry_sampler_states(pipe, 0, 0);
                pipe->delete_sampler_state(pipe, default_sampler);
                pipe->delete_sampler_state(pipe, ld_sampler);
+
+               pipe->bind_fs_state(pipe, 0);
                pipe->delete_fs_state(pipe, default_shaders[PIPE_SHADER_FRAGMENT]);
+
+               pipe->bind_vs_state(pipe, 0);
                pipe->delete_vs_state(pipe, default_shaders[PIPE_SHADER_VERTEX]);
+
                if(owns_pipe)
                        pipe->destroy(pipe);
        }