[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

apitrace: Changes to 'upstream'



 .dir-locals.el                            |   10 
 .emacs-dirvars                            |   14 
 .gitignore                                |    6 
 BUGS.markdown                             |   84 
 CMakeLists.txt                            |  377 
 DEVELOPMENT.markdown                      |   80 
 INSTALL.markdown                          |   13 
 NEWS.markdown                             |    8 
 README.markdown                           |  137 
 TODO.markdown                             |   80 
 cgltrace.py                               |   70 
 cli/CMakeLists.txt                        |   18 
 cli/cli.hpp                               |   52 
 cli/cli_diff.cpp                          |  109 
 cli/cli_diff_images.cpp                   |   90 
 cli/cli_diff_state.cpp                    |  102 
 cli/cli_dump.cpp                          |  206 
 cli/cli_main.cpp                          |  191 
 cli/cli_pager.cpp                         |  154 
 cli/cli_pager.hpp                         |   35 
 cli/cli_pickle.cpp                        |  219 
 cli/cli_repack.cpp                        |  116 
 cli/cli_trace.cpp                         |  121 
 cli/cli_trim.cpp                          |  130 
 common/formatter.hpp                      |   38 
 common/image.cpp                          |   24 
 common/image.hpp                          |    4 
 common/image_bmp.cpp                      |    4 
 common/image_png.cpp                      |    4 
 common/image_pnm.cpp                      |    4 
 common/json.hpp                           |    5 
 common/os.hpp                             |   32 
 common/os_binary.hpp                      |   60 
 common/os_posix.cpp                       |  188 
 common/os_process.hpp                     |   45 
 common/os_string.hpp                      |  343 
 common/os_thread.hpp                      |  163 
 common/os_time.hpp                        |   85 
 common/os_win32.cpp                       |  265 
 common/pickle.hpp                         |  310 
 common/trace_api.hpp                      |   46 
 common/trace_callset.cpp                  |  247 
 common/trace_callset.hpp                  |  167 
 common/trace_dump.cpp                     |  263 
 common/trace_dump.hpp                     |   73 
 common/trace_file.cpp                     |  130 
 common/trace_file.hpp                     |   36 
 common/trace_file_read.cpp                |   59 
 common/trace_file_snappy.cpp              |  423 +
 common/trace_file_write.cpp               |   50 
 common/trace_file_zlib.cpp                |  167 
 common/trace_format.hpp                   |   60 
 common/trace_loader.cpp                   |   30 
 common/trace_loader.hpp                   |   14 
 common/trace_local_writer.cpp             |  158 
 common/trace_lookup.hpp                   |  111 
 common/trace_model.cpp                    |  202 
 common/trace_model.hpp                    |  156 
 common/trace_model_writer.cpp             |  127 
 common/trace_parser.cpp                   |  251 
 common/trace_parser.hpp                   |   23 
 common/trace_parser_flags.cpp             |  165 
 common/trace_resource.cpp                 |  114 
 common/trace_resource.hpp                 |   50 
 common/trace_snappyfile.cpp               |  338 
 common/trace_snappyfile.hpp               |  106 
 common/trace_tools.hpp                    |   48 
 common/trace_tools_trace.cpp              |  142 
 common/trace_writer.cpp                   |   67 
 common/trace_writer.hpp                   |   43 
 common/trace_writer_local.cpp             |  196 
 common/trace_writer_local.hpp             |   87 
 common/trace_writer_model.cpp             |  131 
 compat.h                                  |   26 
 d3d10trace.py                             |    6 
 d3d8trace.py                              |   12 
 d3d9imports.hpp                           |    4 
 d3d9trace.py                              |   53 
 d3dshader.cpp                             |    2 
 d3dshader.hpp                             |    2 
 ddrawtrace.py                             |   14 
 dispatch.py                               |   29 
 dlltrace.py                               |   69 
 eglimports.hpp                            |  126 
 egltrace.py                               |  190 
 glcaps.cpp                                |   16 
 glimports.hpp                             |   47 
 glproc.py                                 |  852 +-
 glproc_egl.cpp                            |  101 
 glproc_gl.cpp                             |  230 
 glretrace.hpp                             |   30 
 glretrace.py                              |  139 
 glretrace_cgl.cpp                         |   37 
 glretrace_egl.cpp                         |  274 
 glretrace_glx.cpp                         |   45 
 glretrace_main.cpp                        |  212 
 glretrace_wgl.cpp                         | 1168 ---
 glsize.hpp                                |  179 
 glsnapshot.cpp                            |  224 
 glsnapshot.hpp                            |   49 
 glstate.cpp                               |  149 
 glstate.hpp                               |    6 
 glstate.py                                |  121 
 gltrace.py                                |  283 
 glws.cpp                                  |   62 
 glws.hpp                                  |   87 
 glws_cocoa.mm                             |  270 
 glws_egl_xlib.cpp                         |  441 +
 glws_glx.cpp                              |  299 
 glws_wgl.cpp                              |  145 
 glxtrace.py                               |   94 
 gui/CMakeLists.txt                        |    2 
 gui/apisurface.cpp                        |   22 
 gui/apisurface.h                          |    8 
 gui/apitrace.cpp                          |   28 
 gui/apitrace.h                            |    2 
 gui/apitracecall.cpp                      |  147 
 gui/apitracecall.h                        |   60 
 gui/argumentseditor.cpp                   |  115 
 gui/argumentseditor.h                     |  115 
 gui/main.cpp                              |   38 
 gui/mainwindow.cpp                        |   24 
 gui/mainwindow.h                          |    6 
 gui/resources/glreference-man.sh          |    8 
 gui/resources/glreference-registry.sh     |   30 
 gui/resources/glreference.tsv             | 1269 +++
 gui/retracer.cpp                          |   57 
 gui/retracer.h                            |    9 
 gui/saverthread.cpp                       |   93 
 gui/settingsdialog.cpp                    |   11 
 gui/settingsdialog.h                      |    3 
 gui/traceloader.cpp                       |   28 
 gui/traceloader.h                         |   12 
 gui/traceprocess.cpp                      |   68 
 gui/ui/settings.ui                        |   23 
 retrace.cpp                               |   97 
 retrace.hpp                               |   61 
 retrace.py                                |  207 
 retrace_stdc.cpp                          |  238 
 scripts/highlight.py                      |    8 
 scripts/jsondiff.py                       |  163 
 scripts/retracediff.py                    |   46 
 scripts/snapdiff.py                       |   42 
 scripts/tracediff.sh                      |    6 
 scripts/tracerepack.py                    |   75 
 scripts/unpickle.py                       |   88 
 specs/cglapi.py                           |   21 
 specs/d3d.py                              |   52 
 specs/d3d10.py                            |  200 
 specs/d3d10misc.py                        |   30 
 specs/d3d8.py                             |   26 
 specs/d3d8types.py                        |    8 
 specs/d3d9.py                             |   58 
 specs/d3d9types.py                        |  644 -
 specs/d3dtypes.py                         |    4 
 specs/ddraw.py                            |    8 
 specs/dxgi.py                             |   74 
 specs/dxgiformat.py                       |   25 
 specs/dxgitype.py                         |    4 
 specs/eglapi.py                           |  397 +
 specs/glapi.py                            | 1216 +--
 specs/glesapi.py                          |  250 
 specs/glparams.py                         |   35 
 specs/gltypes.py                          |   45 
 specs/glxapi.py                           |   77 
 specs/scripts/README                      |   12 
 specs/scripts/README.markdown             |   54 
 specs/scripts/cdecl.py                    |   43 
 specs/scripts/glspec.py                   |   10 
 specs/scripts/gltxt.py                    |   93 
 specs/scripts/reference-opengl-arb.sh     |   30 
 specs/scripts/reference-opengl-man.sh     |    8 
 specs/stdapi.py                           |  349 
 specs/wglapi.py                           |   12 
 specs/winapi.py                           |   34 
 thirdparty/getopt/CMakeLists.txt          |    5 
 thirdparty/getopt/getopt.h                |   82 
 thirdparty/getopt/getopt_long.c           |  511 +
 thirdparty/glext/GL/Makefile              |   11 
 thirdparty/glext/GL/glext.h               |11490 ++++++++++++++++++++++++++++++
 thirdparty/glext/GL/glext.sed             |   19 
 thirdparty/glext/GL/glxext.h              |  993 ++
 thirdparty/glext/GL/wglext.h              |  929 ++
 thirdparty/glext/Makefile                 |    8 
 thirdparty/glext/glext.h                  |11488 -----------------------------
 thirdparty/glext/glxext.h                 |  993 --
 thirdparty/glext/wglext.h                 |  929 --
 thirdparty/khr/EGL/egl.h                  |  329 
 thirdparty/khr/EGL/eglext.h               |  335 
 thirdparty/khr/GLES/glext.h               | 1073 ++
 thirdparty/khr/GLES2/gl2ext.h             | 1138 ++
 thirdparty/snappy/.gitignore              |    1 
 thirdparty/snappy/CMakeLists.txt          |   29 
 thirdparty/snappy/ChangeLog               |  168 
 thirdparty/snappy/NEWS                    |   12 
 thirdparty/snappy/config.h                |  136 
 thirdparty/snappy/config.h.in             |  108 
 thirdparty/snappy/format_description.txt  |    8 
 thirdparty/snappy/snappy-stubs-internal.h |   42 
 thirdparty/snappy/snappy-stubs-public.h   |    2 
 thirdparty/snappy/snappy.cc               |   27 
 thirdparty/snappy/snappy_unittest.cc      |    8 
 thirdparty/zlib/CMakeLists.txt            |   20 
 thirdparty/zlib/ChangeLog                 |  355 
 thirdparty/zlib/README                    |   86 
 thirdparty/zlib/adler32.c                 |   38 
 thirdparty/zlib/compress.c                |    5 
 thirdparty/zlib/crc32.c                   |   35 
 thirdparty/zlib/deflate.c                 |  268 
 thirdparty/zlib/deflate.h                 |   35 
 thirdparty/zlib/example.c                 |    4 
 thirdparty/zlib/gzclose.c                 |   25 
 thirdparty/zlib/gzguts.h                  |  132 
 thirdparty/zlib/gzio.c                    | 1026 --
 thirdparty/zlib/gzlib.c                   |  537 +
 thirdparty/zlib/gzread.c                  |  659 +
 thirdparty/zlib/gzwrite.c                 |  531 +
 thirdparty/zlib/infback.c                 |   93 
 thirdparty/zlib/inffast.c                 |   80 
 thirdparty/zlib/inffast.h                 |    4 
 thirdparty/zlib/inflate.c                 |  282 
 thirdparty/zlib/inflate.h                 |   31 
 thirdparty/zlib/inftrees.c                |   63 
 thirdparty/zlib/inftrees.h                |   27 
 thirdparty/zlib/minigzip.c                |  134 
 thirdparty/zlib/trees.c                   |   93 
 thirdparty/zlib/trees.h                   |    4 
 thirdparty/zlib/uncompr.c                 |    4 
 thirdparty/zlib/zconf.h                   |  190 
 thirdparty/zlib/zlib.h                    | 1162 +--
 thirdparty/zlib/zutil.c                   |   32 
 thirdparty/zlib/zutil.h                   |   63 
 trace.py                                  |  598 -
 tracedump.cpp                             |   90 
 wgltrace.py                               |   37 
 235 files changed, 36802 insertions(+), 22212 deletions(-)

New commits:
commit d8ea58f1e7d2e0dd9cabd085eef6f8b227e88652
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Thu Feb 9 14:35:27 2012 +0000

    Allow to specify output file on retracediff

diff --git a/scripts/retracediff.py b/scripts/retracediff.py
index 3495975..ee5730a 100755
--- a/scripts/retracediff.py
+++ b/scripts/retracediff.py
@@ -80,16 +80,16 @@ class Setup:
         p.wait()
         return state.get('parameters', {})
 
-    def diff_state(self, ref_call_no, src_call_no):
+    def diff_state(self, ref_call_no, src_call_no, stream):
         '''Compare the state between two calls.'''
 
         ref_state = self.dump_state(ref_call_no)
         src_state = self.dump_state(src_call_no)
 
-        sys.stdout.flush()
-        differ = jsondiff.Differ(sys.stdout)
+        stream.flush()
+        differ = jsondiff.Differ(stream)
         differ.visit(ref_state, src_state)
-        sys.stdout.write('\n')
+        stream.write('\n')
 
 
 def read_pnm(stream):
@@ -159,6 +159,10 @@ def main():
         '-S', '--snapshot-frequency', metavar='CALLSET',
         type="string", dest="snapshot_frequency", default='draw',
         help="calls to compare [default: %default]")
