X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=cli%2Fcli_trim.cpp;fp=cli%2Fcli_trim.cpp;h=6820b0072bd09fde4aabc94196d779cd06b846e7;hb=ef7f2c0a097da22b1c49273e443580b4fab7601b;hp=45934e0b166840b29653d0460177ad8f292cf75b;hpb=81bda5afcccf41002128b2095442fe838d395969;p=apitrace 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) {}