X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=wrappers%2Fgltrace.py;h=e73c5918140dcc63e6030cf7fb3b762ebff304eb;hb=2a5696befce6be00fa655b751af5ce2924ea45ae;hp=fcb48bba5d71c2ceedffd0a8ce6bd7a0d28450e1;hpb=aa1b2136cc72893e519ff73c47e2ecd29cafe1da;p=apitrace diff --git a/wrappers/gltrace.py b/wrappers/gltrace.py index fcb48bb..e73c591 100644 --- a/wrappers/gltrace.py +++ b/wrappers/gltrace.py @@ -357,7 +357,7 @@ class GlTracer(Tracer): print ' }' print print ' GLint buffer_binding = 0;' - print ' _glGetIntegerv(target, &buffer_binding);' + print ' _glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &buffer_binding);' print ' if (buffer_binding > 0) {' print ' gltrace::Buffer & buf = ctx->buffers[buffer_binding];' print ' buf.getSubData(offset, size, data);' @@ -520,7 +520,7 @@ class GlTracer(Tracer): # Emit a fake function print ' {' - print ' static trace::FunctionSig &_sig = %s ? _glEnableClientState_sig : _glDisableClientState_sig;' % flag_name + print ' static const trace::FunctionSig &_sig = %s ? _glEnableClientState_sig : _glDisableClientState_sig;' % flag_name print ' unsigned _call = trace::localWriter.beginEnter(&_sig);' print ' trace::localWriter.beginArg(0);' self.serializeValue(glapi.GLenum, enable_name) @@ -700,12 +700,24 @@ class GlTracer(Tracer): # These functions have been dispatched already return + Tracer.invokeFunction(self, function) + + def doInvokeFunction(self, function): + # Same as invokeFunction() but called both when trace is enabled or disabled. + # + # Used to modify the behavior of GL entry-points. + + # Override GL extensions + if function.name in ('glGetString', 'glGetIntegerv', 'glGetStringi'): + Tracer.doInvokeFunction(self, function, prefix = 'gltrace::_', suffix = '_override') + return + # We implement GL_EXT_debug_marker, GL_GREMEDY_*, etc., and not the # driver if function.name in self.marker_functions: return - if function.name in ('glXGetProcAddress', 'glXGetProcAddressARB', 'wglGetProcAddress'): + if function.name in self.getProcAddressFunctionNames: else_ = '' for marker_function in self.marker_functions: if self.api.getFunctionByName(marker_function): @@ -714,16 +726,19 @@ class GlTracer(Tracer): print ' }' else_ = 'else ' print ' %s{' % else_ - Tracer.invokeFunction(self, function) - print ' }' - return + Tracer.doInvokeFunction(self, function) - # Override GL extensions - if function.name in ('glGetString', 'glGetIntegerv', 'glGetStringi'): - Tracer.invokeFunction(self, function, prefix = 'gltrace::_', suffix = '_override') + # Replace function addresses with ours + # XXX: Doing this here instead of wrapRet means that the trace will + # contain the addresses of the wrapper functions, and not the real + # functions, but in practice this should make no difference. + if function.name in self.getProcAddressFunctionNames: + print ' _result = _wrapProcAddress(%s, _result);' % (function.args[0].name,) + + print ' }' return - Tracer.invokeFunction(self, function) + Tracer.doInvokeFunction(self, function) buffer_targets = [ 'ARRAY_BUFFER', @@ -742,10 +757,6 @@ class GlTracer(Tracer): def wrapRet(self, function, instance): Tracer.wrapRet(self, function, instance) - # Replace function addresses with ours - if function.name in self.getProcAddressFunctionNames: - print ' %s = _wrapProcAddress(%s, %s);' % (instance, function.args[0].name, instance) - # Keep track of buffer mappings if function.name in ('glMapBuffer', 'glMapBufferARB'): print ' struct buffer_mapping *mapping = get_buffer_mapping(target);' @@ -1059,6 +1070,16 @@ class GlTracer(Tracer): function = api.getFunctionByName('glClientActiveTexture') self.fake_call(function, [texture]) + def emitFakeTexture2D(self): + function = glapi.glapi.getFunctionByName('glTexImage2D') + instances = function.argNames() + print ' unsigned _fake_call = trace::localWriter.beginEnter(&_%s_sig);' % (function.name,) + for arg in function.args: + assert not arg.output + self.serializeArg(function, arg) + print ' trace::localWriter.endEnter();' + print ' trace::localWriter.beginLeave(_fake_call);' + print ' trace::localWriter.endLeave();'