r300: Save viewport and clip states before invoking blitter.
authorMichal Krol <michal@vmware.com>
Mon, 1 Mar 2010 16:07:03 +0000 (17:07 +0100)
committerMichal Krol <michal@vmware.com>
Mon, 1 Mar 2010 16:07:03 +0000 (17:07 +0100)
src/gallium/drivers/r300/r300_blit.c
src/gallium/drivers/r300/r300_context.h
src/gallium/drivers/r300/r300_state.c

index eb9b0beeb5a9589b803b1fb2796e3f2a90f1fa83..ec7414dc3693d88f3187d0cfa574e02442d24e74 100644 (file)
@@ -34,6 +34,8 @@ static void r300_blitter_save_states(struct r300_context* r300)
     util_blitter_save_rasterizer(r300->blitter, r300->rs_state.state);
     util_blitter_save_fragment_shader(r300->blitter, r300->fs);
     util_blitter_save_vertex_shader(r300->blitter, r300->vs);
+    util_blitter_save_viewport(r300->blitter, &r300->viewport);
+    util_blitter_save_clip(r300->blitter, &r300->clip);
 }
 
 /* Clear currently bound buffers. */
index 2f056aafcbfaec64d194863a76c6b748ff3053ca..97100c08ccb4307cc65b2dcf6150066467dfc8c8 100644 (file)
@@ -333,6 +333,10 @@ struct r300_context {
 
     struct pipe_stencil_ref stencil_ref;
 
+    struct pipe_clip_state clip;
+
+    struct pipe_viewport_state viewport;
+
     /* Bitmask of dirty state objects. */
     uint32_t dirty_state;
     /* Flag indicating whether or not the HW is dirty. */
index 3550c69c46d7d37bf1191057d0220e25c509b71d..ebb859138fa652fa23e3ff43b6fef5f46c2458d7 100644 (file)
@@ -376,6 +376,8 @@ static void r300_set_clip_state(struct pipe_context* pipe,
 {
     struct r300_context* r300 = r300_context(pipe);
 
+    r300->clip = *state;
+
     if (r300_screen(pipe->screen)->caps->has_tcl) {
         memcpy(r300->clip_state.state, state, sizeof(struct pipe_clip_state));
         r300->clip_state.size = 29;
@@ -986,6 +988,8 @@ static void r300_set_viewport_state(struct pipe_context* pipe,
     struct r300_viewport_state* viewport =
         (struct r300_viewport_state*)r300->viewport_state.state;
 
+    r300->viewport = *state;
+
     /* Do the transform in HW. */
     viewport->vte_control = R300_VTX_W0_FMT;