[PATCH] retrace: Implement glxCopySubBufferMESA
Carl Worth
cworth at cworth.org
Thu Oct 17 14:54:45 PDT 2013
This enables replay of a trace captured on ChromeOS.
Note: Replaying on EGL is not supported, (will trigger an abort),
since, as far as I know, EGL does not provide an equivalent function.
---
retrace/glretrace_glx.cpp | 12 +++++++++++-
retrace/glws.hpp | 2 ++
retrace/glws_egl_xlib.cpp | 5 +++++
retrace/glws_glx.cpp | 6 ++++++
4 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/retrace/glretrace_glx.cpp b/retrace/glretrace_glx.cpp
index 3179c1e..7efc3bf 100644
--- a/retrace/glretrace_glx.cpp
+++ b/retrace/glretrace_glx.cpp
@@ -111,6 +111,16 @@ static void retrace_glXDestroyContext(trace::Call &call) {
delete context;
}
+static void retrace_glXCopySubBufferMESA(trace::Call &call) {
+ glws::Drawable *drawable = getDrawable(call.arg(1).toUInt());
+ int x = call.arg(2).toSInt();
+ int y = call.arg(3).toSInt();
+ int width = call.arg(4).toSInt();
+ int height = call.arg(5).toSInt();
+
+ drawable->copySubBuffer(x, y, width, height);
+}
+
static void retrace_glXSwapBuffers(trace::Call &call) {
glws::Drawable *drawable = getDrawable(call.arg(1).toUInt());
@@ -173,7 +183,7 @@ const retrace::Entry glretrace::glx_callbacks[] = {
{"glXChooseVisual", &retrace::ignore},
//{"glXCopyContext", &retrace_glXCopyContext},
//{"glXCopyImageSubDataNV", &retrace_glXCopyImageSubDataNV},
- //{"glXCopySubBufferMESA", &retrace_glXCopySubBufferMESA},
+ {"glXCopySubBufferMESA", &retrace_glXCopySubBufferMESA},
{"glXCreateContextAttribsARB", &retrace_glXCreateContextAttribsARB},
{"glXCreateContext", &retrace_glXCreateContext},
//{"glXCreateContextWithConfigSGIX", &retrace_glXCreateContextWithConfigSGIX},
diff --git a/retrace/glws.hpp b/retrace/glws.hpp
index c76e193..a8b6844 100644
--- a/retrace/glws.hpp
+++ b/retrace/glws.hpp
@@ -127,6 +127,8 @@ public:
visible = true;
}
+ virtual void copySubBuffer(int x, int y, int width, int height) = 0;
+
virtual void swapBuffers(void) = 0;
};
diff --git a/retrace/glws_egl_xlib.cpp b/retrace/glws_egl_xlib.cpp
index 6bfc40d..7e86887 100644
--- a/retrace/glws_egl_xlib.cpp
+++ b/retrace/glws_egl_xlib.cpp
@@ -244,6 +244,11 @@ public:
Drawable::show();
}
+ void copySubBuffer(int x, int y, int width, int height) {
+ printf("glws_egl_xlib:copySubBuffer: Not yet implemented\n");
+ exit(1);
+ }
+
void swapBuffers(void) {
eglBindAPI(api);
eglSwapBuffers(eglDisplay, surface);
diff --git a/retrace/glws_glx.cpp b/retrace/glws_glx.cpp
index d150aa6..537ea3c 100644
--- a/retrace/glws_glx.cpp
+++ b/retrace/glws_glx.cpp
@@ -213,6 +213,12 @@ public:
Drawable::show();
}
+ void copySubBuffer(int x, int y, int width, int height) {
+ glXCopySubBufferMESA(display, window, x, y, width, height);
+
+ processKeys();
+ }
+
void swapBuffers(void) {
glXSwapBuffers(display, window);
--
1.8.4.rc3
More information about the apitrace
mailing list