Age | Commit message (Collapse) | Author | Files | Lines |
|
Fixes https://github.com/apitrace/apitrace/issues/191
|
|
|
|
NV_vertex_program is vendor specific and deprecated. Drop support for
it in order to reduce complexity and make way for better support for
modern OpenGL.
glVertexAttribPointerNV calls will still be traced, but the
corresponding fake memcpy calls will not.
Old traces still work fine. So if necessary an older build of apitrace
can be used instead.
|
|
|
|
|
|
|
|
|
|
Basically revert d493737765bed0fcbba908024d2314778c26b5c9.
|
|
No need to warn about mappings without MAP_WRITE_BIT.
Also shorten the URLs.
|
|
More specifically, treat pointers as offsets when GL_QUERY_BUFFER is
bound to a buffer.
Code changes follow closely the similar logic used for PBOs.
https://github.com/apitrace/apitrace/issues/442
|
|
To avoid clash with function args.
|
|
|
|
This module will have more than just description of OpenGL profiles, but
actual features.
|
|
Just emit a fake string marker for reference.
|
|
|
|
glGetIntegerv(GL_PROGRAM_BINARY_FORMATS).
|
|
KHR_debug spec states that on OpenGL ES all entrypoints should have KHR
suffixes.
|
|
Some apps fully/partally use Microsoft OpenGL 1.1 GDI software renderer,
which supports only one texture coordinate (no glClientActiveTexture).
|
|
In order to prevent issue #316.
|
|
|
|
Long time has passed, so there should be very few affected drivers
currently in use..
|
|
Thanks to Lawrence Love for spotting this.
|
|
Fixes #259.
|
|
gltrace::PROFILE_COMPAT was a misnomer -- it actually meant desktop
profile. So b0c597293060329afc1ee10d4062d30a2b272f78 broke PBO for core
contexts.
|
|
Less duplication, and hopefully more future proof.
|
|
|
|
|
|
|
|
Less maintenance overhead, less chances of oversight.
|
|
Only warn if glArrayElement is actually called.
|
|
More future proof.
|
|
Untested, complicated, and utterly pointless (though I believe not
strictly forbidden) use of GL API.
|
|
|
|
And not just the glGet*.
Fixes issue #281.
|
|
|
|
glVertexAttribPointer.
These are aliases, and both part of OpenGL 2.0.
|
|
|
|
|
|
Issue #276.
|
|
Issue #261.
|
|
Quake3 puts some vertices in its array buffer that it never renders.
This happens for clouds rendering as well as flares. (In other words, it
creates a vertex buffer with V vertices, and an index buffer that
reference indices substantially lower than V, max(I) < V).
It uses compiled vertex arrays, and will LockArrays(V) - more elements
than it actually references. This is legal because Quake3's arrays have
a static size, much bigger than however many vertices it puts in there,
so the driver can safely read the whole locked area even though half of
it is never referenced.
With Apitrace, however, the situation changes a bit, because Apitrace's
calculation for the length of a user pointer is based on max(draw
element indices).
Below is an example of Quake3's sky rendering:
3466977 glLockArraysEXT(first = 0, count = 110)
3466978 glEnableClientState(array = GL_TEXTURE_COORD_ARRAY)
3466979 glEnableClientState(array = GL_COLOR_ARRAY)
3466980 glEnableClientState(array = GL_COLOR_ARRAY)
3466981 glBindTexture(target = GL_TEXTURE_2D, texture = 1132)
3466982 glTexCoordPointer(size = 2, type = GL_FLOAT, stride = 0, pointer = blob(440))
3466983 glClientActiveTexture(texture = GL_TEXTURE1)
3466984 glTexCoordPointer(size = 2, type = GL_FLOAT, stride = 0, pointer = blob(440))
3466985 glClientActiveTexture(texture = GL_TEXTURE0)
3466986 glColorPointer(size = 4, type = GL_UNSIGNED_BYTE, stride = 0, pointer = blob(220))
3466987 glVertexPointer(size = 3, type = GL_FLOAT, stride = 16, pointer = blob(876))
3466988 glDrawElements(mode = GL_TRIANGLES, count = 192, type = GL_UNSIGNED_INT, indices = blob(768))
The glDrawElements only references indices from 0 to 54.
Under Apitrace, the trace only copies the 55 vertices, instead of the
110 locked values. When replaying, the driver, which may want to read
the whole locked area, will read past the 55 vertices. This doesn't
always crash because we're lucky, but on the NVIDIA driver this crashes
fairly reliably. According to the compiled array spec, the driver is
allowed to read all of the locked memory.
The fix is to change the array tracing so that its count is based on
max(drawelements_count, locked_count).
Thanks to Arthur Huillet for diagnosing the problem, the above
description, suggesting the fix, and testing it.
Tested-by: Arthur Huillet <arthur.huillet@free.fr>
|
|
Simplifies/condenses code somewhat.
|
|
See issue #232.
|
|
For reference.
|
|
calls.
When tracing, just before every drawcall, ApiTrace inserts gl*Pointer()
calls into the stream on attributes it detected as resident in user-mem
(instead of in a VBO).
ApiTrace wasn't inserting a glBindBuffer(GL_ARRAY_BUFFER, 0) and
glBindBuffer(GL_ARRAY_BUFFER, prevBuf) around those auto-generated
calls. Thus, it misrepresented pointers as huge offsets into the
currently bound VBO.
Thanks to idinev for spotting and diagnosing this issue. This achieves
the same result as idinev's fix in issue #222, but from the trace side.
|
|
Issue #222.
|
|
exposed by the underlying driver and the user is attempting to query for a message log or object label.
Sets the return parameters to NULL
|
|
GL_AMD_debug_output.
* Mark some of the entrypoints as having sideeffects so that they will
be replayed and can be seen in other 3rd party tools.
* Add the three additional extensions to the supported extensions list.
* Create new list of debug_entrypoints which may be implemented by a
driver. These entrypoints need to be handled differently from the
marker_entrypoints in that debug_entrypoints may be exposed by the
driver via wglGetProcAddress and apitrace should pass the calls along
if they are available. The marker_extensions are not expected to be
implemented by the driver, so wglGetProcAddress(..) does not need to
be called on them.
Note that even though this causes apitrace to return the extension
strings, the full extension implementation has not been completed, but
the entrypoints are exposed for the application to call.
Signed-off-by: José Fonseca <jfonseca@vmware.com>
|
|
Matches the output of change proposed by Peter Lohrmann in issue #138,
but with slightly less new code.
This is achieved by adding a new hook point, doInvokeFunction (could not
think of a better name), used to generate the call to the real function,
both when trace is enabled or disabled.
|
|
Use GL_ELEMENT_ARRAY_BUFFER_BINDING instead of GL_ELEMENT_ARRAY_BUFFER
to inquire the current buffer object in _shadow_glGetBufferSubData.
|