[PATCH] retrace: use KHR_debug to emit call no's
Rob Clark
robdclark at gmail.com
Wed Jan 20 13:52:11 PST 2016
If the extension is present, use it to log call numbers for draw
commands, using GL_DEBUG_TYPE_MARKER. If supported by the driver,
this embeds the draw call no's in the commandstream.
Signed-off-by: Rob Clark <robdclark at gmail.com>
---
retrace/glretrace.hpp | 2 ++
retrace/glretrace_main.cpp | 18 ++++++++++++++++++
retrace/retrace.hpp | 2 ++
retrace/retrace_main.cpp | 4 ++++
4 files changed, 26 insertions(+)
diff --git a/retrace/glretrace.hpp b/retrace/glretrace.hpp
index fc36c52..82ed920 100644
--- a/retrace/glretrace.hpp
+++ b/retrace/glretrace.hpp
@@ -57,6 +57,8 @@ struct Context {
bool used;
+ bool KHR_debug;
+
inline glprofile::Profile
profile(void) const {
return wsContext->profile;
diff --git a/retrace/glretrace_main.cpp b/retrace/glretrace_main.cpp
index c3783cc..0135662 100755
--- a/retrace/glretrace_main.cpp
+++ b/retrace/glretrace_main.cpp
@@ -399,6 +399,7 @@ initContext() {
supportsElapsed = currentContext->hasExtension("GL_EXT_timer_query") || supportsTimestamp;
supportsOcclusion = currentProfile.versionGreaterOrEqual(glprofile::API_GL, 1, 5);
supportsARBShaderObjects = currentContext->hasExtension("GL_ARB_shader_objects");
+ currentContext->KHR_debug = currentContext->hasExtension("GL_KHR_debug");
#ifdef __APPLE__
// GL_TIMESTAMP doesn't work on Apple. GL_TIME_ELAPSED still does however.
@@ -766,6 +767,23 @@ public:
dumpState(StateWriter &writer) {
glstate::dumpCurrentContext(writer);
}
+
+ void
+ log(trace::Call &call) {
+ glretrace::Context *currentContext = glretrace::getCurrentContext();
+ if (currentContext && currentContext->KHR_debug) {
+ char *str;
+ int len = asprintf(&str, "%d:%s", call.no, call.name());
+ if (len > 0) {
+ glDebugMessageInsert(GL_DEBUG_SOURCE_THIRD_PARTY,
+ GL_DEBUG_TYPE_MARKER, 0,
+ GL_DEBUG_SEVERITY_NOTIFICATION,
+ len, str);
+ free(str);
+ }
+ }
+ }
+
};
static GLDumper glDumper;
diff --git a/retrace/retrace.hpp b/retrace/retrace.hpp
index 082879f..66024c5 100644
--- a/retrace/retrace.hpp
+++ b/retrace/retrace.hpp
@@ -226,6 +226,8 @@ public:
virtual void
dumpState(StateWriter &) = 0;
+
+ virtual void log(trace::Call &call) {}
};
diff --git a/retrace/retrace_main.cpp b/retrace/retrace_main.cpp
index bc00ffe..6344880 100644
--- a/retrace/retrace_main.cpp
+++ b/retrace/retrace_main.cpp
@@ -238,6 +238,10 @@ retraceCall(trace::Call *call) {
}
}
+ if (call->flags & trace::CALL_FLAG_RENDER) {
+ dumper->log(*call);
+ }
+
retracer.retrace(*call);
if (doSnapshot) {
--
2.5.0
More information about the apitrace
mailing list