r600: move clip misc and streamout stream updates to a single place
authorDave Airlie <airlied@redhat.com>
Mon, 30 Nov 2015 01:17:08 +0000 (11:17 +1000)
committerDave Airlie <airlied@redhat.com>
Sun, 6 Dec 2015 23:58:59 +0000 (09:58 +1000)
This will be updated in a macro later.

Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/r600/r600_state_common.c

index 64cb67a7b195a586c818b7f568550f832f1ed0d0..86579aa507b06abadfe31c03a97279c6d9b6a4e0 100644 (file)
@@ -1300,6 +1300,8 @@ static bool r600_update_derived_state(struct r600_context *rctx)
        bool ps_dirty = false, vs_dirty = false, gs_dirty = false;
        bool blend_disable;
        bool need_buf_const;
+       struct r600_pipe_shader *clip_so_current = NULL;
+
        if (!rctx->blitter->running) {
                unsigned i;
 
@@ -1334,9 +1336,8 @@ static bool r600_update_derived_state(struct r600_context *rctx)
                if (unlikely(rctx->hw_shader_stages[R600_HW_STAGE_GS].shader != rctx->gs_shader->current)) {
                        update_shader_atom(ctx, &rctx->hw_shader_stages[R600_HW_STAGE_GS], rctx->gs_shader->current);
                        update_shader_atom(ctx, &rctx->hw_shader_stages[R600_HW_STAGE_VS], rctx->gs_shader->current->gs_copy_shader);
-                       /* Update clip misc state. */
-                       r600_update_clip_state(rctx, rctx->gs_shader->current->gs_copy_shader);
-                       rctx->b.streamout.enabled_stream_buffers_mask = rctx->gs_shader->current->gs_copy_shader->enabled_stream_buffers_mask;
+
+                       clip_so_current = rctx->gs_shader->current->gs_copy_shader;
                }
 
                /* vs_shader is used as ES */
@@ -1354,12 +1355,16 @@ static bool r600_update_derived_state(struct r600_context *rctx)
                if (unlikely(vs_dirty || rctx->hw_shader_stages[R600_HW_STAGE_VS].shader != rctx->vs_shader->current)) {
                        update_shader_atom(ctx, &rctx->hw_shader_stages[R600_HW_STAGE_VS], rctx->vs_shader->current);
 
-                       /* Update clip misc state. */
-                       r600_update_clip_state(rctx, rctx->vs_shader->current);
-                       rctx->b.streamout.enabled_stream_buffers_mask = rctx->vs_shader->current->enabled_stream_buffers_mask;
+                       clip_so_current = rctx->vs_shader->current;
                }
        }
 
+       /* Update clip misc state. */
+       if (clip_so_current) {
+               r600_update_clip_state(rctx, clip_so_current);
+               rctx->b.streamout.enabled_stream_buffers_mask = clip_so_current->enabled_stream_buffers_mask;
+       }
+
        if (unlikely(ps_dirty || rctx->hw_shader_stages[R600_HW_STAGE_PS].shader != rctx->ps_shader->current ||
                rctx->rasterizer->sprite_coord_enable != rctx->ps_shader->current->sprite_coord_enable ||
                rctx->rasterizer->flatshade != rctx->ps_shader->current->flatshade)) {