From d6c2347d79c50ac18eab96378d79d989f3ffd0b7 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Tue, 30 Jun 2009 17:10:56 +0100 Subject: mesa/dlist: don't cache state which may not be replayed on CallList Statechanges which occur before the first End in a display list may not be replayed when the list is called, in particular if it is called from within a begin/end pair. Recognize vulnerable statechanges and do not use them to fill in the state cache. --- src/mesa/main/dlist.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/mesa/main') diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index 3e8b5a9424..2af0dd3c59 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -3203,7 +3203,11 @@ save_ShadeModel(GLenum mode) return; SAVE_FLUSH_VERTICES(ctx); - ctx->ListState.Current.ShadeModel = mode; + + /* Only save the value if we know the statechange will take effect: + */ + if (ctx->Driver.CurrentSavePrimitive == PRIM_OUTSIDE_BEGIN_END) + ctx->ListState.Current.ShadeModel = mode; n = ALLOC_INSTRUCTION(ctx, OPCODE_SHADE_MODEL, 1); if (n) { -- cgit v1.2.3