summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlia Mirkin <[email protected]>2017-04-02 10:57:39 -0400
committerIlia Mirkin <[email protected]>2017-04-02 11:03:00 -0400
commitcb518f2fb2bfac2535f3299f18daf9e2487aef32 (patch)
treee7ac137428a4a0d355ea7e124239eb056e3689ee
parent1184fba86ef82831896f8550546b888f0cd0f60e (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.c11
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