summaryrefslogtreecommitdiff
path: root/src/mesa/main/dlist.c
diff options
context:
space:
mode:
authorKeith Whitwell <keithw@vmware.com>2009-06-30 17:10:56 +0100
committerKeith Whitwell <keithw@vmware.com>2009-06-30 17:10:56 +0100
commitd6c2347d79c50ac18eab96378d79d989f3ffd0b7 (patch)
tree6ef616fe65051c4484c02a42df43818644368e0c /src/mesa/main/dlist.c
parent09a3a28fc8f1ed931304bf27a56fe72768d7861e (diff)
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.
Diffstat (limited to 'src/mesa/main/dlist.c')
-rw-r--r--src/mesa/main/dlist.c6
1 files changed, 5 insertions, 1 deletions
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) {