nv50: make use of scissor enable/disable method
authorBen Skeggs <bskeggs@redhat.com>
Thu, 4 Mar 2010 01:13:51 +0000 (11:13 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 10 Mar 2010 06:29:59 +0000 (16:29 +1000)
src/gallium/drivers/nv50/nv50_context.h
src/gallium/drivers/nv50/nv50_screen.c
src/gallium/drivers/nv50/nv50_state.c
src/gallium/drivers/nv50/nv50_state_validate.c

index ef0e99f0b126c361b7229d189214ff09b820087d..973fdd23a222de55f355070e4f272fb1b851e5d1 100644 (file)
@@ -126,7 +126,6 @@ struct nv50_state {
        struct nouveau_stateobj *hw[64];
        uint64_t hw_dirty;
 
-       unsigned scissor_enabled;
        unsigned miptree_nr[PIPE_SHADER_TYPES];
        struct nouveau_stateobj *vtxbuf;
        struct nouveau_stateobj *vtxattr;
index 2a1b64ffdc7b1525fdb896e3a01234f8bbda0fe9..114ae9b38606b7813ce936d467b4985f2cef1ce1 100644 (file)
@@ -485,10 +485,6 @@ nv50_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
        so_method(so, screen->tesla, NV50TCL_LINKED_TSC, 1);
        so_data  (so, 1);
 
-       /* activate first scissor rectangle */
-       so_method(so, screen->tesla, NV50TCL_SCISSOR_ENABLE(0), 1);
-       so_data  (so, 1);
-
        so_method(so, screen->tesla, NV50TCL_EDGEFLAG_ENABLE, 1);
        so_data  (so, 1); /* default edgeflag to TRUE */
 
index ffbf3473a1ea542e21769aec22654fce1f1e1b11..b0e5552eff45957a838f7c47c2dfa4f2a25cc8af 100644 (file)
@@ -302,7 +302,7 @@ static void *
 nv50_rasterizer_state_create(struct pipe_context *pipe,
                             const struct pipe_rasterizer_state *cso)
 {
-       struct nouveau_stateobj *so = so_new(15, 21, 0);
+       struct nouveau_stateobj *so = so_new(16, 22, 0);
        struct nouveau_grobj *tesla = nv50_context(pipe)->screen->tesla;
        struct nv50_rasterizer_stateobj *rso =
                CALLOC_STRUCT(nv50_rasterizer_stateobj);
@@ -314,6 +314,9 @@ nv50_rasterizer_state_create(struct pipe_context *pipe,
         *      - point_sprite / sprite_coord_mode
         */
 
+       so_method(so, tesla, NV50TCL_SCISSOR_ENABLE(0), 1);
+       so_data  (so, cso->scissor);
+
        so_method(so, tesla, NV50TCL_SHADE_MODEL, 1);
        so_data  (so, cso->flatshade ? NV50TCL_SHADE_MODEL_FLAT :
                                       NV50TCL_SHADE_MODEL_SMOOTH);
index 0f2760537274c7e7a30f1ca02e54fa99a7c3354e..2aaee31c0e03a6e414c998a182acb32ddb0941af 100644 (file)
@@ -167,9 +167,6 @@ validate_fb(struct nv50_context *nv50)
        so_data  (so, w << 16);
        so_data  (so, h << 16);
 
-       /* we set scissors to framebuffer size when they're 'turned off' */
-       nv50->dirty |= NV50_NEW_SCISSOR;
-       so_ref(NULL, &nv50->state.hw[12]);
        return so;
 }
 
@@ -264,26 +261,14 @@ validate_stipple(struct nv50_context *nv50)
 static struct nouveau_stateobj *
 validate_scissor(struct nv50_context *nv50)
 {
-       struct pipe_rasterizer_state *rast = &nv50->rasterizer->pipe;
-       struct pipe_scissor_state *s = &nv50->scissor;
        struct nouveau_grobj *tesla = nv50->screen->tesla;
+        struct pipe_scissor_state *s = &nv50->scissor;
        struct nouveau_stateobj *so;
 
-       if (nv50->state.hw[12] &&
-           (rast->scissor == 0 && nv50->state.scissor_enabled == 0))
-               return NULL;
-       nv50->state.scissor_enabled = rast->scissor;
-
        so = so_new(1, 2, 0);
        so_method(so, tesla, NV50TCL_SCISSOR_HORIZ(0), 2);
-       if (nv50->state.scissor_enabled) {
-               so_data(so, (s->maxx << 16) | s->minx);
-               so_data(so, (s->maxy << 16) | s->miny);
-       } else {
-               so_data(so, (nv50->framebuffer.width << 16));
-               so_data(so, (nv50->framebuffer.height << 16));
-       }
-
+       so_data  (so, (s->maxx << 16) | s->minx);
+       so_data  (so, (s->maxy << 16) | s->miny);
        return so;
 }
 
@@ -374,7 +359,7 @@ struct state_validate {
        { validate_blend_colour   , NV50_NEW_BLEND_COLOUR                     },
        { validate_stencil_ref    , NV50_NEW_STENCIL_REF                      },
        { validate_stipple        , NV50_NEW_STIPPLE                          },
-       { validate_scissor        , NV50_NEW_SCISSOR | NV50_NEW_RASTERIZER    },
+       { validate_scissor        , NV50_NEW_SCISSOR                          },
        { validate_viewport       , NV50_NEW_VIEWPORT                         },
        { validate_sampler        , NV50_NEW_SAMPLER                          },
        { nv50_tex_validate       , NV50_NEW_TEXTURE | NV50_NEW_SAMPLER       },