summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/nvfx/nvfx_state_viewport.c
diff options
context:
space:
mode:
authorLuca Barbieri <luca@luca-barbieri.com>2010-02-20 23:30:59 +0100
committerYounes Manton <younes.m@gmail.com>2010-03-15 00:03:02 -0400
commit4d93ef1a015c8ec7341b0793e87ec375014436b3 (patch)
treee7fb2d8a0fa6562064b5c901a71835efcb4d5bb7 /src/gallium/drivers/nvfx/nvfx_state_viewport.c
parent9937116c7b15468088a224da478d927347a76f32 (diff)
nv30, nv40: unify nv[34]0_state_viewport.c
The files are identical, except for an extra comment in nv30.
Diffstat (limited to 'src/gallium/drivers/nvfx/nvfx_state_viewport.c')
-rw-r--r--src/gallium/drivers/nvfx/nvfx_state_viewport.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/gallium/drivers/nvfx/nvfx_state_viewport.c b/src/gallium/drivers/nvfx/nvfx_state_viewport.c
new file mode 100644
index 0000000000..72057a80f8
--- /dev/null
+++ b/src/gallium/drivers/nvfx/nvfx_state_viewport.c
@@ -0,0 +1,38 @@
+#include "nvfx_context.h"
+
+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);
+ 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);
+
+ so_ref(so, &nvfx->state.hw[NVFX_STATE_VIEWPORT]);
+ so_ref(NULL, &so);
+ return TRUE;
+}
+
+struct nvfx_state_entry nvfx_state_viewport = {
+ .validate = nvfx_state_viewport_validate,
+ .dirty = {
+ .pipe = NVFX_NEW_VIEWPORT | NVFX_NEW_RAST,
+ .hw = NVFX_STATE_VIEWPORT
+ }
+};