+    optparser.add_option(
+        '-o', '--output', metavar='FILE',
+        type="string", dest="output",
+        help="output file [default: stdout]")
 
     (options, args) = optparser.parse_args(sys.argv[1:])
     ref_env = parse_env(optparser, options.ref_env)
@@ -169,7 +173,12 @@ def main():
     ref_setup = Setup(args, ref_env)
     src_setup = Setup(args, src_env)
 
-    highligher = Highlighter(sys.stdout)
+    if options.output:
+        output = open(options.output, 'wt')
+    else:
+        output = sys.stdout
+
+    highligher = Highlighter(output)
 
     highligher.write('call\tprecision\n')
 
@@ -217,7 +226,7 @@ def main():
                         src_image.save(prefix + '.src.png')
                         comparer.write_diff(prefix + '.diff.png')
                     if last_bad < last_good:
-                        src_setup.diff_state(last_good, call_no)
+                        src_setup.diff_state(last_good, call_no, output)
                     last_bad = call_no
                 else:
                     last_good = call_no

commit 4d73f8586100da4bbf5dcfad94828ae0b227ec05
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Thu Feb 9 14:04:17 2012 +0000

    Fix highlight.py on Windows.

diff --git a/scripts/highlight.py b/scripts/highlight.py
index 986bd1d..db6a37f 100644
--- a/scripts/highlight.py
+++ b/scripts/highlight.py
@@ -158,12 +158,12 @@ class WindowsConsoleHighlighter(PlainHighlighter):
             import ctypes
             self._handle = ctypes.windll.kernel32.GetStdHandle(nStdHandle)
         else:
