]> git.cworth.org Git - apitrace/commitdiff
Determine core32 from the traces.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 19 Oct 2012 14:39:49 +0000 (15:39 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 19 Oct 2012 14:39:49 +0000 (15:39 +0100)
retrace/glretrace.hpp
retrace/glretrace_cgl.cpp
retrace/glretrace_glx.cpp
retrace/glretrace_ws.cpp

index 7729ec50a66303047136631745d22b0e34978cbb..f058d8deaaf94731b889b8c9e5781824ba5ca464 100644 (file)
@@ -63,6 +63,11 @@ extern bool insideGlBeginEnd;
 extern glws::Drawable *currentDrawable;
 extern Context *currentContext;
 
+
+int
+parseAttrib(const trace::Value *attribs, int param, int default_);
+
+
 glws::Drawable *
 createDrawable(glws::Profile profile);
 
index 8ae0e3e8b16a1393bb41140a091fde95fd3598e2..1cdbcd4f51a07280517134fe479969812bef7cad 100644 (file)
 #include "glretrace.hpp"
 
 
+#define kCGLPFAAllRenderers            1
+#define kCGLPFADoubleBuffer            5
+#define kCGLPFAStereo                  6
+#define kCGLPFAAuxBuffers              7
+#define kCGLPFAColorSize               8
+#define kCGLPFAAlphaSize              11
+#define kCGLPFADepthSize              12
+#define kCGLPFAStencilSize            13
+#define kCGLPFAAccumSize              14
+#define kCGLPFAMinimumPolicy          51
+#define kCGLPFAMaximumPolicy          52
+#define kCGLPFAOffScreen              53
+#define kCGLPFAFullScreen             54
+#define kCGLPFASampleBuffers          55
+#define kCGLPFASamples                56
+#define kCGLPFAAuxDepthStencil        57
+#define kCGLPFAColorFloat             58
+#define kCGLPFAMultisample            59
+#define kCGLPFASupersample            60
+#define kCGLPFASampleAlpha            61
+#define kCGLPFARendererID             70
+#define kCGLPFASingleRenderer         71
+#define kCGLPFANoRecovery             72
+#define kCGLPFAAccelerated            73
+#define kCGLPFAClosestPolicy          74
+#define kCGLPFARobust                 75
+#define kCGLPFABackingStore           76
+#define kCGLPFAMPSafe                 78
+#define kCGLPFAWindow                 80
+#define kCGLPFAMultiScreen            81
+#define kCGLPFACompliant              83
+#define kCGLPFADisplayMask            84
+#define kCGLPFAPBuffer                90
+#define kCGLPFARemotePBuffer          91
+#define kCGLPFAAllowOfflineRenderers  96
+#define kCGLPFAAcceleratedCompute     97
+#define kCGLPFAOpenGLProfile          99
+#define kCGLPFAVirtualScreenCount    128
+
+#define kCGLOGLPVersion_Legacy   0x1000
+#define kCGLOGLPVersion_3_2_Core 0x3200
+
+
 using namespace glretrace;
 
 
@@ -80,6 +123,19 @@ getContext(unsigned long long ctx) {
     return it->second;
 }
 
+
+static void retrace_CGLChoosePixelFormat(trace::Call &call) {
+    trace::Value *attribs = &call.arg(0);
+
+    int profile = glretrace::parseAttrib(attribs, kCGLPFAOpenGLProfile, kCGLOGLPVersion_Legacy);
+
+    if (profile == kCGLOGLPVersion_3_2_Core) {
+        // TODO: Do this on a per visual basis
+        retrace::coreProfile = true;
+    }
+}
+
+
 static void retrace_CGLCreateContext(trace::Call &call) {
     unsigned long long share = call.arg(1).toUIntPtr();
     Context *sharedContext = getContext(share);
@@ -185,7 +241,7 @@ static void retrace_CGLTexImageIOSurface2D(trace::Call &call) {
 
 
 const retrace::Entry glretrace::cgl_callbacks[] = {
-    {"CGLChoosePixelFormat", &retrace::ignore},
+    {"CGLChoosePixelFormat", &retrace_CGLChoosePixelFormat},
     {"CGLDestroyPixelFormat", &retrace::ignore},
     {"CGLCreateContext", &retrace_CGLCreateContext},
     {"CGLDestroyContext", &retrace_CGLDestroyContext},
index 6ff17d8cb995592278ecdfaff0cdae2e0b877371..918940f06d5e27c4a6e196279a119dc0fe41304f 100644 (file)
@@ -129,29 +129,9 @@ static void retrace_glXCreateNewContext(trace::Call &call) {
 }
 
 static void retrace_glXCreatePbuffer(trace::Call &call) {
-    int width = 0;
-    int height = 0;
-
-    const trace::Array *attrib_list = dynamic_cast<const trace::Array *>(&call.arg(2));
-    if (attrib_list) {
-        for (size_t i = 0; i + 1 < attrib_list->values.size(); i += 2) {
-            int param = attrib_list->values[i]->toSInt();
-            if (param == 0) {
-                break;
-            }
-
-            int value = attrib_list->values[i + 1]->toSInt();
-
-            switch (param) {
-            case GLX_PBUFFER_WIDTH:
-                width = value;
-                break;
-            case GLX_PBUFFER_HEIGHT:
-                height = value;
-                break;
-            }
-        }
-    }
+    const trace::Value *attrib_list = dynamic_cast<const trace::Array *>(&call.arg(2));
+    int width = glretrace::parseAttrib(attrib_list, GLX_PBUFFER_WIDTH, 0);
+    int height = glretrace::parseAttrib(attrib_list, GLX_PBUFFER_HEIGHT, 0);
 
     unsigned long long orig_drawable = call.ret->toUInt();
 
index ccc70233a73a5b7427148732205f39cff7e51bad..97762eda10edb41a77091b9a3fc81dd8458cf6f8 100644 (file)
@@ -188,4 +188,26 @@ updateDrawable(int width, int height) {
 }
 
 
+int
+parseAttrib(const trace::Value *attribs, int param, int default_ = 0) {
+    const trace::Array *attribs_ = dynamic_cast<const trace::Array *>(attribs);
+
+    if (attribs_) {
+        for (size_t i = 0; i + 1 < attribs_->values.size(); i += 2) {
+            int param_i = attribs_->values[i]->toSInt();
+            if (param_i == 0) {
+                break;
+            }
+
+            if (param_i == param) {
+                int value = attribs_->values[i + 1]->toSInt();
+                return value;
+            }
+        }
+    }
+
+    return default_;
+}
+
+
 } /* namespace glretrace */