[PATCH] retrace: use KHR_debug to emit call no's
José Fonseca
jose.r.fonseca at gmail.com
Fri Jan 22 15:35:32 PST 2016
Rob,
Change looks good in principled, but it required a bit more tweaking.
See https://github.com/apitrace/apitrace/commits/call-no-markers . Give it
a go and let me know if it still works for you.
Note in particular:
- you need to pass --marker command line option to glretrace
- Mesa refused markers between glBegin/End. Could you check if this is a
bug in Mesa or the right behavior?
Jose
On Wed, Jan 20, 2016 at 9:52 PM, Rob Clark <robdclark at gmail.com> wrote:
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/apitrace/attachments/20160122/f9e3aa3b/attachment.html>
More information about the apitrace
mailing list