From: Carl Worth Date: Fri, 17 Aug 2012 01:29:43 +0000 (-0700) Subject: trim: Add support for display lists. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=ef7f2c0a097da22b1c49273e443580b4fab7601b;p=apitrace trim: Add support for display lists. The calls specified between glNewList and glEndList need to have special treatment. For now we do the simplest thing and unconditionally include all such calls in the trim output. Eventually we will want to track display-list resources similar to textures and trim away unused display lists. --- diff --git a/cli/cli_trim.cpp b/cli/cli_trim.cpp index 45934e0..6820b00 100644 --- a/cli/cli_trim.cpp +++ b/cli/cli_trim.cpp @@ -173,6 +173,7 @@ class TraceAnalyzer { bool transformFeedbackActive; bool framebufferObjectActive; bool insideBeginEnd; + GLuint insideNewEndList; GLuint activeProgram; GLenum activeTextureUnit; @@ -345,6 +346,12 @@ class TraceAnalyzer { } return; } + + if (strcmp(name, "glNewList") == 0) { + GLuint list = call->arg(0).toUInt(); + + insideNewEndList = list; + } } void stateTrackPostCall(trace::Call *call) { @@ -371,12 +378,32 @@ class TraceAnalyzer { resources.erase("framebuffer"); return; } + + if (strcmp(name, "glEndList") == 0) { + insideNewEndList = 0; + } } void recordSideEffects(trace::Call *call) { const char *name = call->name(); + /* Handle display lists before any other processing. */ + + /* FIXME: If we encode the list of commands that are executed + * immediately (as opposed to those that are compiled into a + * display list) then we could generate a "display-list-X" + * resource just as we do for "texture-X" resources and only + * emit it in the trace if a glCallList(X) is emitted. For + * now, simply punt and include anything within glNewList and + * glEndList in the trim output. This guarantees that display + * lists will work, but does not trim out unused display + * lists. */ + if (insideNewEndList != 0) { + provide("state", call->no); + return; + } + /* If call is flagged as no side effects, then we are done here. */ if (call->flags & trace::CALL_FLAG_NO_SIDE_EFFECTS) { return; @@ -718,6 +745,7 @@ public: TraceAnalyzer(): transformFeedbackActive(false), framebufferObjectActive(false), insideBeginEnd(false), + insideNewEndList(0), activeTextureUnit(GL_TEXTURE0) {}