etnaviv: remove not used etna_bits_ones(..)
[mesa.git] / src / gallium / drivers / etnaviv / etnaviv_rasterizer.c
index 4990fd180257c4093758d206cdf55d7959a0f89f..2f218d6c063341db7ac17e743e08816d95ef566f 100644 (file)
@@ -38,10 +38,6 @@ etna_rasterizer_state_create(struct pipe_context *pctx,
    struct etna_rasterizer_state *cs;
    struct etna_context *ctx = etna_context(pctx);
 
-    /* Disregard flatshading on GC880+, as a HW bug there seem to disable all
-     * varying interpolation if it's enabled */
-   bool flatshade = ctx->screen->model < 880 ? so->flatshade : false;
-
    if (so->fill_front != so->fill_back)
       DBG("Different front and back fill mode not supported");
 
@@ -51,7 +47,7 @@ etna_rasterizer_state_create(struct pipe_context *pctx,
 
    cs->base = *so;
 
-   cs->PA_CONFIG = (flatshade ? VIVS_PA_CONFIG_SHADE_MODEL_FLAT : VIVS_PA_CONFIG_SHADE_MODEL_SMOOTH) |
+   cs->PA_CONFIG = (so->flatshade ? VIVS_PA_CONFIG_SHADE_MODEL_FLAT : VIVS_PA_CONFIG_SHADE_MODEL_SMOOTH) |
                    translate_cull_face(so->cull_face, so->front_ccw) |
                    translate_polygon_mode(so->fill_front) |
                    COND(so->point_quad_rasterization, VIVS_PA_CONFIG_POINT_SPRITE_ENABLE) |
@@ -60,12 +56,13 @@ etna_rasterizer_state_create(struct pipe_context *pctx,
    cs->PA_LINE_WIDTH = fui(so->line_width / 2.0f);
    cs->PA_POINT_SIZE = fui(so->point_size / 2.0f);
    cs->SE_DEPTH_SCALE = fui(so->offset_scale);
-   cs->SE_DEPTH_BIAS = fui(so->offset_units) / 65535.0f;
+   cs->SE_DEPTH_BIAS = fui((so->offset_units / 65535.0f) * 2.0f);
    cs->SE_CONFIG = COND(so->line_last_pixel, VIVS_SE_CONFIG_LAST_PIXEL_ENABLE);
    /* XXX anything else? */
    /* XXX bottom_edge_rule */
    cs->PA_SYSTEM_MODE =
-      COND(so->half_pixel_center, VIVS_PA_SYSTEM_MODE_UNK0 | VIVS_PA_SYSTEM_MODE_UNK4);
+      COND(!so->flatshade_first, VIVS_PA_SYSTEM_MODE_PROVOKING_VERTEX_LAST) |
+      COND(so->half_pixel_center, VIVS_PA_SYSTEM_MODE_HALF_PIXEL_CENTER);
 
    /* so->scissor overrides the scissor, defaulting to the whole framebuffer,
     * with the scissor state */