nvfx: fix/workaround nv3x hwtnl issues
authorLuca Barbieri <luca@luca-barbieri.com>
Wed, 17 Mar 2010 14:44:45 +0000 (15:44 +0100)
committerLuca Barbieri <luca@luca-barbieri.com>
Tue, 23 Mar 2010 14:40:34 +0000 (15:40 +0100)
This patch re-emits the viewport state on framebuffer or rasterizer
change.

This seems to be necessary on nv3x, but the reason is not fully
understood.

It is quite likely that this isn't really the correct fix, but seems
to work, and makes nv3x much better.

src/gallium/drivers/nvfx/nvfx_state_viewport.c

index 82e0e9220b080f53aa42eace400c57c928e2edd0..ec730e3a9e982cd6bbcdba967e6898f62459e5dc 100644 (file)
@@ -1,15 +1,16 @@
 #include "nvfx_context.h"
 
+/* Having this depend on FB and RAST looks wrong, but it seems
+   necessary to make this work on nv3x
+   TODO: find the right fix
+*/
+
 static boolean
 nvfx_state_viewport_validate(struct nvfx_context *nvfx)
 {
        struct pipe_viewport_state *vpt = &nvfx->viewport;
        struct nouveau_stateobj *so;
 
-       if (nvfx->state.hw[NVFX_STATE_VIEWPORT] &&
-           !(nvfx->dirty & NVFX_NEW_VIEWPORT))
-               return FALSE;
-
        so = so_new(2, 9, 0);
        so_method(so, nvfx->screen->eng3d,
                  NV34TCL_VIEWPORT_TRANSLATE_X, 8);
@@ -45,7 +46,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,
+               .pipe = NVFX_NEW_VIEWPORT | NVFX_NEW_FB | NVFX_NEW_RAST,
                .hw = NVFX_STATE_VIEWPORT
        }
 };