{
struct nouveau_pushbuf *push = nv30->base.pushbuf;
struct pipe_scissor_state *s = &nv30->scissor;
+ bool rast_scissor = nv30->rast ? nv30->rast->pipe.scissor : false;
if (!(nv30->dirty & NV30_NEW_SCISSOR) &&
- nv30->rast->pipe.scissor != nv30->state.scissor_off)
+ rast_scissor != nv30->state.scissor_off)
return;
- nv30->state.scissor_off = !nv30->rast->pipe.scissor;
+ nv30->state.scissor_off = !rast_scissor;
BEGIN_NV04(push, NV30_3D(SCISSOR_HORIZ), 2);
- if (nv30->rast->pipe.scissor) {
+ if (rast_scissor) {
PUSH_DATA (push, ((s->maxx - s->minx) << 16) | s->minx);
PUSH_DATA (push, ((s->maxy - s->miny) << 16) | s->miny);
} else {
struct nv30_fragprog *fp = nv30->fragprog.program;
BEGIN_NV04(push, NV30_3D(RT_ENABLE), 1);
- PUSH_DATA (push, nv30->state.rt_enable & ~fp->rt_enable);
+ PUSH_DATA (push, nv30->state.rt_enable & (fp ? ~fp->rt_enable : 0x1f));
BEGIN_NV04(push, NV30_3D(COORD_CONVENTIONS), 1);
- PUSH_DATA (push, fp->coord_conventions | nv30->framebuffer.height);
+ PUSH_DATA (push, (fp ? fp->coord_conventions : 0) | nv30->framebuffer.height);
}
static void