nvfx: fix/workaround nv3x hwtnl issues

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.
This commit is contained in:
Luca Barbieri 2010-03-17 15:44:45 +01:00
parent 3e17a5b047
commit c652ad907f

View 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
}
};