nvfx: fix viewport state after bypass removal for swtnl
authorLuca Barbieri <luca@luca-barbieri.com>
Tue, 2 Mar 2010 21:51:39 +0000 (22:51 +0100)
committerYounes Manton <younes.m@gmail.com>
Mon, 15 Mar 2010 04:03:04 +0000 (00:03 -0400)
The adjustment of nv30/nv40 after the removal of bypass incorrectly
removed the hardware viewport bypass code, which we still need for
swtnl and also forgot to remove NVFX_NEW_RAST from pipe.

src/gallium/drivers/nvfx/nvfx_state_viewport.c

index 72057a80f847c915a3191e4488a37f17171b4a2a..82e0e9220b080f53aa42eace400c57c928e2edd0 100644 (file)
@@ -13,16 +13,29 @@ nvfx_state_viewport_validate(struct nvfx_context *nvfx)
        so = so_new(2, 9, 0);
        so_method(so, nvfx->screen->eng3d,
                  NV34TCL_VIEWPORT_TRANSLATE_X, 8);
-       so_data  (so, fui(vpt->translate[0]));
-       so_data  (so, fui(vpt->translate[1]));
-       so_data  (so, fui(vpt->translate[2]));
-       so_data  (so, fui(vpt->translate[3]));
-       so_data  (so, fui(vpt->scale[0]));
-       so_data  (so, fui(vpt->scale[1]));
-       so_data  (so, fui(vpt->scale[2]));
-       so_data  (so, fui(vpt->scale[3]));
-       so_method(so, nvfx->screen->eng3d, 0x1d78, 1);
-       so_data  (so, 1);
+       if(nvfx->render_mode == HW) {
+               so_data  (so, fui(vpt->translate[0]));
+               so_data  (so, fui(vpt->translate[1]));
+               so_data  (so, fui(vpt->translate[2]));
+               so_data  (so, fui(vpt->translate[3]));
+               so_data  (so, fui(vpt->scale[0]));
+               so_data  (so, fui(vpt->scale[1]));
+               so_data  (so, fui(vpt->scale[2]));
+               so_data  (so, fui(vpt->scale[3]));
+               so_method(so, nvfx->screen->eng3d, 0x1d78, 1);
+               so_data  (so, 1);
+       } else {
+               so_data  (so, fui(0.0f));
+               so_data  (so, fui(0.0f));
+               so_data  (so, fui(0.0f));
+               so_data  (so, fui(0.0f));
+               so_data  (so, fui(1.0f));
+               so_data  (so, fui(1.0f));
+               so_data  (so, fui(1.0f));
+               so_data  (so, fui(1.0f));
+               so_method(so, nvfx->screen->eng3d, 0x1d78, 1);
+               so_data  (so, nvfx->is_nv4x ? 0x110 : 1);
+       }
 
        so_ref(so, &nvfx->state.hw[NVFX_STATE_VIEWPORT]);
        so_ref(NULL, &so);
@@ -32,7 +45,7 @@ nvfx_state_viewport_validate(struct nvfx_context *nvfx)
 struct nvfx_state_entry nvfx_state_viewport = {
        .validate = nvfx_state_viewport_validate,
        .dirty = {
-               .pipe = NVFX_NEW_VIEWPORT | NVFX_NEW_RAST,
+               .pipe = NVFX_NEW_VIEWPORT,
                .hw = NVFX_STATE_VIEWPORT
        }
 };