-            self._handle = INVALID_HANDLE_VALUE
+            self._handle = self.INVALID_HANDLE_VALUE
 
         self._attribute = self.white
 
     def _setAttribute(self, attr):
-        if self._handle != INVALID_HANDLE_VALUE:
+        if self._handle != self.INVALID_HANDLE_VALUE:
             import ctypes
             ctypes.windll.kernel32.SetConsoleTextAttribute(self._handle, attr)
         self._attribute = attr
@@ -172,11 +172,11 @@ class WindowsConsoleHighlighter(PlainHighlighter):
         self._setAttribute(self._normal)
 
     def color(self, color):
-        intensity = self._attribute & FOREGROUND_INTENSITY
+        intensity = self._attribute & self.FOREGROUND_INTENSITY
         self._setAttribute(color | intensity)
 
     def bold(self):
-        self._setAttribute(self._attribute | FOREGROUND_INTENSITY)
+        self._setAttribute(self._attribute | self.FOREGROUND_INTENSITY)
 
     def italic(self):
         pass

commit fcab8cb3072724eca6ab8618ec16704451891f69
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Thu Feb 9 14:03:57 2012 +0000

    Set binary mode when outputing PNM from glretrace via stdout.

diff --git a/cli/cli_pickle.cpp b/cli/cli_pickle.cpp
index 6af879f..c37c0f8 100644
--- a/cli/cli_pickle.cpp
+++ b/cli/cli_pickle.cpp
@@ -26,13 +26,10 @@
 
 #include <string.h>
 
