X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=wrappers%2Fgltrace.py;h=853a4bc36ec81d192ab70f28814fa81a28d5d827;hb=48c661ea6c0f2bd9b76a3385cd946b7d07bc9b5f;hp=b97929edafc9d25fcaa6357067f2468e4fbe22fe;hpb=d493737765bed0fcbba908024d2314778c26b5c9;p=apitrace diff --git a/wrappers/gltrace.py b/wrappers/gltrace.py index b97929e..853a4bc 100644 --- a/wrappers/gltrace.py +++ b/wrappers/gltrace.py @@ -298,12 +298,7 @@ class GlTracer(Tracer): print ' switch (pname) {' for function, type, count, name in glparams.parameters: if type is not None: - print ' case %s: return %u;' % (name, count) - print ' case GL_COMPRESSED_TEXTURE_FORMATS: {' - print ' GLint num_compressed_texture_formats = 0;' - print ' _glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &num_compressed_texture_formats);' - print ' return num_compressed_texture_formats;' - print ' }' + print ' case %s: return %s;' % (name, count) print ' default:' print r' os::log("apitrace: warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);' print ' return 1;' @@ -337,7 +332,7 @@ class GlTracer(Tracer): print ' if (!procPtr) {' print ' return procPtr;' print ' }' - for function in api.functions: + for function in api.getAllFunctions(): ptype = function_pointer_type(function) pvalue = function_pointer_value(function) print ' if (strcmp("%s", (const char *)procName) == 0) {' % function.name @@ -355,77 +350,48 @@ class GlTracer(Tracer): print 'void _shadow_glGetBufferSubData(GLenum target, GLintptr offset,' print ' GLsizeiptr size, GLvoid *data)' print '{' - print ' struct gltrace::Context *ctx = gltrace::getContext();' + print ' gltrace::Context *ctx = gltrace::getContext();' print ' if (!ctx->needsShadowBuffers() || target != GL_ELEMENT_ARRAY_BUFFER) {' - print ' glGetBufferSubData(target, offset, size, data);' + print ' _glGetBufferSubData(target, offset, size, data);' print ' return;' print ' }' print - print ' struct gltrace::Buffer *buf;' - print ' GLint buf_id;' - print - print ' glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &buf_id);' - print ' buf = ctx->buffers[buf_id];' - print ' assert(size + offset <= buf->size);' - print ' memcpy(data, (uint8_t *)buf->data + offset, size);' + print ' GLint buffer_binding = 0;' + print ' _glGetIntegerv(target, &buffer_binding);' + print ' if (buffer_binding > 0) {' + print ' gltrace::Buffer & buf = ctx->buffers[buffer_binding];' + print ' buf.getSubData(offset, size, data);' + print ' }' print '}' + def shadowBufferMethod(self, method): + # Emit code to fetch the shadow buffer, and invoke a method + print ' gltrace::Context *ctx = gltrace::getContext();' + print ' if (ctx->needsShadowBuffers() && target == GL_ELEMENT_ARRAY_BUFFER) {' + print ' GLint buffer_binding = 0;' + print ' _glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &buffer_binding);' + print ' if (buffer_binding > 0) {' + print ' gltrace::Buffer & buf = ctx->buffers[buffer_binding];' + print ' buf.' + method + ';' + print ' }' + print ' }' + print + def shadowBufferProlog(self, function): if function.name == 'glBufferData': - print ' gltrace::Context *ctx = gltrace::getContext();' - print ' if (ctx->needsShadowBuffers() && target == GL_ELEMENT_ARRAY_BUFFER) {' - print ' struct gltrace::Buffer *buf;' - print ' GLint buf_id;' - print - print ' glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &buf_id);' - print ' buf = ctx->buffers[buf_id];' - print ' buf->resetData(data, size);' - print ' }' - print + self.shadowBufferMethod('bufferData(size, data)') if function.name == 'glBufferSubData': - print ' gltrace::Context *ctx = gltrace::getContext();' - print ' if (ctx->needsShadowBuffers() && target == GL_ELEMENT_ARRAY_BUFFER) {' - print ' struct gltrace::Buffer *buf;' - print ' GLint buf_id;' - print - print ' glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &buf_id);' - print ' buf = ctx->buffers[buf_id];' - print ' memcpy((uint8_t *)buf->data + offset, data, size);' - print ' }' - print + self.shadowBufferMethod('bufferSubData(offset, size, data)') if function.name == 'glDeleteBuffers': print ' gltrace::Context *ctx = gltrace::getContext();' print ' if (ctx->needsShadowBuffers()) {' - print ' int i;' - print - print ' for (i = 0; i < n; i++) {' - print ' unsigned long buf_id;' - print ' struct gltrace::Buffer *buf;' - print - print ' buf_id = buffer[i];' - print ' buf = ctx->buffers[buf_id];' - print ' if (buf) {' - print ' ctx->buffers.erase(buf_id);' - print ' delete buf;' - print ' }' + print ' for (GLsizei i = 0; i < n; i++) {' + print ' ctx->buffers.erase(buffer[i]);' print ' }' print ' }' - def shadowBufferEpilog(self, function): - if function.name == 'glGenBuffers': - print ' gltrace::Context *ctx = gltrace::getContext();' - print ' if (ctx->needsShadowBuffers()) {' - print ' int i;' - print ' for (i = 0; i < n; i++) {' - print ' GLuint buf_id = buffer[i];' - print ' ctx->buffers[buf_id] = new gltrace::Buffer;' - print ' }' - print ' }' - print - - array_pointer_function_names = set(( "glVertexPointer", "glNormalPointer", @@ -634,6 +600,7 @@ class GlTracer(Tracer): print ' _glGetBufferParameteriv(target, GL_BUFFER_SIZE, &size);' print ' if (map && size > 0) {' self.emit_memcpy('map', 'map', 'size') + self.shadowBufferMethod('bufferSubData(0, size, map)') print ' }' print ' }' if function.name == 'glUnmapNamedBufferEXT': @@ -713,8 +680,6 @@ class GlTracer(Tracer): Tracer.traceFunctionImplBody(self, function) - self.shadowBufferEpilog(function) - marker_functions = [ # GL_GREMEDY_string_marker 'glStringMarkerGREMEDY', @@ -854,25 +819,6 @@ class GlTracer(Tracer): ]) def serializeArgValue(self, function, arg): - if function.name in self.draw_function_names and arg.name == 'indices': - print ' GLint _element_array_buffer = 0;' - print ' _glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &_element_array_buffer);' - print ' if (!_element_array_buffer) {' - if isinstance(arg.type, stdapi.Array): - print ' trace::localWriter.beginArray(%s);' % arg.type.length - print ' for(GLsizei i = 0; i < %s; ++i) {' % arg.type.length - print ' trace::localWriter.beginElement();' - print ' trace::localWriter.writeBlob(%s[i], count[i]*_gl_type_size(type));' % (arg.name) - print ' trace::localWriter.endElement();' - print ' }' - print ' trace::localWriter.endArray();' - else: - print ' trace::localWriter.writeBlob(%s, count*_gl_type_size(type));' % (arg.name) - print ' } else {' - Tracer.serializeArgValue(self, function, arg) - print ' }' - return - # Recognize offsets instead of blobs when a PBO is bound if function.name in self.unpack_function_names \ and (isinstance(arg.type, stdapi.Blob) \