Mesa (master): nv50: avoid a NULL-ptr dereference when the pipe context changes

Maarten Maathuis madman2003 at kemper.freedesktop.org
Sat Aug 15 14:58:34 UTC 2009


Module: Mesa
Branch: master
Commit: a7adb858278ee2311e014ca2d7bb56656cbd7aa7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a7adb858278ee2311e014ca2d7bb56656cbd7aa7

Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Fri Aug 14 22:25:04 2009 +0200

nv50: avoid a NULL-ptr dereference when the pipe context changes

- We cannot assume all state objects are present when the pipe context changes.

---

 src/gallium/drivers/nv50/nv50_state_validate.c |   27 +++++++++++++++++++++++-
 1 files changed, 26 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_state_validate.c b/src/gallium/drivers/nv50/nv50_state_validate.c
index 42ecf05..633be78 100644
--- a/src/gallium/drivers/nv50/nv50_state_validate.c
+++ b/src/gallium/drivers/nv50/nv50_state_validate.c
@@ -148,7 +148,32 @@ nv50_state_emit(struct nv50_context *nv50)
 	struct nouveau_channel *chan = screen->base.channel;
 
 	if (nv50->pctx_id != screen->cur_pctx) {
-		nv50->state.dirty |= 0xffffffff;
+		if (nv50->state.fb)
+			nv50->state.dirty |= NV50_NEW_FRAMEBUFFER;
+		if (nv50->state.blend)
+			nv50->state.dirty |= NV50_NEW_BLEND;
+		if (nv50->state.zsa)
+			nv50->state.dirty |= NV50_NEW_ZSA;
+		if (nv50->state.vertprog)
+			nv50->state.dirty |= NV50_NEW_VERTPROG;
+		if (nv50->state.fragprog)
+			nv50->state.dirty |= NV50_NEW_FRAGPROG;
+		if (nv50->state.rast)
+			nv50->state.dirty |= NV50_NEW_RASTERIZER;
+		if (nv50->state.blend_colour)
+			nv50->state.dirty |= NV50_NEW_BLEND_COLOUR;
+		if (nv50->state.stipple)
+			nv50->state.dirty |= NV50_NEW_STIPPLE;
+		if (nv50->state.scissor)
+			nv50->state.dirty |= NV50_NEW_SCISSOR;
+		if (nv50->state.viewport)
+			nv50->state.dirty |= NV50_NEW_VIEWPORT;
+		if (nv50->state.tsc_upload)
+			nv50->state.dirty |= NV50_NEW_SAMPLER;
+		if (nv50->state.tic_upload)
+			nv50->state.dirty |= NV50_NEW_TEXTURE;
+		if (nv50->state.vtxfmt && nv50->state.vtxbuf)
+			nv50->state.dirty |= NV50_NEW_ARRAYS;
 		screen->cur_pctx = nv50->pctx_id;
 	}
 




More information about the mesa-commit mailing list