glColorTableEXT
glColorTableParameterfv
glColorTableParameteriv
+glCombinerInputNV
+glCombinerOutputNV
+glCombinerParameterfNV
+glCombinerParameterfvNV
+glCombinerParameteriNV
+glCombinerParameterivNV
glCompileShader
glCompileShaderARB
glCompressedTexImage1D
glEvalPoint2
glFeedbackBuffer
glFenceSync
+glFinalCombinerInputNV
glFinish
glFlush
glFlushMappedBufferRange
Name: "size", Type: "BufferSize", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "DrawElementsBaseVertex", ParamNames: 5, Params: 5, Return: "void", Category: "ARB_draw_elements_base_vertex", Version: "1.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "count", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "DrawElementsType", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indices", Type: "Void", Direction: "in", Semantic: "array", ArraySize: "[COMPSIZE(count,type)]", Retained: 0
Name: "basevertex", Type: "Int32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "DrawRangeElementsBaseVertex", ParamNames: 7, Params: 7, Return: "void", Category: "ARB_draw_elements_base_vertex", Version: "1.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "start", Type: "UInt32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "end", Type: "UInt32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "count", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "basevertex", Type: "Int32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "DrawElementsInstancedBaseVertex", ParamNames: 6, Params: 6, Return: "void", Category: "ARB_draw_elements_base_vertex", Version: "1.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "count", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "DrawElementsType", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indices", Type: "Void", Direction: "in", Semantic: "array", ArraySize: "[COMPSIZE(count,type)]", Retained: 0
Name: "basevertex", Type: "Int32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "MultiDrawElementsBaseVertex", ParamNames: 6, Params: 6, Return: "void", Category: "ARB_draw_elements_base_vertex", Version: "1.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "count", Type: "SizeI", Direction: "in", Semantic: "array", ArraySize: "[drawcount]", Retained: 0
Name: "type", Type: "DrawElementsType", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indices", Type: "ConstVoidPointer", Direction: "in", Semantic: "array", ArraySize: "[drawcount]", Retained: 0
Name: "indirect", Type: "Void", Direction: "in", Semantic: "array", ArraySize: "[]", Retained: 0
Name: "DrawElementsIndirect", ParamNames: 3, Params: 3, Return: "void", Category: "ARB_draw_indirect", Version: "1.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indirect", Type: "Void", Direction: "in", Semantic: "array", ArraySize: "[]", Retained: 0
Name: "baseinstance", Type: "UInt32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "DrawElementsInstancedBaseInstance", ParamNames: 6, Params: 6, Return: "void", Category: "ARB_base_instance", Version: "4.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "count", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indices", Type: "void", Direction: "in", Semantic: "array", ArraySize: "[count]", Retained: 0
Name: "baseinstance", Type: "UInt32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "DrawElementsInstancedBaseVertexBaseInstance", ParamNames: 7, Params: 7, Return: "void", Category: "ARB_base_instance", Version: "4.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "count", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indices", Type: "void", Direction: "in", Semantic: "array", ArraySize: "[count]", Retained: 0
Name: "stride", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "MultiDrawElementsIndirect", ParamNames: 5, Params: 5, Return: "void", Category: "ARB_multi_draw_indirect", Version: "4.3", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indirect", Type: "void", Direction: "in", Semantic: "array", ArraySize: "[COMPSIZE(drawcount,stride)]", Retained: 0
Name: "drawcount", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "stride", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "MultiDrawElementsIndirectAMD", ParamNames: 5, Params: 5, Return: "void", Category: "AMD_multi_draw_indirect", Version: "4.0", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indirect", Type: "Void", Direction: "in", Semantic: "array", ArraySize: "[]", Retained: 0
Name: "primcount", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "size", Type: "BufferSize", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "DrawElementsBaseVertex", ParamNames: 5, Params: 5, Return: "void", Category: "ARB_draw_elements_base_vertex", Version: "1.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "count", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "DrawElementsType", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indices", Type: "Void", Direction: "in", Semantic: "array", ArraySize: "[COMPSIZE(count,type)]", Retained: 0
Name: "basevertex", Type: "Int32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "DrawRangeElementsBaseVertex", ParamNames: 7, Params: 7, Return: "void", Category: "ARB_draw_elements_base_vertex", Version: "1.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "start", Type: "UInt32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "end", Type: "UInt32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "count", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "basevertex", Type: "Int32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "DrawElementsInstancedBaseVertex", ParamNames: 6, Params: 6, Return: "void", Category: "ARB_draw_elements_base_vertex", Version: "1.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "count", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "DrawElementsType", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indices", Type: "Void", Direction: "in", Semantic: "array", ArraySize: "[COMPSIZE(count,type)]", Retained: 0
Name: "basevertex", Type: "Int32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "MultiDrawElementsBaseVertex", ParamNames: 6, Params: 6, Return: "void", Category: "ARB_draw_elements_base_vertex", Version: "1.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "count", Type: "SizeI", Direction: "in", Semantic: "array", ArraySize: "[drawcount]", Retained: 0
Name: "type", Type: "DrawElementsType", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indices", Type: "ConstVoidPointer", Direction: "in", Semantic: "array", ArraySize: "[drawcount]", Retained: 0
Name: "indirect", Type: "Void", Direction: "in", Semantic: "array", ArraySize: "[]", Retained: 0
Name: "DrawElementsIndirect", ParamNames: 3, Params: 3, Return: "void", Category: "ARB_draw_indirect", Version: "1.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indirect", Type: "Void", Direction: "in", Semantic: "array", ArraySize: "[]", Retained: 0
Name: "baseinstance", Type: "UInt32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "DrawElementsInstancedBaseInstance", ParamNames: 6, Params: 6, Return: "void", Category: "ARB_base_instance", Version: "4.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "count", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indices", Type: "void", Direction: "in", Semantic: "array", ArraySize: "[count]", Retained: 0
Name: "baseinstance", Type: "UInt32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "DrawElementsInstancedBaseVertexBaseInstance", ParamNames: 7, Params: 7, Return: "void", Category: "ARB_base_instance", Version: "4.2", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "count", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indices", Type: "void", Direction: "in", Semantic: "array", ArraySize: "[count]", Retained: 0
Name: "stride", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "MultiDrawElementsIndirect", ParamNames: 5, Params: 5, Return: "void", Category: "ARB_multi_draw_indirect", Version: "4.3", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indirect", Type: "void", Direction: "in", Semantic: "array", ArraySize: "[COMPSIZE(drawcount,stride)]", Retained: 0
Name: "drawcount", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "stride", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "MultiDrawElementsIndirectAMD", ParamNames: 5, Params: 5, Return: "void", Category: "AMD_multi_draw_indirect", Version: "4.0", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
- Name: "mode", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
+ Name: "mode", Type: "BeginMode", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "type", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "indirect", Type: "Void", Direction: "in", Semantic: "array", ArraySize: "[]", Retained: 0
Name: "primcount", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
glActiveTexture
glActiveTextureARB
glAlphaFunc
-glBitmap
glBlendColor
glBlendColorEXT
glBlendEquation
glColorP3uiv
glColorP4ui
glColorP4uiv
-glColorSubTable
-glColorSubTableEXT
-glColorTable
-glColorTableEXT
glColorTableParameterfv
glColorTableParameteriv
glCombinerInputNV
glCompressedTexSubImage2DARB
glCompressedTexSubImage3D
glCompressedTexSubImage3DARB
-glConvolutionFilter1D
-glConvolutionFilter2D
glConvolutionParameterf
glConvolutionParameterfv
glConvolutionParameteri
glDrawBuffer
glDrawBuffers
glDrawBuffersARB
-glDrawPixels
glEdgeFlag
glEdgeFlagv
glEnable
glPolygonMode
glPolygonOffset
glPolygonOffsetEXT
-glPolygonStipple
glPopAttrib
glPopClientAttrib
glPopMatrix
glTexGenfv
glTexGeni
glTexGeniv
-glTexImage1D
-glTexImage2D
glTexImage2DMultisample
glTexImage2DMultisampleCoverageNV
-glTexImage3D
-glTexImage3DEXT
glTexImage3DMultisample
glTexImage3DMultisampleCoverageNV
glTexParameterf
glTexStorage2DMultisample
glTexStorage3D
glTexStorage3DMultisample
-glTexSubImage1D
-glTexSubImage1DEXT
-glTexSubImage2D
-glTexSubImage2DEXT
-glTexSubImage3D
-glTexSubImage3DEXT
glTextureStorage1DEXT
glTextureStorage2DEXT
glTextureStorage2DMultisampleEXT
glBindTexture
glBindTextureEXT
glBindVertexArray
+glBitmap
glBlitFramebuffer
glBlitFramebufferEXT
glBufferData
glClientWaitSync
glColorPointer
glColorPointerEXT
+glColorSubTable
+glColorSubTableEXT
+glColorTable
+glColorTableEXT
glCompileShader
glCompileShaderARB
+glConvolutionFilter1D
+glConvolutionFilter2D
glCreateProgram
glCreateProgramObjectARB
glCreateShader
glDrawElementsInstancedARB
glDrawElementsInstancedBaseVertex
glDrawElementsInstancedEXT
+glDrawPixels
glDrawRangeElements
glDrawRangeElementsBaseVertex
glDrawRangeElementsEXT
glFlushMappedBufferRange
glFogCoordPointer
glFogCoordPointerEXT
-glFrameTerminatorGREMEDY
glFramebufferRenderbuffer
glFramebufferRenderbufferEXT
glFramebufferTexture
glFramebufferTexture3DEXT
glFramebufferTextureLayer
glFramebufferTextureLayerEXT
+glFrameTerminatorGREMEDY
glGenBuffers
glGenBuffersARB
glGenFramebuffers
glGetActiveAttrib
glGetActiveAttribARB
glGetActiveSubroutineName
-glGetActiveSubroutineUniformName
glGetActiveSubroutineUniformiv
+glGetActiveSubroutineUniformName
glGetActiveUniform
glGetActiveUniformARB
-glGetActiveUniformBlockName
glGetActiveUniformBlockiv
+glGetActiveUniformBlockName
glGetActiveUniformName
glGetActiveUniformsiv
glGetActiveUniformsiv
glGetAttachedShaders
glGetAttribLocation
glGetAttribLocationARB
-glGetBooleanIndexedvEXT
glGetBooleani_v
+glGetBooleanIndexedvEXT
glGetBooleanv
glGetBufferParameteri64v
glGetBufferParameteriv
glGetDebugMessageLogAMD
glGetDebugMessageLogARB
glGetDetailTexFuncSGIS
-glGetDoubleIndexedvEXT
glGetDoublei_v
+glGetDoubleIndexedvEXT
glGetDoublev
glGetError
glGetFenceivNV
glGetFinalCombinerInputParameterfvNV
glGetFinalCombinerInputParameterivNV
glGetFixedvOES
-glGetFloatIndexedvEXT
glGetFloati_v
+glGetFloatIndexedvEXT
glGetFloatv
glGetFogFuncSGIS
glGetFragDataIndex
glGetInstrumentsSGIX
glGetInteger64i_v
glGetInteger64v
-glGetIntegerIndexedvEXT
glGetIntegeri_v
+glGetIntegerIndexedvEXT
glGetIntegerui64i_vNV
glGetIntegerui64vNV
glGetIntegerv
glGetMapAttribParameterfvNV
glGetMapAttribParameterivNV
glGetMapControlPointsNV
-glGetMapParameterfvNV
-glGetMapParameterivNV
glGetMapdv
glGetMapfv
glGetMapiv
+glGetMapParameterfvNV
+glGetMapParameterivNV
glGetMapxvOES
glGetMaterialfv
glGetMaterialiv
glGetMinmaxParameterfvEXT
glGetMinmaxParameteriv
glGetMinmaxParameterivEXT
+glGetMultisamplefv
+glGetMultisamplefv
+glGetMultisamplefvNV
glGetMultiTexEnvfvEXT
glGetMultiTexEnvivEXT
glGetMultiTexGendvEXT
glGetMultiTexImageEXT
glGetMultiTexLevelParameterfvEXT
glGetMultiTexLevelParameterivEXT
+glGetMultiTexParameterfvEXT
glGetMultiTexParameterIivEXT
glGetMultiTexParameterIuivEXT
-glGetMultiTexParameterfvEXT
glGetMultiTexParameterivEXT
-glGetMultisamplefv
-glGetMultisamplefv
-glGetMultisamplefvNV
glGetNamedBufferParameterivEXT
glGetNamedBufferParameterui64vNV
glGetNamedBufferPointervEXT
glGetNamedBufferSubDataEXT
glGetNamedFramebufferAttachmentParameterivEXT
glGetNamedFramebufferParameterivEXT
-glGetNamedProgramLocalParameterIivEXT
-glGetNamedProgramLocalParameterIuivEXT
+glGetNamedProgramivEXT
glGetNamedProgramLocalParameterdvEXT
glGetNamedProgramLocalParameterfvEXT
+glGetNamedProgramLocalParameterIivEXT
+glGetNamedProgramLocalParameterIuivEXT
glGetNamedProgramStringEXT
-glGetNamedProgramivEXT
glGetNamedRenderbufferParameterivEXT
glGetNamedStringARB
glGetNamedStringivARB
+glGetnColorTableARB
+glGetnCompressedTexImageARB
+glGetnConvolutionFilterARB
+glGetnHistogramARB
+glGetnMapdvARB
+glGetnMapfvARB
+glGetnMapivARB
+glGetnMinmaxARB
+glGetnPixelMapfvARB
+glGetnPixelMapuivARB
+glGetnPixelMapusvARB
+glGetnPolygonStippleARB
+glGetnSeparableFilterARB
+glGetnTexImageARB
+glGetnUniformdvARB
+glGetnUniformfvARB
+glGetnUniformivARB
+glGetnUniformuivARB
glGetObjectBufferfvATI
glGetObjectBufferivATI
glGetObjectLabel
glGetPathTexGenivNV
glGetPerfMonitorCounterDataAMD
glGetPerfMonitorCounterInfoAMD
-glGetPerfMonitorCounterStringAMD
glGetPerfMonitorCountersAMD
-glGetPerfMonitorGroupStringAMD
+glGetPerfMonitorCounterStringAMD
glGetPerfMonitorGroupsAMD
+glGetPerfMonitorGroupStringAMD
glGetPixelMapfv
glGetPixelMapuiv
glGetPixelMapusv
glGetPointervEXT
glGetPolygonStipple
glGetProgramBinary
-glGetProgramEnvParameterIivNV
-glGetProgramEnvParameterIuivNV
glGetProgramEnvParameterdvARB
glGetProgramEnvParameterfvARB
+glGetProgramEnvParameterIivNV
+glGetProgramEnvParameterIuivNV
glGetProgramInfoLog
glGetProgramInterfaceiv
-glGetProgramLocalParameterIivNV
-glGetProgramLocalParameterIuivNV
+glGetProgramiv
+glGetProgramivARB
+glGetProgramivNV
glGetProgramLocalParameterdvARB
glGetProgramLocalParameterfvARB
+glGetProgramLocalParameterIivNV
+glGetProgramLocalParameterIuivNV
glGetProgramNamedParameterdvNV
glGetProgramNamedParameterfvNV
glGetProgramParameterdvNV
glGetProgramPipelineInfoLog
glGetProgramPipelineiv
glGetProgramResourceIndex
+glGetProgramResourceiv
glGetProgramResourceLocation
glGetProgramResourceLocationIndex
glGetProgramResourceName
-glGetProgramResourceiv
glGetProgramStageiv
glGetProgramStringARB
glGetProgramStringNV
glGetProgramSubroutineParameteruivNV
-glGetProgramiv
-glGetProgramivARB
-glGetProgramivNV
glGetQueryIndexediv
+glGetQueryiv
+glGetQueryivARB
glGetQueryObjecti64v
glGetQueryObjecti64vEXT
glGetQueryObjectiv
glGetQueryObjectui64vEXT
glGetQueryObjectuiv
glGetQueryObjectuivARB
-glGetQueryiv
-glGetQueryivARB
glGetRenderbufferParameteriv
glGetRenderbufferParameterivEXT
+glGetSamplerParameterfv
glGetSamplerParameterIiv
glGetSamplerParameterIuiv
-glGetSamplerParameterfv
glGetSamplerParameteriv
glGetSeparableFilter
glGetSeparableFilterEXT
glGetShaderInfoLog
+glGetShaderiv
glGetShaderPrecisionFormat
glGetShaderSource
glGetShaderSourceARB
-glGetShaderiv
glGetSharpenTexFuncSGIS
glGetString
glGetStringi
glGetTexLevelParameterfv
glGetTexLevelParameteriv
glGetTexLevelParameterxvOES
+glGetTexParameterfv
glGetTexParameterIiv
glGetTexParameterIivEXT
glGetTexParameterIuiv
glGetTexParameterIuivEXT
-glGetTexParameterPointervAPPLE
-glGetTexParameterfv
glGetTexParameteriv
+glGetTexParameterPointervAPPLE
glGetTexParameterxvOES
glGetTextureHandleNV
glGetTextureImageEXT
glGetTextureLevelParameterfvEXT
glGetTextureLevelParameterivEXT
+glGetTextureParameterfvEXT
glGetTextureParameterIivEXT
glGetTextureParameterIuivEXT
-glGetTextureParameterfvEXT
glGetTextureParameterivEXT
glGetTextureSamplerHandleNV
glGetTrackMatrixivNV
glGetTransformFeedbackVaryingNV
glGetUniformBlockIndex
glGetUniformBufferSizeEXT
-glGetUniformIndices
-glGetUniformIndices
-glGetUniformLocation
-glGetUniformLocationARB
-glGetUniformOffsetEXT
-glGetUniformSubroutineuiv
glGetUniformdv
glGetUniformfv
glGetUniformfvARB
glGetUniformi64vNV
+glGetUniformIndices
+glGetUniformIndices
glGetUniformiv
glGetUniformivARB
+glGetUniformLocation
+glGetUniformLocationARB
+glGetUniformOffsetEXT
+glGetUniformSubroutineuiv
glGetUniformui64vNV
glGetUniformuiv
glGetUniformuivEXT
glGetVaryingLocationNV
glGetVertexAttribArrayObjectfvATI
glGetVertexAttribArrayObjectivATI
+glGetVertexAttribdv
+glGetVertexAttribdvARB
+glGetVertexAttribdvNV
+glGetVertexAttribfv
+glGetVertexAttribfvARB
+glGetVertexAttribfvNV
glGetVertexAttribIiv
glGetVertexAttribIivEXT
glGetVertexAttribIuiv
glGetVertexAttribIuivEXT
+glGetVertexAttribiv
+glGetVertexAttribivARB
+glGetVertexAttribivNV
glGetVertexAttribLdv
glGetVertexAttribLdvEXT
glGetVertexAttribLi64vNV
glGetVertexAttribPointerv
glGetVertexAttribPointervARB
glGetVertexAttribPointervNV
-glGetVertexAttribdv
-glGetVertexAttribdvARB
-glGetVertexAttribdvNV
-glGetVertexAttribfv
-glGetVertexAttribfvARB
-glGetVertexAttribfvNV
-glGetVertexAttribiv
-glGetVertexAttribivARB
-glGetVertexAttribivNV
+glGetVideoCaptureivNV
glGetVideoCaptureStreamdvNV
glGetVideoCaptureStreamfvNV
glGetVideoCaptureStreamivNV
-glGetVideoCaptureivNV
glGetVideoi64vNV
glGetVideoivNV
glGetVideoui64vNV
glGetVideouivNV
-glGetnColorTableARB
-glGetnCompressedTexImageARB
-glGetnConvolutionFilterARB
-glGetnHistogramARB
-glGetnMapdvARB
-glGetnMapfvARB
-glGetnMapivARB
-glGetnMinmaxARB
-glGetnPixelMapfvARB
-glGetnPixelMapuivARB
-glGetnPixelMapusvARB
-glGetnPolygonStippleARB
-glGetnSeparableFilterARB
-glGetnTexImageARB
-glGetnUniformdvARB
-glGetnUniformfvARB
-glGetnUniformivARB
-glGetnUniformuivARB
glIndexPointer
glIndexPointerEXT
glInterleavedArrays
glIsBuffer
glIsBufferARB
glIsEnabled
-glIsEnabledIndexedEXT
glIsEnabledi
+glIsEnabledIndexedEXT
glIsFramebuffer
glIsFramebufferEXT
glIsList
glNewList
glNormalPointer
glNormalPointerEXT
+glPolygonStipple
glPrioritizeTextures
glPrioritizeTexturesEXT
glProgramBinary
glProgramUniformMatrix4x3fv
glQueryCounter
glReadPixels
-glSamplerParameterIiv
-glSamplerParameterIuiv
glSamplerParameterf
glSamplerParameterfv
glSamplerParameteri
+glSamplerParameterIiv
+glSamplerParameterIuiv
glSamplerParameteriv
glSecondaryColorPointer
glSecondaryColorPointerEXT
glTexBufferEXT
glTexCoordPointer
glTexCoordPointerEXT
+glTexImage1D
+glTexImage2D
+glTexImage3D
+glTexImage3DEXT
+glTexSubImage1D
+glTexSubImage1DEXT
+glTexSubImage2D
+glTexSubImage2DEXT
+glTexSubImage3D
+glTexSubImage3DEXT
glTransformFeedbackVaryings
glUniform1f
glUniform1fARB
// File: vogl_buffer_state.cpp
#include "vogl_common.h"
#include "vogl_buffer_state.h"
+#include "vogl_gl_state_snapshot.h"
vogl_buffer_state::vogl_buffer_state()
: m_snapshot_handle(0),
return false;
}
- if (m_params.get_value<int>(GL_BUFFER_MAPPED) != 0)
+ int buf_size = m_params.get_value<int>(GL_BUFFER_SIZE);
+ if (buf_size < 0)
{
- vogl_error_printf("%s: Can't snapshot buffer %" PRIu64 " target %s while it's currently mapped\n", VOGL_METHOD_NAME,
- (uint64_t)handle, g_gl_enums.find_gl_name(target));
+ vogl_error_printf("%s: Invalid buffer size, buffer %" PRIu64 " target %s size %i\n", VOGL_METHOD_NAME, (uint64_t)handle, g_gl_enums.find_gl_name(target), buf_size);
clear();
return false;
}
- int buf_size = m_params.get_value<int>(GL_BUFFER_SIZE);
- if (buf_size < 0)
+ if (m_params.get_value<int>(GL_BUFFER_MAPPED) != 0)
{
- vogl_error_printf("%s: Invalid buffer size, buffer %" PRIu64 " target %s size %i\n", VOGL_METHOD_NAME, (uint64_t)handle, g_gl_enums.find_gl_name(target), buf_size);
+ vogl_error_printf("%s: Can't snapshot buffer %" PRIu64 " target %s while it's currently mapped\n", VOGL_METHOD_NAME,
+ (uint64_t)handle, g_gl_enums.find_gl_name(target));
clear();
return false;
}
return true;
}
+void vogl_buffer_state::set_mapped_buffer_snapshot_state(const vogl_mapped_buffer_desc &map_desc)
+{
+ VOGL_FUNC_TRACER
+
+ VOGL_ASSERT(map_desc.m_buffer == m_snapshot_handle);
+
+ m_is_mapped = true;
+
+ m_map_ofs = map_desc.m_offset;
+ m_map_size = map_desc.m_length;
+ m_map_access = map_desc.m_access;
+ m_map_range = map_desc.m_range;
+}
+
bool vogl_buffer_state::restore(const vogl_context_info &context_info, vogl_handle_remapper &remapper, GLuint64 &handle) const
{
VOGL_FUNC_TRACER
m_buffer_data.clear();
m_params.clear();
m_is_valid = false;
+
+ m_map_ofs = 0;
+ m_map_size = 0;
+ m_map_access = 0;
+ m_map_range = false;
+ m_is_mapped = false;
}
bool vogl_buffer_state::serialize(json_node &node, vogl_blob_manager &blob_manager) const
node.add_key_value("target", g_gl_enums.find_gl_name(m_target));
node.add_key_value("buffer_data_blob_id", blob_id);
+ node.add_key_value("map_ofs", m_map_ofs);
+ node.add_key_value("map_size", m_map_size);
+ node.add_key_value("map_access", m_map_access);
+ node.add_key_value("map_range", m_map_range);
+ node.add_key_value("is_mapped", m_is_mapped);
+
if (!m_params.serialize(node.add_object("params"), blob_manager))
return false;
}
}
+ m_map_ofs = node.value_as_uint64("map_ofs");
+ m_map_size = node.value_as_uint64("map_size");
+ m_map_access = node.value_as_uint32("map_access");
+ m_map_range = node.value_as_bool("map_range");
+ m_is_mapped = node.value_as_bool("is_mapped");
+
m_is_valid = true;
return true;
return true;
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include "vogl_blob_manager.h"
#include "vogl_vec.h"
+struct vogl_mapped_buffer_desc;
+
class vogl_buffer_state : public vogl_gl_object_state
{
public:
virtual bool snapshot(const vogl_context_info &context_info, vogl_handle_remapper &remapper, GLuint64 handle, GLenum target);
+ void set_mapped_buffer_snapshot_state(const vogl_mapped_buffer_desc &map_desc);
+
virtual bool restore(const vogl_context_info &context_info, vogl_handle_remapper &remapper, GLuint64 &handle) const;
virtual bool remap_handles(vogl_handle_remapper &remapper);
return m_params;
}
+ // Whether or not the buffer was currently mapped when it was snapshotted. Note we don't actually support snapshotting the buffer
+ // while it's mapped (we unmap it first), this data comes from the replayer's shadow. We also don't restore it in a mapped state, that's up to the caller.
+ bool get_is_map_range() const { return m_map_range; }
+ bool get_is_mapped() const { return m_is_mapped; }
+ uint64_t get_map_ofs() const { return m_map_ofs; }
+ uint64_t get_map_size() const { return m_map_size; }
+ uint get_map_access() const { return m_map_access; }
+
private:
GLuint m_snapshot_handle;
GLenum m_target;
vogl_state_vector m_params;
+ uint64_t m_map_ofs;
+ uint64_t m_map_size;
+ uint m_map_access;
+ bool m_map_range;
+ bool m_is_mapped;
+
bool m_is_valid;
};
{
VOGL_FUNC_TRACER
- if (!m_valid)
- return false;
-
node.add_key_value("handle", m_handle);
+ node.add_key_value("valid", m_valid);
node.add_key_value("generating", m_generating);
node.add_key_value("xfont", m_xfont);
+
if (m_xfont)
{
node.add_key_value("xfont_glyph", m_xfont_glyph);
clear();
m_handle = node.value_as_uint32("handle");
+ m_valid = node.value_as_bool("valid", true);
m_generating = node.value_as_bool("generating");
m_xfont = node.value_as_bool("xfont");
+
if (m_xfont)
{
m_xfont_glyph = node.value_as_int("xfont_glyph");
}
}
- m_valid = true;
-
return true;
}
for (vogl_display_list_map::const_iterator it = m_display_lists.begin(); it != m_display_lists.end(); ++it)
{
- if (!it->second.is_valid())
- {
- vogl_warning_printf("%s: Unable to serialize display list at GL handle %u. This list is probably still being composed.\n", VOGL_METHOD_NAME, it->second.get_handle());
- continue;
- }
+ // It's OK if the display list isn't valid yet, it might just have been genned and not used.
if (!it->second.serialize(lists_node.add_object(uint_to_string(it->first)), blob_manager, pCtypes))
return false;
}
{
VOGL_FUNC_TRACER
+ if (!m_pCur_gl_packet)
+ return;
+
dump_packet_as_func_call(*m_pCur_gl_packet);
if (!(m_flags & cGLReplayerDumpPacketsOnError))
{
VOGL_FUNC_TRACER
+ // HACK HACK
+ //if (m_pCur_gl_packet->get_call_counter() == 25583)
+ // vogl_debug_break();
+
//vogl_trace_context_ptr_value trace_context = gl_packet.m_context_handle;
if (trace_context == m_cur_trace_context)
return cStatusOK;
GLuint replay_id = it->second;
- for (uint i = 0; i < get_shared_state()->m_mapped_buffers.size(); i++)
+ vogl_mapped_buffer_desc_vec &mapped_bufs = get_shared_state()->m_shadow_state.m_mapped_buffers;
+
+ for (uint i = 0; i < mapped_bufs.size(); i++)
{
- if (get_shared_state()->m_mapped_buffers[i].m_buffer == replay_id)
+ if (mapped_bufs[i].m_buffer == replay_id)
{
process_entrypoint_warning("%s: glDeleteBuffers() called on mapped trace buffer %u GL buffer %u\n", VOGL_METHOD_NAME, trace_id, replay_id);
- get_shared_state()->m_mapped_buffers.erase_unordered(i);
+ mapped_bufs.erase_unordered(i);
break;
}
}
GLuint buffer = vogl_get_bound_gl_buffer(target);
if (buffer)
{
+ vogl_mapped_buffer_desc_vec &mapped_bufs = get_shared_state()->m_shadow_state.m_mapped_buffers;
+
uint i;
- for (i = 0; i < get_shared_state()->m_mapped_buffers.size(); i++)
+ for (i = 0; i < mapped_bufs.size(); i++)
{
- if (get_shared_state()->m_mapped_buffers[i].m_buffer == buffer)
+ if (mapped_bufs[i].m_buffer == buffer)
{
process_entrypoint_warning("%s: glBufferData() called on already mapped GL buffer %u, assuming GL will be unmapping it\n", VOGL_METHOD_NAME, buffer);
- get_shared_state()->m_mapped_buffers.erase_unordered(i);
+ mapped_bufs.erase_unordered(i);
break;
}
}
GLuint buffer = vogl_get_bound_gl_buffer(target);
+ vogl_mapped_buffer_desc_vec &mapped_bufs = get_shared_state()->m_shadow_state.m_mapped_buffers;
+
uint i;
- for (i = 0; i < get_shared_state()->m_mapped_buffers.size(); i++)
+ for (i = 0; i < mapped_bufs.size(); i++)
{
- if (get_shared_state()->m_mapped_buffers[i].m_buffer == buffer)
+ if (mapped_bufs[i].m_buffer == buffer)
{
process_entrypoint_error("%s: Buffer %u is already mapped\n", VOGL_METHOD_NAME, buffer);
return cStatusHardFailure;
}
}
- if (i == get_shared_state()->m_mapped_buffers.size())
+ if (i == mapped_bufs.size())
{
GLint length = 0;
GL_ENTRYPOINT(glGetBufferParameteriv)(target, GL_BUFFER_SIZE, &length);
- mapped_buffer_desc m;
+ vogl_mapped_buffer_desc m;
m.m_buffer = buffer;
m.m_target = target;
m.m_offset = 0;
m.m_access = access;
m.m_range = false;
m.m_pPtr = pMap;
- get_shared_state()->m_mapped_buffers.push_back(m);
+ mapped_bufs.push_back(m);
}
}
return cStatusHardFailure;
}
+ vogl_mapped_buffer_desc_vec &mapped_bufs = get_shared_state()->m_shadow_state.m_mapped_buffers;
+
GLuint buffer = vogl_get_bound_gl_buffer(target);
uint i;
- for (i = 0; i < get_shared_state()->m_mapped_buffers.size(); i++)
+ for (i = 0; i < mapped_bufs.size(); i++)
{
- if (get_shared_state()->m_mapped_buffers[i].m_buffer == buffer)
+ if (mapped_bufs[i].m_buffer == buffer)
{
process_entrypoint_error("%s: Buffer %u is already mapped\n", VOGL_METHOD_NAME, buffer);
return cStatusHardFailure;
}
}
- if (i == get_shared_state()->m_mapped_buffers.size())
+ if (i == mapped_bufs.size())
{
- mapped_buffer_desc m;
+ vogl_mapped_buffer_desc m;
m.m_buffer = buffer;
m.m_target = target;
m.m_offset = offset;
m.m_access = access;
m.m_range = true;
m.m_pPtr = pMap;
- get_shared_state()->m_mapped_buffers.push_back(m);
+ mapped_bufs.push_back(m);
}
}
// FIXME - must call GL even if !buffer
if (buffer)
{
+ vogl_mapped_buffer_desc_vec &mapped_bufs = get_shared_state()->m_shadow_state.m_mapped_buffers;
+
uint mapped_buffers_index;
- for (mapped_buffers_index = 0; mapped_buffers_index < get_shared_state()->m_mapped_buffers.size(); mapped_buffers_index++)
- if (get_shared_state()->m_mapped_buffers[mapped_buffers_index].m_buffer == buffer)
+ for (mapped_buffers_index = 0; mapped_buffers_index < mapped_bufs.size(); mapped_buffers_index++)
+ if (mapped_bufs[mapped_buffers_index].m_buffer == buffer)
break;
- if (mapped_buffers_index == get_shared_state()->m_mapped_buffers.size())
+ if (mapped_buffers_index == mapped_bufs.size())
{
process_entrypoint_error("%s: Unable to find mapped buffer during unmap\n", VOGL_METHOD_NAME);
return cStatusHardFailure;
}
- mapped_buffer_desc &map_desc = get_shared_state()->m_mapped_buffers[mapped_buffers_index];
+ vogl_mapped_buffer_desc &map_desc = mapped_bufs[mapped_buffers_index];
bool writable_map = false;
bool explicit_bit = false;
}
}
- get_shared_state()->m_mapped_buffers.erase_unordered(mapped_buffers_index);
+ get_shared_state()->m_shadow_state.m_mapped_buffers.erase_unordered(mapped_buffers_index);
}
GLboolean replay_result;
// TODO
break;
}
+ case VOGL_ENTRYPOINT_glBitmap:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glBitmap;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(6);
+ pTrace_bitmap = (const GLubyte *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glBitmap;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glColorSubTable:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glColorSubTable;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(5);
+ pTrace_data = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glColorSubTable;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glColorSubTableEXT:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glColorSubTableEXT;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(5);
+ pTrace_data = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glColorSubTableEXT;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glColorTable:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glColorTable;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(5);
+ pTrace_table = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glColorTable;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glColorTableEXT:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glColorTableEXT;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(5);
+ pTrace_table = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glColorTableEXT;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glConvolutionFilter1D:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glConvolutionFilter1D;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(5);
+ pTrace_image = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glConvolutionFilter1D;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glConvolutionFilter2D:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glConvolutionFilter2D;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(6);
+ pTrace_image = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glConvolutionFilter2D;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glDrawPixels:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glDrawPixels;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(4);
+ pTrace_pixels = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glDrawPixels;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glPolygonStipple:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glPolygonStipple;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(0);
+ pTrace_mask = (const GLubyte *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glPolygonStipple;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glTexImage1D:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glTexImage1D;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(7);
+ pTrace_pixels = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glTexImage1D;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glTexImage2D:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glTexImage2D;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(8);
+ pTrace_pixels = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glTexImage2D;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glTexImage3D:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glTexImage3D;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(9);
+ pTrace_pixels = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glTexImage3D;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glTexImage3DEXT:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glTexImage3DEXT;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(9);
+ pTrace_pixels = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glTexImage3DEXT;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glTexSubImage1D:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glTexSubImage1D;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(6);
+ pTrace_pixels = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glTexSubImage1D;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glTexSubImage1DEXT:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glTexSubImage1DEXT;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(6);
+ pTrace_pixels = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glTexSubImage1DEXT;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glTexSubImage2D:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glTexSubImage2D;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(8);
+ pTrace_pixels = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glTexSubImage2D;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glTexSubImage2DEXT:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glTexSubImage2DEXT;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(8);
+ pTrace_pixels = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glTexSubImage2DEXT;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glTexSubImage3D:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glTexSubImage3D;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(10);
+ pTrace_pixels = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glTexSubImage3D;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glTexSubImage3DEXT:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glTexSubImage3DEXT;
+
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ {
+ vogl_trace_ptr_value ptr_val = trace_packet.get_param_ptr_value(10);
+ pTrace_pixels = (const GLvoid *)ptr_val;
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glTexSubImage3DEXT;
+
+ break;
+ }
case VOGL_ENTRYPOINT_glAreTexturesResident:
case VOGL_ENTRYPOINT_glAreTexturesResidentEXT:
case VOGL_ENTRYPOINT_glGetActiveAtomicCounterBufferiv:
}
}
- VOGL_ASSERT_ALWAYS;
-
+ // This is BAD.
vogl_error_printf("%s: Failed remapping handle %" PRIu64 " in namespace %s. This is either a handle shadowing bug, or this object was deleted while it was still bound on another context or attached to an object.\n", VOGL_METHOD_NAME, replay_handle, vogl_get_namespace_name(handle_namespace));
+ VOGL_ASSERT_ALWAYS;
+
return replay_handle;
}
pSnapshot->set_is_restorable(false);
}
- if (get_shared_state()->m_mapped_buffers.size())
- {
- vogl_warning_printf("%s: Trace context 0x%" PRIX64 " has %u currently mapped GL buffers, this scenario is not currently unsupported for state capturing. Capture will continue but will not be replayable.\n", VOGL_METHOD_NAME, cast_val_to_uint64(it->first), get_shared_state()->m_mapped_buffers.size());
- pSnapshot->set_is_restorable(false);
- }
// Init the shadow state needed by the snapshot code.
if (!m_pCur_context_state->is_root_context())
GLenum target = arb_prog_it->second;
pShadow_state->m_arb_program_targets.insert(replay_handle, target);
}
- }
- }
+
+ // Deal with any currently mapped buffers.
+ vogl_mapped_buffer_desc_vec &mapped_bufs = get_shared_state()->m_shadow_state.m_mapped_buffers;
+
+ pShadow_state->m_mapped_buffers = mapped_bufs;
+
+ if (mapped_bufs.size())
+ {
+ vogl_warning_printf("%s: %u buffer(s) are currently mapped, these will be temporarily unmapped in order to snapshot them and then remapped\n", VOGL_METHOD_NAME, m_pCur_context_state->m_shadow_state.m_mapped_buffers.size());
+
+ for (uint i = 0; i < mapped_bufs.size(); i++)
+ {
+ vogl_mapped_buffer_desc &desc = mapped_bufs[i];
+
+ GLuint prev_handle = vogl_get_bound_gl_buffer(desc.m_target);
+
+ GL_ENTRYPOINT(glBindBuffer)(desc.m_target, desc.m_buffer);
+ VOGL_CHECK_GL_ERROR;
+
+ GL_ENTRYPOINT(glUnmapBuffer)(desc.m_target);
+ VOGL_CHECK_GL_ERROR;
+
+ desc.m_pPtr = NULL;
+
+ GL_ENTRYPOINT(glBindBuffer)(desc.m_target, prev_handle);
+ VOGL_CHECK_GL_ERROR;
+ }
+ }
+
+ } // if (!m_pCur_context_state->is_root_context())
+
+ } // if (pContext_state->m_has_been_made_current)
if (!pSnapshot->capture_context(pContext_state->m_context_desc, pContext_state->m_context_info, m_replay_to_trace_remapper, *pShadow_state))
{
vogl_error_printf("%s: Failed capturing trace context 0x%" PRIX64 ", capture failed\n", VOGL_METHOD_NAME, static_cast<uint64_t>(it->first));
break;
}
+
+ if ((pContext_state->m_has_been_made_current) && (m_pCur_context_state->is_root_context()))
+ {
+ vogl_mapped_buffer_desc_vec &mapped_bufs = get_shared_state()->m_shadow_state.m_mapped_buffers;
+
+ // Now remap any mapped buffers
+ for (uint i = 0; i < mapped_bufs.size(); i++)
+ {
+ vogl_mapped_buffer_desc &desc = mapped_bufs[i];
+
+ GLuint prev_handle = vogl_get_bound_gl_buffer(desc.m_target);
+
+ GL_ENTRYPOINT(glBindBuffer)(desc.m_target, desc.m_buffer);
+ VOGL_CHECK_GL_ERROR;
+
+ if (desc.m_range)
+ {
+ desc.m_pPtr = GL_ENTRYPOINT(glMapBufferRange)(desc.m_target, static_cast<GLintptr>(desc.m_offset), static_cast<GLsizeiptr>(desc.m_length), desc.m_access);
+ VOGL_CHECK_GL_ERROR;
+ }
+ else
+ {
+ desc.m_pPtr = GL_ENTRYPOINT(glMapBuffer)(desc.m_target, desc.m_access);
+ VOGL_CHECK_GL_ERROR;
+ }
+
+ GL_ENTRYPOINT(glBindBuffer)(desc.m_target, prev_handle);
+ VOGL_CHECK_GL_ERROR;
+
+ }
+ }
}
if ((it == m_contexts.end()) && (pSnapshot->end_capture()))
break;
}
+ case cGLSTBuffer:
+ {
+ const vogl_buffer_state *pBuf = static_cast<const vogl_buffer_state *>(pState_obj);
+
+ // Check if the buffer was mapped during the snapshot, if so remap it and record the ptr in the replayer's context shadow.
+ if (pBuf->get_is_mapped())
+ {
+ vogl_mapped_buffer_desc map_desc;
+ map_desc.m_buffer = static_cast<GLuint>(restore_handle);
+ map_desc.m_target = pBuf->get_target();
+ map_desc.m_offset = pBuf->get_map_ofs();
+ map_desc.m_length = pBuf->get_map_size();
+ map_desc.m_access = pBuf->get_map_access();
+ map_desc.m_range = pBuf->get_is_map_range();
+
+ GLuint prev_handle = vogl_get_bound_gl_buffer(map_desc.m_target);
+
+ GL_ENTRYPOINT(glBindBuffer)(map_desc.m_target, map_desc.m_buffer);
+ VOGL_CHECK_GL_ERROR;
+
+ if (map_desc.m_range)
+ {
+ map_desc.m_pPtr = GL_ENTRYPOINT(glMapBufferRange)(map_desc.m_target, static_cast<GLintptr>(map_desc.m_offset), static_cast<GLintptr>(map_desc.m_length), map_desc.m_access);
+ VOGL_CHECK_GL_ERROR;
+ }
+ else
+ {
+ map_desc.m_pPtr = GL_ENTRYPOINT(glMapBuffer)(map_desc.m_target, map_desc.m_access);
+ VOGL_CHECK_GL_ERROR;
+ }
+
+ GL_ENTRYPOINT(glBindBuffer)(map_desc.m_target, prev_handle);
+ VOGL_CHECK_GL_ERROR;
+
+ vogl_mapped_buffer_desc_vec &mapped_bufs = get_shared_state()->m_shadow_state.m_mapped_buffers;
+ mapped_bufs.push_back(map_desc);
+ }
+
+ break;
+ }
default:
break;
}
continue;
}
- if (!disp_list.is_valid())
- {
- VOGL_ASSERT_ALWAYS;
- continue;
- }
-
GLuint replay_handle = GL_ENTRYPOINT(glGenLists)(1);
if (check_gl_error() || !replay_handle)
goto handle_failure;
- if (disp_list.is_xfont())
+ if (disp_list.is_valid())
{
- XFontStruct *pXFont = xfont_cache.get_or_create(disp_list.get_xfont_name().get_ptr());
- if (!pXFont)
+ if (disp_list.is_xfont())
{
- vogl_error_printf("%s: Unable to load XFont \"%s\", can't recreate trace display list %u!\n", VOGL_METHOD_NAME, disp_list.get_xfont_name().get_ptr(), trace_handle);
+ XFontStruct *pXFont = xfont_cache.get_or_create(disp_list.get_xfont_name().get_ptr());
+ if (!pXFont)
+ {
+ vogl_error_printf("%s: Unable to load XFont \"%s\", can't recreate trace display list %u!\n", VOGL_METHOD_NAME, disp_list.get_xfont_name().get_ptr(), trace_handle);
+ }
+ else
+ {
+ GL_ENTRYPOINT(glXUseXFont)(pXFont->fid, disp_list.get_xfont_glyph(), 1, replay_handle);
+ }
}
else
{
- GL_ENTRYPOINT(glXUseXFont)(pXFont->fid, disp_list.get_xfont_glyph(), 1, replay_handle);
- }
- }
- else
- {
- GL_ENTRYPOINT(glNewList)(replay_handle, GL_COMPILE);
+ GL_ENTRYPOINT(glNewList)(replay_handle, GL_COMPILE);
- if (check_gl_error() || !replay_handle)
- {
- GL_ENTRYPOINT(glDeleteLists)(replay_handle, 1);
- check_gl_error();
+ if (check_gl_error() || !replay_handle)
+ {
+ GL_ENTRYPOINT(glDeleteLists)(replay_handle, 1);
+ check_gl_error();
- goto handle_failure;
- }
+ goto handle_failure;
+ }
- const vogl_trace_packet_array &packets = disp_list.get_packets();
+ const vogl_trace_packet_array &packets = disp_list.get_packets();
- for (uint packet_index = 0; packet_index < packets.size(); packet_index++)
- {
- if (packets.get_packet_type(packet_index) != cTSPTGLEntrypoint)
+ for (uint packet_index = 0; packet_index < packets.size(); packet_index++)
{
- vogl_error_printf("%s: Unexpected display list packet type %u, packet index %u, can't fully recreate trace display list %u!\n", VOGL_METHOD_NAME, packets.get_packet_type(packet_index), packet_index, trace_handle);
- continue;
- }
+ if (packets.get_packet_type(packet_index) != cTSPTGLEntrypoint)
+ {
+ vogl_error_printf("%s: Unexpected display list packet type %u, packet index %u, can't fully recreate trace display list %u!\n", VOGL_METHOD_NAME, packets.get_packet_type(packet_index), packet_index, trace_handle);
+ continue;
+ }
- const uint8_vec &packet_buf = packets.get_packet_buf(packet_index);
+ const uint8_vec &packet_buf = packets.get_packet_buf(packet_index);
- if (!m_temp2_gl_packet.deserialize(packet_buf, true))
- {
- vogl_error_printf("%s: Failed deserializing display list at packet index %u, can't fully recreate trace display list %u!\n", VOGL_METHOD_NAME, packet_index, trace_handle);
- continue;
- }
+ if (!m_temp2_gl_packet.deserialize(packet_buf, true))
+ {
+ vogl_error_printf("%s: Failed deserializing display list at packet index %u, can't fully recreate trace display list %u!\n", VOGL_METHOD_NAME, packet_index, trace_handle);
+ continue;
+ }
- vogl_trace_gl_entrypoint_packet &gl_entrypoint_packet = m_temp2_gl_packet.get_entrypoint_packet();
+ vogl_trace_gl_entrypoint_packet &gl_entrypoint_packet = m_temp2_gl_packet.get_entrypoint_packet();
- gl_entrypoint_packet.m_context_handle = m_cur_trace_context;
+ gl_entrypoint_packet.m_context_handle = m_cur_trace_context;
- if (m_flags & cGLReplayerDebugMode)
- dump_trace_gl_packet_debug_info(gl_entrypoint_packet);
+ if (m_flags & cGLReplayerDebugMode)
+ dump_trace_gl_packet_debug_info(gl_entrypoint_packet);
- int64_t prev_parsed_call_counter = m_last_parsed_call_counter;
- int64_t prev_processed_call_counter = m_last_processed_call_counter;
- m_last_parsed_call_counter = gl_entrypoint_packet.m_call_counter;
- m_last_processed_call_counter = gl_entrypoint_packet.m_call_counter;
- bool prev_at_frame_boundary = m_at_frame_boundary;
+ int64_t prev_parsed_call_counter = m_last_parsed_call_counter;
+ int64_t prev_processed_call_counter = m_last_processed_call_counter;
+ m_last_parsed_call_counter = gl_entrypoint_packet.m_call_counter;
+ m_last_processed_call_counter = gl_entrypoint_packet.m_call_counter;
+ bool prev_at_frame_boundary = m_at_frame_boundary;
- const vogl_trace_packet *pPrev_gl_packet = m_pCur_gl_packet;
+ const vogl_trace_packet *pPrev_gl_packet = m_pCur_gl_packet;
- m_pCur_gl_packet = &m_temp2_gl_packet;
+ m_pCur_gl_packet = &m_temp2_gl_packet;
- vogl_gl_replayer::status_t status = process_gl_entrypoint_packet_internal(m_temp2_gl_packet);
+ vogl_gl_replayer::status_t status = process_gl_entrypoint_packet_internal(m_temp2_gl_packet);
- m_pCur_gl_packet = pPrev_gl_packet;
+ m_pCur_gl_packet = pPrev_gl_packet;
- m_last_parsed_call_counter = prev_parsed_call_counter;
- m_last_processed_call_counter = prev_processed_call_counter;
- m_at_frame_boundary = prev_at_frame_boundary;
+ m_last_parsed_call_counter = prev_parsed_call_counter;
+ m_last_processed_call_counter = prev_processed_call_counter;
+ m_at_frame_boundary = prev_at_frame_boundary;
- if (status != cStatusOK)
+ if (status != cStatusOK)
+ {
+ vogl_error_printf("%s: Failed recreating display list at packet index %u, can't fully recreate trace display list %u!\n", VOGL_METHOD_NAME, packet_index, trace_handle);
+ continue;
+ }
+ }
+
+ // TODO: Set context state because we're currently generating a display list!
+ if (disp_list.is_generating())
{
- vogl_error_printf("%s: Failed recreating display list at packet index %u, can't fully recreate trace display list %u!\n", VOGL_METHOD_NAME, packet_index, trace_handle);
- continue;
+ VOGL_ASSERT_ALWAYS;
}
- }
- // TODO: Set context state because we're currently generating a display list!
- if (disp_list.is_generating())
- {
- VOGL_ASSERT_ALWAYS;
+ GL_ENTRYPOINT(glEndList)();
+ check_gl_error();
}
-
- GL_ENTRYPOINT(glEndList)();
- check_gl_error();
}
get_shared_state()->m_lists.insert(trace_handle, replay_handle);
}
}
- return write_trim_file_internal(trim_packets, trim_filename, trace_reader, (flags & cWriteTrimFileOptimizeSnapshot) != 0, pSnapshot_id);
+ if (!write_trim_file_internal(trim_packets, trim_filename, trace_reader, (flags & cWriteTrimFileOptimizeSnapshot) != 0, pSnapshot_id))
+ {
+ console::warning("%s: Trim file write failed, deleting invalid trim trace file %s\n", VOGL_METHOD_NAME, trim_filename.get_ptr());
+
+ file_utils::delete_file(trim_filename.get_ptr());
+ return false;
+ }
+
+ return true;
}
};
typedef vogl::hash_map<GLuint, glsl_program_state> glsl_program_hash_map;
- struct mapped_buffer_desc
- {
- GLuint m_buffer;
- GLenum m_target;
- vogl_trace_ptr_value m_offset;
- vogl_trace_ptr_value m_length;
- GLbitfield m_access;
- bool m_range;
- void *m_pPtr;
- };
-
class context_state
{
VOGL_NO_COPY_OR_ASSIGNMENT_OP(context_state);
GLuint m_cur_replay_program;
GLuint m_cur_trace_program;
- vogl::vector<mapped_buffer_desc> m_mapped_buffers;
-
vogl::vector<GLfloat> m_feedback_buffer;
vogl::vector<GLuint> m_select_buffer;
vogl_error_printf("%s: GL program %u was snapshotted with a successful link status, but the link snapshot shadow doesn't contain this program!\n", VOGL_METHOD_NAME, handle);
}
}
+ else if (state_type == cGLSTBuffer)
+ {
+ // Determine if this buffer has been mapped. I don't expect this array to be very big (typically empty) so a simple search is fine.
+ uint j;
+ for (j = 0; j < capture_params.m_mapped_buffers.size(); j++)
+ if (capture_params.m_mapped_buffers[j].m_buffer == handle)
+ break;
+
+ if (j < capture_params.m_mapped_buffers.size())
+ {
+ const vogl_mapped_buffer_desc &map_desc = capture_params.m_mapped_buffers[j];
+
+ vogl_buffer_state *pBuf_state = static_cast<vogl_buffer_state *>(p);
+
+ pBuf_state->set_mapped_buffer_snapshot_state(map_desc);
+ }
+ }
m_object_ptrs.push_back(p);
total++;
vogl_error_printf("%s: Failed snapshotting default framebuffer!\n", VOGL_METHOD_NAME);
}
- m_captured_default_framebuffer = false;
+ m_captured_default_framebuffer = true;
}
vogl_context_snapshot *pSnapshot = vogl_new(vogl_context_snapshot);
return handle;
}
+//----------------------------------------------------------------------------------------------------------------------
+// struct vogl_mapped_buffer_desc
+//----------------------------------------------------------------------------------------------------------------------
+struct vogl_mapped_buffer_desc
+{
+ // Handles and ptrs here are in the replay/GL domain
+ GLuint m_buffer;
+ GLenum m_target;
+ vogl_trace_ptr_value m_offset;
+ vogl_trace_ptr_value m_length;
+ GLbitfield m_access;
+ bool m_range;
+ void *m_pPtr;
+
+ vogl_mapped_buffer_desc()
+ {
+ clear();
+ }
+
+ void clear()
+ {
+ memset(this, 0, sizeof(*this));
+ }
+};
+
+typedef vogl::vector<vogl_mapped_buffer_desc> vogl_mapped_buffer_desc_vec;
+
//----------------------------------------------------------------------------------------------------------------------
// class vogl_capture_context_params
// TODO: Rename this to vogl_context_state_shadow?
// During replay: replay domain
vogl_linked_program_state m_linked_programs;
+ vogl_mapped_buffer_desc_vec m_mapped_buffers;
// During replay: These objects map from trace (non-inv) to replay (inv).
// TODO: Transition ALL the above hash sets/maps to instances of vogl_handle_tracker.
GLint skip_pixels = vogl_get_gl_integer(GL_UNPACK_SKIP_PIXELS);
GLint skip_images = vogl_get_gl_integer(GL_UNPACK_SKIP_IMAGES);
+ //printf("format: 0x%X type: 0x%X width: %i height: %i depth: %i alignment: %i row_length: %i image_height: %i skip_rows: %i skip_pixels: %i skip_images: %i\n",
+ // format, type, (int)width, (int)height, (int)depth, alignment, row_length, image_height, skip_rows, skip_pixels, skip_images);
+
if (row_length <= 0)
{
row_length = width;
//----------------------------------------------------------------------------------------------------------------------
// Texture/image API's array size helper macros
+// TODO: For glTexImage3DEXT, glTexSubImage1DEXT, etc. - should these check the currently bound GL_PIXEL_UNPACK_BUFFER?
//----------------------------------------------------------------------------------------------------------------------
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexImage1D_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, 1, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexImage2D_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexImage3D_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, depth)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexImage3DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, depth)
+size_t vogl_calc_set_tex_image_serialize_size(vogl_context *pContext, GLenum format, GLenum type, GLsizei width, GLsizei height, GLsizei depth)
+{
+ if (pContext)
+ {
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_UNPACK_BUFFER))
+ return 0;
+ }
+
+ return vogl_get_image_size(format, type, width, height, depth);
+}
+
+size_t vogl_calc_get_tex_image_serialize_size(vogl_context *pContext, GLenum format, GLenum type, GLsizei width, GLsizei height, GLsizei depth)
+{
+ if (pContext)
+ {
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_PACK_BUFFER))
+ return 0;
+ }
+
+ return vogl_get_image_size(format, type, width, height, depth);
+}
+
+size_t vogl_calc_get_tex_target_serialize_size(vogl_context *pContext, GLenum target, GLint level, GLenum format, GLenum type)
+{
+ if (pContext)
+ {
+ if (vogl_get_bound_gl_buffer(GL_PIXEL_PACK_BUFFER))
+ return 0;
+ }
+
+ return vogl_get_tex_target_image_size(target, level, format, type);
+}
+
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexImage1D_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, 1, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexImage2D_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexImage3D_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, depth)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexImage3DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, depth)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexSubImage1D_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, 1, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexSubImage1DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, 1, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexSubImage1D_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, 1, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexSubImage1DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, 1, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexSubImage2D_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexSubImage2DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexSubImage2D_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexSubImage2DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexSubImage3D_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, depth)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexSubImage3DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, depth)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexSubImage3D_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, depth)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTexSubImage3DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, depth)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTextureImage3DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, depth)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTextureImage2DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTextureImage1DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, 1, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTextureImage3DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, depth)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTextureImage2DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTextureImage1DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, 1, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTextureSubImage3DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, depth)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTextureSubImage2DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTextureSubImage1DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, 1, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTextureSubImage3DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, depth)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTextureSubImage2DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glTextureSubImage1DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, 1, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMultiTexImage3DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, depth)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMultiTexImage2DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMultiTexImage1DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, 1, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMultiTexImage3DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, depth)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMultiTexImage2DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMultiTexImage1DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, 1, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMultiTexSubImage3DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, depth)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMultiTexSubImage2DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMultiTexSubImage1DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, 1, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMultiTexSubImage3DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, depth)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMultiTexSubImage2DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMultiTexSubImage1DEXT_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, 1, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glDrawPixels_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glConvolutionFilter1D_image(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, 1, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glConvolutionFilter2D_image(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glDrawPixels_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glConvolutionFilter1D_image(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, 1, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glConvolutionFilter2D_image(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, height, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glColorTable_table(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, 1, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glColorSubTable_data(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, count, 1, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glColorTable_table(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, 1, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glColorSubTable_data(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, count, 1, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glBitmap_size(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(GL_COLOR_INDEX, GL_BITMAP, width, height, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glPolygonStipple_mask(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(GL_COLOR_INDEX, GL_BITMAP, 32, 32, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glBitmap_size(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, GL_COLOR_INDEX, GL_BITMAP, width, height, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glPolygonStipple_mask(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, GL_COLOR_INDEX, GL_BITMAP, 32, 32, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glGetTexImage_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_tex_target_image_size(target, level, format, type)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glGetTexImage_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_get_tex_target_serialize_size(pContext, target, level, format, type)
#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glStringMarkerGREMEDY_string(e, c, rt, r, nu, ne, a, p) ((string) ? (!(len) ? (strlen(static_cast<const char *>(string)) + 1) : (len)) : 0)
#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glGetActiveAttrib_name(e, c, rt, r, nu, ne, a, p) ((name) ? (strlen((const char *)(name)) + 1) : -1)
#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glGetActiveAttribARB_name(e, c, rt, r, nu, ne, a, p) ((name) ? (strlen((const char *)(name)) + 1) : -1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glReadPixels_pixels(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, height, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glReadPixels_pixels(e, c, rt, r, nu, ne, a, p) vogl_calc_get_tex_image_serialize_size(pContext, format, type, width, height, 1)
#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glBindFragDataLocationIndexed_name(e, c, rt, r, nu, ne, a, p) (name ? (strlen((const char *)(name)) + 1) : -1)
#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glBindFragDataLocation_name(e, c, rt, r, nu, ne, a, p) (name ? (strlen((const char *)(name)) + 1) : -1)
#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glBindFragDataLocationEXT_name(e, c, rt, r, nu, ne, a, p) (name ? (strlen((const char *)(name)) + 1) : -1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glBitmap_bitmap(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(GL_COLOR_INDEX, GL_BITMAP, width, height, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glBitmap_bitmap(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, GL_COLOR_INDEX, GL_BITMAP, width, height, 1)
#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glGetActiveUniform_name(e, c, rt, r, nu, ne, a, p) ((name) ? ((length) ? (*(length) + 1) : (bufSize)) : -1)
return total_length;
}
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glSeparableFilter2D_row(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, width, 1, 1)
-#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glSeparableFilter2D_column(e, c, rt, r, nu, ne, a, p) vogl_get_image_size(format, type, height, 1, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glSeparableFilter2D_row(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, width, 1, 1)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glSeparableFilter2D_column(e, c, rt, r, nu, ne, a, p) vogl_calc_set_tex_image_serialize_size(pContext, format, type, height, 1, 1)
// TODO - These are all gets, so they aren't completely necessary for proper replaying because they have no side effects (except for possibly glError's).
#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glGetUniformfv_params(e, c, rt, r, nu, ne, a, p) -1
static void vogl_multi_draw_elements_helper(
vogl_context *pContext, vogl_entrypoint_serializer &trace_serializer, const char *pFunc)
{
- // HACK HACK
if (trace_serializer.is_in_begin())
{
if (vogl_uses_client_side_arrays(pContext, true))