Merge branch 'mesa_7_6_branch'
[mesa.git] / src / gallium / drivers / nv50 / nv50_state.c
index 116866a8e781cb223331c5552ac8f1de8db68e18..81fa3e34c59c00f5a083c008d42957517ed0a13a 100644 (file)
@@ -205,11 +205,16 @@ nv50_sampler_state_create(struct pipe_context *pipe,
        }
 
        limit = CLAMP(cso->lod_bias, -16.0, 15.0);
-       tsc[1] |= ((int)(limit * 256.0) & 0x1fff) << 11;
+       tsc[1] |= ((int)(limit * 256.0) & 0x1fff) << 12;
 
        tsc[2] |= ((int)CLAMP(cso->max_lod, 0.0, 15.0) << 20) |
                  ((int)CLAMP(cso->min_lod, 0.0, 15.0) << 8);
 
+       tsc[4] = fui(cso->border_color[0]);
+       tsc[5] = fui(cso->border_color[1]);
+       tsc[6] = fui(cso->border_color[2]);
+       tsc[7] = fui(cso->border_color[3]);
+
        sso->normalized = cso->normalized_coords;
        return (void *)sso;
 }
@@ -268,6 +273,11 @@ nv50_rasterizer_state_create(struct pipe_context *pipe,
        so_method(so, tesla, NV50TCL_SHADE_MODEL, 1);
        so_data  (so, cso->flatshade ? NV50TCL_SHADE_MODEL_FLAT :
                                       NV50TCL_SHADE_MODEL_SMOOTH);
+       so_method(so, tesla, 0x1684, 1);
+       so_data  (so, cso->flatshade_first ? 0 : 1);
+
+       so_method(so, tesla, NV50TCL_VERTEX_TWO_SIDE_ENABLE, 1);
+       so_data  (so, cso->light_twoside);
 
        so_method(so, tesla, NV50TCL_LINE_WIDTH, 1);
        so_data  (so, fui(cso->line_width));
@@ -287,6 +297,9 @@ nv50_rasterizer_state_create(struct pipe_context *pipe,
        so_method(so, tesla, NV50TCL_POINT_SIZE, 1);
        so_data  (so, fui(cso->point_size));
 
+       so_method(so, tesla, NV50TCL_POINT_SPRITE_ENABLE, 1);
+       so_data  (so, cso->point_sprite);
+
        so_method(so, tesla, NV50TCL_POLYGON_MODE_FRONT, 3);
        if (cso->front_winding == PIPE_WINDING_CCW) {
                so_data(so, nvgl_polygon_mode(cso->fill_ccw));
@@ -404,35 +417,35 @@ nv50_depth_stencil_alpha_state_create(struct pipe_context *pipe,
                so_data  (so, 0);
        }
 
-       /*XXX: yes, I know they're backwards.. header needs fixing */
+       /* XXX: keep hex values until header is updated (names reversed) */
        if (cso->stencil[0].enabled) {
-               so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 5);
+               so_method(so, tesla, 0x1380, 8);
                so_data  (so, 1);
                so_data  (so, nvgl_stencil_op(cso->stencil[0].fail_op));
                so_data  (so, nvgl_stencil_op(cso->stencil[0].zfail_op));
                so_data  (so, nvgl_stencil_op(cso->stencil[0].zpass_op));
                so_data  (so, nvgl_comparison_op(cso->stencil[0].func));
-               so_method(so, tesla, NV50TCL_STENCIL_BACK_FUNC_REF, 3);
                so_data  (so, cso->stencil[0].ref_value);
                so_data  (so, cso->stencil[0].writemask);
                so_data  (so, cso->stencil[0].valuemask);
        } else {
-               so_method(so, tesla, NV50TCL_STENCIL_BACK_ENABLE, 1);
+               so_method(so, tesla, 0x1380, 1);
                so_data  (so, 0);
        }
 
        if (cso->stencil[1].enabled) {
-               so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 8);
+               so_method(so, tesla, 0x1594, 5);
                so_data  (so, 1);
                so_data  (so, nvgl_stencil_op(cso->stencil[1].fail_op));
                so_data  (so, nvgl_stencil_op(cso->stencil[1].zfail_op));
                so_data  (so, nvgl_stencil_op(cso->stencil[1].zpass_op));
                so_data  (so, nvgl_comparison_op(cso->stencil[1].func));
+               so_method(so, tesla, 0x0f54, 3);
                so_data  (so, cso->stencil[1].ref_value);
                so_data  (so, cso->stencil[1].writemask);
                so_data  (so, cso->stencil[1].valuemask);
        } else {
-               so_method(so, tesla, NV50TCL_STENCIL_FRONT_ENABLE, 1);
+               so_method(so, tesla, 0x1594, 1);
                so_data  (so, 0);
        }