gallium: Add support for multiple viewports
[mesa.git] / src / gallium / drivers / r600 / r600_state.c
index b30e053ce52c9566d18260eeefd6140a6d1e7796..068d87126e591a7ea1e3366741b6e6adac32dd80 100644 (file)
@@ -960,7 +960,7 @@ static void *r600_create_rs_state(struct pipe_context *ctx,
        r600_store_context_reg(&rs->buffer, R_0286D4_SPI_INTERP_CONTROL_0, spi_interp);
        r600_store_context_reg(&rs->buffer, R_028A4C_PA_SC_MODE_CNTL, sc_mode_cntl);
        r600_store_context_reg(&rs->buffer, R_028C08_PA_SU_VTX_CNTL,
-                              S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules) |
+                              S_028C08_PIX_CENTER_HALF(state->half_pixel_center) |
                               S_028C08_QUANT_MODE(V_028C08_X_1_256TH));
        r600_store_context_reg(&rs->buffer, R_028DFC_PA_SU_POLY_OFFSET_CLAMP, fui(state->offset_clamp));
        r600_store_context_reg(&rs->buffer, R_028814_PA_SU_SC_MODE_CNTL,
@@ -1215,8 +1215,10 @@ static void r600_emit_scissor_state(struct r600_context *rctx, struct r600_atom
        }
 }
 
-static void r600_set_scissor_state(struct pipe_context *ctx,
-                                  const struct pipe_scissor_state *state)
+static void r600_set_scissor_states(struct pipe_context *ctx,
+                                    unsigned start_slot,
+                                    unsigned num_scissors,
+                                    const struct pipe_scissor_state *state)
 {
        struct r600_context *rctx = (struct r600_context *)ctx;
 
@@ -1404,7 +1406,7 @@ static void r600_init_color_surface(struct r600_context *rctx,
                if (rtex->fmask_size) {
                        color_info |= S_0280A0_TILE_MODE(V_0280A0_FRAG_ENABLE);
                        surf->cb_color_fmask = rtex->fmask_offset >> 8;
-                       surf->cb_color_mask |= S_028100_FMASK_TILE_MAX(slice);
+                       surf->cb_color_mask |= S_028100_FMASK_TILE_MAX(rtex->fmask_slice_tile_max);
                } else { /* cmask only */
                        color_info |= S_0280A0_TILE_MODE(V_0280A0_CLEAR_ENABLE);
                }
@@ -1455,7 +1457,7 @@ static void r600_init_color_surface(struct r600_context *rctx,
                surf->cb_color_cmask = 0;
                surf->cb_color_fmask = 0;
                surf->cb_color_mask = S_028100_CMASK_BLOCK_MAX(cmask.slice_tile_max) |
-                                     S_028100_FMASK_TILE_MAX(slice);
+                                     S_028100_FMASK_TILE_MAX(fmask.slice_tile_max);
        }
 
        surf->cb_color_info = color_info;
@@ -1532,6 +1534,7 @@ static void r600_init_depth_surface(struct r600_context *rctx,
                surf->db_htile_data_base = va >> 8;
                surf->db_htile_surface = S_028D24_HTILE_WIDTH(1) |
                                        S_028D24_HTILE_HEIGHT(1) |
+                                       S_028D24_FULL_CACHE(1) |
                                        S_028D24_LINEAR(1);
                /* preload is not working properly on r6xx/r7xx */
                surf->db_depth_info |= S_028010_TILE_SURFACE_ENABLE(1);
@@ -3251,7 +3254,7 @@ void r600_init_state_functions(struct r600_context *rctx)
        rctx->context.create_sampler_view = r600_create_sampler_view;
        rctx->context.set_framebuffer_state = r600_set_framebuffer_state;
        rctx->context.set_polygon_stipple = r600_set_polygon_stipple;
-       rctx->context.set_scissor_state = r600_set_scissor_state;
+       rctx->context.set_scissor_states = r600_set_scissor_states;
 
        rctx->context.get_sample_position = r600_get_sample_position;
 }