summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLuca Barbieri <luca@luca-barbieri.com>2010-02-23 15:05:54 +0100
committerLuca Barbieri <luca@luca-barbieri.com>2010-04-12 12:13:16 +0200
commit5c89cb0f6cfe30d5b15a57179ad16c0f209ff47e (patch)
tree47e54cb18376a19a7060186a3b7fbb79c7da022e /src
parent6558797f99b7ac9b6247d4fcfd5b926eff32d1a4 (diff)
downloadexternal_mesa3d-5c89cb0f6cfe30d5b15a57179ad16c0f209ff47e.zip
external_mesa3d-5c89cb0f6cfe30d5b15a57179ad16c0f209ff47e.tar.gz
external_mesa3d-5c89cb0f6cfe30d5b15a57179ad16c0f209ff47e.tar.bz2
nvfx: so->RING_3D: scissor
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/nvfx/nvfx_context.c2
-rw-r--r--src/gallium/drivers/nvfx/nvfx_state_scissor.c21
2 files changed, 10 insertions, 13 deletions
diff --git a/src/gallium/drivers/nvfx/nvfx_context.c b/src/gallium/drivers/nvfx/nvfx_context.c
index 31c3e2b..eabf9ae 100644
--- a/src/gallium/drivers/nvfx/nvfx_context.c
+++ b/src/gallium/drivers/nvfx/nvfx_context.c
@@ -83,5 +83,7 @@ nvfx_create(struct pipe_screen *pscreen, void *priv)
draw_enable_point_sprites(nvfx->draw, FALSE);
draw_set_rasterize_stage(nvfx->draw, nvfx_draw_render_stage(nvfx));
+ /* set these to that we init them on first validation */
+ nvfx->state.scissor_enabled = ~0;
return &nvfx->pipe;
}
diff --git a/src/gallium/drivers/nvfx/nvfx_state_scissor.c b/src/gallium/drivers/nvfx/nvfx_state_scissor.c
index 940d8cb..dd6ae75 100644
--- a/src/gallium/drivers/nvfx/nvfx_state_scissor.c
+++ b/src/gallium/drivers/nvfx/nvfx_state_scissor.c
@@ -3,27 +3,23 @@
static boolean
nvfx_state_scissor_validate(struct nvfx_context *nvfx)
{
+ struct nouveau_channel *chan = nvfx->screen->base.channel;
struct pipe_rasterizer_state *rast = &nvfx->rasterizer->pipe;
struct pipe_scissor_state *s = &nvfx->scissor;
- struct nouveau_stateobj *so;
- if (nvfx->state.hw[NVFX_STATE_SCISSOR] &&
- (rast->scissor == 0 && nvfx->state.scissor_enabled == 0))
+ if ((rast->scissor == 0 && nvfx->state.scissor_enabled == 0))
return FALSE;
nvfx->state.scissor_enabled = rast->scissor;
- so = so_new(1, 2, 0);
- so_method(so, nvfx->screen->eng3d, NV34TCL_SCISSOR_HORIZ, 2);
+ WAIT_RING(chan, 3);
+ OUT_RING(chan, RING_3D(NV34TCL_SCISSOR_HORIZ, 2));
if (nvfx->state.scissor_enabled) {
- so_data (so, ((s->maxx - s->minx) << 16) | s->minx);
- so_data (so, ((s->maxy - s->miny) << 16) | s->miny);
+ OUT_RING(chan, ((s->maxx - s->minx) << 16) | s->minx);
+ OUT_RING(chan, ((s->maxy - s->miny) << 16) | s->miny);
} else {
- so_data (so, 4096 << 16);
- so_data (so, 4096 << 16);
+ OUT_RING(chan, 4096 << 16);
+ OUT_RING(chan, 4096 << 16);
}
-
- so_ref(so, &nvfx->state.hw[NVFX_STATE_SCISSOR]);
- so_ref(NULL, &so);
return TRUE;
}
@@ -31,6 +27,5 @@ struct nvfx_state_entry nvfx_state_scissor = {
.validate = nvfx_state_scissor_validate,
.dirty = {
.pipe = NVFX_NEW_SCISSOR | NVFX_NEW_RAST,
- .hw = NVFX_STATE_SCISSOR
}
};