From dca9e3c4779936970dac796872a2399cd0437f63 Mon Sep 17 00:00:00 2001
From: Stéphane Marchesin <marcheu@chromium.org>
Date: Thu, 4 Oct 2012 17:37:37 -0700
Subject: i915g: Remove the i915_context->saved_* stuff.

When using u_blitter, the state was being saved from saved_*, but we
don't use that. So after u_blitter resumed we got some corrupted
state in.

So let's just remove the saved_* stuff. I thought it was weird but
harmless, it's actually broken.
---
 src/gallium/drivers/i915/i915_context.h | 16 ++++++---------
 src/gallium/drivers/i915/i915_state.c   | 35 ++++++++-------------------------
 src/gallium/drivers/i915/i915_surface.c | 18 ++++++++---------
 3 files changed, 23 insertions(+), 46 deletions(-)

diff --git a/src/gallium/drivers/i915/i915_context.h b/src/gallium/drivers/i915/i915_context.h
index 4141a3d4cf3..719a0e87308 100644
--- a/src/gallium/drivers/i915/i915_context.h
+++ b/src/gallium/drivers/i915/i915_context.h
@@ -234,6 +234,12 @@ struct i915_context {
 
    struct i915_fragment_shader *fs;
 
+   void *vs;
+
+   struct i915_velems_state *velems;
+   unsigned nr_vertex_buffers;
+   struct pipe_vertex_buffer vertex_buffers[PIPE_MAX_ATTRIBS];
+
    struct pipe_blend_color blend_color;
    struct pipe_stencil_ref stencil_ref;
    struct pipe_clip_state clip;
@@ -285,19 +291,9 @@ struct i915_context {
    struct blitter_context* blitter;
 
    /** State tracking needed by u_blitter for save/restore. */
-   void *saved_fs;
    void (*saved_bind_fs_state)(struct pipe_context *pipe, void *shader);
-   void *saved_vs;
-   struct pipe_clip_state saved_clip;
-   struct i915_velems_state *saved_velems;
-   unsigned saved_nr_vertex_buffers;
-   struct pipe_vertex_buffer saved_vertex_buffers[PIPE_MAX_ATTRIBS];
-   unsigned saved_nr_samplers;
-   void *saved_samplers[PIPE_MAX_SAMPLERS];
    void (*saved_bind_sampler_states)(struct pipe_context *pipe,
                                      unsigned num, void **sampler);
-   unsigned saved_nr_sampler_views;
-   struct pipe_sampler_view *saved_sampler_views[PIPE_MAX_SAMPLERS];
    void (*saved_set_sampler_views)(struct pipe_context *pipe,
                                    unsigned num, struct pipe_sampler_view **views);
 };
diff --git a/src/gallium/drivers/i915/i915_state.c b/src/gallium/drivers/i915/i915_state.c
index 410615f212a..d3e62c941a5 100644
--- a/src/gallium/drivers/i915/i915_state.c
+++ b/src/gallium/drivers/i915/i915_state.c
@@ -296,9 +296,6 @@ static void i915_fixup_bind_sampler_states(struct pipe_context *pipe,
 {
    struct i915_context *i915 = i915_context(pipe);
 
-   i915->saved_nr_samplers = num;
-   memcpy(&i915->saved_samplers, sampler, sizeof(void *) * num);
-
    i915->saved_bind_sampler_states(pipe, num, sampler);
 }
 
@@ -586,11 +583,6 @@ i915_fixup_bind_fs_state(struct pipe_context *pipe, void *shader)
 {
    struct i915_context *i915 = i915_context(pipe);
 
-   if (i915->saved_fs == shader)
-      return;
-
-   i915->saved_fs = shader;
-
    i915->saved_bind_fs_state(pipe, shader);
 }
 
@@ -645,10 +637,10 @@ static void i915_bind_vs_state(struct pipe_context *pipe, void *shader)
 {
    struct i915_context *i915 = i915_context(pipe);
 
-   if (i915->saved_vs == shader)
+   if (i915->vs == shader)
       return;
 
-   i915->saved_vs = shader;
+   i915->vs = shader;
 
    /* just pass-through to draw module */
    draw_bind_vertex_shader(i915->draw, (struct draw_vertex_shader *) shader);
@@ -726,17 +718,6 @@ i915_fixup_set_fragment_sampler_views(struct pipe_context *pipe,
                                       struct pipe_sampler_view **views)
 {
    struct i915_context *i915 = i915_context(pipe);
-   int i;
-
-   for (i = 0; i < num; i++)
-      pipe_sampler_view_reference(&i915->saved_sampler_views[i],
-                                  views[i]);
-
-   for (i = num; i < i915->saved_nr_sampler_views; i++)
-      pipe_sampler_view_reference(&i915->saved_sampler_views[i],
-                                  NULL);
-
-   i915->saved_nr_sampler_views = num;
 
    i915->saved_set_sampler_views(pipe, num, views);
 }
@@ -842,7 +823,7 @@ static void i915_set_framebuffer_state(struct pipe_context *pipe,
    }
    pipe_surface_reference(&i915->framebuffer.zsbuf, fb->zsbuf);
 
-   i915->dirty |= I915_NEW_FRAMEBUFFER;
+   i915->dirty |= I915_NEW_FRAMEBUFFER | I915_NEW_FS;
 }
 
 
@@ -852,7 +833,7 @@ static void i915_set_clip_state( struct pipe_context *pipe,
 {
    struct i915_context *i915 = i915_context(pipe);
 
-   i915->saved_clip = *clip;
+   i915->clip = *clip;
 
    draw_set_clip_state(i915->draw, clip);
 
@@ -978,8 +959,8 @@ static void i915_set_vertex_buffers(struct pipe_context *pipe,
    struct draw_context *draw = i915->draw;
    int i;
 
-   util_copy_vertex_buffers(i915->saved_vertex_buffers,
-                            &i915->saved_nr_vertex_buffers,
+   util_copy_vertex_buffers(i915->vertex_buffers,
+                            &i915->nr_vertex_buffers,
                             buffers, count);
 #if 0
    /* XXX doesn't look like this is needed */
@@ -1023,10 +1004,10 @@ i915_bind_vertex_elements_state(struct pipe_context *pipe,
    struct i915_context *i915 = i915_context(pipe);
    struct i915_velems_state *i915_velems = (struct i915_velems_state *) velems;
 
-   if (i915->saved_velems == velems)
+   if (i915->velems == velems)
       return;
 
-   i915->saved_velems = velems;
+   i915->velems = velems;
 
    /* pass-through to draw module */
    if (i915_velems) {
diff --git a/src/gallium/drivers/i915/i915_surface.c b/src/gallium/drivers/i915/i915_surface.c
index 4bb5f4800cf..6f5a654069f 100644
--- a/src/gallium/drivers/i915/i915_surface.c
+++ b/src/gallium/drivers/i915/i915_surface.c
@@ -50,22 +50,22 @@ i915_util_blitter_save_states(struct i915_context *i915)
    util_blitter_save_depth_stencil_alpha(i915->blitter, (void *)i915->depth_stencil);
    util_blitter_save_stencil_ref(i915->blitter, &i915->stencil_ref);
    util_blitter_save_rasterizer(i915->blitter, (void *)i915->rasterizer);
-   util_blitter_save_fragment_shader(i915->blitter, i915->saved_fs);
-   util_blitter_save_vertex_shader(i915->blitter, i915->saved_vs);
+   util_blitter_save_fragment_shader(i915->blitter, i915->fs);
+   util_blitter_save_vertex_shader(i915->blitter, i915->vs);
    util_blitter_save_viewport(i915->blitter, &i915->viewport);
    util_blitter_save_scissor(i915->blitter, &i915->scissor);
-   util_blitter_save_vertex_elements(i915->blitter, i915->saved_velems);
-   util_blitter_save_vertex_buffers(i915->blitter, i915->saved_nr_vertex_buffers,
-                                    i915->saved_vertex_buffers);
+   util_blitter_save_vertex_elements(i915->blitter, i915->velems);
+   util_blitter_save_vertex_buffers(i915->blitter, i915->nr_vertex_buffers,
+                                    i915->vertex_buffers);
 
    util_blitter_save_framebuffer(i915->blitter, &i915->framebuffer);
 
    util_blitter_save_fragment_sampler_states(i915->blitter,
-                                             i915->saved_nr_samplers,
-                                             i915->saved_samplers);
+                                             i915->num_samplers,
+                                             i915->sampler);
    util_blitter_save_fragment_sampler_views(i915->blitter,
-                                            i915->saved_nr_sampler_views,
-                                            i915->saved_sampler_views);
+                                            i915->num_fragment_sampler_views,
+                                            i915->fragment_sampler_views);
 }
 
 static void
-- 
cgit v1.2.3