diff options
author | Ilia Mirkin <[email protected]> | 2017-04-02 10:57:39 -0400 |
---|---|---|
committer | Ilia Mirkin <[email protected]> | 2017-04-02 11:03:00 -0400 |
commit | cb518f2fb2bfac2535f3299f18daf9e2487aef32 (patch) | |
tree | e7ac137428a4a0d355ea7e124239eb056e3689ee | |
parent | 1184fba86ef82831896f8550546b888f0cd0f60e (diff) |
nv30: fp/rast may be null when validating fb/scissor due to clear
Signed-off-by: Ilia Mirkin <[email protected]>
-rw-r--r-- | src/gallium/drivers/nouveau/nv30/nv30_state_validate.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_state_validate.c b/src/gallium/drivers/nouveau/nv30/nv30_state_validate.c index f6acd246dad..4ed94e0b4e4 100644 --- a/src/gallium/drivers/nouveau/nv30/nv30_state_validate.c +++ b/src/gallium/drivers/nouveau/nv30/nv30_state_validate.c @@ -225,14 +225,15 @@ nv30_validate_scissor(struct nv30_context *nv30) { 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 { @@ -344,9 +345,9 @@ nv30_validate_fragment(struct nv30_context *nv30) 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 |