Squash-merge branch 'gallium-clip-state'
[mesa.git] / src / gallium / drivers / r600 / evergreen_state.c
index 7ded03d4428238e3a9e2ad4fa83a9efdea6fcc7f..f3aab69dec50d66d61a93b5a4ce19ab37dcffbd9 100644 (file)
@@ -986,6 +986,10 @@ static void *evergreen_create_rs_state(struct pipe_context *ctx,
        }
        r600_pipe_state_add_reg(rstate, R_028B7C_PA_SU_POLY_OFFSET_CLAMP, fui(state->offset_clamp), 0xFFFFFFFF, NULL, 0);
        r600_pipe_state_add_reg(rstate, R_02820C_PA_SC_CLIPRECT_RULE, clip_rule, 0xFFFFFFFF, NULL, 0);
+       r600_pipe_state_add_reg(rstate, R_028810_PA_CL_CLIP_CNTL,
+                       S_028810_PS_UCP_MODE(3) | (state->clip_plane_enable & 63) |
+                       S_028810_ZCLIP_NEAR_DISABLE(!state->depth_clip) |
+                       S_028810_ZCLIP_FAR_DISABLE(!state->depth_clip), 0xFFFFFFFF, NULL, 0);
        return rstate;
 }
 
@@ -1206,7 +1210,7 @@ static void evergreen_set_clip_state(struct pipe_context *ctx,
 
        rctx->clip = *state;
        rstate->id = R600_PIPE_STATE_CLIP;
-       for (int i = 0; i < state->nr; i++) {
+       for (int i = 0; i < 6; i++) {
                r600_pipe_state_add_reg(rstate,
                                        R_0285BC_PA_CL_UCP0_X + i * 16,
                                        fui(state->ucp[i][0]), 0xFFFFFFFF, NULL, 0);
@@ -1220,10 +1224,6 @@ static void evergreen_set_clip_state(struct pipe_context *ctx,
                                        R_0285C8_PA_CL_UCP0_W + i * 16,
                                        fui(state->ucp[i][3]), 0xFFFFFFFF, NULL, 0);
        }
-       r600_pipe_state_add_reg(rstate, R_028810_PA_CL_CLIP_CNTL,
-                       S_028810_PS_UCP_MODE(3) | ((1 << state->nr) - 1) |
-                       S_028810_ZCLIP_NEAR_DISABLE(state->depth_clamp) |
-                       S_028810_ZCLIP_FAR_DISABLE(state->depth_clamp), 0xFFFFFFFF, NULL, 0);
 
        free(rctx->states[R600_PIPE_STATE_CLIP]);
        rctx->states[R600_PIPE_STATE_CLIP] = rstate;