]> git.cworth.org Git - apitrace/blobdiff - gui/apitracecall.cpp
Preserve both D3D9 shader byte code, and disassembly.
[apitrace] / gui / apitracecall.cpp
index 57d2d86eb23c48bc37f75bdbbc69c9ab7a5dc197..907e10aa08294fc878549708a92e074fc9eb2681 100644 (file)
@@ -227,6 +227,12 @@ void VariantVisitor::visit(trace::Pointer *ptr)
     m_variant = QVariant::fromValue(ApiPointer(ptr->value));
 }
 
+void VariantVisitor::visit(trace::Repr *repr)
+{
+    /* TODO: Preserve both the human and machine value */
+    repr->humanValue->visit(*this);
+}
+
 ApiTraceEnumSignature::ApiTraceEnumSignature(const trace::EnumSig *sig)
 {
     for (const trace::EnumValue *it = sig->values;
@@ -336,7 +342,6 @@ void ApiBitmask::init(const trace::Bitmask *bitmask)
     m_value = bitmask->value;
     for (const trace::BitmaskFlag *it = bitmask->sig->flags;
          it != bitmask->sig->flags + bitmask->sig->num_flags; ++it) {
-        assert(it->value);
         QPair<QString, unsigned long long> pair;
 
         pair.first = QString::fromStdString(it->name);
@@ -351,10 +356,10 @@ QString ApiBitmask::toString() const
     QString str;
     unsigned long long value = m_value;
     bool first = true;
-    for (Signature::const_iterator it = m_sig.begin();
-         value != 0 && it != m_sig.end(); ++it) {
-        Q_ASSERT(it->second);
-        if ((value & it->second) == it->second) {
+    for (Signature::const_iterator it = m_sig.begin(); it != m_sig.end(); ++it) {
+        Q_ASSERT(it->second || first);
+        if ((it->second && (value & it->second) == it->second) ||
+            (!it->second && value == 0)) {
             if (!first) {
                 str += QLatin1String(" | ");
             }
@@ -362,6 +367,9 @@ QString ApiBitmask::toString() const
             value &= ~it->second;
             first = false;
         }
+        if (value == 0) {
+            break;
+        }
     }
     if (value || first) {
         if (!first) {
@@ -678,9 +686,9 @@ ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame,
     }
     m_argValues.reserve(call->args.size());
     for (int i = 0; i < call->args.size(); ++i) {
-        if (call->args[i]) {
+        if (call->args[i].value) {
             VariantVisitor argVisitor(loader);
-            call->args[i]->visit(argVisitor);
+            call->args[i].value->visit(argVisitor);
             m_argValues.append(argVisitor.variant());
             if (m_argValues[i].type() == QVariant::ByteArray) {
                 m_hasBinaryData = true;
@@ -1197,3 +1205,13 @@ unsigned ApiTraceFrame::lastCallIndex() const
         return m_lastCallIndex;
     }
 }
+
+void ApiTraceFrame::setThumbnail(const QImage & thumbnail)
+{
+    m_thumbnail = thumbnail;
+}
+
+const QImage & ApiTraceFrame::thumbnail() const
+{
+    return m_thumbnail;
+}