From: Marek Olšák <marek.ol...@amd.com>

---
 src/gallium/drivers/radeon/r600_viewport.c | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_viewport.c 
b/src/gallium/drivers/radeon/r600_viewport.c
index 5c998c8..2d68783 100644
--- a/src/gallium/drivers/radeon/r600_viewport.c
+++ b/src/gallium/drivers/radeon/r600_viewport.c
@@ -269,57 +269,59 @@ static void r600_set_viewport_states(struct pipe_context 
*ctx,
                r600_get_scissor_from_viewport(rctx, &state[i],
                                               
&rctx->viewports.as_scissor[index]);
        }
 
        rctx->viewports.dirty_mask |= ((1 << num_viewports) - 1) << start_slot;
        rctx->scissors.dirty_mask |= ((1 << num_viewports) - 1) << start_slot;
        rctx->set_atom_dirty(rctx, &rctx->viewports.atom, true);
        rctx->set_atom_dirty(rctx, &rctx->scissors.atom, true);
 }
 
+static void r600_emit_one_viewport(struct r600_common_context *rctx,
+                                  struct pipe_viewport_state *state)
+{
+       struct radeon_winsys_cs *cs = rctx->gfx.cs;
+
+       radeon_emit(cs, fui(state->scale[0]));
+       radeon_emit(cs, fui(state->translate[0]));
+       radeon_emit(cs, fui(state->scale[1]));
+       radeon_emit(cs, fui(state->translate[1]));
+       radeon_emit(cs, fui(state->scale[2]));
+       radeon_emit(cs, fui(state->translate[2]));
+}
+
 static void r600_emit_viewports(struct r600_common_context *rctx, struct 
r600_atom *atom)
 {
        struct radeon_winsys_cs *cs = rctx->gfx.cs;
        struct pipe_viewport_state *states = rctx->viewports.states;
        unsigned mask = rctx->viewports.dirty_mask;
 
        /* The simple case: Only 1 viewport is active. */
        if (!rctx->vs_writes_viewport_index) {
                if (!(mask & 1))
                        return;
 
                radeon_set_context_reg_seq(cs, R_02843C_PA_CL_VPORT_XSCALE, 6);
-               radeon_emit(cs, fui(states[0].scale[0]));
-               radeon_emit(cs, fui(states[0].translate[0]));
-               radeon_emit(cs, fui(states[0].scale[1]));
-               radeon_emit(cs, fui(states[0].translate[1]));
-               radeon_emit(cs, fui(states[0].scale[2]));
-               radeon_emit(cs, fui(states[0].translate[2]));
+               r600_emit_one_viewport(rctx, &states[0]);
                rctx->viewports.dirty_mask &= ~1; /* clear one bit */
                return;
        }
 
        while (mask) {
                int start, count, i;
 
                u_bit_scan_consecutive_range(&mask, &start, &count);
 
                radeon_set_context_reg_seq(cs, R_02843C_PA_CL_VPORT_XSCALE +
                                               start * 4 * 6, count * 6);
-               for (i = start; i < start+count; i++) {
-                       radeon_emit(cs, fui(states[i].scale[0]));
-                       radeon_emit(cs, fui(states[i].translate[0]));
-                       radeon_emit(cs, fui(states[i].scale[1]));
-                       radeon_emit(cs, fui(states[i].translate[1]));
-                       radeon_emit(cs, fui(states[i].scale[2]));
-                       radeon_emit(cs, fui(states[i].translate[2]));
-               }
+               for (i = start; i < start+count; i++)
+                       r600_emit_one_viewport(rctx, &states[i]);
        }
        rctx->viewports.dirty_mask = 0;
 }
 
 void r600_set_scissor_enable(struct r600_common_context *rctx, bool enable)
 {
        if (rctx->scissor_enabled != enable) {
                rctx->scissor_enabled = enable;
                rctx->scissors.dirty_mask = (1 << R600_MAX_VIEWPORTS) - 1;
                rctx->set_atom_dirty(rctx, &rctx->scissors.atom, true);
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to