-#ifdef _WIN32
-#include <fcntl.h>
-#include <io.h>
-#endif
-
 #include "pickle.hpp"
 
+#include "os_binary.hpp"
+
 #include "cli.hpp"
 #include "cli_pager.hpp"
 
@@ -189,14 +186,7 @@ command(int argc, char *argv[])
         }
     }
 
-#ifdef _WIN32
-    // Set stdout in binary mode
-    fflush(stdout);
-    int mode = _setmode(_fileno(stdout), _O_BINARY);
-    if (mode == -1) {
-        std::cerr << "warning: failed to set stdout in binary mode\n";
-    }
-#endif
+    os::setBinaryMode(stdout);
 
     for (; i < argc; ++i) {
         trace::Parser parser;
@@ -218,14 +208,6 @@ command(int argc, char *argv[])
         }
     }
 
-#ifdef _WIN32
-    std::cout.flush();
-    fflush(stdout);
-    if (mode != -1) {
-        _setmode(_fileno(stdout), mode);
-    }
-#endif
-
     return 0;
 }
 
diff --git a/common/os_binary.hpp b/common/os_binary.hpp
new file mode 100644
index 0000000..876bdb6
--- /dev/null
+++ b/common/os_binary.hpp
@@ -0,0 +1,60 @@
+/**************************************************************************
+ *
+ * Copyright 2011 VMware, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ **************************************************************************/
+
+/*
+ * Force binary mode standard files on Windows.
+ */
+
+#ifndef _OS_BINARY_HPP_
+#define _OS_BINARY_HPP_
+
+
+#include <stdio.h>
+
+#ifdef _WIN32
+#include <assert.h>
+
+#include <fcntl.h>
+#include <io.h>
+#endif
+
+
+namespace os {
+
+
+void setBinaryMode(FILE *fp) {
+#ifdef _WIN32
+    fflush(fp);
+    int mode = _setmode(_fileno(fp), _O_BINARY);
+    assert(mode != -1);
+#else
+    (void)fp;
+#endif
+}
+
+
+} /* namespace os */
+
+#endif /* _OS_BINARY_HPP_ */
diff --git a/glretrace_main.cpp b/glretrace_main.cpp
index 785d6fe..11f34ce 100644
--- a/glretrace_main.cpp
+++ b/glretrace_main.cpp
@@ -26,6 +26,7 @@
 
 #include <string.h>
 
+#include "os_binary.hpp"
 #include "os_string.hpp"
 #include "os_time.hpp"
 #include "image.hpp"
