From c9c52537f13d7994909762e6a5ab7e47cb684ccd Mon Sep 17 00:00:00 2001 From: baldurk Date: Sun, 22 Feb 2015 21:16:15 +0000 Subject: [PATCH] ARB_dsa part 1 - hook DSA functions, implement all but tex* & create* * Doesn't compile yet! Just splitting this up logically so the change is a bit easier to digest. * I've commented and organised a bit better the gl_hookset.h hook list. * The function hooks are set up for all of the ARB_dsa entry points. Those that are semnatically identical to EXT_dsa are set up as aliases (with EXT_ being canonical, so we can fall back if ARB_dsa isn't supported - see comments in gl_hookset.h). * Implemented the new functions except for the glTexture* family and the glCreate* family. No deduplication of code yet. * As with EXT_dsa we "promote" to the DSA function for serialisation, but since unlike EXT_dsa we can't assume ARB_dsa is present, instead we emulate those functions that we might use unconditionally but may not be present. --- renderdoc/Makefile | 1 + renderdoc/driver/gl/gl_driver.cpp | 12 +- renderdoc/driver/gl/gl_driver.h | 76 +++- renderdoc/driver/gl/gl_hookset.h | 227 ++++++++--- renderdoc/driver/gl/gl_hookset_defs.h | 376 +++++++++--------- renderdoc/driver/gl/hookset.pl | 4 +- .../driver/gl/wrappers/gl_buffer_funcs.cpp | 213 ++++++++-- .../driver/gl/wrappers/gl_draw_funcs.cpp | 216 ++++++++-- renderdoc/driver/gl/wrappers/gl_emulated.cpp | 142 +++++++ .../gl/wrappers/gl_framebuffer_funcs.cpp | 76 +++- renderdoc/driver/gl/wrappers/gl_get_funcs.cpp | 25 +- renderdoc/hooks/gl_linux_hooks.cpp | 5 + renderdoc/hooks/gl_win32_hooks.cpp | 5 + renderdoc/renderdoc.vcxproj | 1 + renderdoc/renderdoc.vcxproj.filters | 3 + 15 files changed, 1042 insertions(+), 340 deletions(-) create mode 100644 renderdoc/driver/gl/wrappers/gl_emulated.cpp diff --git a/renderdoc/Makefile b/renderdoc/Makefile index 53e9a2d67..9a9e341aa 100644 --- a/renderdoc/Makefile +++ b/renderdoc/Makefile @@ -47,6 +47,7 @@ driver/gl/gl_renderstate.o \ driver/gl/wrappers/gl_buffer_funcs.o \ driver/gl/wrappers/gl_debug_funcs.o \ driver/gl/wrappers/gl_draw_funcs.o \ +driver/gl/wrappers/gl_emulated.o \ driver/gl/wrappers/gl_framebuffer_funcs.o \ driver/gl/wrappers/gl_get_funcs.o \ driver/gl/wrappers/gl_query_funcs.o \ diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index ec6e5fadf..771906b5e 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -2577,16 +2577,16 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context) Serialise_glClear(0); break; case CLEARBUFFERF: - Serialise_glClearBufferfv(eGL_NONE, 0, NULL); + Serialise_glClearNamedFramebufferfv(0, eGL_NONE, 0, NULL); break; case CLEARBUFFERI: - Serialise_glClearBufferiv(eGL_NONE, 0, NULL); + Serialise_glClearNamedFramebufferiv(0, eGL_NONE, 0, NULL); break; case CLEARBUFFERUI: - Serialise_glClearBufferuiv(eGL_NONE, 0, NULL); + Serialise_glClearNamedFramebufferuiv(0, eGL_NONE, 0, NULL); break; case CLEARBUFFERFI: - Serialise_glClearBufferfi(eGL_NONE, 0, 0, 0); + Serialise_glClearNamedFramebufferfi(0, eGL_NONE, 0, 0); break; case CLEARBUFFERDATA: Serialise_glClearNamedBufferDataEXT(0, eGL_NONE, eGL_NONE, eGL_NONE, NULL); @@ -2772,7 +2772,7 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context) Serialise_glVertexArrayBindVertexBufferEXT(0, 0, 0, 0, 0); break; case BIND_VERTEXBUFFERS: - Serialise_glBindVertexBuffers(0, 0, NULL, NULL, NULL); + Serialise_glVertexArrayVertexBuffers(0, 0, 0, NULL, NULL, NULL); break; case VERTEXBINDINGDIVISOR: Serialise_glVertexArrayVertexBindingDivisorEXT(0, 0, 0); @@ -2905,7 +2905,7 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context) Serialise_glFramebufferDrawBuffersEXT(0, 0, NULL); break; case BLIT_FRAMEBUFFER: - Serialise_glBlitFramebuffer(0, 0, 0, 0, 0, 0, 0, 0, 0, eGL_NONE); + Serialise_glBlitNamedFramebuffer(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, eGL_NONE); break; case GEN_RENDERBUFFERS: diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index cc4604944..8400d2d5f 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -55,7 +55,7 @@ struct GLInitParams : public RDCInitParams uint32_t width; uint32_t height; - static const uint32_t GL_SERIALISE_VERSION = 0x0000007; + static const uint32_t GL_SERIALISE_VERSION = 0x0000008; // version number internal to opengl stream uint32_t SerialiseVersion; @@ -682,11 +682,6 @@ class WrappedOpenGL bool Serialise_glVertexAttrib(GLuint index, int count, GLenum type, GLboolean normalized, const void *value, int attribtype); - // hack for now until ARB_dsa is serialised - bool Serialise_glVertexArrayElementBuffer(GLuint vaobj, GLuint buffer); - bool Serialise_glTransformFeedbackBufferBase(GLuint xfb, GLuint index, GLuint buffer); - bool Serialise_glTransformFeedbackBufferRange(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size); - IMPLEMENT_FUNCTION_SERIALISED(void, glVertexAttrib1d(GLuint index, GLdouble x)); IMPLEMENT_FUNCTION_SERIALISED(void, glVertexAttrib1dv(GLuint index, const GLdouble *v)); IMPLEMENT_FUNCTION_SERIALISED(void, glVertexAttrib1f(GLuint index, GLfloat x)); @@ -850,6 +845,10 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryObjecti64v(GLuint id, GLenum pname, GLint64 *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryObjectiv(GLuint id, GLenum pname, GLint *params)); + IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryBufferObjectui64v(GLuint id, GLuint buffer, GLenum pname, GLintptr offset)); + IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryBufferObjectuiv(GLuint id, GLuint buffer, GLenum pname, GLintptr offset)); + IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryBufferObjecti64v(GLuint id, GLuint buffer, GLenum pname, GLintptr offset)); + IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryBufferObjectiv(GLuint id, GLuint buffer, GLenum pname, GLintptr offset)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetQueryiv(GLenum target, GLenum pname, GLint *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, void *data)); @@ -912,8 +911,6 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glGetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetNamedBufferParameteri64v(GLuint buffer, GLenum pname, GLint64 *params)); - IMPLEMENT_FUNCTION_SERIALISED(void, glGetNamedBufferParameteriv(GLuint buffer, GLenum pname, GLint *params)); - IMPLEMENT_FUNCTION_SERIALISED(void, glGetNamedBufferPointerv(GLuint buffer, GLenum pname, void **params)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetNamedBufferSubData(GLuint buffer, GLintptr offset, GLsizei size, void *data)); enum UniformType @@ -1104,7 +1101,6 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits)); IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits)); IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits)); - IMPLEMENT_FUNCTION_SERIALISED(void, glFramebufferDrawBuffersEXT(GLuint framebuffer, GLsizei n, const GLenum *bufs)); IMPLEMENT_FUNCTION_SERIALISED(void, glGenerateTextureMipmapEXT(GLuint texture, GLenum target)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetPointeri_vEXT(GLenum pname, GLuint index, void **params)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetDoubleIndexedvEXT(GLenum target, GLuint index, GLdouble *data)); @@ -1157,6 +1153,7 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glNamedFramebufferTextureLayerEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer)); IMPLEMENT_FUNCTION_SERIALISED(void, glNamedFramebufferParameteriEXT(GLuint framebuffer, GLenum pname, GLint param)); IMPLEMENT_FUNCTION_SERIALISED(void, glFramebufferDrawBufferEXT(GLuint framebuffer, GLenum mode)); + IMPLEMENT_FUNCTION_SERIALISED(void, glFramebufferDrawBuffersEXT(GLuint framebuffer, GLsizei n, const GLenum *bufs)); IMPLEMENT_FUNCTION_SERIALISED(void, glFramebufferReadBufferEXT(GLuint framebuffer, GLenum mode)); IMPLEMENT_FUNCTION_SERIALISED(void, glNamedRenderbufferStorageEXT(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height)); IMPLEMENT_FUNCTION_SERIALISED(void, glNamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)); @@ -1224,6 +1221,67 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glVertexArrayVertexBindingDivisorEXT(GLuint vaobj, GLuint bindingindex, GLuint divisor)); IMPLEMENT_FUNCTION_SERIALISED(void, glVertexArrayVertexAttribLOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset)); IMPLEMENT_FUNCTION_SERIALISED(void, glVertexArrayVertexAttribDivisorEXT(GLuint vaobj, GLuint index, GLuint divisor)); + + // ARB_direct_state_access + IMPLEMENT_FUNCTION_SERIALISED(void, glCreateTransformFeedbacks(GLsizei n, GLuint *ids)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCreateBuffers(GLsizei n, GLuint *buffers)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCreateFramebuffers(GLsizei n, GLuint *framebuffers)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCreateRenderbuffers(GLsizei n, GLuint *renderbuffers)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCreateTextures(GLenum target, GLsizei n, GLuint *textures)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCreateVertexArrays(GLsizei n, GLuint *arrays)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCreateSamplers(GLsizei n, GLuint *samplers)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCreateProgramPipelines(GLsizei n, GLuint *pipelines)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCreateQueries(GLenum target, GLsizei n, GLuint *ids)); + + IMPLEMENT_FUNCTION_SERIALISED(void, glNamedBufferData(GLuint buffer, GLsizei size, const void *data, GLenum usage)); + IMPLEMENT_FUNCTION_SERIALISED(void, glNamedBufferStorage(GLuint buffer, GLsizei size, const void *data, GLbitfield flags)); + IMPLEMENT_FUNCTION_SERIALISED(void, glNamedBufferSubData(GLuint buffer, GLintptr offset, GLsizei size, const void *data)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCopyNamedBufferSubData(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizei size)); + IMPLEMENT_FUNCTION_SERIALISED(void, glClearNamedBufferSubData(GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizei size, GLenum format, GLenum type, const void *data)); + IMPLEMENT_FUNCTION_SERIALISED(void *, glMapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizei length, GLbitfield access)); + IMPLEMENT_FUNCTION_SERIALISED(void, glFlushMappedNamedBufferRange(GLuint buffer, GLintptr offset, GLsizei length)); + + IMPLEMENT_FUNCTION_SERIALISED(void, glTransformFeedbackBufferBase(GLuint xfb, GLuint index, GLuint buffer)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTransformFeedbackBufferRange(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size)); + + IMPLEMENT_FUNCTION_SERIALISED(void, glInvalidateNamedFramebufferData(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments)); + IMPLEMENT_FUNCTION_SERIALISED(void, glInvalidateNamedFramebufferSubData(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)); + IMPLEMENT_FUNCTION_SERIALISED(void, glClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil)); + IMPLEMENT_FUNCTION_SERIALISED(void, glBlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)); + + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureBuffer(GLuint texture, GLenum internalformat, GLuint buffer)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureBufferRange(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizei size)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureStorage1D(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureStorage2D(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureStorage3D(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureStorage2DMultisample(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureStorage3DMultisample(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTextureSubImage1D(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTextureSubImage2D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCompressedTextureSubImage3D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data)); + + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureSubImage1D(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureSubImage2D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureSubImage3D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCopyTextureSubImage1D(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCopyTextureSubImage2D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)); + IMPLEMENT_FUNCTION_SERIALISED(void, glCopyTextureSubImage3D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)); + + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureParameterf(GLuint texture, GLenum pname, GLfloat param)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureParameterfv(GLuint texture, GLenum pname, const GLfloat *param)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureParameteri(GLuint texture, GLenum pname, GLint param)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureParameterIiv(GLuint texture, GLenum pname, const GLint *params)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureParameterIuiv(GLuint texture, GLenum pname, const GLuint *params)); + IMPLEMENT_FUNCTION_SERIALISED(void, glTextureParameteriv(GLuint texture, GLenum pname, const GLint *param)); + IMPLEMENT_FUNCTION_SERIALISED(void, glGenerateTextureMipmap(GLuint texture)); + IMPLEMENT_FUNCTION_SERIALISED(void, glBindTextureUnit(GLuint unit, GLuint texture)); + + IMPLEMENT_FUNCTION_SERIALISED(void, glVertexArrayElementBuffer(GLuint vaobj, GLuint buffer)); + IMPLEMENT_FUNCTION_SERIALISED(void, glVertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides)); + }; class ScopedDebugContext diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index b03a023d7..a765f4686 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -29,6 +29,12 @@ struct GLHookSet { + // first we list all the core functions. 1.1 functions are separate under 'dllexport' for + // different handling on windows. Extensions come after + // Any corefunctions that are semantically identical to extension variants are listed as + // 'aliases' such that if the 'alias' is requested via *GetProcAddress, the core function + // will be returned and used. + // ++ dllexport PFNGLBINDTEXTUREPROC glBindTexture; PFNGLBLENDFUNCPROC glBlendFunc; @@ -94,6 +100,10 @@ struct GLHookSet PFNGLVIEWPORTPROC glViewport; // -- + // this just means 'functions not dllexport on windows', not necessarily extensions. + // note that for ARB_direct_state_access there is special treatment due to interaction with + // EXT_direct_state_access, so those functions are listed later in the extension section + // rather than here in the core section where you'd expect // ++ glext PFNGLACTIVETEXTUREPROC glActiveTexture; // aliases glActiveTextureARB PFNGLTEXSTORAGE1DPROC glTexStorage1D; @@ -138,8 +148,6 @@ struct GLHookSet PFNGLGETSHADERPRECISIONFORMATPROC glGetShaderPrecisionFormat; PFNGLGETSHADERSOURCEPROC glGetShaderSource; PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders; - PFNGLGETNAMEDSTRINGARBPROC glGetNamedStringARB; - PFNGLGETNAMEDSTRINGIVARBPROC glGetNamedStringivARB; PFNGLGETPROGRAMIVPROC glGetProgramiv; PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; PFNGLGETPROGRAMINTERFACEIVPROC glGetProgramInterfaceiv; @@ -172,17 +180,7 @@ struct GLHookSet PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv; PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage; // aliases glGetCompressedTexImageARB PFNGLGETNCOMPRESSEDTEXIMAGEPROC glGetnCompressedTexImage; // aliases glGetnCompressedTexImageARB - PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glGetCompressedTextureImage; - PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glGetCompressedTextureSubImage; PFNGLGETNTEXIMAGEPROC glGetnTexImage; // aliases glGetnTexImageARB - PFNGLGETTEXTUREIMAGEPROC glGetTextureImage; - PFNGLGETTEXTURELEVELPARAMETERFVPROC glGetTextureLevelParameterfv; - PFNGLGETTEXTURELEVELPARAMETERIVPROC glGetTextureLevelParameteriv; - PFNGLGETTEXTUREPARAMETERIIVPROC glGetTextureParameterIiv; - PFNGLGETTEXTUREPARAMETERIUIVPROC glGetTextureParameterIuiv; - PFNGLGETTEXTUREPARAMETERFVPROC glGetTextureParameterfv; - PFNGLGETTEXTUREPARAMETERIVPROC glGetTextureParameteriv; - PFNGLGETTEXTURESUBIMAGEPROC glGetTextureSubImage; PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv; // aliases glGetTexParameterIivEXT PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv; // aliases glGetTexParameterIuivEXT PFNGLCLAMPCOLORPROC glClampColor; // aliases glClampColorARB @@ -192,9 +190,6 @@ struct GLHookSet PFNGLGETSAMPLERPARAMETERFVPROC glGetSamplerParameterfv; PFNGLGETSAMPLERPARAMETERIVPROC glGetSamplerParameteriv; PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying; // aliases glGetTransformFeedbackVaryingEXT - PFNGLGETTRANSFORMFEEDBACKI64_VPROC glGetTransformFeedbacki64_v; - PFNGLGETTRANSFORMFEEDBACKI_VPROC glGetTransformFeedbacki_v; - PFNGLGETTRANSFORMFEEDBACKIVPROC glGetTransformFeedbackiv; PFNGLGETSUBROUTINEINDEXPROC glGetSubroutineIndex; PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glGetSubroutineUniformLocation; PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glGetActiveAtomicCounterBufferiv; @@ -220,16 +215,11 @@ struct GLHookSet PFNGLGETNUNIFORMFVPROC glGetnUniformfv; // aliases glGetnUniformfvARB PFNGLGETNUNIFORMIVPROC glGetnUniformiv; // aliases glGetnUniformivARB PFNGLGETNUNIFORMUIVPROC glGetnUniformuiv; // aliases glGetnUniformuivARB - PFNGLGETVERTEXARRAYIVPROC glGetVertexArrayiv; - PFNGLGETVERTEXARRAYINDEXED64IVPROC glGetVertexArrayIndexed64iv; - PFNGLGETVERTEXARRAYINDEXEDIVPROC glGetVertexArrayIndexediv; PFNGLGETVERTEXATTRIBIIVPROC glGetVertexAttribIiv; // aliases glGetVertexAttribIivEXT PFNGLGETVERTEXATTRIBIUIVPROC glGetVertexAttribIuiv; // aliases glGetVertexAttribIuivEXT PFNGLGETVERTEXATTRIBLDVPROC glGetVertexAttribLdv; // aliases glGetVertexAttribLdvEXT PFNGLGETVERTEXATTRIBDVPROC glGetVertexAttribdv; PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv; - PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glGetNamedBufferParameteri64v; - PFNGLGETNAMEDBUFFERPOINTERVPROC glGetNamedBufferPointerv; PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; // aliases glCheckFramebufferStatusEXT PFNGLBLENDCOLORPROC glBlendColor; // aliases glBlendColorEXT PFNGLBLENDFUNCIPROC glBlendFunci; // aliases glBlendFunciARB @@ -245,14 +235,11 @@ struct GLHookSet PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate; PFNGLCOLORMASKIPROC glColorMaski; // aliases glColorMaskIndexedEXT PFNGLSAMPLEMASKIPROC glSampleMaski; - PFNGLRASTERSAMPLESEXTPROC glRasterSamplesEXT; PFNGLSAMPLECOVERAGEPROC glSampleCoverage; // aliases glSampleCoverageARB PFNGLMINSAMPLESHADINGPROC glMinSampleShading; // aliases glMinSampleShadingARB PFNGLDEPTHRANGEFPROC glDepthRangef; PFNGLDEPTHRANGEINDEXEDPROC glDepthRangeIndexed; PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv; - PFNGLDEPTHBOUNDSEXTPROC glDepthBoundsEXT; - PFNGLPOLYGONOFFSETCLAMPEXTPROC glPolygonOffsetClampEXT; PFNGLCLIPCONTROLPROC glClipControl; PFNGLPROVOKINGVERTEXPROC glProvokingVertex; // aliases glProvokingVertexEXT PFNGLPRIMITIVERESTARTINDEXPROC glPrimitiveRestartIndex; @@ -271,9 +258,6 @@ struct GLHookSet PFNGLUSEPROGRAMPROC glUseProgram; PFNGLSHADERBINARYPROC glShaderBinary; PFNGLPROGRAMBINARYPROC glProgramBinary; - PFNGLNAMEDSTRINGARBPROC glNamedStringARB; - PFNGLDELETENAMEDSTRINGARBPROC glDeleteNamedStringARB; - PFNGLCOMPILESHADERINCLUDEARBPROC glCompileShaderIncludeARB; PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages; PFNGLVALIDATEPROGRAMPROC glValidateProgram; PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines; @@ -286,9 +270,6 @@ struct GLHookSet PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert; // aliases glDebugMessageInsertARB PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup; PFNGLPOPDEBUGGROUPPROC glPopDebugGroup; - PFNGLPUSHGROUPMARKEREXTPROC glPushGroupMarkerEXT; - PFNGLPOPGROUPMARKEREXTPROC glPopGroupMarkerEXT; - PFNGLINSERTEVENTMARKEREXTPROC glInsertEventMarkerEXT; PFNGLOBJECTLABELPROC glObjectLabel; // aliases glLabelObjectEXT PFNGLOBJECTPTRLABELPROC glObjectPtrLabel; PFNGLENABLEIPROC glEnablei; // aliases glEnableIndexedEXT @@ -305,7 +286,6 @@ struct GLHookSet PFNGLISSYNCPROC glIsSync; PFNGLISTRANSFORMFEEDBACKPROC glIsTransformFeedback; PFNGLISVERTEXARRAYPROC glIsVertexArray; - PFNGLISNAMEDSTRINGARBPROC glIsNamedStringARB; PFNGLGENBUFFERSPROC glGenBuffers; // aliases glGenBuffersARB PFNGLBINDBUFFERPROC glBindBuffer; // aliases glBindBufferARB PFNGLDRAWBUFFERSPROC glDrawBuffers; // aliases glDrawBuffersARB @@ -473,7 +453,6 @@ struct GLHookSet PFNGLPOINTPARAMETERIPROC glPointParameteri; PFNGLPOINTPARAMETERIVPROC glPointParameteriv; PFNGLDISPATCHCOMPUTEPROC glDispatchCompute; - PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC glDispatchComputeGroupSizeARB; PFNGLDISPATCHCOMPUTEINDIRECTPROC glDispatchComputeIndirect; PFNGLMEMORYBARRIERPROC glMemoryBarrier; // aliases glMemoryBarrierEXT PFNGLMEMORYBARRIERBYREGIONPROC glMemoryBarrierByRegion; @@ -616,19 +595,68 @@ struct GLHookSet PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glMultiDrawElementsBaseVertex; PFNGLMULTIDRAWARRAYSINDIRECTPROC glMultiDrawArraysIndirect; PFNGLMULTIDRAWELEMENTSINDIRECTPROC glMultiDrawElementsIndirect; - PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC glMultiDrawArraysIndirectCountARB; - PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glMultiDrawElementsIndirectCountARB; PFNGLDRAWARRAYSINDIRECTPROC glDrawArraysIndirect; PFNGLDRAWELEMENTSINDIRECTPROC glDrawElementsIndirect; PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; // aliases glBlitFramebufferEXT - PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glCheckNamedFramebufferStatusEXT; + + // ARB_shading_language_include + PFNGLNAMEDSTRINGARBPROC glNamedStringARB; + PFNGLDELETENAMEDSTRINGARBPROC glDeleteNamedStringARB; + PFNGLCOMPILESHADERINCLUDEARBPROC glCompileShaderIncludeARB; + PFNGLISNAMEDSTRINGARBPROC glIsNamedStringARB; + PFNGLGETNAMEDSTRINGARBPROC glGetNamedStringARB; + PFNGLGETNAMEDSTRINGIVARBPROC glGetNamedStringivARB; + + // ARB_compute_variable_group_size + PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC glDispatchComputeGroupSizeARB; + + // ARB_indirect_parameters + PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC glMultiDrawArraysIndirectCountARB; + PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glMultiDrawElementsIndirectCountARB; + + // EXT_raster_multisample + PFNGLRASTERSAMPLESEXTPROC glRasterSamplesEXT; + + // EXT_depth_bounds_test + PFNGLDEPTHBOUNDSEXTPROC glDepthBoundsEXT; + + // EXT_polygon_offset_clamp + PFNGLPOLYGONOFFSETCLAMPEXTPROC glPolygonOffsetClampEXT; + + // EXT_debug_marker + PFNGLINSERTEVENTMARKEREXTPROC glInsertEventMarkerEXT; + PFNGLPUSHGROUPMARKEREXTPROC glPushGroupMarkerEXT; + PFNGLPOPGROUPMARKEREXTPROC glPopGroupMarkerEXT; + + // GREMEDY_frame_terminator + PFNGLFRAMETERMINATORGREMEDYPROC glFrameTerminatorGREMEDY; + + // GREMEDY_string_marker + PFNGLSTRINGMARKERGREMEDYPROC glStringMarkerGREMEDY; + + // EXT_direct_state_access below here. We only include the functions relevant for core 3.2+ GL, not any + // functions for legacy functionality. + // + // NOTE: we set up ARB_dsa functions as aliases of EXT_dsa functions where they are identical. + // This breaks our 'rule' of making core functions the canonical versions, but for good reason. + // + // As with other aliases, this assumes the functions defined to have identical semantics are safe to substitute + // for each other (which in theory should be true). We do it this way around rather than have EXT_dsa as aliases + // of ARB_dsa - which is usually what we do for EXT extension variants. The reason being we want to support hw/sw + // configurations where ARB_dsa is not present, so we need to fall back on EXT_dsa. If the EXT functions are the + // aliases, we will never fetch them when getting function pointers, so if ARB_dsa functions aren't present then + // we just get NULL. In theory EXT_dsa supported cases should be a strict superset of ARB_dsa supported cases, so + // it's safe to always use the EXT variant when they're identical. + // + // Where a function is different, or unique to ARB_dsa, we include both separately. For ARB_dsa unique functions + // these are at the end, noted by comments. + PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC glCompressedTextureImage1DEXT; PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC glCompressedTextureImage2DEXT; PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC glCompressedTextureImage3DEXT; PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC glCompressedTextureSubImage1DEXT; PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC glCompressedTextureSubImage2DEXT; PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC glCompressedTextureSubImage3DEXT; - PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glFramebufferDrawBuffersEXT; PFNGLGENERATETEXTUREMIPMAPEXTPROC glGenerateTextureMipmapEXT; PFNGLGETPOINTERI_VEXTPROC glGetPointeri_vEXT; PFNGLGETDOUBLEINDEXEDVEXTPROC glGetDoubleIndexedvEXT; @@ -644,13 +672,12 @@ struct GLHookSet PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC glGetMultiTexLevelParameterfvEXT; PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC glGetMultiTexLevelParameterivEXT; PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC glGetCompressedMultiTexImageEXT; - PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glGetNamedBufferPointervEXT; + PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glGetNamedBufferPointervEXT; // aliases glGetNamedBufferPointerv PFNGLGETNAMEDPROGRAMIVEXTPROC glGetNamedProgramivEXT; PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetNamedFramebufferAttachmentParameterivEXT; // aliases glGetNamedFramebufferAttachmentParameteriv PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC glGetNamedBufferParameterivEXT; // aliases glGetNamedBufferParameteriv - // these functions are not aliases only by the size parameter being different types + PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glCheckNamedFramebufferStatusEXT; // aliases glCheckNamedFramebufferStatus PFNGLGETNAMEDBUFFERSUBDATAEXTPROC glGetNamedBufferSubDataEXT; - PFNGLGETNAMEDBUFFERSUBDATAPROC glGetNamedBufferSubData; PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC glGetNamedFramebufferParameterivEXT; // aliases glGetFramebufferParameterivEXT, glGetNamedFramebufferParameteriv PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC glGetNamedRenderbufferParameterivEXT; // aliases glGetNamedRenderbufferParameteriv PFNGLGETVERTEXARRAYINTEGERVEXTPROC glGetVertexArrayIntegervEXT; @@ -666,27 +693,28 @@ struct GLHookSet PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC glGetTextureLevelParameterivEXT; PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC glGetTextureLevelParameterfvEXT; PFNGLBINDMULTITEXTUREEXTPROC glBindMultiTextureEXT; - PFNGLMAPNAMEDBUFFEREXTPROC glMapNamedBufferEXT; + PFNGLMAPNAMEDBUFFEREXTPROC glMapNamedBufferEXT; // aliases glMapNamedBuffer PFNGLMAPNAMEDBUFFERRANGEEXTPROC glMapNamedBufferRangeEXT; PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC glFlushMappedNamedBufferRangeEXT; - PFNGLUNMAPNAMEDBUFFEREXTPROC glUnmapNamedBufferEXT; - PFNGLCLEARNAMEDBUFFERDATAEXTPROC glClearNamedBufferDataEXT; + PFNGLUNMAPNAMEDBUFFEREXTPROC glUnmapNamedBufferEXT; // aliases glUnmapNamedBuffer + PFNGLCLEARNAMEDBUFFERDATAEXTPROC glClearNamedBufferDataEXT; // aliases glClearNamedBufferData PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC glClearNamedBufferSubDataEXT; PFNGLNAMEDBUFFERDATAEXTPROC glNamedBufferDataEXT; PFNGLNAMEDBUFFERSTORAGEEXTPROC glNamedBufferStorageEXT; PFNGLNAMEDBUFFERSUBDATAEXTPROC glNamedBufferSubDataEXT; PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC glNamedCopyBufferSubDataEXT; - PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glNamedFramebufferTextureEXT; + PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glNamedFramebufferTextureEXT; // aliases glNamedFramebufferTexture PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC glNamedFramebufferTexture1DEXT; PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC glNamedFramebufferTexture2DEXT; PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC glNamedFramebufferTexture3DEXT; - PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glNamedFramebufferRenderbufferEXT; - PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glNamedFramebufferTextureLayerEXT; - PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC glNamedFramebufferParameteriEXT; - PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glNamedRenderbufferStorageEXT; - PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glNamedRenderbufferStorageMultisampleEXT; - PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glFramebufferDrawBufferEXT; - PFNGLFRAMEBUFFERREADBUFFEREXTPROC glFramebufferReadBufferEXT; + PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glNamedFramebufferRenderbufferEXT; // aliases glNamedFramebufferRenderbuffer + PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glNamedFramebufferTextureLayerEXT; // aliases glNamedFramebufferTextureLayer + PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC glNamedFramebufferParameteriEXT; // aliases glNamedFramebufferParameteri + PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glNamedRenderbufferStorageEXT; // aliases glNamedRenderbufferStorage + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glNamedRenderbufferStorageMultisampleEXT; // aliases glNamedRenderbufferStorageMultisample + PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glFramebufferDrawBufferEXT; // aliases glNamedFramebufferDrawBuffer + PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glFramebufferDrawBuffersEXT; // aliases glNamedFramebufferDrawBuffers + PFNGLFRAMEBUFFERREADBUFFEREXTPROC glFramebufferReadBufferEXT; // aliases glNamedFramebufferReadBuffer PFNGLTEXTUREBUFFEREXTPROC glTextureBufferEXT; PFNGLTEXTUREBUFFERRANGEEXTPROC glTextureBufferRangeEXT; PFNGLTEXTUREIMAGE1DEXTPROC glTextureImage1DEXT; @@ -738,17 +766,98 @@ struct GLHookSet PFNGLGENERATEMULTITEXMIPMAPEXTPROC glGenerateMultiTexMipmapEXT; PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC glVertexArrayVertexAttribOffsetEXT; PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC glVertexArrayVertexAttribIOffsetEXT; - PFNGLENABLEVERTEXARRAYATTRIBEXTPROC glEnableVertexArrayAttribEXT; - PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC glDisableVertexArrayAttribEXT; - PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glVertexArrayBindVertexBufferEXT; - PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC glVertexArrayVertexAttribFormatEXT; - PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC glVertexArrayVertexAttribIFormatEXT; - PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC glVertexArrayVertexAttribLFormatEXT; - PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC glVertexArrayVertexAttribBindingEXT; - PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glVertexArrayVertexBindingDivisorEXT; + PFNGLENABLEVERTEXARRAYATTRIBEXTPROC glEnableVertexArrayAttribEXT; // aliases glEnableVertexArrayAttrib + PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC glDisableVertexArrayAttribEXT; // aliases glDisableVertexArrayAttrib + PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glVertexArrayBindVertexBufferEXT; // aliases glVertexArrayVertexBuffer + PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC glVertexArrayVertexAttribFormatEXT; // aliases glVertexArrayAttribFormat + PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC glVertexArrayVertexAttribIFormatEXT; // aliases glVertexArrayAttribIFormat + PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC glVertexArrayVertexAttribLFormatEXT; // aliases glVertexArrayAttribLFormat + PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC glVertexArrayVertexAttribBindingEXT; // aliases glVertexArrayAttribBinding + PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glVertexArrayVertexBindingDivisorEXT; // aliases glVertexArrayBindingDivisor PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC glVertexArrayVertexAttribLOffsetEXT; PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC glVertexArrayVertexAttribDivisorEXT; - PFNGLFRAMETERMINATORGREMEDYPROC glFrameTerminatorGREMEDY; - PFNGLSTRINGMARKERGREMEDYPROC glStringMarkerGREMEDY; + + // ARB_direct_state_access unique functions (others will be listed as aliases of EXT_dsa, see above). + + PFNGLCREATETRANSFORMFEEDBACKSPROC glCreateTransformFeedbacks; + PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glTransformFeedbackBufferBase; + PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glTransformFeedbackBufferRange; + PFNGLGETTRANSFORMFEEDBACKI64_VPROC glGetTransformFeedbacki64_v; + PFNGLGETTRANSFORMFEEDBACKI_VPROC glGetTransformFeedbacki_v; + PFNGLGETTRANSFORMFEEDBACKIVPROC glGetTransformFeedbackiv; + PFNGLCREATEBUFFERSPROC glCreateBuffers; + + // these functions aren't aliases only because the size parameter is a different type + PFNGLGETNAMEDBUFFERSUBDATAPROC glGetNamedBufferSubData; + PFNGLNAMEDBUFFERSTORAGEPROC glNamedBufferStorage; + PFNGLNAMEDBUFFERDATAPROC glNamedBufferData; + PFNGLNAMEDBUFFERSUBDATAPROC glNamedBufferSubData; + PFNGLCOPYNAMEDBUFFERSUBDATAPROC glCopyNamedBufferSubData; + PFNGLCLEARNAMEDBUFFERSUBDATAPROC glClearNamedBufferSubData; + PFNGLMAPNAMEDBUFFERRANGEPROC glMapNamedBufferRange; + PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glFlushMappedNamedBufferRange; + + PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glGetNamedBufferParameteri64v; + PFNGLCREATEFRAMEBUFFERSPROC glCreateFramebuffers; + PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glInvalidateNamedFramebufferData; + PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glInvalidateNamedFramebufferSubData; + PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glClearNamedFramebufferiv; + PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glClearNamedFramebufferuiv; + PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glClearNamedFramebufferfv; + PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glClearNamedFramebufferfi; + PFNGLBLITNAMEDFRAMEBUFFERPROC glBlitNamedFramebuffer; + PFNGLCREATERENDERBUFFERSPROC glCreateRenderbuffers; + PFNGLCREATETEXTURESPROC glCreateTextures; + // many of these texture functions only vary by the lack of target parameter from the EXT_dsa + // variants. The handling of this is generally to pipe through the EXT_dsa variant with a target + // of GL_NONE, and that signifies the ARB_dsa function should be used. See gl_texture_funcs.cpp + PFNGLTEXTUREBUFFERPROC glTextureBuffer; + PFNGLTEXTUREBUFFERRANGEPROC glTextureBufferRange; + PFNGLTEXTURESTORAGE1DPROC glTextureStorage1D; + PFNGLTEXTURESTORAGE2DPROC glTextureStorage2D; + PFNGLTEXTURESTORAGE3DPROC glTextureStorage3D; + PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glTextureStorage2DMultisample; + PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glTextureStorage3DMultisample; + PFNGLTEXTURESUBIMAGE1DPROC glTextureSubImage1D; + PFNGLTEXTURESUBIMAGE2DPROC glTextureSubImage2D; + PFNGLTEXTURESUBIMAGE3DPROC glTextureSubImage3D; + PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glCompressedTextureSubImage1D; + PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glCompressedTextureSubImage2D; + PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glCompressedTextureSubImage3D; + PFNGLCOPYTEXTURESUBIMAGE1DPROC glCopyTextureSubImage1D; + PFNGLCOPYTEXTURESUBIMAGE2DPROC glCopyTextureSubImage2D; + PFNGLCOPYTEXTURESUBIMAGE3DPROC glCopyTextureSubImage3D; + PFNGLTEXTUREPARAMETERFPROC glTextureParameterf; + PFNGLTEXTUREPARAMETERFVPROC glTextureParameterfv; + PFNGLTEXTUREPARAMETERIPROC glTextureParameteri; + PFNGLTEXTUREPARAMETERIIVPROC glTextureParameterIiv; + PFNGLTEXTUREPARAMETERIUIVPROC glTextureParameterIuiv; + PFNGLTEXTUREPARAMETERIVPROC glTextureParameteriv; + PFNGLGENERATETEXTUREMIPMAPPROC glGenerateTextureMipmap; + PFNGLBINDTEXTUREUNITPROC glBindTextureUnit; + PFNGLGETTEXTUREIMAGEPROC glGetTextureImage; + PFNGLGETTEXTURESUBIMAGEPROC glGetTextureSubImage; + PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glGetCompressedTextureImage; + PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glGetCompressedTextureSubImage; + PFNGLGETTEXTURELEVELPARAMETERFVPROC glGetTextureLevelParameterfv; + PFNGLGETTEXTURELEVELPARAMETERIVPROC glGetTextureLevelParameteriv; + PFNGLGETTEXTUREPARAMETERIIVPROC glGetTextureParameterIiv; + PFNGLGETTEXTUREPARAMETERIUIVPROC glGetTextureParameterIuiv; + PFNGLGETTEXTUREPARAMETERFVPROC glGetTextureParameterfv; + PFNGLGETTEXTUREPARAMETERIVPROC glGetTextureParameteriv; + PFNGLCREATEVERTEXARRAYSPROC glCreateVertexArrays; + PFNGLCREATESAMPLERSPROC glCreateSamplers; + PFNGLCREATEPROGRAMPIPELINESPROC glCreateProgramPipelines; + PFNGLCREATEQUERIESPROC glCreateQueries; + PFNGLVERTEXARRAYELEMENTBUFFERPROC glVertexArrayElementBuffer; + PFNGLVERTEXARRAYVERTEXBUFFERSPROC glVertexArrayVertexBuffers; + PFNGLGETVERTEXARRAYIVPROC glGetVertexArrayiv; + PFNGLGETVERTEXARRAYINDEXED64IVPROC glGetVertexArrayIndexed64iv; + PFNGLGETVERTEXARRAYINDEXEDIVPROC glGetVertexArrayIndexediv; + PFNGLGETQUERYBUFFEROBJECTI64VPROC glGetQueryBufferObjecti64v; + PFNGLGETQUERYBUFFEROBJECTIVPROC glGetQueryBufferObjectiv; + PFNGLGETQUERYBUFFEROBJECTUI64VPROC glGetQueryBufferObjectui64v; + PFNGLGETQUERYBUFFEROBJECTUIVPROC glGetQueryBufferObjectuiv; + // -- }; diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index 5b2aea430..ac9d9ebe2 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -1,7 +1,7 @@ /****************************************************************************** * The MIT License (MIT) * - * Copyright (c) 2014 Crytek + * Copyright (c) 2015 Baldur Karlsson * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -769,21 +769,93 @@ HookExtension(PFNGLBINDIMAGETEXTURESPROC, glBindImageTextures); \ HookExtension(PFNGLBINDVERTEXBUFFERSPROC, glBindVertexBuffers); \ HookExtension(PFNGLCLIPCONTROLPROC, glClipControl); \ + HookExtension(PFNGLCREATETRANSFORMFEEDBACKSPROC, glCreateTransformFeedbacks); \ + HookExtension(PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC, glTransformFeedbackBufferBase); \ + HookExtension(PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC, glTransformFeedbackBufferRange); \ HookExtension(PFNGLGETTRANSFORMFEEDBACKIVPROC, glGetTransformFeedbackiv); \ HookExtension(PFNGLGETTRANSFORMFEEDBACKI_VPROC, glGetTransformFeedbacki_v); \ HookExtension(PFNGLGETTRANSFORMFEEDBACKI64_VPROC, glGetTransformFeedbacki64_v); \ + HookExtension(PFNGLCREATEBUFFERSPROC, glCreateBuffers); \ + HookExtension(PFNGLNAMEDBUFFERSTORAGEPROC, glNamedBufferStorage); \ + HookExtension(PFNGLNAMEDBUFFERDATAPROC, glNamedBufferData); \ + HookExtension(PFNGLNAMEDBUFFERSUBDATAPROC, glNamedBufferSubData); \ + HookExtension(PFNGLCOPYNAMEDBUFFERSUBDATAPROC, glCopyNamedBufferSubData); \ + HookExtension(PFNGLCLEARNAMEDBUFFERDATAPROC, glClearNamedBufferDataEXT); \ + HookExtensionAlias(PFNGLCLEARNAMEDBUFFERDATAPROC, glClearNamedBufferDataEXT, glClearNamedBufferData); \ + HookExtension(PFNGLCLEARNAMEDBUFFERSUBDATAPROC, glClearNamedBufferSubData); \ + HookExtension(PFNGLMAPNAMEDBUFFERPROC, glMapNamedBufferEXT); \ + HookExtensionAlias(PFNGLMAPNAMEDBUFFERPROC, glMapNamedBufferEXT, glMapNamedBuffer); \ + HookExtension(PFNGLMAPNAMEDBUFFERRANGEPROC, glMapNamedBufferRange); \ + HookExtension(PFNGLUNMAPNAMEDBUFFERPROC, glUnmapNamedBufferEXT); \ + HookExtensionAlias(PFNGLUNMAPNAMEDBUFFERPROC, glUnmapNamedBufferEXT, glUnmapNamedBuffer); \ + HookExtension(PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC, glFlushMappedNamedBufferRange); \ HookExtension(PFNGLGETNAMEDBUFFERPARAMETERIVPROC, glGetNamedBufferParameterivEXT); \ HookExtensionAlias(PFNGLGETNAMEDBUFFERPARAMETERIVPROC, glGetNamedBufferParameterivEXT, glGetNamedBufferParameteriv); \ HookExtension(PFNGLGETNAMEDBUFFERPARAMETERI64VPROC, glGetNamedBufferParameteri64v); \ - HookExtension(PFNGLGETNAMEDBUFFERPOINTERVPROC, glGetNamedBufferPointerv); \ + HookExtension(PFNGLGETNAMEDBUFFERPOINTERVPROC, glGetNamedBufferPointervEXT); \ + HookExtensionAlias(PFNGLGETNAMEDBUFFERPOINTERVPROC, glGetNamedBufferPointervEXT, glGetNamedBufferPointerv); \ HookExtension(PFNGLGETNAMEDBUFFERSUBDATAPROC, glGetNamedBufferSubData); \ + HookExtension(PFNGLCREATEFRAMEBUFFERSPROC, glCreateFramebuffers); \ + HookExtension(PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC, glNamedFramebufferRenderbufferEXT); \ + HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC, glNamedFramebufferRenderbufferEXT, glNamedFramebufferRenderbuffer); \ + HookExtension(PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC, glNamedFramebufferParameteriEXT); \ + HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC, glNamedFramebufferParameteriEXT, glNamedFramebufferParameteri); \ + HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTUREPROC, glNamedFramebufferTextureEXT); \ + HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERTEXTUREPROC, glNamedFramebufferTextureEXT, glNamedFramebufferTexture); \ + HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC, glNamedFramebufferTextureLayerEXT); \ + HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC, glNamedFramebufferTextureLayerEXT, glNamedFramebufferTextureLayer); \ + HookExtension(PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC, glFramebufferDrawBufferEXT); \ + HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC, glFramebufferDrawBufferEXT, glNamedFramebufferDrawBuffer); \ + HookExtension(PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC, glFramebufferDrawBuffersEXT); \ + HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC, glFramebufferDrawBuffersEXT, glNamedFramebufferDrawBuffers); \ + HookExtension(PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC, glFramebufferReadBufferEXT); \ + HookExtensionAlias(PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC, glFramebufferReadBufferEXT, glNamedFramebufferReadBuffer); \ + HookExtension(PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC, glInvalidateNamedFramebufferData); \ + HookExtension(PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC, glInvalidateNamedFramebufferSubData); \ + HookExtension(PFNGLCLEARNAMEDFRAMEBUFFERIVPROC, glClearNamedFramebufferiv); \ + HookExtension(PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC, glClearNamedFramebufferuiv); \ + HookExtension(PFNGLCLEARNAMEDFRAMEBUFFERFVPROC, glClearNamedFramebufferfv); \ + HookExtension(PFNGLCLEARNAMEDFRAMEBUFFERFIPROC, glClearNamedFramebufferfi); \ + HookExtension(PFNGLBLITNAMEDFRAMEBUFFERPROC, glBlitNamedFramebuffer); \ + HookExtension(PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC, glCheckNamedFramebufferStatusEXT); \ + HookExtensionAlias(PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC, glCheckNamedFramebufferStatusEXT, glCheckNamedFramebufferStatus); \ HookExtension(PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC, glGetNamedFramebufferParameterivEXT); \ HookExtensionAlias(PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC, glGetNamedFramebufferParameterivEXT, glGetFramebufferParameterivEXT); \ HookExtensionAlias(PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC, glGetNamedFramebufferParameterivEXT, glGetNamedFramebufferParameteriv); \ HookExtension(PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC, glGetNamedFramebufferAttachmentParameterivEXT); \ HookExtensionAlias(PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC, glGetNamedFramebufferAttachmentParameterivEXT, glGetNamedFramebufferAttachmentParameteriv); \ + HookExtension(PFNGLCREATERENDERBUFFERSPROC, glCreateRenderbuffers); \ + HookExtension(PFNGLNAMEDRENDERBUFFERSTORAGEPROC, glNamedRenderbufferStorageEXT); \ + HookExtensionAlias(PFNGLNAMEDRENDERBUFFERSTORAGEPROC, glNamedRenderbufferStorageEXT, glNamedRenderbufferStorage); \ + HookExtension(PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC, glNamedRenderbufferStorageMultisampleEXT); \ + HookExtensionAlias(PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC, glNamedRenderbufferStorageMultisampleEXT, glNamedRenderbufferStorageMultisample); \ HookExtension(PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC, glGetNamedRenderbufferParameterivEXT); \ HookExtensionAlias(PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC, glGetNamedRenderbufferParameterivEXT, glGetNamedRenderbufferParameteriv); \ + HookExtension(PFNGLCREATETEXTURESPROC, glCreateTextures); \ + HookExtension(PFNGLTEXTUREBUFFERPROC, glTextureBuffer); \ + HookExtension(PFNGLTEXTUREBUFFERRANGEPROC, glTextureBufferRange); \ + HookExtension(PFNGLTEXTURESTORAGE1DPROC, glTextureStorage1D); \ + HookExtension(PFNGLTEXTURESTORAGE2DPROC, glTextureStorage2D); \ + HookExtension(PFNGLTEXTURESTORAGE3DPROC, glTextureStorage3D); \ + HookExtension(PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC, glTextureStorage2DMultisample); \ + HookExtension(PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC, glTextureStorage3DMultisample); \ + HookExtension(PFNGLTEXTURESUBIMAGE1DPROC, glTextureSubImage1D); \ + HookExtension(PFNGLTEXTURESUBIMAGE2DPROC, glTextureSubImage2D); \ + HookExtension(PFNGLTEXTURESUBIMAGE3DPROC, glTextureSubImage3D); \ + HookExtension(PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC, glCompressedTextureSubImage1D); \ + HookExtension(PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC, glCompressedTextureSubImage2D); \ + HookExtension(PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC, glCompressedTextureSubImage3D); \ + HookExtension(PFNGLCOPYTEXTURESUBIMAGE1DPROC, glCopyTextureSubImage1D); \ + HookExtension(PFNGLCOPYTEXTURESUBIMAGE2DPROC, glCopyTextureSubImage2D); \ + HookExtension(PFNGLCOPYTEXTURESUBIMAGE3DPROC, glCopyTextureSubImage3D); \ + HookExtension(PFNGLTEXTUREPARAMETERFPROC, glTextureParameterf); \ + HookExtension(PFNGLTEXTUREPARAMETERFVPROC, glTextureParameterfv); \ + HookExtension(PFNGLTEXTUREPARAMETERIPROC, glTextureParameteri); \ + HookExtension(PFNGLTEXTUREPARAMETERIIVPROC, glTextureParameterIiv); \ + HookExtension(PFNGLTEXTUREPARAMETERIUIVPROC, glTextureParameterIuiv); \ + HookExtension(PFNGLTEXTUREPARAMETERIVPROC, glTextureParameteriv); \ + HookExtension(PFNGLGENERATETEXTUREMIPMAPPROC, glGenerateTextureMipmap); \ + HookExtension(PFNGLBINDTEXTUREUNITPROC, glBindTextureUnit); \ HookExtension(PFNGLGETTEXTUREIMAGEPROC, glGetTextureImage); \ HookExtension(PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC, glGetCompressedTextureImage); \ HookExtension(PFNGLGETTEXTURELEVELPARAMETERFVPROC, glGetTextureLevelParameterfv); \ @@ -792,9 +864,35 @@ HookExtension(PFNGLGETTEXTUREPARAMETERIIVPROC, glGetTextureParameterIiv); \ HookExtension(PFNGLGETTEXTUREPARAMETERIUIVPROC, glGetTextureParameterIuiv); \ HookExtension(PFNGLGETTEXTUREPARAMETERIVPROC, glGetTextureParameteriv); \ + HookExtension(PFNGLCREATEVERTEXARRAYSPROC, glCreateVertexArrays); \ + HookExtension(PFNGLDISABLEVERTEXARRAYATTRIBPROC, glDisableVertexArrayAttribEXT); \ + HookExtensionAlias(PFNGLDISABLEVERTEXARRAYATTRIBPROC, glDisableVertexArrayAttribEXT, glDisableVertexArrayAttrib); \ + HookExtension(PFNGLENABLEVERTEXARRAYATTRIBPROC, glEnableVertexArrayAttribEXT); \ + HookExtensionAlias(PFNGLENABLEVERTEXARRAYATTRIBPROC, glEnableVertexArrayAttribEXT, glEnableVertexArrayAttrib); \ + HookExtension(PFNGLVERTEXARRAYELEMENTBUFFERPROC, glVertexArrayElementBuffer); \ + HookExtension(PFNGLVERTEXARRAYVERTEXBUFFERPROC, glVertexArrayBindVertexBufferEXT); \ + HookExtensionAlias(PFNGLVERTEXARRAYVERTEXBUFFERPROC, glVertexArrayBindVertexBufferEXT, glVertexArrayVertexBuffer); \ + HookExtension(PFNGLVERTEXARRAYVERTEXBUFFERSPROC, glVertexArrayVertexBuffers); \ + HookExtension(PFNGLVERTEXARRAYATTRIBBINDINGPROC, glVertexArrayVertexAttribBindingEXT); \ + HookExtensionAlias(PFNGLVERTEXARRAYATTRIBBINDINGPROC, glVertexArrayVertexAttribBindingEXT, glVertexArrayAttribBinding); \ + HookExtension(PFNGLVERTEXARRAYATTRIBFORMATPROC, glVertexArrayVertexAttribFormatEXT); \ + HookExtensionAlias(PFNGLVERTEXARRAYATTRIBFORMATPROC, glVertexArrayVertexAttribFormatEXT, glVertexArrayAttribFormat); \ + HookExtension(PFNGLVERTEXARRAYATTRIBIFORMATPROC, glVertexArrayVertexAttribIFormatEXT); \ + HookExtensionAlias(PFNGLVERTEXARRAYATTRIBIFORMATPROC, glVertexArrayVertexAttribIFormatEXT, glVertexArrayAttribIFormat); \ + HookExtension(PFNGLVERTEXARRAYATTRIBLFORMATPROC, glVertexArrayVertexAttribLFormatEXT); \ + HookExtensionAlias(PFNGLVERTEXARRAYATTRIBLFORMATPROC, glVertexArrayVertexAttribLFormatEXT, glVertexArrayAttribLFormat); \ + HookExtension(PFNGLVERTEXARRAYBINDINGDIVISORPROC, glVertexArrayVertexBindingDivisorEXT); \ + HookExtensionAlias(PFNGLVERTEXARRAYBINDINGDIVISORPROC, glVertexArrayVertexBindingDivisorEXT, glVertexArrayBindingDivisor); \ HookExtension(PFNGLGETVERTEXARRAYIVPROC, glGetVertexArrayiv); \ HookExtension(PFNGLGETVERTEXARRAYINDEXEDIVPROC, glGetVertexArrayIndexediv); \ HookExtension(PFNGLGETVERTEXARRAYINDEXED64IVPROC, glGetVertexArrayIndexed64iv); \ + HookExtension(PFNGLCREATESAMPLERSPROC, glCreateSamplers); \ + HookExtension(PFNGLCREATEPROGRAMPIPELINESPROC, glCreateProgramPipelines); \ + HookExtension(PFNGLCREATEQUERIESPROC, glCreateQueries); \ + HookExtension(PFNGLGETQUERYBUFFEROBJECTI64VPROC, glGetQueryBufferObjecti64v); \ + HookExtension(PFNGLGETQUERYBUFFEROBJECTIVPROC, glGetQueryBufferObjectiv); \ + HookExtension(PFNGLGETQUERYBUFFEROBJECTUI64VPROC, glGetQueryBufferObjectui64v); \ + HookExtension(PFNGLGETQUERYBUFFEROBJECTUIVPROC, glGetQueryBufferObjectuiv); \ HookExtension(PFNGLMEMORYBARRIERBYREGIONPROC, glMemoryBarrierByRegion); \ HookExtension(PFNGLGETTEXTURESUBIMAGEPROC, glGetTextureSubImage); \ HookExtension(PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC, glGetCompressedTextureSubImage); \ @@ -891,9 +989,6 @@ HookExtension(PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC, glGetCompressedMultiTexImageEXT); \ HookExtension(PFNGLNAMEDBUFFERDATAEXTPROC, glNamedBufferDataEXT); \ HookExtension(PFNGLNAMEDBUFFERSUBDATAEXTPROC, glNamedBufferSubDataEXT); \ - HookExtension(PFNGLMAPNAMEDBUFFEREXTPROC, glMapNamedBufferEXT); \ - HookExtension(PFNGLUNMAPNAMEDBUFFEREXTPROC, glUnmapNamedBufferEXT); \ - HookExtension(PFNGLGETNAMEDBUFFERPOINTERVEXTPROC, glGetNamedBufferPointervEXT); \ HookExtension(PFNGLGETNAMEDBUFFERSUBDATAEXTPROC, glGetNamedBufferSubDataEXT); \ HookExtension(PFNGLTEXTUREBUFFEREXTPROC, glTextureBufferEXT); \ HookExtension(PFNGLMULTITEXBUFFEREXTPROC, glMultiTexBufferEXT); \ @@ -907,25 +1002,14 @@ HookExtension(PFNGLGETMULTITEXPARAMETERIUIVEXTPROC, glGetMultiTexParameterIuivEXT); \ HookExtension(PFNGLGETPOINTERI_VEXTPROC, glGetPointeri_vEXT); \ HookExtension(PFNGLGETNAMEDPROGRAMIVEXTPROC, glGetNamedProgramivEXT); \ - HookExtension(PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC, glNamedRenderbufferStorageEXT); \ - HookExtension(PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC, glNamedRenderbufferStorageMultisampleEXT); \ - HookExtension(PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC, glCheckNamedFramebufferStatusEXT); \ HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC, glNamedFramebufferTexture1DEXT); \ HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC, glNamedFramebufferTexture2DEXT); \ HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC, glNamedFramebufferTexture3DEXT); \ - HookExtension(PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC, glNamedFramebufferRenderbufferEXT); \ HookExtension(PFNGLGENERATETEXTUREMIPMAPEXTPROC, glGenerateTextureMipmapEXT); \ HookExtension(PFNGLGENERATEMULTITEXMIPMAPEXTPROC, glGenerateMultiTexMipmapEXT); \ - HookExtension(PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC, glFramebufferDrawBufferEXT); \ - HookExtension(PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC, glFramebufferDrawBuffersEXT); \ - HookExtension(PFNGLFRAMEBUFFERREADBUFFEREXTPROC, glFramebufferReadBufferEXT); \ HookExtension(PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC, glNamedCopyBufferSubDataEXT); \ - HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC, glNamedFramebufferTextureEXT); \ - HookExtension(PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC, glNamedFramebufferTextureLayerEXT); \ HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC, glVertexArrayVertexAttribOffsetEXT); \ HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC, glVertexArrayVertexAttribIOffsetEXT); \ - HookExtension(PFNGLENABLEVERTEXARRAYATTRIBEXTPROC, glEnableVertexArrayAttribEXT); \ - HookExtension(PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC, glDisableVertexArrayAttribEXT); \ HookExtension(PFNGLGETVERTEXARRAYINTEGERVEXTPROC, glGetVertexArrayIntegervEXT); \ HookExtension(PFNGLGETVERTEXARRAYPOINTERVEXTPROC, glGetVertexArrayPointervEXT); \ HookExtension(PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC, glGetVertexArrayIntegeri_vEXT); \ @@ -933,21 +1017,13 @@ HookExtension(PFNGLMAPNAMEDBUFFERRANGEEXTPROC, glMapNamedBufferRangeEXT); \ HookExtension(PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC, glFlushMappedNamedBufferRangeEXT); \ HookExtension(PFNGLNAMEDBUFFERSTORAGEEXTPROC, glNamedBufferStorageEXT); \ - HookExtension(PFNGLCLEARNAMEDBUFFERDATAEXTPROC, glClearNamedBufferDataEXT); \ HookExtension(PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC, glClearNamedBufferSubDataEXT); \ - HookExtension(PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC, glNamedFramebufferParameteriEXT); \ HookExtension(PFNGLTEXTUREBUFFERRANGEEXTPROC, glTextureBufferRangeEXT); \ HookExtension(PFNGLTEXTURESTORAGE1DEXTPROC, glTextureStorage1DEXT); \ HookExtension(PFNGLTEXTURESTORAGE2DEXTPROC, glTextureStorage2DEXT); \ HookExtension(PFNGLTEXTURESTORAGE3DEXTPROC, glTextureStorage3DEXT); \ HookExtension(PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC, glTextureStorage2DMultisampleEXT); \ HookExtension(PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC, glTextureStorage3DMultisampleEXT); \ - HookExtension(PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC, glVertexArrayBindVertexBufferEXT); \ - HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC, glVertexArrayVertexAttribFormatEXT); \ - HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC, glVertexArrayVertexAttribIFormatEXT); \ - HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC, glVertexArrayVertexAttribLFormatEXT); \ - HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC, glVertexArrayVertexAttribBindingEXT); \ - HookExtension(PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC, glVertexArrayVertexBindingDivisorEXT); \ HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC, glVertexArrayVertexAttribLOffsetEXT); \ HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC, glVertexArrayVertexAttribDivisorEXT); \ HookExtension(PFNGLPOLYGONOFFSETCLAMPEXTPROC, glPolygonOffsetClampEXT); \ @@ -1570,16 +1646,74 @@ HookWrapper3(void, glBindImageTextures, GLuint, first, GLsizei, count, const GLuint *, textures); \ HookWrapper5(void, glBindVertexBuffers, GLuint, first, GLsizei, count, const GLuint *, buffers, const GLintptr *, offsets, const GLsizei *, strides); \ HookWrapper2(void, glClipControl, GLenum, origin, GLenum, depth); \ + HookWrapper2(void, glCreateTransformFeedbacks, GLsizei, n, GLuint *, ids); \ + HookWrapper3(void, glTransformFeedbackBufferBase, GLuint, xfb, GLuint, index, GLuint, buffer); \ + HookWrapper5(void, glTransformFeedbackBufferRange, GLuint, xfb, GLuint, index, GLuint, buffer, GLintptr, offset, GLsizei, size); \ HookWrapper3(void, glGetTransformFeedbackiv, GLuint, xfb, GLenum, pname, GLint *, param); \ HookWrapper4(void, glGetTransformFeedbacki_v, GLuint, xfb, GLenum, pname, GLuint, index, GLint *, param); \ HookWrapper4(void, glGetTransformFeedbacki64_v, GLuint, xfb, GLenum, pname, GLuint, index, GLint64 *, param); \ + HookWrapper2(void, glCreateBuffers, GLsizei, n, GLuint *, buffers); \ + HookWrapper4(void, glNamedBufferStorage, GLuint, buffer, GLsizei, size, const void *, data, GLbitfield, flags); \ + HookWrapper4(void, glNamedBufferData, GLuint, buffer, GLsizei, size, const void *, data, GLenum, usage); \ + HookWrapper4(void, glNamedBufferSubData, GLuint, buffer, GLintptr, offset, GLsizei, size, const void *, data); \ + HookWrapper5(void, glCopyNamedBufferSubData, GLuint, readBuffer, GLuint, writeBuffer, GLintptr, readOffset, GLintptr, writeOffset, GLsizei, size); \ + HookWrapper5(void, glClearNamedBufferDataEXT, GLuint, buffer, GLenum, internalformat, GLenum, format, GLenum, type, const void *, data); \ + HookWrapper7(void, glClearNamedBufferSubData, GLuint, buffer, GLenum, internalformat, GLintptr, offset, GLsizei, size, GLenum, format, GLenum, type, const void *, data); \ + HookWrapper2(void *, glMapNamedBufferEXT, GLuint, buffer, GLenum, access); \ + HookWrapper4(void *, glMapNamedBufferRange, GLuint, buffer, GLintptr, offset, GLsizei, length, GLbitfield, access); \ + HookWrapper1(GLboolean, glUnmapNamedBufferEXT, GLuint, buffer); \ + HookWrapper3(void, glFlushMappedNamedBufferRange, GLuint, buffer, GLintptr, offset, GLsizei, length); \ HookWrapper3(void, glGetNamedBufferParameterivEXT, GLuint, buffer, GLenum, pname, GLint *, params); \ HookWrapper3(void, glGetNamedBufferParameteri64v, GLuint, buffer, GLenum, pname, GLint64 *, params); \ - HookWrapper3(void, glGetNamedBufferPointerv, GLuint, buffer, GLenum, pname, void **, params); \ + HookWrapper3(void, glGetNamedBufferPointervEXT, GLuint, buffer, GLenum, pname, void **, params); \ HookWrapper4(void, glGetNamedBufferSubData, GLuint, buffer, GLintptr, offset, GLsizei, size, void *, data); \ + HookWrapper2(void, glCreateFramebuffers, GLsizei, n, GLuint *, framebuffers); \ + HookWrapper4(void, glNamedFramebufferRenderbufferEXT, GLuint, framebuffer, GLenum, attachment, GLenum, renderbuffertarget, GLuint, renderbuffer); \ + HookWrapper3(void, glNamedFramebufferParameteriEXT, GLuint, framebuffer, GLenum, pname, GLint, param); \ + HookWrapper4(void, glNamedFramebufferTextureEXT, GLuint, framebuffer, GLenum, attachment, GLuint, texture, GLint, level); \ + HookWrapper5(void, glNamedFramebufferTextureLayerEXT, GLuint, framebuffer, GLenum, attachment, GLuint, texture, GLint, level, GLint, layer); \ + HookWrapper2(void, glFramebufferDrawBufferEXT, GLuint, framebuffer, GLenum, buf); \ + HookWrapper3(void, glFramebufferDrawBuffersEXT, GLuint, framebuffer, GLsizei, n, const GLenum *, bufs); \ + HookWrapper2(void, glFramebufferReadBufferEXT, GLuint, framebuffer, GLenum, src); \ + HookWrapper3(void, glInvalidateNamedFramebufferData, GLuint, framebuffer, GLsizei, numAttachments, const GLenum *, attachments); \ + HookWrapper7(void, glInvalidateNamedFramebufferSubData, GLuint, framebuffer, GLsizei, numAttachments, const GLenum *, attachments, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \ + HookWrapper4(void, glClearNamedFramebufferiv, GLuint, framebuffer, GLenum, buffer, GLint, drawbuffer, const GLint *, value); \ + HookWrapper4(void, glClearNamedFramebufferuiv, GLuint, framebuffer, GLenum, buffer, GLint, drawbuffer, const GLuint *, value); \ + HookWrapper4(void, glClearNamedFramebufferfv, GLuint, framebuffer, GLenum, buffer, GLint, drawbuffer, const GLfloat *, value); \ + HookWrapper4(void, glClearNamedFramebufferfi, GLuint, framebuffer, GLenum, buffer, const GLfloat, depth, GLint, stencil); \ + HookWrapper12(void, glBlitNamedFramebuffer, GLuint, readFramebuffer, GLuint, drawFramebuffer, GLint, srcX0, GLint, srcY0, GLint, srcX1, GLint, srcY1, GLint, dstX0, GLint, dstY0, GLint, dstX1, GLint, dstY1, GLbitfield, mask, GLenum, filter); \ + HookWrapper2(GLenum, glCheckNamedFramebufferStatusEXT, GLuint, framebuffer, GLenum, target); \ HookWrapper3(void, glGetNamedFramebufferParameterivEXT, GLuint, framebuffer, GLenum, pname, GLint *, param); \ HookWrapper4(void, glGetNamedFramebufferAttachmentParameterivEXT, GLuint, framebuffer, GLenum, attachment, GLenum, pname, GLint *, params); \ + HookWrapper2(void, glCreateRenderbuffers, GLsizei, n, GLuint *, renderbuffers); \ + HookWrapper4(void, glNamedRenderbufferStorageEXT, GLuint, renderbuffer, GLenum, internalformat, GLsizei, width, GLsizei, height); \ + HookWrapper5(void, glNamedRenderbufferStorageMultisampleEXT, GLuint, renderbuffer, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height); \ HookWrapper3(void, glGetNamedRenderbufferParameterivEXT, GLuint, renderbuffer, GLenum, pname, GLint *, params); \ + HookWrapper3(void, glCreateTextures, GLenum, target, GLsizei, n, GLuint *, textures); \ + HookWrapper3(void, glTextureBuffer, GLuint, texture, GLenum, internalformat, GLuint, buffer); \ + HookWrapper5(void, glTextureBufferRange, GLuint, texture, GLenum, internalformat, GLuint, buffer, GLintptr, offset, GLsizei, size); \ + HookWrapper4(void, glTextureStorage1D, GLuint, texture, GLsizei, levels, GLenum, internalformat, GLsizei, width); \ + HookWrapper5(void, glTextureStorage2D, GLuint, texture, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height); \ + HookWrapper6(void, glTextureStorage3D, GLuint, texture, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth); \ + HookWrapper6(void, glTextureStorage2DMultisample, GLuint, texture, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height, GLboolean, fixedsamplelocations); \ + HookWrapper7(void, glTextureStorage3DMultisample, GLuint, texture, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth, GLboolean, fixedsamplelocations); \ + HookWrapper7(void, glTextureSubImage1D, GLuint, texture, GLint, level, GLint, xoffset, GLsizei, width, GLenum, format, GLenum, type, const void *, pixels); \ + HookWrapper9(void, glTextureSubImage2D, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLsizei, width, GLsizei, height, GLenum, format, GLenum, type, const void *, pixels); \ + HookWrapper11(void, glTextureSubImage3D, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLenum, type, const void *, pixels); \ + HookWrapper7(void, glCompressedTextureSubImage1D, GLuint, texture, GLint, level, GLint, xoffset, GLsizei, width, GLenum, format, GLsizei, imageSize, const void *, data); \ + HookWrapper9(void, glCompressedTextureSubImage2D, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLsizei, width, GLsizei, height, GLenum, format, GLsizei, imageSize, const void *, data); \ + HookWrapper11(void, glCompressedTextureSubImage3D, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLsizei, imageSize, const void *, data); \ + HookWrapper6(void, glCopyTextureSubImage1D, GLuint, texture, GLint, level, GLint, xoffset, GLint, x, GLint, y, GLsizei, width); \ + HookWrapper8(void, glCopyTextureSubImage2D, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \ + HookWrapper9(void, glCopyTextureSubImage3D, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \ + HookWrapper3(void, glTextureParameterf, GLuint, texture, GLenum, pname, GLfloat, param); \ + HookWrapper3(void, glTextureParameterfv, GLuint, texture, GLenum, pname, const GLfloat *, param); \ + HookWrapper3(void, glTextureParameteri, GLuint, texture, GLenum, pname, GLint, param); \ + HookWrapper3(void, glTextureParameterIiv, GLuint, texture, GLenum, pname, const GLint *, params); \ + HookWrapper3(void, glTextureParameterIuiv, GLuint, texture, GLenum, pname, const GLuint *, params); \ + HookWrapper3(void, glTextureParameteriv, GLuint, texture, GLenum, pname, const GLint *, param); \ + HookWrapper1(void, glGenerateTextureMipmap, GLuint, texture); \ + HookWrapper2(void, glBindTextureUnit, GLuint, unit, GLuint, texture); \ HookWrapper6(void, glGetTextureImage, GLuint, texture, GLint, level, GLenum, format, GLenum, type, GLsizei, bufSize, void *, pixels); \ HookWrapper4(void, glGetCompressedTextureImage, GLuint, texture, GLint, level, GLsizei, bufSize, void *, pixels); \ HookWrapper4(void, glGetTextureLevelParameterfv, GLuint, texture, GLint, level, GLenum, pname, GLfloat *, params); \ @@ -1588,9 +1722,27 @@ HookWrapper3(void, glGetTextureParameterIiv, GLuint, texture, GLenum, pname, GLint *, params); \ HookWrapper3(void, glGetTextureParameterIuiv, GLuint, texture, GLenum, pname, GLuint *, params); \ HookWrapper3(void, glGetTextureParameteriv, GLuint, texture, GLenum, pname, GLint *, params); \ + HookWrapper2(void, glCreateVertexArrays, GLsizei, n, GLuint *, arrays); \ + HookWrapper2(void, glDisableVertexArrayAttribEXT, GLuint, vaobj, GLuint, index); \ + HookWrapper2(void, glEnableVertexArrayAttribEXT, GLuint, vaobj, GLuint, index); \ + HookWrapper2(void, glVertexArrayElementBuffer, GLuint, vaobj, GLuint, buffer); \ + HookWrapper5(void, glVertexArrayBindVertexBufferEXT, GLuint, vaobj, GLuint, bindingindex, GLuint, buffer, GLintptr, offset, GLsizei, stride); \ + HookWrapper6(void, glVertexArrayVertexBuffers, GLuint, vaobj, GLuint, first, GLsizei, count, const GLuint *, buffers, const GLintptr *, offsets, const GLsizei *, strides); \ + HookWrapper3(void, glVertexArrayVertexAttribBindingEXT, GLuint, vaobj, GLuint, attribindex, GLuint, bindingindex); \ + HookWrapper6(void, glVertexArrayVertexAttribFormatEXT, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLboolean, normalized, GLuint, relativeoffset); \ + HookWrapper5(void, glVertexArrayVertexAttribIFormatEXT, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLuint, relativeoffset); \ + HookWrapper5(void, glVertexArrayVertexAttribLFormatEXT, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLuint, relativeoffset); \ + HookWrapper3(void, glVertexArrayVertexBindingDivisorEXT, GLuint, vaobj, GLuint, bindingindex, GLuint, divisor); \ HookWrapper3(void, glGetVertexArrayiv, GLuint, vaobj, GLenum, pname, GLint *, param); \ HookWrapper4(void, glGetVertexArrayIndexediv, GLuint, vaobj, GLuint, index, GLenum, pname, GLint *, param); \ HookWrapper4(void, glGetVertexArrayIndexed64iv, GLuint, vaobj, GLuint, index, GLenum, pname, GLint64 *, param); \ + HookWrapper2(void, glCreateSamplers, GLsizei, n, GLuint *, samplers); \ + HookWrapper2(void, glCreateProgramPipelines, GLsizei, n, GLuint *, pipelines); \ + HookWrapper3(void, glCreateQueries, GLenum, target, GLsizei, n, GLuint *, ids); \ + HookWrapper4(void, glGetQueryBufferObjecti64v, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \ + HookWrapper4(void, glGetQueryBufferObjectiv, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \ + HookWrapper4(void, glGetQueryBufferObjectui64v, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \ + HookWrapper4(void, glGetQueryBufferObjectuiv, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \ HookWrapper1(void, glMemoryBarrierByRegion, GLbitfield, barriers); \ HookWrapper12(void, glGetTextureSubImage, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLenum, type, GLsizei, bufSize, void *, pixels); \ HookWrapper10(void, glGetCompressedTextureSubImage, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLsizei, bufSize, void *, pixels); \ @@ -1679,9 +1831,6 @@ HookWrapper4(void, glGetCompressedMultiTexImageEXT, GLenum, texunit, GLenum, target, GLint, lod, void *, img); \ HookWrapper4(void, glNamedBufferDataEXT, GLuint, buffer, GLsizeiptr, size, const void *, data, GLenum, usage); \ HookWrapper4(void, glNamedBufferSubDataEXT, GLuint, buffer, GLintptr, offset, GLsizeiptr, size, const void *, data); \ - HookWrapper2(void *, glMapNamedBufferEXT, GLuint, buffer, GLenum, access); \ - HookWrapper1(GLboolean, glUnmapNamedBufferEXT, GLuint, buffer); \ - HookWrapper3(void, glGetNamedBufferPointervEXT, GLuint, buffer, GLenum, pname, void **, params); \ HookWrapper4(void, glGetNamedBufferSubDataEXT, GLuint, buffer, GLintptr, offset, GLsizeiptr, size, void *, data); \ HookWrapper4(void, glTextureBufferEXT, GLuint, texture, GLenum, target, GLenum, internalformat, GLuint, buffer); \ HookWrapper4(void, glMultiTexBufferEXT, GLenum, texunit, GLenum, target, GLenum, internalformat, GLuint, buffer); \ @@ -1695,25 +1844,14 @@ HookWrapper4(void, glGetMultiTexParameterIuivEXT, GLenum, texunit, GLenum, target, GLenum, pname, GLuint *, params); \ HookWrapper3(void, glGetPointeri_vEXT, GLenum, pname, GLuint, index, void **, params); \ HookWrapper4(void, glGetNamedProgramivEXT, GLuint, program, GLenum, target, GLenum, pname, GLint *, params); \ - HookWrapper4(void, glNamedRenderbufferStorageEXT, GLuint, renderbuffer, GLenum, internalformat, GLsizei, width, GLsizei, height); \ - HookWrapper5(void, glNamedRenderbufferStorageMultisampleEXT, GLuint, renderbuffer, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height); \ - HookWrapper2(GLenum, glCheckNamedFramebufferStatusEXT, GLuint, framebuffer, GLenum, target); \ HookWrapper5(void, glNamedFramebufferTexture1DEXT, GLuint, framebuffer, GLenum, attachment, GLenum, textarget, GLuint, texture, GLint, level); \ HookWrapper5(void, glNamedFramebufferTexture2DEXT, GLuint, framebuffer, GLenum, attachment, GLenum, textarget, GLuint, texture, GLint, level); \ HookWrapper6(void, glNamedFramebufferTexture3DEXT, GLuint, framebuffer, GLenum, attachment, GLenum, textarget, GLuint, texture, GLint, level, GLint, zoffset); \ - HookWrapper4(void, glNamedFramebufferRenderbufferEXT, GLuint, framebuffer, GLenum, attachment, GLenum, renderbuffertarget, GLuint, renderbuffer); \ HookWrapper2(void, glGenerateTextureMipmapEXT, GLuint, texture, GLenum, target); \ HookWrapper2(void, glGenerateMultiTexMipmapEXT, GLenum, texunit, GLenum, target); \ - HookWrapper2(void, glFramebufferDrawBufferEXT, GLuint, framebuffer, GLenum, mode); \ - HookWrapper3(void, glFramebufferDrawBuffersEXT, GLuint, framebuffer, GLsizei, n, const GLenum *, bufs); \ - HookWrapper2(void, glFramebufferReadBufferEXT, GLuint, framebuffer, GLenum, mode); \ HookWrapper5(void, glNamedCopyBufferSubDataEXT, GLuint, readBuffer, GLuint, writeBuffer, GLintptr, readOffset, GLintptr, writeOffset, GLsizeiptr, size); \ - HookWrapper4(void, glNamedFramebufferTextureEXT, GLuint, framebuffer, GLenum, attachment, GLuint, texture, GLint, level); \ - HookWrapper5(void, glNamedFramebufferTextureLayerEXT, GLuint, framebuffer, GLenum, attachment, GLuint, texture, GLint, level, GLint, layer); \ HookWrapper8(void, glVertexArrayVertexAttribOffsetEXT, GLuint, vaobj, GLuint, buffer, GLuint, index, GLint, size, GLenum, type, GLboolean, normalized, GLsizei, stride, GLintptr, offset); \ HookWrapper7(void, glVertexArrayVertexAttribIOffsetEXT, GLuint, vaobj, GLuint, buffer, GLuint, index, GLint, size, GLenum, type, GLsizei, stride, GLintptr, offset); \ - HookWrapper2(void, glEnableVertexArrayAttribEXT, GLuint, vaobj, GLuint, index); \ - HookWrapper2(void, glDisableVertexArrayAttribEXT, GLuint, vaobj, GLuint, index); \ HookWrapper3(void, glGetVertexArrayIntegervEXT, GLuint, vaobj, GLenum, pname, GLint *, param); \ HookWrapper3(void, glGetVertexArrayPointervEXT, GLuint, vaobj, GLenum, pname, void **, param); \ HookWrapper4(void, glGetVertexArrayIntegeri_vEXT, GLuint, vaobj, GLuint, index, GLenum, pname, GLint *, param); \ @@ -1721,21 +1859,13 @@ HookWrapper4(void *, glMapNamedBufferRangeEXT, GLuint, buffer, GLintptr, offset, GLsizeiptr, length, GLbitfield, access); \ HookWrapper3(void, glFlushMappedNamedBufferRangeEXT, GLuint, buffer, GLintptr, offset, GLsizeiptr, length); \ HookWrapper4(void, glNamedBufferStorageEXT, GLuint, buffer, GLsizeiptr, size, const void *, data, GLbitfield, flags); \ - HookWrapper5(void, glClearNamedBufferDataEXT, GLuint, buffer, GLenum, internalformat, GLenum, format, GLenum, type, const void *, data); \ HookWrapper7(void, glClearNamedBufferSubDataEXT, GLuint, buffer, GLenum, internalformat, GLsizeiptr, offset, GLsizeiptr, size, GLenum, format, GLenum, type, const void *, data); \ - HookWrapper3(void, glNamedFramebufferParameteriEXT, GLuint, framebuffer, GLenum, pname, GLint, param); \ HookWrapper6(void, glTextureBufferRangeEXT, GLuint, texture, GLenum, target, GLenum, internalformat, GLuint, buffer, GLintptr, offset, GLsizeiptr, size); \ HookWrapper5(void, glTextureStorage1DEXT, GLuint, texture, GLenum, target, GLsizei, levels, GLenum, internalformat, GLsizei, width); \ HookWrapper6(void, glTextureStorage2DEXT, GLuint, texture, GLenum, target, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height); \ HookWrapper7(void, glTextureStorage3DEXT, GLuint, texture, GLenum, target, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth); \ HookWrapper7(void, glTextureStorage2DMultisampleEXT, GLuint, texture, GLenum, target, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height, GLboolean, fixedsamplelocations); \ HookWrapper8(void, glTextureStorage3DMultisampleEXT, GLuint, texture, GLenum, target, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth, GLboolean, fixedsamplelocations); \ - HookWrapper5(void, glVertexArrayBindVertexBufferEXT, GLuint, vaobj, GLuint, bindingindex, GLuint, buffer, GLintptr, offset, GLsizei, stride); \ - HookWrapper6(void, glVertexArrayVertexAttribFormatEXT, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLboolean, normalized, GLuint, relativeoffset); \ - HookWrapper5(void, glVertexArrayVertexAttribIFormatEXT, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLuint, relativeoffset); \ - HookWrapper5(void, glVertexArrayVertexAttribLFormatEXT, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLuint, relativeoffset); \ - HookWrapper3(void, glVertexArrayVertexAttribBindingEXT, GLuint, vaobj, GLuint, attribindex, GLuint, bindingindex); \ - HookWrapper3(void, glVertexArrayVertexBindingDivisorEXT, GLuint, vaobj, GLuint, bindingindex, GLuint, divisor); \ HookWrapper7(void, glVertexArrayVertexAttribLOffsetEXT, GLuint, vaobj, GLuint, buffer, GLuint, index, GLint, size, GLenum, type, GLsizei, stride, GLintptr, offset); \ HookWrapper3(void, glVertexArrayVertexAttribDivisorEXT, GLuint, vaobj, GLuint, index, GLuint, divisor); \ HookWrapper3(void, glPolygonOffsetClampEXT, GLfloat, factor, GLfloat, units, GLfloat, clamp); \ @@ -1747,82 +1877,6 @@ // unsupported entry points - used for dummy functions #define DefineUnsupportedDummies() \ - HookWrapper2(void, glcreatetransformfeedbacks, GLsizei, n, GLuint *, ids); \ - HookWrapper3(void, gltransformfeedbackbufferbase, GLuint, xfb, GLuint, index, GLuint, buffer); \ - HookWrapper5(void, gltransformfeedbackbufferrange, GLuint, xfb, GLuint, index, GLuint, buffer, GLintptr, offset, GLsizei, size); \ - HookWrapper2(void, glcreatebuffers, GLsizei, n, GLuint *, buffers); \ - HookWrapper4(void, glnamedbufferstorage, GLuint, buffer, GLsizei, size, const void *, data, GLbitfield, flags); \ - HookWrapper4(void, glnamedbufferdata, GLuint, buffer, GLsizei, size, const void *, data, GLenum, usage); \ - HookWrapper4(void, glnamedbuffersubdata, GLuint, buffer, GLintptr, offset, GLsizei, size, const void *, data); \ - HookWrapper5(void, glcopynamedbuffersubdata, GLuint, readBuffer, GLuint, writeBuffer, GLintptr, readOffset, GLintptr, writeOffset, GLsizei, size); \ - HookWrapper5(void, glclearnamedbufferdata, GLuint, buffer, GLenum, internalformat, GLenum, format, GLenum, type, const void *, data); \ - HookWrapper7(void, glclearnamedbuffersubdata, GLuint, buffer, GLenum, internalformat, GLintptr, offset, GLsizei, size, GLenum, format, GLenum, type, const void *, data); \ - HookWrapper2(void *, glmapnamedbuffer, GLuint, buffer, GLenum, access); \ - HookWrapper4(void *, glmapnamedbufferrange, GLuint, buffer, GLintptr, offset, GLsizei, length, GLbitfield, access); \ - HookWrapper1(GLboolean, glunmapnamedbuffer, GLuint, buffer); \ - HookWrapper3(void, glflushmappednamedbufferrange, GLuint, buffer, GLintptr, offset, GLsizei, length); \ - HookWrapper2(void, glcreateframebuffers, GLsizei, n, GLuint *, framebuffers); \ - HookWrapper4(void, glnamedframebufferrenderbuffer, GLuint, framebuffer, GLenum, attachment, GLenum, renderbuffertarget, GLuint, renderbuffer); \ - HookWrapper3(void, glnamedframebufferparameteri, GLuint, framebuffer, GLenum, pname, GLint, param); \ - HookWrapper4(void, glnamedframebuffertexture, GLuint, framebuffer, GLenum, attachment, GLuint, texture, GLint, level); \ - HookWrapper5(void, glnamedframebuffertexturelayer, GLuint, framebuffer, GLenum, attachment, GLuint, texture, GLint, level, GLint, layer); \ - HookWrapper2(void, glnamedframebufferdrawbuffer, GLuint, framebuffer, GLenum, buf); \ - HookWrapper3(void, glnamedframebufferdrawbuffers, GLuint, framebuffer, GLsizei, n, const GLenum *, bufs); \ - HookWrapper2(void, glnamedframebufferreadbuffer, GLuint, framebuffer, GLenum, src); \ - HookWrapper3(void, glinvalidatenamedframebufferdata, GLuint, framebuffer, GLsizei, numAttachments, const GLenum *, attachments); \ - HookWrapper7(void, glinvalidatenamedframebuffersubdata, GLuint, framebuffer, GLsizei, numAttachments, const GLenum *, attachments, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \ - HookWrapper4(void, glclearnamedframebufferiv, GLuint, framebuffer, GLenum, buffer, GLint, drawbuffer, const GLint *, value); \ - HookWrapper4(void, glclearnamedframebufferuiv, GLuint, framebuffer, GLenum, buffer, GLint, drawbuffer, const GLuint *, value); \ - HookWrapper4(void, glclearnamedframebufferfv, GLuint, framebuffer, GLenum, buffer, GLint, drawbuffer, const GLfloat *, value); \ - HookWrapper4(void, glclearnamedframebufferfi, GLuint, framebuffer, GLenum, buffer, const GLfloat, depth, GLint, stencil); \ - HookWrapper12(void, glblitnamedframebuffer, GLuint, readFramebuffer, GLuint, drawFramebuffer, GLint, srcX0, GLint, srcY0, GLint, srcX1, GLint, srcY1, GLint, dstX0, GLint, dstY0, GLint, dstX1, GLint, dstY1, GLbitfield, mask, GLenum, filter); \ - HookWrapper2(GLenum, glchecknamedframebufferstatus, GLuint, framebuffer, GLenum, target); \ - HookWrapper2(void, glcreaterenderbuffers, GLsizei, n, GLuint *, renderbuffers); \ - HookWrapper4(void, glnamedrenderbufferstorage, GLuint, renderbuffer, GLenum, internalformat, GLsizei, width, GLsizei, height); \ - HookWrapper5(void, glnamedrenderbufferstoragemultisample, GLuint, renderbuffer, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height); \ - HookWrapper3(void, glcreatetextures, GLenum, target, GLsizei, n, GLuint *, textures); \ - HookWrapper3(void, gltexturebuffer, GLuint, texture, GLenum, internalformat, GLuint, buffer); \ - HookWrapper5(void, gltexturebufferrange, GLuint, texture, GLenum, internalformat, GLuint, buffer, GLintptr, offset, GLsizei, size); \ - HookWrapper4(void, gltexturestorage1d, GLuint, texture, GLsizei, levels, GLenum, internalformat, GLsizei, width); \ - HookWrapper5(void, gltexturestorage2d, GLuint, texture, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height); \ - HookWrapper6(void, gltexturestorage3d, GLuint, texture, GLsizei, levels, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth); \ - HookWrapper6(void, gltexturestorage2dmultisample, GLuint, texture, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height, GLboolean, fixedsamplelocations); \ - HookWrapper7(void, gltexturestorage3dmultisample, GLuint, texture, GLsizei, samples, GLenum, internalformat, GLsizei, width, GLsizei, height, GLsizei, depth, GLboolean, fixedsamplelocations); \ - HookWrapper7(void, gltexturesubimage1d, GLuint, texture, GLint, level, GLint, xoffset, GLsizei, width, GLenum, format, GLenum, type, const void *, pixels); \ - HookWrapper9(void, gltexturesubimage2d, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLsizei, width, GLsizei, height, GLenum, format, GLenum, type, const void *, pixels); \ - HookWrapper11(void, gltexturesubimage3d, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLenum, type, const void *, pixels); \ - HookWrapper7(void, glcompressedtexturesubimage1d, GLuint, texture, GLint, level, GLint, xoffset, GLsizei, width, GLenum, format, GLsizei, imageSize, const void *, data); \ - HookWrapper9(void, glcompressedtexturesubimage2d, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLsizei, width, GLsizei, height, GLenum, format, GLsizei, imageSize, const void *, data); \ - HookWrapper11(void, glcompressedtexturesubimage3d, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLsizei, imageSize, const void *, data); \ - HookWrapper6(void, glcopytexturesubimage1d, GLuint, texture, GLint, level, GLint, xoffset, GLint, x, GLint, y, GLsizei, width); \ - HookWrapper8(void, glcopytexturesubimage2d, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \ - HookWrapper9(void, glcopytexturesubimage3d, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLint, x, GLint, y, GLsizei, width, GLsizei, height); \ - HookWrapper3(void, gltextureparameterf, GLuint, texture, GLenum, pname, GLfloat, param); \ - HookWrapper3(void, gltextureparameterfv, GLuint, texture, GLenum, pname, const GLfloat *, param); \ - HookWrapper3(void, gltextureparameteri, GLuint, texture, GLenum, pname, GLint, param); \ - HookWrapper3(void, gltextureparameteriiv, GLuint, texture, GLenum, pname, const GLint *, params); \ - HookWrapper3(void, gltextureparameteriuiv, GLuint, texture, GLenum, pname, const GLuint *, params); \ - HookWrapper3(void, gltextureparameteriv, GLuint, texture, GLenum, pname, const GLint *, param); \ - HookWrapper1(void, glgeneratetexturemipmap, GLuint, texture); \ - HookWrapper2(void, glbindtextureunit, GLuint, unit, GLuint, texture); \ - HookWrapper2(void, glcreatevertexarrays, GLsizei, n, GLuint *, arrays); \ - HookWrapper2(void, gldisablevertexarrayattrib, GLuint, vaobj, GLuint, index); \ - HookWrapper2(void, glenablevertexarrayattrib, GLuint, vaobj, GLuint, index); \ - HookWrapper2(void, glvertexarrayelementbuffer, GLuint, vaobj, GLuint, buffer); \ - HookWrapper5(void, glvertexarrayvertexbuffer, GLuint, vaobj, GLuint, bindingindex, GLuint, buffer, GLintptr, offset, GLsizei, stride); \ - HookWrapper6(void, glvertexarrayvertexbuffers, GLuint, vaobj, GLuint, first, GLsizei, count, const GLuint *, buffers, const GLintptr *, offsets, const GLsizei *, strides); \ - HookWrapper3(void, glvertexarrayattribbinding, GLuint, vaobj, GLuint, attribindex, GLuint, bindingindex); \ - HookWrapper6(void, glvertexarrayattribformat, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLboolean, normalized, GLuint, relativeoffset); \ - HookWrapper5(void, glvertexarrayattribiformat, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLuint, relativeoffset); \ - HookWrapper5(void, glvertexarrayattriblformat, GLuint, vaobj, GLuint, attribindex, GLint, size, GLenum, type, GLuint, relativeoffset); \ - HookWrapper3(void, glvertexarraybindingdivisor, GLuint, vaobj, GLuint, bindingindex, GLuint, divisor); \ - HookWrapper2(void, glcreatesamplers, GLsizei, n, GLuint *, samplers); \ - HookWrapper2(void, glcreateprogrampipelines, GLsizei, n, GLuint *, pipelines); \ - HookWrapper3(void, glcreatequeries, GLenum, target, GLsizei, n, GLuint *, ids); \ - HookWrapper4(void, glgetquerybufferobjecti64v, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \ - HookWrapper4(void, glgetquerybufferobjectiv, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \ - HookWrapper4(void, glgetquerybufferobjectui64v, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \ - HookWrapper4(void, glgetquerybufferobjectuiv, GLuint, id, GLuint, buffer, GLenum, pname, GLintptr, offset); \ HookWrapper1(GLuint64, glgettexturehandlearb, GLuint, texture); \ HookWrapper2(GLuint64, glgettexturesamplerhandlearb, GLuint, texture, GLuint, sampler); \ HookWrapper1(void, glmaketexturehandleresidentarb, GLuint64, handle); \ @@ -3354,82 +3408,6 @@ #define CheckUnsupported() \ - HandleUnsupported(PFNGLCREATETRANSFORMFEEDBACKSPROC, glcreatetransformfeedbacks); \ - HandleUnsupported(PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC, gltransformfeedbackbufferbase); \ - HandleUnsupported(PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC, gltransformfeedbackbufferrange); \ - HandleUnsupported(PFNGLCREATEBUFFERSPROC, glcreatebuffers); \ - HandleUnsupported(PFNGLNAMEDBUFFERSTORAGEPROC, glnamedbufferstorage); \ - HandleUnsupported(PFNGLNAMEDBUFFERDATAPROC, glnamedbufferdata); \ - HandleUnsupported(PFNGLNAMEDBUFFERSUBDATAPROC, glnamedbuffersubdata); \ - HandleUnsupported(PFNGLCOPYNAMEDBUFFERSUBDATAPROC, glcopynamedbuffersubdata); \ - HandleUnsupported(PFNGLCLEARNAMEDBUFFERDATAPROC, glclearnamedbufferdata); \ - HandleUnsupported(PFNGLCLEARNAMEDBUFFERSUBDATAPROC, glclearnamedbuffersubdata); \ - HandleUnsupported(PFNGLMAPNAMEDBUFFERPROC, glmapnamedbuffer); \ - HandleUnsupported(PFNGLMAPNAMEDBUFFERRANGEPROC, glmapnamedbufferrange); \ - HandleUnsupported(PFNGLUNMAPNAMEDBUFFERPROC, glunmapnamedbuffer); \ - HandleUnsupported(PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC, glflushmappednamedbufferrange); \ - HandleUnsupported(PFNGLCREATEFRAMEBUFFERSPROC, glcreateframebuffers); \ - HandleUnsupported(PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC, glnamedframebufferrenderbuffer); \ - HandleUnsupported(PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC, glnamedframebufferparameteri); \ - HandleUnsupported(PFNGLNAMEDFRAMEBUFFERTEXTUREPROC, glnamedframebuffertexture); \ - HandleUnsupported(PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC, glnamedframebuffertexturelayer); \ - HandleUnsupported(PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC, glnamedframebufferdrawbuffer); \ - HandleUnsupported(PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC, glnamedframebufferdrawbuffers); \ - HandleUnsupported(PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC, glnamedframebufferreadbuffer); \ - HandleUnsupported(PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC, glinvalidatenamedframebufferdata); \ - HandleUnsupported(PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC, glinvalidatenamedframebuffersubdata); \ - HandleUnsupported(PFNGLCLEARNAMEDFRAMEBUFFERIVPROC, glclearnamedframebufferiv); \ - HandleUnsupported(PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC, glclearnamedframebufferuiv); \ - HandleUnsupported(PFNGLCLEARNAMEDFRAMEBUFFERFVPROC, glclearnamedframebufferfv); \ - HandleUnsupported(PFNGLCLEARNAMEDFRAMEBUFFERFIPROC, glclearnamedframebufferfi); \ - HandleUnsupported(PFNGLBLITNAMEDFRAMEBUFFERPROC, glblitnamedframebuffer); \ - HandleUnsupported(PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC, glchecknamedframebufferstatus); \ - HandleUnsupported(PFNGLCREATERENDERBUFFERSPROC, glcreaterenderbuffers); \ - HandleUnsupported(PFNGLNAMEDRENDERBUFFERSTORAGEPROC, glnamedrenderbufferstorage); \ - HandleUnsupported(PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC, glnamedrenderbufferstoragemultisample); \ - HandleUnsupported(PFNGLCREATETEXTURESPROC, glcreatetextures); \ - HandleUnsupported(PFNGLTEXTUREBUFFERPROC, gltexturebuffer); \ - HandleUnsupported(PFNGLTEXTUREBUFFERRANGEPROC, gltexturebufferrange); \ - HandleUnsupported(PFNGLTEXTURESTORAGE1DPROC, gltexturestorage1d); \ - HandleUnsupported(PFNGLTEXTURESTORAGE2DPROC, gltexturestorage2d); \ - HandleUnsupported(PFNGLTEXTURESTORAGE3DPROC, gltexturestorage3d); \ - HandleUnsupported(PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC, gltexturestorage2dmultisample); \ - HandleUnsupported(PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC, gltexturestorage3dmultisample); \ - HandleUnsupported(PFNGLTEXTURESUBIMAGE1DPROC, gltexturesubimage1d); \ - HandleUnsupported(PFNGLTEXTURESUBIMAGE2DPROC, gltexturesubimage2d); \ - HandleUnsupported(PFNGLTEXTURESUBIMAGE3DPROC, gltexturesubimage3d); \ - HandleUnsupported(PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC, glcompressedtexturesubimage1d); \ - HandleUnsupported(PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC, glcompressedtexturesubimage2d); \ - HandleUnsupported(PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC, glcompressedtexturesubimage3d); \ - HandleUnsupported(PFNGLCOPYTEXTURESUBIMAGE1DPROC, glcopytexturesubimage1d); \ - HandleUnsupported(PFNGLCOPYTEXTURESUBIMAGE2DPROC, glcopytexturesubimage2d); \ - HandleUnsupported(PFNGLCOPYTEXTURESUBIMAGE3DPROC, glcopytexturesubimage3d); \ - HandleUnsupported(PFNGLTEXTUREPARAMETERFPROC, gltextureparameterf); \ - HandleUnsupported(PFNGLTEXTUREPARAMETERFVPROC, gltextureparameterfv); \ - HandleUnsupported(PFNGLTEXTUREPARAMETERIPROC, gltextureparameteri); \ - HandleUnsupported(PFNGLTEXTUREPARAMETERIIVPROC, gltextureparameteriiv); \ - HandleUnsupported(PFNGLTEXTUREPARAMETERIUIVPROC, gltextureparameteriuiv); \ - HandleUnsupported(PFNGLTEXTUREPARAMETERIVPROC, gltextureparameteriv); \ - HandleUnsupported(PFNGLGENERATETEXTUREMIPMAPPROC, glgeneratetexturemipmap); \ - HandleUnsupported(PFNGLBINDTEXTUREUNITPROC, glbindtextureunit); \ - HandleUnsupported(PFNGLCREATEVERTEXARRAYSPROC, glcreatevertexarrays); \ - HandleUnsupported(PFNGLDISABLEVERTEXARRAYATTRIBPROC, gldisablevertexarrayattrib); \ - HandleUnsupported(PFNGLENABLEVERTEXARRAYATTRIBPROC, glenablevertexarrayattrib); \ - HandleUnsupported(PFNGLVERTEXARRAYELEMENTBUFFERPROC, glvertexarrayelementbuffer); \ - HandleUnsupported(PFNGLVERTEXARRAYVERTEXBUFFERPROC, glvertexarrayvertexbuffer); \ - HandleUnsupported(PFNGLVERTEXARRAYVERTEXBUFFERSPROC, glvertexarrayvertexbuffers); \ - HandleUnsupported(PFNGLVERTEXARRAYATTRIBBINDINGPROC, glvertexarrayattribbinding); \ - HandleUnsupported(PFNGLVERTEXARRAYATTRIBFORMATPROC, glvertexarrayattribformat); \ - HandleUnsupported(PFNGLVERTEXARRAYATTRIBIFORMATPROC, glvertexarrayattribiformat); \ - HandleUnsupported(PFNGLVERTEXARRAYATTRIBLFORMATPROC, glvertexarrayattriblformat); \ - HandleUnsupported(PFNGLVERTEXARRAYBINDINGDIVISORPROC, glvertexarraybindingdivisor); \ - HandleUnsupported(PFNGLCREATESAMPLERSPROC, glcreatesamplers); \ - HandleUnsupported(PFNGLCREATEPROGRAMPIPELINESPROC, glcreateprogrampipelines); \ - HandleUnsupported(PFNGLCREATEQUERIESPROC, glcreatequeries); \ - HandleUnsupported(PFNGLGETQUERYBUFFEROBJECTI64VPROC, glgetquerybufferobjecti64v); \ - HandleUnsupported(PFNGLGETQUERYBUFFEROBJECTIVPROC, glgetquerybufferobjectiv); \ - HandleUnsupported(PFNGLGETQUERYBUFFEROBJECTUI64VPROC, glgetquerybufferobjectui64v); \ - HandleUnsupported(PFNGLGETQUERYBUFFEROBJECTUIVPROC, glgetquerybufferobjectuiv); \ HandleUnsupported(PFNGLGETTEXTUREHANDLEARBPROC, glgettexturehandlearb); \ HandleUnsupported(PFNGLGETTEXTURESAMPLERHANDLEARBPROC, glgettexturesamplerhandlearb); \ HandleUnsupported(PFNGLMAKETEXTUREHANDLERESIDENTARBPROC, glmaketexturehandleresidentarb); \ diff --git a/renderdoc/driver/gl/hookset.pl b/renderdoc/driver/gl/hookset.pl index 58d8ab066..0083ced29 100644 --- a/renderdoc/driver/gl/hookset.pl +++ b/renderdoc/driver/gl/hookset.pl @@ -53,7 +53,7 @@ while() $current = \@dllexport if $1 eq "dllexport"; $current = \@glext if $1 eq "glext"; } - elsif($line =~ /^\s*\/\/ .*/) + elsif($line =~ /^\s*\/\/.*/) { # skip comments } @@ -182,7 +182,7 @@ print <= WRITING) @@ -1817,6 +1846,12 @@ void WrappedOpenGL::glFlushMappedNamedBufferRangeEXT(GLuint buffer, GLintptr off } } +void WrappedOpenGL::glFlushMappedNamedBufferRange(GLuint buffer, GLintptr offset, GLsizei length) +{ + // only difference to EXT function is size parameter, so just upcast + glFlushMappedNamedBufferRangeEXT(buffer, offset, (GLsizeiptr)length); +} + void WrappedOpenGL::glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) { if(m_State >= WRITING) @@ -1914,17 +1949,46 @@ bool WrappedOpenGL::Serialise_glTransformFeedbackBufferBase(GLuint xfb, GLuint i if(m_State <= EXECUTING) { - m_Real.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, GetResourceManager()->GetLiveResource(xid).name); - + xfb = GetResourceManager()->GetLiveResource(xid).name; + + // use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If + // we are running without ARB_dsa support, these functions are emulated in the trivial way. This is + // necessary since these functions can be serialised even if ARB_dsa was not used originally, and + // we need to support this case. if(bid == ResourceId()) - m_Real.glBindBufferBase(eGL_TRANSFORM_FEEDBACK_BUFFER, idx, 0); + m_Real.glTransformFeedbackBufferBase(xfb, idx, 0); else - m_Real.glBindBufferBase(eGL_TRANSFORM_FEEDBACK_BUFFER, idx, GetResourceManager()->GetLiveResource(bid).name); + m_Real.glTransformFeedbackBufferBase(xfb, idx, GetResourceManager()->GetLiveResource(bid).name); } return true; } +void WrappedOpenGL::glTransformFeedbackBufferBase(GLuint xfb, GLuint index, GLuint buffer) +{ + m_Real.glTransformFeedbackBufferBase(xfb, index, buffer); + + if(m_State >= WRITING) + { + SCOPED_SERIALISE_CONTEXT(FEEDBACK_BUFFER_BASE); + Serialise_glTransformFeedbackBufferBase(xfb, index, buffer); + + if(m_State == WRITING_CAPFRAME) + { + m_ContextRecord->AddChunk(scope.Get()); + } + else if(xfb != 0) + { + GLResourceRecord *fbrecord = GetResourceManager()->GetResourceRecord(FeedbackRes(GetCtx(), xfb)); + + fbrecord->AddChunk(scope.Get()); + + if(buffer != 0) + fbrecord->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer))); + } + } +} + bool WrappedOpenGL::Serialise_glTransformFeedbackBufferRange(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size) { SERIALISE_ELEMENT(uint32_t, idx, index); @@ -1935,17 +1999,46 @@ bool WrappedOpenGL::Serialise_glTransformFeedbackBufferRange(GLuint xfb, GLuint if(m_State <= EXECUTING) { - m_Real.glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, GetResourceManager()->GetLiveResource(xid).name); - + xfb = GetResourceManager()->GetLiveResource(xid).name; + + // use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If + // we are running without ARB_dsa support, these functions are emulated in the obvious way. This is + // necessary since these functions can be serialised even if ARB_dsa was not used originally, and + // we need to support this case. if(bid == ResourceId()) - m_Real.glBindBufferBase(eGL_TRANSFORM_FEEDBACK_BUFFER, idx, 0); // if we're unbinding, offset/size don't matter + m_Real.glTransformFeedbackBufferBase(xfb, idx, 0); // if we're unbinding, offset/size don't matter else - m_Real.glBindBufferRange(eGL_TRANSFORM_FEEDBACK_BUFFER, idx, GetResourceManager()->GetLiveResource(bid).name, (GLintptr)offs, (GLsizei)sz); + m_Real.glTransformFeedbackBufferRange(xfb, idx, GetResourceManager()->GetLiveResource(bid).name, (GLintptr)offs, (GLsizei)sz); } return true; } +void WrappedOpenGL::glTransformFeedbackBufferRange(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size) +{ + m_Real.glTransformFeedbackBufferRange(xfb, index, buffer, offset, size); + + if(m_State >= WRITING) + { + SCOPED_SERIALISE_CONTEXT(FEEDBACK_BUFFER_RANGE); + Serialise_glTransformFeedbackBufferRange(xfb, index, buffer, offset, size); + + if(m_State == WRITING_CAPFRAME) + { + m_ContextRecord->AddChunk(scope.Get()); + } + else if(xfb != 0) + { + GLResourceRecord *fbrecord = GetResourceManager()->GetResourceRecord(FeedbackRes(GetCtx(), xfb)); + + fbrecord->AddChunk(scope.Get()); + + if(buffer != 0) + fbrecord->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer))); + } + } +} + bool WrappedOpenGL::Serialise_glBindTransformFeedback(GLenum target, GLuint id) { SERIALISE_ELEMENT(GLenum, Target, target); @@ -3007,16 +3100,47 @@ bool WrappedOpenGL::Serialise_glVertexArrayElementBuffer(GLuint vaobj, GLuint bu buffer = 0; if(bid != ResourceId()) buffer = GetResourceManager()->GetLiveResource(bid).name; - - // hack for now, since we don't properly serialise ARB_dsa, this is just used from - // glBindBuffer as a utility serialise function - m_Real.glBindVertexArray(vaobj); - m_Real.glBindBuffer(eGL_ELEMENT_ARRAY_BUFFER, buffer); + + // use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If + // we are running without ARB_dsa support, these functions are emulated in the obvious way. This is + // necessary since these functions can be serialised even if ARB_dsa was not used originally, and + // we need to support this case. + m_Real.glVertexArrayElementBuffer(vaobj, buffer); } return true; } +void WrappedOpenGL::glVertexArrayElementBuffer(GLuint vaobj, GLuint buffer) +{ + m_Real.glVertexArrayElementBuffer(vaobj, buffer); + + if(m_State >= WRITING) + { + GLResourceRecord *varecord = GetResourceManager()->GetResourceRecord(VertexArrayRes(GetCtx(), vaobj)); + + GLResourceRecord *r = m_State == WRITING_CAPFRAME ? m_ContextRecord : varecord; + + if(r) + { + if(m_State == WRITING_IDLE && !RecordUpdateCheck(varecord)) + return; + if(m_State == WRITING_CAPFRAME && varecord) + GetResourceManager()->MarkResourceFrameReferenced(varecord->GetResourceID(), eFrameRef_Write); + + { + SCOPED_SERIALISE_CONTEXT(VAO_ELEMENT_BUFFER); + Serialise_glVertexArrayElementBuffer(vaobj, buffer); + + r->AddChunk(scope.Get()); + } + + if(buffer != 0) + r->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer))); + } + } +} + bool WrappedOpenGL::Serialise_glVertexArrayBindVertexBufferEXT(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride) { SERIALISE_ELEMENT(uint32_t, idx, bindingindex); @@ -3099,11 +3223,11 @@ void WrappedOpenGL::glBindVertexBuffer(GLuint bindingindex, GLuint buffer, GLint } } -bool WrappedOpenGL::Serialise_glBindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides) +bool WrappedOpenGL::Serialise_glVertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides) { SERIALISE_ELEMENT(uint32_t, First, first); SERIALISE_ELEMENT(int32_t, Count, count); - SERIALISE_ELEMENT(ResourceId, vid, GetCtxData().m_VertexArrayRecord ? GetCtxData().m_VertexArrayRecord->GetResourceID() : ResourceId()); + SERIALISE_ELEMENT(ResourceId, vid, vaobj ? GetResourceManager()->GetID(VertexArrayRes(GetCtx(), vaobj)) : ResourceId()); GLuint *bufs = NULL; GLintptr *offs = NULL; @@ -3135,20 +3259,16 @@ bool WrappedOpenGL::Serialise_glBindVertexBuffers(GLuint first, GLsizei count, c if(m_State <= EXECUTING) { - if(m_State == READING && m_CurEventID == 0) - { - if(vid != ResourceId()) - { - GLResource res = GetResourceManager()->GetLiveResource(vid); - m_Real.glBindVertexArray(res.name); - } - else - { - m_Real.glBindVertexArray(m_FakeVAO); - } - } - - m_Real.glBindVertexBuffers(First, Count, bufs, offs, str); + if(vid != ResourceId()) + vaobj = GetResourceManager()->GetLiveResource(vid).name; + else + vaobj = m_FakeVAO; + + // use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If + // we are running without ARB_dsa support, these functions are emulated in the obvious way. This is + // necessary since these functions can be serialised even if ARB_dsa was not used originally, and + // we need to support this case. + m_Real.glVertexArrayVertexBuffers(vaobj, First, Count, bufs, offs, str); delete[] bufs; delete[] offs; @@ -3158,6 +3278,39 @@ bool WrappedOpenGL::Serialise_glBindVertexBuffers(GLuint first, GLsizei count, c return true; } +void WrappedOpenGL::glVertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides) +{ + m_Real.glVertexArrayVertexBuffers(vaobj, first, count, buffers, offsets, strides); + + if(m_State >= WRITING) + { + GLResourceRecord *varecord = GetResourceManager()->GetResourceRecord(VertexArrayRes(GetCtx(), vaobj)); + + GLResourceRecord *r = m_State == WRITING_CAPFRAME ? m_ContextRecord : varecord; + + if(r) + { + if(m_State == WRITING_IDLE && !RecordUpdateCheck(varecord)) + return; + if(m_State == WRITING_CAPFRAME && varecord) + GetResourceManager()->MarkResourceFrameReferenced(varecord->GetResourceID(), eFrameRef_Write); + + { + SCOPED_SERIALISE_CONTEXT(BIND_VERTEXBUFFERS); + Serialise_glVertexArrayVertexBuffers(vaobj, first, count, buffers, offsets, strides); + + r->AddChunk(scope.Get()); + } + + for(GLsizei i=0; i < count; i++) + { + if(buffers[i] != 0) + r->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffers[i]))); + } + } + } +} + void WrappedOpenGL::glBindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides) { m_Real.glBindVertexBuffers(first, count, buffers, offsets, strides); @@ -3177,7 +3330,7 @@ void WrappedOpenGL::glBindVertexBuffers(GLuint first, GLsizei count, const GLuin { SCOPED_SERIALISE_CONTEXT(BIND_VERTEXBUFFERS); - Serialise_glBindVertexBuffers(first, count, buffers, offsets, strides); + Serialise_glVertexArrayVertexBuffers(varecord ? varecord->Resource.name : 0, first, count, buffers, offsets, strides); r->AddChunk(scope.Get()); } diff --git a/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp index 33c6739e6..1a4c531ea 100644 --- a/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp @@ -2316,11 +2316,22 @@ void WrappedOpenGL::glMultiDrawElementsIndirectCountARB(GLenum mode, GLenum type } } -bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value) +bool WrappedOpenGL::Serialise_glClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value) { + SERIALISE_ELEMENT(ResourceId, Id, (framebuffer ? GetResourceManager()->GetID(FramebufferRes(GetCtx(), framebuffer)) : ResourceId())); SERIALISE_ELEMENT(GLenum, buf, buffer); SERIALISE_ELEMENT(int32_t, draw, drawbuffer); + + if(m_State <= EXECUTING) + { + if(Id == ResourceId()) + framebuffer = m_FakeBB_FBO; + else + framebuffer = GetResourceManager()->GetLiveResource(Id).name; + } + string name; + if(buf != eGL_DEPTH) { Vec4f v; @@ -2328,15 +2339,34 @@ bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, c m_pSerialiser->Serialise<4>("value", (float *)&v.x); + if(m_State == READING) + name = "glClearBufferfv(" + + ToStr::Get(buf) + ", " + + ToStr::Get(draw) + ", " + + ToStr::Get(v.x) + ", " + + ToStr::Get(v.y) + ", " + + ToStr::Get(v.z) + ", " + + ToStr::Get(v.w) + ")"; + + // use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If + // we are running without ARB_dsa support, these functions are emulated in the obvious way. This is + // necessary since these functions can be serialised even if ARB_dsa was not used originally, and + // we need to support this case. if(m_State <= EXECUTING) - m_Real.glClearBufferfv(buf, draw, &v.x); + m_Real.glClearNamedFramebufferfv(framebuffer, buf, draw, &v.x); } else { SERIALISE_ELEMENT(float, val, *value); + + if(m_State == READING) + name = "glClearBufferfv(" + + ToStr::Get(buf) + ", " + + ToStr::Get(draw) + ", " + + ToStr::Get(val) + ")"; if(m_State <= EXECUTING) - m_Real.glClearBufferfv(buf, draw, &val); + m_Real.glClearNamedFramebufferfv(framebuffer, buf, draw, &val); } const string desc = m_pSerialiser->GetDebugStr(); @@ -2346,9 +2376,6 @@ bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, c if(m_State == READING) { AddEvent(CLEARBUFFERF, desc); - string name = "glClearBufferfv(" + - ToStr::Get(buf) + ", " + - ToStr::Get(draw) + ")"; FetchDrawcall draw; draw.name = name; @@ -2361,24 +2388,52 @@ bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, c return true; } +void WrappedOpenGL::glClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value) +{ + m_Real.glClearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(CLEARBUFFERF); + Serialise_glClearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + void WrappedOpenGL::glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value) { m_Real.glClearBufferfv(buffer, drawbuffer, value); if(m_State == WRITING_CAPFRAME) { + GLuint framebuffer = 0; + if(GetCtxData().m_DrawFramebufferRecord) + framebuffer = GetCtxData().m_DrawFramebufferRecord->Resource.name; + SCOPED_SERIALISE_CONTEXT(CLEARBUFFERF); - Serialise_glClearBufferfv(buffer, drawbuffer, value); + Serialise_glClearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value); m_ContextRecord->AddChunk(scope.Get()); } } -bool WrappedOpenGL::Serialise_glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value) +bool WrappedOpenGL::Serialise_glClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value) { + SERIALISE_ELEMENT(ResourceId, Id, (framebuffer ? GetResourceManager()->GetID(FramebufferRes(GetCtx(), framebuffer)) : ResourceId())); SERIALISE_ELEMENT(GLenum, buf, buffer); SERIALISE_ELEMENT(int32_t, draw, drawbuffer); + if(m_State <= EXECUTING) + { + if(Id == ResourceId()) + framebuffer = m_FakeBB_FBO; + else + framebuffer = GetResourceManager()->GetLiveResource(Id).name; + } + + string name; + if(buf != eGL_STENCIL) { int32_t v[4]; @@ -2386,15 +2441,34 @@ bool WrappedOpenGL::Serialise_glClearBufferiv(GLenum buffer, GLint drawbuffer, c m_pSerialiser->Serialise<4>("value", v); + if(m_State == READING) + name = "glClearBufferiv(" + + ToStr::Get(buf) + ", " + + ToStr::Get(draw) + ", " + + ToStr::Get(v[0]) + ", " + + ToStr::Get(v[1]) + ", " + + ToStr::Get(v[2]) + ", " + + ToStr::Get(v[3]) + ")"; + + // use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If + // we are running without ARB_dsa support, these functions are emulated in the obvious way. This is + // necessary since these functions can be serialised even if ARB_dsa was not used originally, and + // we need to support this case. if(m_State <= EXECUTING) - m_Real.glClearBufferiv(buf, draw, v); + m_Real.glClearNamedFramebufferiv(framebuffer, buf, draw, v); } else { SERIALISE_ELEMENT(int32_t, val, *value); + + if(m_State == READING) + name = "glClearBufferiv(" + + ToStr::Get(buf) + ", " + + ToStr::Get(draw) + ", " + + ToStr::Get(val) + ")"; if(m_State <= EXECUTING) - m_Real.glClearBufferiv(buf, draw, &val); + m_Real.glClearNamedFramebufferiv(framebuffer, buf, draw, &val); } const string desc = m_pSerialiser->GetDebugStr(); @@ -2404,9 +2478,6 @@ bool WrappedOpenGL::Serialise_glClearBufferiv(GLenum buffer, GLint drawbuffer, c if(m_State == READING) { AddEvent(CLEARBUFFERI, desc); - string name = "glClearBufferiv(" + - ToStr::Get(buf) + ", " + - ToStr::Get(draw) + ")"; FetchDrawcall draw; draw.name = name; @@ -2419,32 +2490,73 @@ bool WrappedOpenGL::Serialise_glClearBufferiv(GLenum buffer, GLint drawbuffer, c return true; } +void WrappedOpenGL::glClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value) +{ + m_Real.glClearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(CLEARBUFFERI); + Serialise_glClearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + void WrappedOpenGL::glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value) { m_Real.glClearBufferiv(buffer, drawbuffer, value); if(m_State == WRITING_CAPFRAME) { + GLuint framebuffer = 0; + if(GetCtxData().m_DrawFramebufferRecord) + framebuffer = GetCtxData().m_DrawFramebufferRecord->Resource.name; + SCOPED_SERIALISE_CONTEXT(CLEARBUFFERI); - Serialise_glClearBufferiv(buffer, drawbuffer, value); + Serialise_glClearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value); m_ContextRecord->AddChunk(scope.Get()); } } -bool WrappedOpenGL::Serialise_glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value) +bool WrappedOpenGL::Serialise_glClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value) { + SERIALISE_ELEMENT(ResourceId, Id, (framebuffer ? GetResourceManager()->GetID(FramebufferRes(GetCtx(), framebuffer)) : ResourceId())); SERIALISE_ELEMENT(GLenum, buf, buffer); SERIALISE_ELEMENT(int32_t, draw, drawbuffer); + if(m_State <= EXECUTING) + { + if(Id == ResourceId()) + framebuffer = m_FakeBB_FBO; + else + framebuffer = GetResourceManager()->GetLiveResource(Id).name; + } + + string name; + { uint32_t v[4]; if(value) memcpy(v, value, sizeof(v)); m_pSerialiser->Serialise<4>("value", v); + if(m_State == READING) + name = "glClearBufferuiv(" + + ToStr::Get(buf) + ", " + + ToStr::Get(draw) + ", " + + ToStr::Get(v[0]) + ", " + + ToStr::Get(v[1]) + ", " + + ToStr::Get(v[2]) + ", " + + ToStr::Get(v[3]) + ")"; + + // use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If + // we are running without ARB_dsa support, these functions are emulated in the obvious way. This is + // necessary since these functions can be serialised even if ARB_dsa was not used originally, and + // we need to support this case. if(m_State <= EXECUTING) - m_Real.glClearBufferuiv(buf, draw, v); + m_Real.glClearNamedFramebufferuiv(framebuffer, buf, draw, v); } const string desc = m_pSerialiser->GetDebugStr(); @@ -2454,9 +2566,6 @@ bool WrappedOpenGL::Serialise_glClearBufferuiv(GLenum buffer, GLint drawbuffer, if(m_State == READING) { AddEvent(CLEARBUFFERUI, desc); - string name = "glClearBufferuiv(" + - ToStr::Get(buf) + ", " + - ToStr::Get(draw) + ")"; FetchDrawcall draw; draw.name = name; @@ -2468,28 +2577,57 @@ bool WrappedOpenGL::Serialise_glClearBufferuiv(GLenum buffer, GLint drawbuffer, return true; } +void WrappedOpenGL::glClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value) +{ + m_Real.glClearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(CLEARBUFFERUI); + Serialise_glClearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + void WrappedOpenGL::glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value) { m_Real.glClearBufferuiv(buffer, drawbuffer, value); if(m_State == WRITING_CAPFRAME) { + GLuint framebuffer = 0; + if(GetCtxData().m_DrawFramebufferRecord) + framebuffer = GetCtxData().m_DrawFramebufferRecord->Resource.name; + SCOPED_SERIALISE_CONTEXT(CLEARBUFFERUI); - Serialise_glClearBufferuiv(buffer, drawbuffer, value); + Serialise_glClearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value); m_ContextRecord->AddChunk(scope.Get()); } } -bool WrappedOpenGL::Serialise_glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) +bool WrappedOpenGL::Serialise_glClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer, GLfloat depth, GLint stencil) { + SERIALISE_ELEMENT(ResourceId, Id, (framebuffer ? GetResourceManager()->GetID(FramebufferRes(GetCtx(), framebuffer)) : ResourceId())); SERIALISE_ELEMENT(GLenum, buf, buffer); - SERIALISE_ELEMENT(int32_t, draw, drawbuffer); SERIALISE_ELEMENT(float, d, depth); SERIALISE_ELEMENT(int32_t, s, stencil); if(m_State <= EXECUTING) - m_Real.glClearBufferfi(buf, draw, d, s); + { + if(Id == ResourceId()) + framebuffer = m_FakeBB_FBO; + else + framebuffer = GetResourceManager()->GetLiveResource(Id).name; + } + + // use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If + // we are running without ARB_dsa support, these functions are emulated in the obvious way. This is + // necessary since these functions can be serialised even if ARB_dsa was not used originally, and + // we need to support this case. + if(m_State <= EXECUTING) + m_Real.glClearNamedFramebufferfi(framebuffer, buf, d, s); const string desc = m_pSerialiser->GetDebugStr(); @@ -2499,8 +2637,8 @@ bool WrappedOpenGL::Serialise_glClearBufferfi(GLenum buffer, GLint drawbuffer, G { AddEvent(CLEARBUFFERFI, desc); string name = "glClearBufferfi(" + - ToStr::Get(buf) + ", " + - ToStr::Get(draw) + ")"; + ToStr::Get(d) + + ToStr::Get(s) + ")"; FetchDrawcall draw; draw.name = name; @@ -2512,14 +2650,32 @@ bool WrappedOpenGL::Serialise_glClearBufferfi(GLenum buffer, GLint drawbuffer, G return true; } +void WrappedOpenGL::glClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer, GLfloat depth, GLint stencil) +{ + m_Real.glClearNamedFramebufferfi(framebuffer, buffer, depth, stencil); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(CLEARBUFFERFI); + Serialise_glClearNamedFramebufferfi(framebuffer, buffer, depth, stencil); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + void WrappedOpenGL::glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) { m_Real.glClearBufferfi(buffer, drawbuffer, depth, stencil); if(m_State == WRITING_CAPFRAME) { + GLuint framebuffer = 0; + if(GetCtxData().m_DrawFramebufferRecord) + framebuffer = GetCtxData().m_DrawFramebufferRecord->Resource.name; + + // drawbuffer is ignored, as it must be 0 anyway SCOPED_SERIALISE_CONTEXT(CLEARBUFFERFI); - Serialise_glClearBufferfi(buffer, drawbuffer, depth, stencil); + Serialise_glClearNamedFramebufferfi(framebuffer, buffer, depth, stencil); m_ContextRecord->AddChunk(scope.Get()); } @@ -2713,6 +2869,12 @@ void WrappedOpenGL::glClearNamedBufferSubDataEXT(GLuint buffer, GLenum internalf } } +void WrappedOpenGL::glClearNamedBufferSubData(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizei size, GLenum format, GLenum type, const void *data) +{ + // only difference to EXT function is size parameter, so just upcast + glClearNamedBufferSubDataEXT(buffer, internalformat, offset, (GLsizeiptr)size, format, type, data); +} + void WrappedOpenGL::glClearBufferSubData(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data) { m_Real.glClearBufferSubData(target, internalformat, offset, size, format, type, data); @@ -2742,7 +2904,7 @@ bool WrappedOpenGL::Serialise_glClear(GLbitfield mask) if(m_State == READING) { - AddEvent(CLEARBUFFERF, desc); + AddEvent(CLEAR, desc); string name = "glClear("; if(Mask & GL_COLOR_BUFFER_BIT) { diff --git a/renderdoc/driver/gl/wrappers/gl_emulated.cpp b/renderdoc/driver/gl/wrappers/gl_emulated.cpp new file mode 100644 index 000000000..002852e2c --- /dev/null +++ b/renderdoc/driver/gl/wrappers/gl_emulated.cpp @@ -0,0 +1,142 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2015 Baldur Karlsson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ + +// in some cases we might need some functions (notably ARB_direct_state_access) +// emulated where possible, so we can simplify most codepaths by just assuming they're +// present elsewhere and using them unconditionally. + +#include "driver/gl/gl_common.h" +#include "driver/gl/gl_hookset.h" + +namespace glEmulate { + +GLHookSet *hookset = NULL; + +void APIENTRY _glTransformFeedbackBufferBase(GLuint xfb, GLuint index, GLuint buffer) +{ + GLuint old = 0; + hookset->glGetIntegerv(eGL_TRANSFORM_FEEDBACK_BINDING, (GLint *)&old); + hookset->glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, xfb); + hookset->glBindBufferBase(eGL_TRANSFORM_FEEDBACK_BUFFER, index, buffer); + hookset->glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, old); +} + +void APIENTRY _glTransformFeedbackBufferRange(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size) +{ + GLuint old = 0; + hookset->glGetIntegerv(eGL_TRANSFORM_FEEDBACK_BINDING, (GLint *)&old); + hookset->glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, xfb); + hookset->glBindBufferRange(eGL_TRANSFORM_FEEDBACK_BUFFER, index, buffer, offset, size); + hookset->glBindTransformFeedback(eGL_TRANSFORM_FEEDBACK, old); +} + +void APIENTRY _glClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value) +{ + GLuint old = 0; + hookset->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint *)&old); + hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, framebuffer); + hookset->glClearBufferiv(buffer, drawbuffer, value); + hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, old); +} + +void APIENTRY _glClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value) +{ + GLuint old = 0; + hookset->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint *)&old); + hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, framebuffer); + hookset->glClearBufferuiv(buffer, drawbuffer, value); + hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, old); +} + +void APIENTRY _glClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value) +{ + GLuint old = 0; + hookset->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint *)&old); + hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, framebuffer); + hookset->glClearBufferfv(buffer, drawbuffer, value); + hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, old); +} + +void APIENTRY _glClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil) +{ + GLuint old = 0; + hookset->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint *)&old); + hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, framebuffer); + hookset->glClearBufferfi(buffer, 0, depth, stencil); + hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, old); +} + +void APIENTRY _glBlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer, + GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter) +{ + GLuint oldR = 0, oldD = 0; + hookset->glGetIntegerv(eGL_READ_FRAMEBUFFER_BINDING, (GLint *)&oldR); + hookset->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint *)&oldD); + + hookset->glBindFramebuffer(eGL_READ_FRAMEBUFFER, readFramebuffer); + hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, drawFramebuffer); + + hookset->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); + + hookset->glBindFramebuffer(eGL_READ_FRAMEBUFFER, oldR); + hookset->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, oldD); +} + +void APIENTRY _glVertexArrayElementBuffer(GLuint vaobj, GLuint buffer) +{ + GLuint old = 0; + hookset->glGetIntegerv(eGL_VERTEX_ARRAY_BINDING, (GLint *)&old); + hookset->glBindVertexArray(vaobj); + hookset->glBindBuffer(eGL_ELEMENT_ARRAY_BUFFER, buffer); + hookset->glBindVertexArray(old); +} + +void APIENTRY _glVertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides) +{ + GLuint old = 0; + hookset->glGetIntegerv(eGL_VERTEX_ARRAY_BINDING, (GLint *)&old); + hookset->glBindVertexArray(vaobj); + hookset->glBindVertexBuffers(first, count, buffers, offsets, strides); + hookset->glBindVertexArray(old); +} + +void EmulateUnsupportedFunctions(GLHookSet *hooks) +{ + hookset = hooks; + +#define EMULATE_UNSUPPORTED(func) if(!hooks->func) hooks->func = &CONCAT(_, func); + + EMULATE_UNSUPPORTED(glTransformFeedbackBufferBase) + EMULATE_UNSUPPORTED(glTransformFeedbackBufferRange) + EMULATE_UNSUPPORTED(glClearNamedFramebufferiv) + EMULATE_UNSUPPORTED(glClearNamedFramebufferuiv) + EMULATE_UNSUPPORTED(glClearNamedFramebufferfv) + EMULATE_UNSUPPORTED(glClearNamedFramebufferfi) + EMULATE_UNSUPPORTED(glBlitNamedFramebuffer) + EMULATE_UNSUPPORTED(glVertexArrayVertexBuffers) +} + +}; // namespace glEmulate diff --git a/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp index e9b101b4c..c3bc0df80 100644 --- a/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp @@ -1120,6 +1120,19 @@ void WrappedOpenGL::glInvalidateFramebuffer(GLenum target, GLsizei numAttachment } } +void WrappedOpenGL::glInvalidateNamedFramebufferData(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments) +{ + m_Real.glInvalidateNamedFramebufferData(framebuffer, numAttachments, attachments); + + if(m_State == WRITING_IDLE) + { + GLResourceRecord *record = GetResourceManager()->GetResourceRecord(FramebufferRes(GetCtx(), framebuffer)); + + if(record) + record->MarkParentsDirty(GetResourceManager()); + } +} + void WrappedOpenGL::glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height) { m_Real.glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height); @@ -1144,8 +1157,26 @@ void WrappedOpenGL::glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachm } } -bool WrappedOpenGL::Serialise_glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) +void WrappedOpenGL::glInvalidateNamedFramebufferSubData(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height) { + m_Real.glInvalidateNamedFramebufferSubData(framebuffer, numAttachments, attachments, x, y, width, height); + + if(m_State == WRITING_IDLE) + { + GLResourceRecord *record = GetResourceManager()->GetResourceRecord(FramebufferRes(GetCtx(), framebuffer)); + + if(record) + record->MarkParentsDirty(GetResourceManager()); + } +} + +bool WrappedOpenGL::Serialise_glBlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer, + GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter) +{ + SERIALISE_ELEMENT(ResourceId, readId, (readFramebuffer ? GetResourceManager()->GetID(FramebufferRes(GetCtx(), readFramebuffer)) : ResourceId())); + SERIALISE_ELEMENT(ResourceId, drawId, (drawFramebuffer ? GetResourceManager()->GetID(FramebufferRes(GetCtx(), drawFramebuffer)) : ResourceId())); SERIALISE_ELEMENT(int32_t, sX0, srcX0); SERIALISE_ELEMENT(int32_t, sY0, srcY0); SERIALISE_ELEMENT(int32_t, sX1, srcX1); @@ -1159,18 +1190,57 @@ bool WrappedOpenGL::Serialise_glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint if(m_State <= EXECUTING) { - m_Real.glBlitFramebuffer(sX0, sY0, sX1, sY1, dX0, dY0, dX1, dY1, msk, flt); + if(readId == ResourceId()) + readFramebuffer = m_FakeBB_FBO; + else + readFramebuffer = GetResourceManager()->GetLiveResource(readId).name; + + if(drawId == ResourceId()) + drawFramebuffer = m_FakeBB_FBO; + else + drawFramebuffer = GetResourceManager()->GetLiveResource(drawId).name; + + // use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If + // we are running without ARB_dsa support, these functions are emulated in the obvious way. This is + // necessary since these functions can be serialised even if ARB_dsa was not used originally, and + // we need to support this case. + m_Real.glBlitNamedFramebuffer(readFramebuffer, drawFramebuffer, sX0, sY0, sX1, sY1, dX0, dY0, dX1, dY1, msk, flt); } return true; } +void WrappedOpenGL::glBlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer, + GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter) +{ + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(BLIT_FRAMEBUFFER); + Serialise_glBlitNamedFramebuffer(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); + + m_ContextRecord->AddChunk(scope.Get()); + } + + // use ARB_direct_state_access functions here as we use EXT_direct_state_access elsewhere. If + // we are running without ARB_dsa support, these functions are emulated in the obvious way. This is + // necessary since these functions can be serialised even if ARB_dsa was not used originally, and + // we need to support this case. + m_Real.glBlitNamedFramebuffer(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); +} + void WrappedOpenGL::glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { if(m_State == WRITING_CAPFRAME) { + GLuint readFramebuffer = 0, drawFramebuffer = 0; + + if(GetCtxData().m_ReadFramebufferRecord) readFramebuffer = GetCtxData().m_ReadFramebufferRecord->Resource.name; + if(GetCtxData().m_DrawFramebufferRecord) drawFramebuffer = GetCtxData().m_DrawFramebufferRecord->Resource.name; + SCOPED_SERIALISE_CONTEXT(BLIT_FRAMEBUFFER); - Serialise_glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); + Serialise_glBlitNamedFramebuffer(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); m_ContextRecord->AddChunk(scope.Get()); } diff --git a/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp index a57af7324..bbc601e7b 100644 --- a/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp @@ -399,6 +399,26 @@ void WrappedOpenGL::glGetQueryiv(GLenum target, GLenum pname, GLint *params) m_Real.glGetQueryiv(target, pname, params); } +void WrappedOpenGL::glGetQueryBufferObjectui64v(GLuint id, GLuint buffer, GLenum pname, GLintptr offset) +{ + m_Real.glGetQueryBufferObjectui64v(id, buffer, pname, offset); +} + +void WrappedOpenGL::glGetQueryBufferObjectuiv(GLuint id, GLuint buffer, GLenum pname, GLintptr offset) +{ + m_Real.glGetQueryBufferObjectuiv(id, buffer, pname, offset); +} + +void WrappedOpenGL::glGetQueryBufferObjecti64v(GLuint id, GLuint buffer, GLenum pname, GLintptr offset) +{ + m_Real.glGetQueryBufferObjecti64v(id, buffer, pname, offset); +} + +void WrappedOpenGL::glGetQueryBufferObjectiv(GLuint id, GLuint buffer, GLenum pname, GLintptr offset) +{ + m_Real.glGetQueryBufferObjectiv(id, buffer, pname, offset); +} + void WrappedOpenGL::glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values) { m_Real.glGetSynciv(sync, pname, bufSize, length, values); @@ -780,11 +800,6 @@ void WrappedOpenGL::glGetNamedBufferParameteri64v(GLuint buffer, GLenum pname, G m_Real.glGetNamedBufferParameteri64v(buffer, pname, params); } -void WrappedOpenGL::glGetNamedBufferPointerv(GLuint buffer, GLenum pname, void **params) -{ - m_Real.glGetNamedBufferPointerv(buffer, pname, params); -} - void WrappedOpenGL::glGetNamedFramebufferParameterivEXT(GLuint framebuffer, GLenum pname, GLint *param) { m_Real.glGetNamedFramebufferParameterivEXT(framebuffer, pname, param); diff --git a/renderdoc/hooks/gl_linux_hooks.cpp b/renderdoc/hooks/gl_linux_hooks.cpp index 4e5e8164d..e77b2275d 100644 --- a/renderdoc/hooks/gl_linux_hooks.cpp +++ b/renderdoc/hooks/gl_linux_hooks.cpp @@ -36,6 +36,8 @@ #include "common/threading.h" #include "common/string_utils.h" +namespace glEmulate { void EmulateUnsupportedFunctions(GLHookSet *hooks); } + // bit of a hack namespace Keyboard { extern Display *CurrentXDisplay; } @@ -849,6 +851,9 @@ bool OpenGLHook::PopulateHooks() DLLExportHooks(); HookCheckGLExtensions(); + // see gl_emulated.cpp + if(RenderDoc::Inst().IsReplayApp()) glEmulate::EmulateUnsupportedFunctions(&GL); + return true; } diff --git a/renderdoc/hooks/gl_win32_hooks.cpp b/renderdoc/hooks/gl_win32_hooks.cpp index 15c831eb3..9dece7ed6 100644 --- a/renderdoc/hooks/gl_win32_hooks.cpp +++ b/renderdoc/hooks/gl_win32_hooks.cpp @@ -34,6 +34,8 @@ #include "hooks.h" +namespace glEmulate { void EmulateUnsupportedFunctions(GLHookSet *hooks); } + #define DLL_NAME "opengl32.dll" #define HookInit(function) \ @@ -654,6 +656,9 @@ class OpenGLHook : LibraryHook DLLExportHooks(); HookCheckGLExtensions(); + // see gl_emulated.cpp + if(RenderDoc::Inst().IsReplayApp()) glEmulate::EmulateUnsupportedFunctions(&GL); + return true; } diff --git a/renderdoc/renderdoc.vcxproj b/renderdoc/renderdoc.vcxproj index 86027f458..fd9b3d08c 100644 --- a/renderdoc/renderdoc.vcxproj +++ b/renderdoc/renderdoc.vcxproj @@ -328,6 +328,7 @@ + diff --git a/renderdoc/renderdoc.vcxproj.filters b/renderdoc/renderdoc.vcxproj.filters index d8101bf4f..fe4910c10 100644 --- a/renderdoc/renderdoc.vcxproj.filters +++ b/renderdoc/renderdoc.vcxproj.filters @@ -551,6 +551,9 @@ Drivers\OpenGL + + Drivers\OpenGL\Function Wrappers +