]> git.cworth.org Git - apitrace/blobdiff - cli/cli_trim.cpp
trim: Never trim any glBindTexture calls.
[apitrace] / cli / cli_trim.cpp
index 6820b0072bd09fde4aabc94196d779cd06b846e7..f7bc92bacaee63d9fb7fea32e3e8a4bb1e03f54b 100644 (file)
@@ -401,6 +401,15 @@ class TraceAnalyzer {
          * lists. */
         if (insideNewEndList != 0) {
             provide("state", call->no);
+
+            /* Also, any texture bound inside a display list is
+             * conservatively considered required. */
+            if (strcmp(name, "glBindTexture") == 0) {
+                GLuint texture = call->arg(1).toUInt();
+
+                linkf("state", "texture-", texture);
+            }
+
             return;
         }
 
@@ -447,6 +456,20 @@ class TraceAnalyzer {
             unlinkAll(ss_target.str());
             link(ss_target.str(), ss_texture.str());
 
+            /* FIXME: This really shouldn't be necessary. The effect
+             * this provide() has is that all glBindTexture calls will
+             * be preserved in the output trace (never trimmed). Carl
+             * has a trace ("btr") where a glBindTexture call should
+             * not be necessary at all, (it's immediately followed
+             * with a glBindTexture to a different texture and no
+             * intervening texture-related calls), yet this 'provide'
+             * makes the difference between a trim_stress test failing
+             * and passing.
+             *
+             * More investigation is necessary, but for now, be
+             * conservative and don't trim. */
+            provide("state", call->no);
+
             return;
         }