@@ -342,6 +343,7 @@ int main(int argc, char **argv)
                 snapshot_frequency = trace::CallSet(trace::FREQUENCY_FRAME);
             }
             if (snapshot_prefix[0] == '-' && snapshot_prefix[1] == 0) {
+                os::setBinaryMode(stdout);
                 retrace::verbosity = -2;
             }
         } else if (!strcmp(arg, "-S")) {

commit c086f0d24e6ca666a2567c092b2c368d7b683069
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Thu Feb 9 13:15:15 2012 +0000

    Allow to specify an alternative opengl32.dll when retracing.

diff --git a/glws_wgl.cpp b/glws_wgl.cpp
index 59f4786..5fddb79 100644
--- a/glws_wgl.cpp
+++ b/glws_wgl.cpp
@@ -23,6 +23,8 @@
  *
  **************************************************************************/
 
+#include <iostream>
+
 #include "glproc.hpp"
 #include "glws.hpp"
 
@@ -199,7 +201,18 @@ init(void) {
     /*
      * OpenGL library must be loaded by the time we call GDI.
      */
-    __libGlHandle = LoadLibraryA("OPENGL32");
+
+    const char * libgl_filename = getenv("TRACE_LIBGL");
+
+    if (!libgl_filename) {
+        libgl_filename = "OPENGL32";
+    }
+
+    __libGlHandle = LoadLibraryA(libgl_filename);
+    if (!__libGlHandle) {
+        std::cerr << "error: unable to open " << libgl_filename << "\n";
+        exit(1);
+    }
 }
 
 void

commit c5c8cf36ddfac2d95dae8df15839abcd32b288d2
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Thu Feb 9 13:14:51 2012 +0000

    Remove dead os::getTime() declaration.

diff --git a/common/os.hpp b/common/os.hpp
index caf9dc3..cc72a0e 100644
--- a/common/os.hpp
+++ b/common/os.hpp
@@ -70,11 +70,6 @@ void log(const char *format, ...)
   #endif
 #endif
 
-/**
- * Get the current time in microseconds from an unknown base.
- */
-long long getTime(void);
-
 void abort(void);
 
 void setExceptionCallback(void (*callback)(void));

commit 49ad1c1df0b6fe277c3bd1c5a4fccc7eefcdcf0d
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Wed Feb 8 17:14:40 2012 +0000

    Flag a few wgl calls as verbose.
    
    Convenient for tracediff

diff --git a/common/trace_parser_flags.cpp b/common/trace_parser_flags.cpp
index e5dad84..936a891 100644
--- a/common/trace_parser_flags.cpp
+++ b/common/trace_parser_flags.cpp
@@ -145,6 +145,8 @@ callFlagTable[] = {
     { "glXQueryExtensionsString",                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
     { "glXQueryVersion",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
     { "glXSwapBuffers",                                CALL_FLAG_SWAPBUFFERS },
+    { "wglGetCurrentContext",                          CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
+    { "wglGetCurrentDC",                               CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
     { "wglGetDefaultProcAddress",                      CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
     { "wglGetProcAddress",                             CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE },
     { "wglSwapBuffers",                                CALL_FLAG_SWAPBUFFERS },

commit 2b8c45495f537a7033339d2b8812dad3497edee3
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Tue Feb 7 10:36:53 2012 +0000

    Ignore glXSwapInterval* when retracing.

diff --git a/glretrace_glx.cpp b/glretrace_glx.cpp
index a3b80f2..7342908 100644
--- a/glretrace_glx.cpp
+++ b/glretrace_glx.cpp
@@ -247,8 +247,8 @@ const retrace::Entry glretrace::glx_callbacks[] = {
     //{"glXSet3DfxModeMESA", &retrace_glXSet3DfxModeMESA},
     //{"glXSwapBuffersMscOML", &retrace_glXSwapBuffersMscOML},
     {"glXSwapBuffers", &retrace_glXSwapBuffers},
-    //{"glXSwapIntervalEXT", &retrace_glXSwapIntervalEXT},
-    //{"glXSwapIntervalSGI", &retrace_glXSwapIntervalSGI},
+    {"glXSwapIntervalEXT", &retrace::ignore},
+    {"glXSwapIntervalSGI", &retrace::ignore},
     //{"glXUseXFont", &retrace_glXUseXFont},
     {"glXWaitForMscOML", &retrace::ignore},
     {"glXWaitForSbcOML", &retrace::ignore},

commit 77892a4faad93dfb4ee280e67124170941eac3a3
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Sat Feb 4 08:56:15 2012 +0000

    Fix build with older DXSDK.

diff --git a/d3d9imports.hpp b/d3d9imports.hpp
index e2e2015..3e5ce39 100644
--- a/d3d9imports.hpp
+++ b/d3d9imports.hpp
@@ -39,6 +39,10 @@
 #include <d3dx9.h>
 
 
+#ifndef D3DFMT_A2B10G10R10_XR_BIAS
+#define D3DFMT_A2B10G10R10_XR_BIAS 119
+#endif
+
 #ifndef D3DFMT_ATI1
 #define D3DFMT_ATI1 ((D3DFORMAT)MAKEFOURCC('A','T','I','1'))
 #endif

commit b9ac0583698401a7399a54970f628761f161df73
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Fri Feb 3 19:06:50 2012 +0000

    A few additions to win32 api.

diff --git a/specs/winapi.py b/specs/winapi.py
index 6e3c609..017cf5f 100644
--- a/specs/winapi.py
+++ b/specs/winapi.py
@@ -150,6 +150,30 @@ HMODULE = Opaque("HMODULE")
 
 IUnknown = Interface("IUnknown")
 
+FILETIME = Struct("FILETIME", [
+    (DWORD, "dwLowDateTime"),
+    (DWORD, "dwHighDateTime"),
+])
+
+COLORREF = Alias("COLORREF", DWORD)
+
+LOGFONTW = Struct("LOGFONTW", [
+    (LONG, "lfHeight"),
+    (LONG, "lfWidth"),
+    (LONG, "lfEscapement"),
+    (LONG, "lfOrientation"),
+    (LONG, "lfWeight"),
+    (BYTE, "lfItalic"),
+    (BYTE, "lfUnderline"),
+    (BYTE, "lfStrikeOut"),
+    (BYTE, "lfCharSet"),
+    (BYTE, "lfOutPrecision"),
+    (BYTE, "lfClipPrecision"),
+    (BYTE, "lfQuality"),
+    (BYTE, "lfPitchAndFamily"),
+    (WString, "lfFaceName"),
+])
+
 HRESULT_com = FakeEnum(HRESULT, [
     "S_OK",
     "E_NOINTERFACE",

commit ccf250c000bc13dd4958e010d6ba0de92c01fe72
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Fri Feb 3 19:06:31 2012 +0000

    Try all interfaces when wrapping REFIIDs.

diff --git a/d3d8trace.py b/d3d8trace.py
index 1da3feb..af87c2d 100644
--- a/d3d8trace.py
+++ b/d3d8trace.py
@@ -40,6 +40,8 @@ class D3D8Tracer(DllTracer):
 
 
 if __name__ == '__main__':
+    print '#define INITGUID'
+    print
     print '#include <windows.h>'
     print '#include <d3d8.h>'
     print '#include "d3dshader.hpp"'
diff --git a/d3d9trace.py b/d3d9trace.py
index ae4acd0..4f40194 100644
--- a/d3d9trace.py
+++ b/d3d9trace.py
@@ -70,6 +70,8 @@ class D3D9Tracer(DllTracer):
 
 
 if __name__ == '__main__':
+    print '#define INITGUID'
+    print
     print '#include "trace_writer_local.hpp"'
     print '#include "os.hpp"'
     print
diff --git a/trace.py b/trace.py
index 831af98..bd97772 100644
--- a/trace.py
+++ b/trace.py
@@ -542,9 +542,11 @@ class Tracer:
     def wrapIid(self, riid, out):
             print '    if (%s && *%s) {' % (out.name, out.name)
             print '        if (*%s == m_pInstance) {' % (out.name,)
+            print '            AddRef();'
+            print '            m_pInstance->Release();'
             print '            *%s = this;' % (out.name,)
             print '        }'
-            for iface in self.api.interfaces:
+            for iface in self.api.getAllInterfaces():
                 print r'        else if (%s == IID_%s) {' % (riid.name, iface.name)
                 print r'            *%s = new Wrap%s((%s *) *%s);' % (out.name, iface.name, iface.name, out.name)
                 print r'        }'

commit 9dbeda6e78adf9d85e67bfa2e29876846038b2fe
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Fri Feb 3 19:05:54 2012 +0000

    Support const methods.
    
    Also several enhancements to C decl parser.

diff --git a/specs/scripts/cdecl.py b/specs/scripts/cdecl.py
index d6ee058..940ce44 100755
--- a/specs/scripts/cdecl.py
+++ b/specs/scripts/cdecl.py
@@ -189,6 +189,11 @@ class DeclParser:
         value = 0
         while self.lookahead() != '}':
             type, name = self.parse_named_type()
+
+            if self.match(':'):
+                self.consume()
+                self.consume()
+
             if self.match(','):
                 self.consume(',')
             self.consume(';')
@@ -205,6 +210,8 @@ class DeclParser:
         if self.match(';'):
             return
         self.consume(':')
+        if self.lookahead() in ('public', 'protected'):
+            self.consume()
         base = self.consume()
         self.consume('{')
 
@@ -225,7 +232,7 @@ class DeclParser:
 
         ret = self.parse_type()
 
-        if self.match('__stdcall'):
+        if self.match('__stdcall', 'WINAPI'):
             self.consume()
             creator = 'StdFunction'
 
@@ -244,7 +251,10 @@ class DeclParser:
             args.append(arg)
             if self.match(','):
                 self.consume()
-        self.consume() == ')'
+        self.consume(')')
+        if self.lookahead() == 'const':
+            self.consume()
+            extra = ', const=True' + extra
         
         print '    %s(%s, "%s", [%s]%s),' % (creator, ret, name, ', '.join(args), extra)
 
@@ -256,6 +266,12 @@ class DeclParser:
         arg = '(%s, "%s")' % (type, name)
         if 'out' in tags:
             arg = 'Out' + arg
+
+        if self.match('='):
+            self.consume()
+            while not self.match(',', ')'):
+                self.consume()
+
         return arg
 
     def parse_tags(self):
diff --git a/specs/stdapi.py b/specs/stdapi.py
index d9fd545..6aa4089 100644
--- a/specs/stdapi.py
+++ b/specs/stdapi.py
@@ -361,10 +361,17 @@ class Interface(Type):
 
 class Method(Function):
 
-    def __init__(self, type, name, args):
+    def __init__(self, type, name, args, const=False):
         Function.__init__(self, type, name, args, call = '__stdcall')
         for index in range(len(self.args)):
             self.args[index].index = index + 1
+        self.const = const
+
+    def prototype(self, name=None):
+        s = Function.prototype(self, name)
+        if self.const:
+            s += ' const'
+        return s
 
 
 class String(Type):

commit 4220b1bd2f3baccc2d4cbb63dda6413e093a2954
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Fri Feb 3 19:05:29 2012 +0000

    Be more specific when invoking the interface methods.
    
    There may be ambiguities.

diff --git a/d3d9trace.py b/d3d9trace.py
index c408b49..ae4acd0 100644
--- a/d3d9trace.py
+++ b/d3d9trace.py
@@ -45,13 +45,13 @@ class D3D9Tracer(DllTracer):
             print '    UINT m_SizeToLock;'
             print '    VOID *m_pbData;'
 
-    def implementWrapperInterfaceMethodBody(self, interface, method):
+    def implementWrapperInterfaceMethodBody(self, interface, base, method):
         if interface.name == 'IDirect3DVertexBuffer9' and method.name == 'Unlock':
             print '    if (m_pbData) {'
             self.emit_memcpy('(LPBYTE)m_pbData', '(LPBYTE)m_pbData', 'm_SizeToLock')
             print '    }'
 
-        DllTracer.implementWrapperInterfaceMethodBody(self, interface, method)
+        DllTracer.implementWrapperInterfaceMethodBody(self, interface, base, method)
 
         if interface.name == 'IDirect3DVertexBuffer9' and method.name == 'Lock':
             # FIXME: handle recursive locks
diff --git a/specs/stdapi.py b/specs/stdapi.py
index 5ba621f..d9fd545 100644
--- a/specs/stdapi.py
+++ b/specs/stdapi.py
@@ -350,6 +350,14 @@ class Interface(Type):
             yield method
         raise StopIteration
 
+    def iterBaseMethods(self):
+        if self.base is not None:
+            for iface, method in self.base.iterBaseMethods():
+                yield iface, method
+        for method in self.methods:
+            yield self, method
+        raise StopIteration
+
 
 class Method(Function):
 
diff --git a/trace.py b/trace.py
index 8fd5840..831af98 100644
--- a/trace.py
+++ b/trace.py
@@ -478,23 +478,23 @@ class Tracer:
         print '%s::~%s() {' % (getWrapperInterfaceName(interface), getWrapperInterfaceName(interface))
         print '}'
         print
-        for method in interface.iterMethods():
-            self.implementWrapperInterfaceMethod(interface, method)
+        for base, method in interface.iterBaseMethods():
+            self.implementWrapperInterfaceMethod(interface, base, method)
         print
 
-    def implementWrapperInterfaceMethod(self, interface, method):
+    def implementWrapperInterfaceMethod(self, interface, base, method):
         print method.prototype(getWrapperInterfaceName(interface) + '::' + method.name) + ' {'
         if method.type is not stdapi.Void:
             print '    %s __result;' % method.type
     
-        self.implementWrapperInterfaceMethodBody(interface, method)
+        self.implementWrapperInterfaceMethodBody(interface, base, method)
     
         if method.type is not stdapi.Void:
             print '    return __result;'
         print '}'
         print
 
-    def implementWrapperInterfaceMethodBody(self, interface, method):
+    def implementWrapperInterfaceMethodBody(self, interface, base, method):
         print '    static const char * __args[%u] = {%s};' % (len(method.args) + 1, ', '.join(['"this"'] + ['"%s"' % arg.name for arg in method.args]))
         print '    static const trace::FunctionSig __sig = {%u, "%s", %u, __args};' % (method.id, interface.name + '::' + method.name, len(method.args) + 1)
         print '    unsigned __call = trace::localWriter.beginEnter(&__sig);'
@@ -514,7 +514,7 @@ class Tracer:
                     riid = arg
         print '    trace::localWriter.endEnter();'
         
-        self.invokeMethod(interface, method)
+        self.invokeMethod(interface, base, method)
 
         print '    trace::localWriter.beginLeave(__call);'
         for arg in method.args:
@@ -563,12 +563,12 @@ class Tracer:
             print r'        }'
             print '    }'
 
-    def invokeMethod(self, interface, method):
+    def invokeMethod(self, interface, base, method):
         if method.type is stdapi.Void:
             result = ''
         else:
             result = '__result = '
-        print '    %sm_pInstance->%s(%s);' % (result, method.name, ', '.join([str(arg.name) for arg in method.args]))
+        print '    %sstatic_cast<%s *>(m_pInstance)->%s(%s);' % (result, base, method.name, ', '.join([str(arg.name) for arg in method.args]))
     
     def emit_memcpy(self, dest, src, length):
         print '        unsigned __call = trace::localWriter.beginEnter(&trace::memcpy_sig);'

commit 2a2096442e6eb586bd39097b582cf54ddcdaaddb
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Fri Feb 3 17:46:32 2012 +0000

    Recognize D3DUSAGE flags in resource descriptions.

diff --git a/specs/d3d9types.py b/specs/d3d9types.py
index 235aa16..312eb2a 100644
--- a/specs/d3d9types.py
+++ b/specs/d3d9types.py
@@ -875,7 +875,7 @@ D3DLOCK = Flags(DWORD, [
 D3DVERTEXBUFFER_DESC = Struct("D3DVERTEXBUFFER_DESC", [
     (D3DFORMAT, "Format"),
     (D3DRESOURCETYPE, "Type"),
-    (DWORD, "Usage"),
+    (D3DUSAGE, "Usage"),
     (D3DPOOL, "Pool"),
     (UINT, "Size"),
     (DWORD, "FVF"),
@@ -884,7 +884,7 @@ D3DVERTEXBUFFER_DESC = Struct("D3DVERTEXBUFFER_DESC", [
 D3DINDEXBUFFER_DESC = Struct("D3DINDEXBUFFER_DESC", [
     (D3DFORMAT, "Format"),
     (D3DRESOURCETYPE, "Type"),
-    (DWORD, "Usage"),
+    (D3DUSAGE, "Usage"),
     (D3DPOOL, "Pool"),
     (UINT, "Size"),
 ])
@@ -892,7 +892,7 @@ D3DINDEXBUFFER_DESC = Struct("D3DINDEXBUFFER_DESC", [
 D3DSURFACE_DESC = Struct("D3DSURFACE_DESC", [
     (D3DFORMAT, "Format"),
     (D3DRESOURCETYPE, "Type"),
-    (DWORD, "Usage"),
+    (D3DUSAGE, "Usage"),
     (D3DPOOL, "Pool"),
     (D3DMULTISAMPLE_TYPE, "MultiSampleType"),
     (DWORD, "MultiSampleQuality"),
@@ -903,7 +903,7 @@ D3DSURFACE_DESC = Struct("D3DSURFACE_DESC", [
 D3DVOLUME_DESC = Struct("D3DVOLUME_DESC", [
     (D3DFORMAT, "Format"),
     (D3DRESOURCETYPE, "Type"),
-    (DWORD, "Usage"),
+    (D3DUSAGE, "Usage"),
     (D3DPOOL, "Pool"),
     (UINT, "Width"),
     (UINT, "Height"),

commit 22261c1c5747cf48391ac37772edf1144edaa710
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Fri Feb 3 09:56:24 2012 +0000

    Recognize D3DFMT_A2B10G10R10_XR_BIAS.

diff --git a/specs/d3d9types.py b/specs/d3d9types.py
index c5f0724..235aa16 100644
--- a/specs/d3d9types.py
+++ b/specs/d3d9types.py
@@ -737,6 +737,7 @@ D3DFORMAT = Enum("D3DFORMAT", [
     "D3DFMT_A32B32G32R32F",
     "D3DFMT_CxV8U8",
     "D3DFMT_A1",
+    "D3DFMT_A2B10G10R10_XR_BIAS",
     "D3DFMT_BINARYBUFFER",
 
     # Unofficial formats

commit ae9c4c1e2ab603a484b5afa50b37e1d7ce95a7b4
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Thu Feb 2 13:59:31 2012 +0000

    Warn when calling GL entry points without a current context.

diff --git a/glretrace.py b/glretrace.py
index e862e25..8dfc340 100644
--- a/glretrace.py
+++ b/glretrace.py
@@ -230,6 +230,11 @@ class GlRetracer(Retracer):
         if function.name == "glEnd":
             print '    glretrace::insideGlBeginEnd = false;'
 
+        if function.name.startswith('gl') and not function.name.startswith('glX'):
+            print r'    if (!glretrace::context && !glretrace::benchmark && !retrace::profiling) {'
+            print r'        retrace::warning(call) << "no current context\n";'
+            print r'    }'
+
         if function.name == 'memcpy':
             print '    if (!dest || !src || !n) return;'
         

commit 95a7a8611c6fa7c4c59797c174764525df4c2311
Author: José Fonseca <jose.r.fonseca@gmail.com>
Date:   Wed Feb 1 20:46:10 2012 +0000

    Ensure function default argument matches template type.
    


Reply to: