summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/nv40/nv40_state_scissor.c
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@gmail.com>2008-02-18 16:38:27 +1100
committerBen Skeggs <skeggsb@gmail.com>2008-02-18 16:38:27 +1100
commit56045da083d6530a56a2a7585e3121df0b07bac4 (patch)
treef24d0bd5ccf46a837d8f1e013eca7ac51e97b62e /src/gallium/drivers/nv40/nv40_state_scissor.c
parent112ba3355a3fa53768efb9a9fb0eeb677bd28d47 (diff)
nv40: move some things around
Diffstat (limited to 'src/gallium/drivers/nv40/nv40_state_scissor.c')
-rw-r--r--src/gallium/drivers/nv40/nv40_state_scissor.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/gallium/drivers/nv40/nv40_state_scissor.c b/src/gallium/drivers/nv40/nv40_state_scissor.c
new file mode 100644
index 0000000000..556b820e58
--- /dev/null
+++ b/src/gallium/drivers/nv40/nv40_state_scissor.c
@@ -0,0 +1,35 @@
+#include "nv40_context.h"
+
+static boolean
+nv40_state_scissor_validate(struct nv40_context *nv40)
+{
+ struct pipe_rasterizer_state *rast = &nv40->rasterizer->pipe;
+ struct pipe_scissor_state *s = &nv40->pipe_state.scissor;
+ struct nouveau_stateobj *so;
+
+ if (nv40->state.scissor.so &&
+ (rast->scissor == 0 && nv40->state.scissor.enabled == 0))
+ return FALSE;
+
+ so = so_new(3, 0);
+ so_method(so, nv40->hw->curie, NV40TCL_SCISSOR_HORIZ, 2);
+ if (rast->scissor) {
+ so_data (so, ((s->maxx - s->minx) << 16) | s->minx);
+ so_data (so, ((s->maxy - s->miny) << 16) | s->miny);
+ } else {
+ so_data (so, 4096 << 16);
+ so_data (so, 4096 << 16);
+ }
+
+ so_ref(so, &nv40->state.scissor.so);
+ so_ref(NULL, &so);
+ return TRUE;
+}
+
+struct nv40_state_entry nv40_state_scissor = {
+ .validate = nv40_state_scissor_validate,
+ .dirty = {
+ .pipe = NV40_NEW_SCISSOR | NV40_NEW_RAST,
+ .hw = NV40_NEW_SCISSOR
+ }
+};