]> git.cworth.org Git - vogl/blob - src/voglreplay/master_todo_list.txt
Initial vogl checkin
[vogl] / src / voglreplay / master_todo_list.txt
1
2
3 - Test GL state capture/restore code (used for trimming/tracing) in Serious Sam 3. This will be a major step, it's very different from Source1.
4
5 - on a -interactive replay of a tf2 trace, with no keyframes: I paused, continued, then at the end of the trace there were a bunch of warnings about
6 ARB programs that could not be deleted due to handle remapping issues. We need to support ARB programs for state capture/restore, at least enough to eliminate these warnings.
7 Easy repro: Trim the very end of a tf2 trace, i.e. for 1 1273 frame trace do: ./voglreplay tf2_trace.bin -trim_frame 1200 -trim_file tf2_trimmed -trim_len 10000
8 then replay this trace: ./voglreplay -endless  tf2_trimmed
9
10
11 - Create two tracer SO filenames (32 and 64-bit), detect when the wrong tracer is used in a process - right now it asserts everywhere
12 - Use blob manager everywhere, add file blob manager
13 - Fix miniz so it supports zip64, hook it up to a blob manager
14 - Figure out how to get all state capture blobs into the binary trim file
15 - Add option to forceable loop at trace EOF back to a specific frame (no context deletion, snapshot restores, etc.)
16 This is actually what apitrace does in its trim files. It's bogus but in most game frames might actually work.
17 - In trim mode, the JSON snapshot file, and all referenced blobs are always written as a loose files that are referred to by the binary trace file. I need to fix this so it's possible to embed the entire snapshot+referred to object data blobs into a single binary trace.
18 - Need to modify the JSON packet serializer/deserializer so it uses the vogl_blob_manager interface (which is already used for snapshots), so everybody is using the same basic manager to handle blobs. 
19 - Add option to delete unused programs and textures from state snapshots, which should make a huge improvement to the looping perf of trimmed traces
20 - Fix base paths of the file blob manager (it currently always uses the current directory)
21 - Add option to write backbuffer CRC into trace file right before the interceptor processes glXSwapBuffers()'s, we can then automatically validate them during replay. Right now I do this semi-manually by using cmd line options and diff'ing text files of CRC's.
22 - Add single frame capture mode to the interceptor SO, which should be mostly straightforward now. This hardest part will be properly shadowing the necessary handles, which will require a proper way of wrapping glGetError()'s (so we can call glGetError() to build the proper shadow).
23 - Move ctypes and entrypoint radinternal packets so they are ALWAYS the first ones after SOF, so they can be immediately processed after a trace is opened. The current method of parsing them on the fly is a pain in the ass (because any code which wants to read a trace has to have support for parsing them).
24 - Add option to voglreplay's --dump command that only dumps a specific frame, instead of always dumping every single frame of the trace
25
26 - Supporting trimming straight to JSON. We only support tracing to binary right now. This may be too slow, I dunno.
27 - The state snapshot code doesn't currently save/restore the contents of renderbuffers, only their configuration. This has not been an issue in any Source1 games. We also don't save/restore the front or backbuffers.
28 - There's a whole slew of GL v3.x state that I need to add support for to the state capture/restore code.
29 Related: I stopped replay GL API compat work weeks ago, so we don't fully support GL v3.3 yet. This should only take ~1 week or so.
30 - Now that I can create/restore snapshots I can add backwards, forwards, paus, take snapshot, seek, etc. keys to the replayer
31 - Now that I have single frame traces I can work on things which would actually help someone debug a trace:
32 Pause frame and single step through draw calls
33 Write screenshots on every draw call (I only support every frame right now)
34 Dump all GL state at specific draw or GL call
35 Dump only reachable GL state at specific draw or GL call (just like apitrace can do)
36 Call stack/backtrace support
37 gRemedy debug marker support - test with Source1
38
39 - Add ability to disable program binaries during tracing (try disabling extension in interceptor and test with Serious Sam 3)
40 - Add all glX functions to whitelist, ensure they are in the replayer to avoid GL call without context errors during replay
41 - Check for mispelled/valid names in gl/glx whitelist text file.
42 - Add warning to texture state restore code when *recreating* incomplete textures (it only warns on capturing right now). Incomplete textures are very buggy on AMD, and just bad.
43 - GL state snapshots: Need to optimize shaders too, not just programs. On restore an optimized trim will contain many unused shaders which will be recreated and never used, or in dota you'll get restore warnings because these unused shaders where "marked as deleted" during capture and actually get deleted unexpectedly.
44 - Add original frame number to trimmed files (right now we loose this information during trimming and slam the trim's first frame to 0).
45 - Add UUID to trace file (done or almost done), add parent trace's UUID to trim trace
46 - Test on laptops with both intel and nvidia drivers (optirun?)
47 - Add the ability to only dump a specific set of frames to JSON, instead of always dumping every frame
48
49 - optionally add framebuffer crc and sums to glxswap packet during tracing for easier verification of traces
50 - Optimize client side array code in tracer and replayer (done every draw - make this smarter, don't do it unless the call stream actually uses CSA's)
51 - Steam texture handles are failing to be remapped in vogl_replayer::replay_to_trace_handle_remapper::remap_handle
52 - trying playing back with draw_kill_max_thresh and capturing the output using libvogltrace.so
53
54 - Eliminate as many VOGL_FAIL conditions as possible in the tracer. Goal should never exit() or abort() during tracing, this is BAD.
55
56 - Add a check/verification func to replayer that validates any shadows and handle hashmaps
57 - For state objects: verify that the compare methods actually work
58 - when glGetInteger differs, actually dump the GLenum pname so the user can see at a glance which value differed
59
60 - Make sure replayer can still play an incomplete trace file endlessly (right now it just exits at the end with a "Failed reading from trace file" error)
61 - Make sure tracer is recording the proper thread id (NOT the pthread id, but the one that the gdb debugger uses -there's a syscall to use)
62 - Speed up the ungodly slow hash table searches in handle_delete_shader(), handle_delete_program(), etc.- create a new container that handles replay->trace and trace->replay handle mappings at the same time
63 - When json filename ends in "]" the code which determines the actual trace filename to read gets confused?
64 - Steam textures (at 62000) are failing to be remapped from the replay to trace domains on capturing - why is this? the handle hashtable should be filled with these entries when the textures are initialized (but not genned, because they are steam textures)
65 - add glxgetcurrentcontext to replayer, and replayer whitelist 
66 - add minimal support for ARB programs to capture/restore code to avoid l4d2 warnings about glDeleteProgramsARB on last frame of a trimmed replay
67 - add __FILE__ and __LINE__ info to the GL error print routines, so we can get some context because the check_gl_error() calls are littered everywhere
68 - voglgen parses the bin/glspec files to generate the .inc files needed to build the other stuff:
69 This step needs to be put into cmake, right now I run it manually and run cp_inc_files.sh to copy the .inc's to /src/gliinc. 
70 voglgen reads from a bunch of different sources (spec files, glapi.py, custom text files for the whitelist, etc.) to build its API database, which was fine to get bootstrapped but we need to create our own JSON format that has ALL the 
71 GL spec/API/namespace/etc. data in a single place and ditch the other sources.
72 - Was seeing some odd texture target issues during trimming/replaying or looping of l4d2 traces
73 - need to add minimal ARB program save/restore support
74 - Add get_all_handles() or whatever API to all the state objects, so they can report back all the handles they refer to and their namespaces.
75 We can build a conservative tree of reachable objects, starting from the current context state and all the objects each packet refers to, in order to optimize the trace.
76 - When we replay an x86 trace on x64, or vice versa, and we encounter program binaries, we should warning the user that they are likely to not work (they won't on nvidia)
77 - Fix file blob manager so it doesn't overwrite already existing blobs and it warns the user
78 - trim of Half-Life 1 almost works - it looks like some sort of multitexture state is not saved or restored, so the first frame of a trimmed replay isn't textured
79 - sam3 trims: not finding programs?
80 - sam3 trimming: textures with base level !=0 aren't saving right, the ktx stuff dies
81
82 - glmaterialfv crashed during replay because one of the pname's (AMBIENT_AND_DIFFUSE) wasn't marked up right in the pname table
83 the replayer should catch cases like this BEFORE it calls GL
84 - Check the mode params of all the draw calls - there's an enum aliasing issue
85
86 - When keyframes from multiple captures are mixed into the same dir, voglreplay shits itself in interactive mode. Fix this -or add some sort of UUID detection.
87 - Add message to end of -info and something goes wrong, so the user doesn't miss any errors
88 - add a GLX error callback
89
90 - track glBegin/glEnd state in tracer, make sure when ctrl+c is pressed and we try to flush the contexts
91 that glEnd gets called if needed otherwise the maps won't work
92 - track display list creation in replayer 
93 - display list shadowing in replayer
94 - texture shadowing needs to be fully hooked up to the tracer and replayer, right now it still uses glIsTexture(), etc.
95
96 - test all the internal texture formats!
97 - add counter to error/warning output funcs, summarize at exit, especially in tools like voglgen
98 - Air Conflicts: Pacific Carriers uses share lists
99 - Trine2: Doesn't seem to destroy its contexts, and our atexit() isn't working?
100 - Trime2: Uses ARB programs extensively
101 - Window: Make sure the glx fbconfig's red/green/blue/alpha/stencil/depth config matches what the app wants, or bad bugs can happen
102 - Postal2: uses texgen
103
104 - in replayer: we really should have the option of calling glGetError() during tracing after each GL call and recording the results to check for divergence.
105 - when a GL error occurs, print the actual error msg, not a #
106 - try multitrimming every frame of a ~1000  frame darwinia trace, to repro the ktx file could not be validated error I saw earlier but could not repro
107
108 - Trine2: atexit() hook is not working, investigate replay warning: Warning: While processing GL entrypoint packet func glDeleteTextures, frame 1329, swaps 1329, GL call counter 51781546, packet start trace context 0xC9BD238, cur trace context 0xC9BD238, trace thread 0x7C7A:
109 - set pixelmap to defaults before calling glReadPixels in vogl_utils.cpp
110
111 - add pixel map support to snapshot and restore:
112 GL_PIXEL_MAP_A_TO_A_SIZE
113 GL_PIXEL_MAP_B_TO_B_SIZE
114 GL_PIXEL_MAP_G_TO_G_SIZE
115 GL_PIXEL_MAP_I_TO_A_SIZE
116 GL_PIXEL_MAP_I_TO_B_SIZE
117 GL_PIXEL_MAP_I_TO_G_SIZE
118 GL_PIXEL_MAP_I_TO_I_SIZE
119 GL_PIXEL_MAP_I_TO_R_SIZE
120 GL_PIXEL_MAP_R_TO_R_SIZE
121 GL_PIXEL_MAP_S_TO_S_SIZE
122 GL_POST_CONVOLUTION_COLOR_TABLE
123
124 - add current list detection to snapshot and restore (at least for warnings):
125 GL_LIST_MODE
126 GL_LIST_INDEX
127
128 - selection buffer save/restore? or at least a warning?
129 GL_SELECTION_BUFFER_POINTER
130 GL_SELECTION_BUFFER_SIZE
131
132 - multisample test from OGL superbible traces/replays OK, except the replay is not multisampled
133
134 - This OGL sample uses share lists and pbuffers:
135 http://www.codesampler.com/linuxsrc.htm
136
137 - the smooth OGLSB3 sample has window resize issues, it replays OK if you lock the window dimensions
138 - OGLSB3 imaging sample: make sure we're saving/restoring all the funky old fashioned state it uses (color table, convolution, histogram, etc.)
139 - operations OGLSG3 sample: need to lock window dimensions to replay, and on some frames the returned pixel data via glReadPixels() is different
140 - the pyramid sample inits the default texture (i.e. no binding or genning at all), which doesn't trim or capture properly. a single glBindTexture() fixes the problem - should we support this ancient behavior?
141 same for the toon sample
142 - tunnel sample: window dimension must be locked
143 - planets sample: name stack cannot be restored, stack underflow while paused in interactive mode, can't trim (all-black replay)
144 - mark traces that have been optimized so they can't be used as keyframes in interactive mode (right now you just get mysterious replay errors)
145 - add warning to tracer and replayer when the default object (like tex handle 0) is being initialized in old OGL SB 3rd edition samples
146 - tracing without --vogl_debug should print a message when a non-whitelisted func is traced!
147 - add regext to glige whitelist, and simple replay whitelist
148 - replayer: unified/cleaned up glGetError handling, like the tracer's
149 - possibly implement glArrayElement(), which will not be trivial (it's client side array madness)
150 - support the matrix palette? http://www.opengl.org/registry/specs/ARB/matrix_palette.txt
151
152 - make sure these states are being retrieved properly somewhere (vogl_general_context_state isn't glGet()'ing them)
153 ! GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
154 ! GL_TRANSFORM_FEEDBACK_BUFFER_START
155 ! GL_UNIFORM_BUFFER_SIZE
156 ! GL_UNIFORM_BUFFER_START
157 ! GL_SHADER_STORAGE_BUFFER_SIZE
158 ! GL_SHADER_STORAGE_BUFFER_START
159 ! GL_ATOMIC_COUNTER_BUFFER_BINDING
160 ! GL_MAX_COMPUTE_WORK_GROUP_COUNT
161 ! GL_MAX_COMPUTE_WORK_GROUP_SIZE
162 ! GL_VERTEX_BINDING_DIVISOR
163 ! GL_VERTEX_BINDING_OFFSET
164 ! GL_VERTEX_BINDING_STRIDE
165
166 - Set GLX error handler:
167 http://tronche.com/gui/x/xlib/event-handling/protocol-errors/XSetErrorHandler.html
168 https://www.opengl.org/discussion_boards/showthread.php/127616-obtaining-glX-errors
169
170
171 - Print warning/error when the client tries to change the target of a default object, especially textures (from OGL SB3)
172 - eliminate sscanf() usage everywhere!
173
174 - investigate shutdown issue: 
175 /dev/SuperBible-4/examples/projects/linux/chapt11/vbo
176 (vogltrace) Error: vogl_check_context: OpenGL function "glDeleteBuffers" called without an active context!
177 (vogltrace) Error: vogl_check_context: OpenGL function "glDeleteBuffers" called without an active context!
178 investigate save/restore issue on this model's glass 
179 ~/dev/SuperBible-4/examples/projects/linux/chapt11/thundergl$
180
181 shadowmap: scene appears mostly shadowed when paused, then sometimes renders normally - not sure why? I was messing with the bias during tracing
182 might be tied to initial window dimensions? if I lock the fboshadow sample to 512x512 it plays back fine
183 cd
184
185
186
187 - when an error is suppressed or latched, print the actual error string not just thex
188
189
190 - fboenvmap sample: something goes wrong in interactive mode when I pause - the env map stops updating when I unpause
191
192
193 - hdrbloom sample: corruption during replay?
194 OpenGL: GL_INVALID_OPERATION error generated. Invalid PBO operation. [source=API type=ERROR severity=HIGH id=1282]
195 glreadpixels problem
196
197 - pixbufobj: hit p and you get unable to find buffer handle blah blah blah errors during tracing
198 glreadpixels problem
199
200 - provide tracer option to NOT use async buffer readbacks for screenshots, because some apps misbehave and don't properly destroy their contexts
201
202 - add:
203 glFrameTerminatorGREMEDY
204 glStringMarkerGREMEDY
205 glXRender
206 glXRenderLarge
207 glXWaitGL
208 glXWaitX
209 glXCopyContext
210 glXCreateGLXPixmap
211 glXGetVisualConfigs
212 glXDestroyGLXPixmap
213 glXVendorPrivate
214 glXVendorPrivateWithReply
215 glXQueryServerString
216 glXClientInfo
217 glXGetDrawableAttributes
218 glXChangeDrawableAttributes
219 glDrawRangeElementsEXT
220 glClientAttribDefaultEXT
221 glPushClientAttribDefaultEXT
222 glMatrixLoadfEXT
223 glMatrixLoaddEXT
224 glMatrixMultfEXT
225 glMatrixMultdEXT
226 glMatrixLoadIdentityEXT
227 glMatrixRotatefEXT
228 glMatrixRotatedEXT
229 glMatrixScalefEXT
230 glMatrixScaledEXT
231 glMatrixTranslatefEXT
232 glMatrixTranslatedEXT
233 glMatrixFrustumEXT
234 glMatrixOrthoEXT
235 glMatrixPopEXT
236 glMatrixPushEXT
237 glMatrixLoadTransposefEXT
238 glMatrixLoadTransposedEXT
239 glMatrixMultTransposefEXT
240 glMatrixMultTransposedEXT
241 glTextureParameterfEXT
242 glTextureParameterfvEXT
243 glTextureParameteriEXT
244 glTextureParameterivEXT
245 glTextureImage1DEXT
246 glTextureImage2DEXT
247 glTextureSubImage1DEXT
248 glTextureSubImage2DEXT
249 glCopyTextureImage1DEXT
250 glCopyTextureImage2DEXT
251 glCopyTextureSubImage1DEXT
252 glCopyTextureSubImage2DEXT
253 glGetTextureImageEXT
254 glGetTextureParameterfvEXT
255 glGetTextureParameterivEXT
256 glGetTextureLevelParameterfvEXT
257 glGetTextureLevelParameterivEXT
258 glTextureImage3DEXT
259 glTextureSubImage3DEXT
260 glCopyTextureSubImage3DEXT
261 glMultiTexParameterfEXT
262 glMultiTexParameterfvEXT
263 glMultiTexParameteriEXT
264 glMultiTexParameterivEXT
265 glMultiTexImage1DEXT
266 glMultiTexImage2DEXT
267 glMultiTexSubImage1DEXT
268 glMultiTexSubImage2DEXT
269 glCopyMultiTexImage1DEXT
270 glCopyMultiTexImage2DEXT
271 glCopyMultiTexSubImage1DEXT
272 glCopyMultiTexSubImage2DEXT
273 glGetMultiTexImageEXT
274 glGetMultiTexParameterfvEXT
275 glGetMultiTexParameterivEXT
276 glGetMultiTexLevelParameterfvEXT
277 glGetMultiTexLevelParameterivEXT
278 glMultiTexImage3DEXT
279 glMultiTexSubImage3DEXT
280 glCopyMultiTexSubImage3DEXT
281 glMultiTexCoordPointerEXT
282 glMultiTexEnvfEXT
283 glMultiTexEnvfvEXT
284 glMultiTexEnviEXT
285 glMultiTexEnvivEXT
286 glMultiTexGendEXT
287 glMultiTexGendvEXT
288 glMultiTexGenfEXT
289 glMultiTexGenfvEXT
290 glMultiTexGeniEXT
291 glMultiTexGenivEXT
292 glGetMultiTexEnvfvEXT
293 glGetMultiTexEnvivEXT
294 glGetMultiTexGendvEXT
295 glGetMultiTexGenfvEXT
296 glGetMultiTexGenivEXT
297 glGetFloatIndexedvEXT
298 glGetDoubleIndexedvEXT
299 glGetPointerIndexedvEXT
300 glCompressedTextureImage3DEXT
301 glCompressedTextureImage2DEXT
302 glCompressedTextureImage1DEXT
303 glCompressedTextureSubImage3DEXT
304 glCompressedTextureSubImage2DEXT
305 glCompressedTextureSubImage1DEXT
306 glGetCompressedTextureImageEXT
307 glCompressedMultiTexImage3DEXT
308 glCompressedMultiTexImage2DEXT
309 glCompressedMultiTexImage1DEXT
310 glCompressedMultiTexSubImage3DEXT
311 glCompressedMultiTexSubImage2DEXT
312 glCompressedMultiTexSubImage1DEXT
313 glGetCompressedMultiTexImageEXT
314 glNamedProgramStringEXT
315 glNamedProgramLocalParameter4dEXT
316 glNamedProgramLocalParameter4dvEXT
317 glNamedProgramLocalParameter4fEXT
318 glGetNamedProgramLocalParameterdvEXT
319 glGetNamedProgramLocalParameterfvEXT
320 glGetNamedProgramivEXT
321 glGetNamedProgramStringEXT
322 glGetNamedProgramLocalParameterIivEXT
323 glGetNamedProgramLocalParameterIuivEXT
324 glTextureParameterIivEXT
325 glTextureParameterIuivEXT
326 glGetTextureParameterIivEXT
327 glGetTextureParameterIuivEXT
328 glMultiTexParameterIivEXT
329 glMultiTexParameterIuivEXT
330 glGetMultiTexParameterIivEXT
331 glGetMultiTexParameterIuivEXT
332 glProgramUniform1fEXT
333 glProgramUniform2fEXT
334 glProgramUniform3fEXT
335 glProgramUniform4fEXT
336 glProgramUniform1iEXT
337 glProgramUniform2iEXT
338 glProgramUniform3iEXT
339 glProgramUniform4iEXT
340 glProgramUniform1fvEXT
341 glProgramUniform2fvEXT
342 glProgramUniform3fvEXT
343 glProgramUniform4fvEXT
344 glProgramUniform1ivEXT
345 glProgramUniform2ivEXT
346 glProgramUniform3ivEXT
347 glProgramUniform4ivEXT
348 glProgramUniformMatrix2fvEXT
349 glProgramUniformMatrix3fvEXT
350 glProgramUniformMatrix4fvEXT
351 glProgramUniformMatrix2x3fvEXT
352 glProgramUniformMatrix3x2fvEXT
353 glProgramUniformMatrix2x4fvEXT
354 glProgramUniformMatrix4x2fvEXT
355 glProgramUniformMatrix3x4fvEXT
356 glProgramUniformMatrix4x3fvEXT
357 glProgramUniform1uiEXT
358 glProgramUniform2uiEXT
359 glProgramUniform3uiEXT
360 glProgramUniform4uiEXT
361 glProgramUniform1uivEXT
362 glProgramUniform2uivEXT
363 glProgramUniform3uivEXT
364 glProgramUniform4uivEXT
365 glNamedBufferDataEXT
366 glNamedBufferSubDataEXT
367 glMapNamedBufferEXT
368 glUnmapNamedBufferEXT
369 glMapNamedBufferRangeEXT
370 glFlushMappedNamedBufferRangeEXT
371 glNamedCopyBufferSubDataEXT
372 glGetNamedBufferParameterivEXT
373 glGetNamedBufferPointervEXT
374 glGetNamedBufferSubDataEXT
375 glTextureBufferEXT
376 glMultiTexBufferEXT
377 glNamedRenderbufferStorageEXT
378 glGetNamedRenderbufferParameterivEXT
379 glCheckNamedFramebufferStatusEXT
380 glNamedFramebufferTexture1DEXT
381 glNamedFramebufferTexture2DEXT
382 glNamedFramebufferTexture3DEXT
383 glNamedFramebufferRenderbufferEXT
384 glGetNamedFramebufferAttachmentParameterivEXT
385 glGenerateTextureMipmapEXT
386 glGenerateMultiTexMipmapEXT
387 glFramebufferDrawBufferEXT
388 glFramebufferDrawBuffersEXT
389 glFramebufferReadBufferEXT
390 glGetFramebufferParameterivEXT
391 glNamedRenderbufferStorageMultisampleEXT
392 glNamedRenderbufferStorageMultisampleCoverageEXT
393 glNamedFramebufferTextureEXT
394 glNamedFramebufferTextureLayerEXT
395 glNamedFramebufferTextureFaceEXT
396 glTextureRenderbufferEXT
397 glMultiTexRenderbufferEXT
398 glProgramUniform1dEXT
399 glProgramUniform2dEXT
400 glProgramUniform3dEXT
401 glProgramUniform4dEXT
402 glProgramUniform1dvEXT
403 glProgramUniform2dvEXT
404 glProgramUniform3dvEXT
405 glProgramUniform4dvEXT
406 glProgramUniformMatrix2dvEXT
407 glProgramUniformMatrix3dvEXT
408 glProgramUniformMatrix4dvEXT
409 glProgramUniformMatrix2x3dvEXT
410 glProgramUniformMatrix2x4dvEXT
411 glProgramUniformMatrix3x2dvEXT
412 glProgramUniformMatrix3x4dvEXT
413 glProgramUniformMatrix4x2dvEXT
414 glProgramUniformMatrix4x3dvEXT
415 glDepthBoundsEXT
416
417 glCopyTexImage1DEXT
418 glCopyTexImage2DEXT
419 glCopyTexSubImage1DEXT
420 glCopyTexSubImage2DEXT
421 glCopyTexSubImage3DEXT
422
423 glStencilOpSeparateATI
424 glStencilFuncSeparateATI
425
426 glGetFloati_v
427 glGetDoublei_v
428
429 glVertexP2ui
430 glVertexP2uiv
431 glVertexP3ui
432 glVertexP3uiv
433 glVertexP4ui
434 glVertexP4uiv
435 glTexCoordP4uiv
436 glMultiTexCoordP1ui
437 glMultiTexCoordP1uiv
438 glMultiTexCoordP2ui
439 glMultiTexCoordP2uiv
440 glMultiTexCoordP3ui
441 glMultiTexCoordP3uiv
442 glMultiTexCoordP4ui
443 glMultiTexCoordP4uiv
444 glSecondaryColorP3ui
445 glSecondaryColorP3uiv
446 glVertexAttribP1ui
447 glVertexAttribP1uiv
448 glVertexAttribP2ui
449 glVertexAttribP2uiv
450 glVertexAttribP3ui
451 glVertexAttribP3uiv
452 glVertexAttribP4ui
453 glVertexAttribP4uiv
454
455 glGetUniformIndices
456 glGetActiveUniformsiv
457 glGetActiveUniformName
458 glGetUniformBlockIndex
459 glGetActiveUniformBlockiv
460 glGetActiveUniformBlockName
461 glUniformBlockBinding
462
463 glTexStorage2DMultisample
464 glTexStorage3DMultisample
465 glTextureStorage2DMultisampleEXT
466 glTextureStorage3DMultisampleEXT
467
468 glTextureStorage1DEXT
469 glTextureStorage2DEXT
470 glTextureStorage3DEXT
471
472 glGetMultisamplefv
473 glSampleMaski
474
475 glCompressedTexSubImage3DARB
476 glCompressedTexSubImage2DARB
477 glCompressedTexSubImage1DARB
478 glGetCompressedTexImageARB
479
480 glIsSync
481 glWaitSync
482 glGetInteger64v
483 glGetSynciv
484
485 glBindImageTexture
486
487 --- Non-whitelisted funcs for partially supported category ARB_separate_shader_objects:
488 glUseProgramStages
489 glActiveShaderProgram
490 glCreateShaderProgramv
491 glBindProgramPipeline
492 glDeleteProgramPipelines
493 glGenProgramPipelines
494 glIsProgramPipeline
495 glGetProgramPipelineiv
496 glProgramUniform1iv
497 glProgramUniform1fv
498 glProgramUniform1d
499 glProgramUniform1dv
500 glProgramUniform1uiv
501 glProgramUniform2iv
502 glProgramUniform2fv
503 glProgramUniform2d
504 glProgramUniform2dv
505 glProgramUniform2uiv
506 glProgramUniform3iv
507 glProgramUniform3fv
508 glProgramUniform3d
509 glProgramUniform3dv
510 glProgramUniform3uiv
511 glProgramUniform4iv
512 glProgramUniform4fv
513 glProgramUniform4d
514 glProgramUniform4dv
515 glProgramUniform4uiv
516 glProgramUniformMatrix2fv
517 glProgramUniformMatrix3fv
518 glProgramUniformMatrix4fv
519 glProgramUniformMatrix2dv
520 glProgramUniformMatrix3dv
521 glProgramUniformMatrix4dv
522 glProgramUniformMatrix2x3fv
523 glProgramUniformMatrix3x2fv
524 glProgramUniformMatrix2x4fv
525 glProgramUniformMatrix4x2fv
526 glProgramUniformMatrix3x4fv
527 glProgramUniformMatrix4x3fv
528 glProgramUniformMatrix2x3dv
529 glProgramUniformMatrix3x2dv
530 glProgramUniformMatrix2x4dv
531 glProgramUniformMatrix4x2dv
532 glProgramUniformMatrix3x4dv
533 glProgramUniformMatrix4x3dv
534 glValidateProgramPipeline
535 glGetProgramPipelineInfoLog
536
537 --- Non-whitelisted funcs for partially supported category ARB_sampler_objects:
538 glIsSampler
539 glGetSamplerParameteriv
540 glGetSamplerParameterIiv
541 glGetSamplerParameterfv
542 glGetSamplerParameterIuiv
543
544 --- Non-whitelisted funcs for unsupported category ARB_sample_shading:
545 glMinSampleShadingARB
546
547 --- Non-whitelisted funcs for unsupported category ARB_provoking_vertex:
548 glProvokingVertex
549
550 --- Non-whitelisted funcs for unsupported category ARB_program_interface_query:
551 glGetProgramInterfaceiv
552 glGetProgramResourceIndex
553 glGetProgramResourceName
554 glGetProgramResourceiv
555 glGetProgramResourceLocation
556 glGetProgramResourceLocationIndex
557
558 --- Non-whitelisted funcs for unsupported category ARB_point_parameters:
559 glPointParameterfARB
560 glPointParameterfvARB
561
562 --- Non-whitelisted funcs for unsupported category ARB_point_parameters:
563 glPointParameterfARB
564 glPointParameterfvARB
565
566 --- Non-whitelisted funcs for unsupported category ARB_multisample:
567 glSampleCoverageARB
568
569 --- Non-whitelisted funcs for unsupported category ARB_multi_draw_indirect:
570 glMultiDrawArraysIndirect
571 glMultiDrawElementsIndirect
572
573 --- Non-whitelisted funcs for unsupported category ARB_invalidate_subdata:
574 glInvalidateTexSubImage
575 glInvalidateTexImage
576 glInvalidateBufferSubData
577 glInvalidateBufferData
578 glInvalidateFramebuffer
579 glInvalidateSubFramebuffer
580
581 --- Non-whitelisted funcs for unsupported category ARB_internalformat_query2:
582 glGetInternalformati64v
583
584 --- Non-whitelisted funcs for unsupported category ARB_internalformat_query:
585 glGetInternalformativ
586
587 --- Non-whitelisted funcs for unsupported category ARB_gpu_shader_fp64:
588 glUniform1d
589 glUniform2d
590 glUniform3d
591 glUniform4d
592 glUniform1dv
593 glUniform2dv
594 glUniform3dv
595 glUniform4dv
596 glUniformMatrix2dv
597 glUniformMatrix3dv
598 glUniformMatrix4dv
599 glUniformMatrix2x3dv
600 glUniformMatrix2x4dv
601 glUniformMatrix3x2dv
602 glUniformMatrix3x4dv
603 glUniformMatrix4x2dv
604 glUniformMatrix4x3dv
605 glGetUniformdv
606
607 --- Non-whitelisted funcs for partially supported category ARB_geometry_shader4:
608 glFramebufferTextureARB
609 glFramebufferTextureLayerARB
610 glFramebufferTextureFaceARB
611
612 --- Non-whitelisted funcs for unsupported category ARB_framebuffer_no_attachments:
613 glFramebufferParameteri
614 glGetFramebufferParameteriv
615 glNamedFramebufferParameteriEXT
616 glGetNamedFramebufferParameterivEXT
617
618 --- Non-whitelisted funcs for partially supported category ARB_draw_instanced:
619 glDrawArraysInstancedARB
620
621 --- Non-whitelisted funcs for unsupported category ARB_draw_indirect:
622 glDrawArraysIndirect
623 glDrawElementsIndirect
624
625 --- Non-whitelisted funcs for unsupported category ARB_copy_image:
626 glCopyImageSubData
627
628 --- Non-whitelisted funcs for unsupported category ARB_copy_buffer:
629 glCopyBufferSubData
630
631 --- Non-whitelisted funcs for unsupported category ARB_compute_shader:
632 glDispatchCompute
633 glDispatchComputeIndirect
634
635 --- Non-whitelisted funcs for unsupported category ARB_clear_buffer_object:
636 glClearBufferData
637 glClearBufferSubData
638 glClearNamedBufferDataEXT
639 glClearNamedBufferSubDataEXT
640
641 --- Non-whitelisted funcs for unsupported category ARB_blend_func_extended:
642 glBindFragDataLocationIndexed
643 glGetFragDataIndex
644
645 --- Non-whitelisted funcs for unsupported category ARB_base_instance:
646 glDrawArraysInstancedBaseInstance
647 glDrawElementsInstancedBaseInstance
648 glDrawElementsInstancedBaseVertexBaseInstance
649
650 --- Non-whitelisted funcs for unsupported category AMD_sparse_texture:
651 glTexStorageSparseAMD
652 glTextureStorageSparseAMD
653
654 --- Non-whitelisted funcs for unsupported category AMD_sample_positions:
655 glSetMultisamplefvAMD
656
657 --- Non-whitelisted funcs for unsupported category AMD_multi_draw_indirect:
658 glMultiDrawArraysIndirectAMD
659 glMultiDrawElementsIndirectAMD
660
661 --- Non-whitelisted funcs for unsupported category AMD_debug_output:
662 glDebugMessageEnableAMD
663 glDebugMessageInsertAMD
664 glDebugMessageCallbackAMD
665 glGetDebugMessageLogAMD
666
667 --- Non-whitelisted funcs for partially supported category VERSION_4_0:
668 glMinSampleShading
669
670 - make sure glBindBufferRange and glBindBufferBase are snapshottable/restorable
671
672 - store/restore the transform feedback varyings when snapshottting glTransformFeedbackVaryings
673
674 - make sure glUniformBlockBinding can be saved/restored for programs
675
676 - fix GL_UNIFORM_BUFFER_BINDING and  GL_TRANSFORM_FEEDBACK_BUFFER_BINDING so we save/restore the binding offsets/sizes
677
678 - support remapping uniform block locations in vogl_program_state.cpp/.h
679 right now, if the restore uniform block indices don't match then GL calls after restoring may fuck with the wrong uniform blocks..
680
681 - support transform feedback save/restore: GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, etc.
682
683 - investigate properly saving/restoring these indexed gets: 
684 GL_VERTEX_BINDING_DIVISOR
685 GL_VERTEX_BINDING_OFFSET
686 GL_VERTEX_BINDING_STRIDE
687
688 - add tracking to all glEnables, settextureparameters, etc. to get a summary of ALL changed shit during a replay
689
690 - when glGetUniformBlockIndex is dumped, I can't read name text in json? 
691
692 - Fix glget save/restore of GL_SHADER_STORAGE_BUFFER_BINDING, etc.
693 fix: GL_MAX_COMPUTE_WORK_GROUP_COUNT
694 fix: DEFINE_GL_GET(GL_VERTEX_BINDING_DIVISOR, 0x0043, 0x99)
695 fix: DEFINE_GL_GET(GL_VERTEX_BINDING_OFFSET, 0x0043, 0x99)
696 fix: DEFINE_GL_GET(GL_VERTEX_BINDING_STRIDE, 0x0043, 0x99)
697
698 - support immutable textures for state restore:  "Support immutable textures"
699
700 - on steamstorm, frame 1, the  call to glGetShaderInfoLog serializes a lot of data?
701       {
702          "func" : "glGetShaderInfoLog",
703          "thread_id" : "0x6AE4",
704          "context" : "0xA9C3D98",
705          "call_counter" : 760,
706          "crc32" : 1694730611,
707          "begin_rdtsc" : 1195040200320663,
708          "end_rdtsc" : 1195040200337628,
709          "gl_begin_rdtsc" : 1195040200322625,
710          "gl_end_rdtsc" : 1195040200324308,
711          "serialize_rdtsc" : 1195040200338687,
712          "rnd_check" : 56535,
713          "inv_rnd_check" : 9000,
714          "params" : {
715             "shader" : "0x5",
716             "bufSize" : 16384,
717             "length" : "0x0",
718             "infoLog" : {
719                "ptr" : "0x00000000FFCB895C",
720                "mem_size" : 16384,
721                "crc64" : "0xB91EC748BD035646",
722                
723                
724 - on steelstorm: investigate why this happens when replaying trims
725 Debug: vogl_gl_replayer::handle_marked_for_deleted_objects: Snapshot object type Shader trace handle 0x6 restore handle 0x4, was marked as deleted, then deleted after a full state restore, but the object which should still be referenced by state in the GL context fails the glIsProgram()/glIsShader()/etc. test
726                
727 - when a shader or program fails to restore, don't just exit immediately but try to continue to help with manual shader debugging
728
729 - make it so we can easily add new GL funcs without fucking up all previous traces
730
731 - in a dumped trace, the internal format is decimal?
732          "func" : "glTexImage2D",
733          "thread_id" : "0x3929",
734          "context" : "0xC0CAD68",
735          "call_counter" : 942332,
736          "crc32" : 1225146760,
737          "begin_rdtsc" : 1216626688778208,
738          "end_rdtsc" : 1216626689100246,
739          "gl_begin_rdtsc" : 1216626688863279,
740          "gl_end_rdtsc" : 1216626689099835,
741          "serialize_rdtsc" : 1216626689103471,
742          "rnd_check" : 37096,
743          "inv_rnd_check" : 28439,
744          "params" : {
745             "target" : "GL_TEXTURE_2D",
746             "level" : 0,
747             "internalformat" : 6408,
748
749 - implement indexed version of GL_COLOR_WRITEMASK, glColorMaski
750
751 - when playing back full-stream P1 traces with the steam overlay, I'm seeing this on steam overlay texture handles:
752 Error: vogl_gl_replayer::process_gl_entrypoint_packet: Replay's returned GLboolean differed from trace's! Replay: 1 Trace: 0
753 Wtf?
754
755 - recording a trace is SLOW on AMD drivers (but only while actually recording - why?)
756
757 - glIsSampler is called during state snapshots - why? is it to cache deletes samplers that are still bound?
758
759 - add a regex grep so we can ignore certain ARB debug callback messages, or just print them once, because both drivers can be super chatty
760
761 - hook glDeleteShader: If shader has already been flagged for deletion by a call to glDeleteShader and it is not attached to any other program object, it will be deleted after it has been detached.
762
763 - add glBindFragDataLocation saving/restoring to vogl_program_state
764
765 - expose extensions for glFrameTerminatorGREMEDY and glStringMarkerGREMEDY during tracing
766
767 - support these khr extensions:
768 glDebugMessageControl
769 glDebugMessageInsert
770 glDebugMessageCallback
771 glPushDebugGroup
772 glPopDebugGroup
773 glObjectLabel
774 glObjectPtrLabel
775
776 - add sharelist usage warning that's more easily noticed: (vogltrace) Warning: vogl_glXCreateContextAttribsARB: Share lists are not supported!
777
778 - when the driver crashes during tracing, try to flush the final packet that's being composed so we can repro the crashes
779
780 - support UNIFORM_BUFFER_EXT buffer type
781
782 - sharelists:
783 display lists
784 buffers
785 textures - glx spec: "a texture object will not be deleted until it is no longer bound to any rendering context"
786 gl 2.1 ref: "if a texture that is currently bound is deleted, the binding reverts to 0 (the default texture)."
787 from gl4.1 spec: "Automatic Unbinding of Deleted Objects
788 When a buffer, texture, or renderbuffer object is deleted, it is unbound from any
789 bind points it is bound to in the current context, as described for DeleteBuffers,
790 DeleteTextures, and DeleteRenderbuffers. Bind points in other contexts are not
791 affected."
792 "glsl objects": shaders, programs
793 query objects
794 sync objects
795 sampler objects
796 renderbuffers
797 transform feedback
798
799
800 - support glDebugMessageCallback, glDebugMessageControl
801
802
803
804 - vogl_gl_replayer::check_gl_error_internal: Should this check if any context is current?
805
806 - Air combat: creates a lot of contexts which cause the replayer to pause on 1x1 windows
807 fix this!
808
809 - When objects are deleted in a sharegroup, add checks to ensure they aren't bound in other contexts.
810 ACTC does this.
811
812 - Add check when snapshotting during tracing that all handles in the general state are valid (in a shadow)
813 - Modify remap_handle() method so it can return a failure status
814
815 - In A Virus Named Tom fullstream paused: Debug:
816 vogl_gl_replayer::handle_marked_for_deleted_objects (10059): Snapshot object type
817 Shader trace handle 0x12 restore handle 0xC, was marked as deleted, then deleted
818 after a full state restore, but the object which should still be referenced by
819 state in the GL context fails the glIsProgram()/glIsShader()/etc. test
820
821 - Debug Ultratron during tracing: it uses glXCreateWindow, glXDestroyWindow, and glxCreateNewContext()
822 It fails to start during tracing, no idea why yet
823
824 - War for the Underworld: Mono game, seems very unreliable to startup even when not tracing - with tracing it just sits there
825
826 - Penumbra Black Plague: uses texture rectangles
827
828 - The Cave full-stream replay is fine, but there's some texture corruption or something in interactive mode when snapshotted/restored
829
830 - Fix FBO state snapshot serialization/deserialization so it prints the draw and read buffer GLenum's by name:
831   "Framebuffer" : [
832                {
833                   "handle" : 1,
834                   "has_been_bound" : true,
835                   "status" : "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",
836                   "read_buffer" : 36064,
837                   "draw_buffers" : [ 36064, 0, 0, 0, 0, 0, 0, 0 ],
838                   "attachments" : [ ]
839                },
840
841 - investigate why Shadowrun Returns and Doom3 crash at exit while tracing
842 this is causing trace archives to be incomplete