diff --git a/gfx/gl/GLContext.cpp b/gfx/gl/GLContext.cpp index 0aaee5a46826..5f75c8616341 100644 --- a/gfx/gl/GLContext.cpp +++ b/gfx/gl/GLContext.cpp @@ -180,6 +180,8 @@ static const char* const sExtensionNames[] = { "GL_EXT_unpack_subimage", "GL_EXT_semaphore", "GL_EXT_semaphore_fd", + "GL_EXT_memory_object", + "GL_EXT_memory_object_fd", "GL_IMG_read_format", "GL_IMG_texture_compression_pvrtc", "GL_IMG_texture_npot", @@ -1523,6 +1525,50 @@ void GLContext::LoadMoreSymbols(const SymbolLoader& loader) { fnLoadForExt(symbols, EXT_semaphore_fd); } + if (IsExtensionSupported(EXT_memory_object)) { + const SymLoadStruct symbols[] = { + {(PRFuncPtr*)&mSymbols.fGetUnsignedBytevEXT, + {{"glGetUnsignedBytevEXT"}}}, + {(PRFuncPtr*)&mSymbols.fGetUnsignedBytei_vEXT, + {{"glGetUnsignedBytei_vEXT"}}}, + {(PRFuncPtr*)&mSymbols.fDeleteMemoryObjectsEXT, + {{"glDeleteMemoryObjectsEXT"}}}, + {(PRFuncPtr*)&mSymbols.fIsMemoryObjectEXT, {{"glIsMemoryObjectEXT"}}}, + {(PRFuncPtr*)&mSymbols.fCreateMemoryObjectsEXT, + {{"glCreateMemoryObjectsEXT"}}}, + {(PRFuncPtr*)&mSymbols.fMemoryObjectParameterivEXT, + {{"glMemoryObjectParameterivEXT"}}}, + {(PRFuncPtr*)&mSymbols.fGetMemoryObjectParameterivEXT, + {{"glGetMemoryObjectParameterivEXT"}}}, + {(PRFuncPtr*)&mSymbols.fTexStorageMem2DEXT, {{"glTexStorageMem2DEXT"}}}, + {(PRFuncPtr*)&mSymbols.fTexStorageMem2DMultisampleEXT, + {{"glTexStorageMem2DMultisampleEXT"}}}, + {(PRFuncPtr*)&mSymbols.fTexStorageMem3DEXT, {{"glTexStorageMem3DEXT"}}}, + {(PRFuncPtr*)&mSymbols.fTexStorageMem3DMultisampleEXT, + {{"glTexStorageMem3DMultisampleEXT"}}}, + {(PRFuncPtr*)&mSymbols.fBufferStorageMemEXT, + {{"glBufferStorageMemEXT"}}}, + {(PRFuncPtr*)&mSymbols.fTextureStorageMem2DEXT, + {{"glTextureStorageMem2DEXT"}}}, + {(PRFuncPtr*)&mSymbols.fTextureStorageMem2DMultisampleEXT, + {{"glTextureStorageMem2DMultisampleEXT"}}}, + {(PRFuncPtr*)&mSymbols.fTextureStorageMem3DEXT, + {{"glTextureStorageMem3DEXT"}}}, + {(PRFuncPtr*)&mSymbols.fTextureStorageMem3DMultisampleEXT, + {{"glTextureStorageMem3DMultisampleEXT"}}}, + {(PRFuncPtr*)&mSymbols.fNamedBufferStorageMemEXT, + {{"glNamedBufferStorageMemEXT"}}}, + END_SYMBOLS}; + fnLoadForExt(symbols, EXT_memory_object); + } + + if (IsExtensionSupported(EXT_memory_object_fd)) { + const SymLoadStruct symbols[] = { + {(PRFuncPtr*)&mSymbols.fImportMemoryFdEXT, {{"glImportMemoryFdEXT"}}}, + END_SYMBOLS}; + fnLoadForExt(symbols, EXT_memory_object_fd); + } + // Load developer symbols, don't fail if we can't find them. const SymLoadStruct devSymbols[] = {CORE_SYMBOL(GetTexImage), CORE_SYMBOL(GetTexLevelParameteriv), diff --git a/gfx/gl/GLContext.h b/gfx/gl/GLContext.h index bc8e9f794cd5..45c75e8b6ecf 100644 --- a/gfx/gl/GLContext.h +++ b/gfx/gl/GLContext.h @@ -459,6 +459,8 @@ class GLContext : public GenericAtomicRefCounted, public SupportsWeakPtr { EXT_unpack_subimage, EXT_semaphore, EXT_semaphore_fd, + EXT_memory_object, + EXT_memory_object_fd, IMG_read_format, IMG_texture_compression_pvrtc, IMG_texture_npot, @@ -3496,6 +3498,161 @@ class GLContext : public GenericAtomicRefCounted, public SupportsWeakPtr { AFTER_GL_CALL; } + // ----------------------------------------------------------------------------- + // Extension EXT_memory_object + void fGetUnsignedBytevEXT(GLenum pname, GLubyte* data) { + BEFORE_GL_CALL; + mSymbols.fGetUnsignedBytevEXT(pname, data); + AFTER_GL_CALL; + } + + void fGetUnsignedBytei_vEXT(GLenum target, GLuint index, GLubyte* data) { + BEFORE_GL_CALL; + mSymbols.fGetUnsignedBytei_vEXT(target, index, data); + AFTER_GL_CALL; + } + + void fDeleteMemoryObjectsEXT(GLsizei n, const GLuint* memoryObjects) { + BEFORE_GL_CALL; + mSymbols.fDeleteMemoryObjectsEXT(n, memoryObjects); + AFTER_GL_CALL; + } + + void fIsMemoryObjectEXT(GLuint memoryObject) { + BEFORE_GL_CALL; + mSymbols.fIsMemoryObjectEXT(memoryObject); + AFTER_GL_CALL; + } + + void fCreateMemoryObjectsEXT(GLsizei n, GLuint* memoryObjects) { + BEFORE_GL_CALL; + mSymbols.fCreateMemoryObjectsEXT(n, memoryObjects); + AFTER_GL_CALL; + } + + void fMemoryObjectParameterivEXT(GLuint memoryObject, GLenum pname, + const GLint* params) { + BEFORE_GL_CALL; + mSymbols.fMemoryObjectParameterivEXT(memoryObject, pname, params); + AFTER_GL_CALL; + } + + void fGetMemoryObjectParameterivEXT(GLuint memoryObject, GLenum pname, + GLint* params) { + BEFORE_GL_CALL; + mSymbols.fGetMemoryObjectParameterivEXT(memoryObject, pname, params); + AFTER_GL_CALL; + } + + void fTexStorageMem2DEXT(GLenum target, GLsizei levels, GLenum internalFormat, + GLsizei width, GLsizei height, GLuint memory, + GLuint64 offset) { + BEFORE_GL_CALL; + mSymbols.fTexStorageMem2DEXT(target, levels, internalFormat, width, height, + memory, offset); + AFTER_GL_CALL; + } + + void fTexStorageMem2DMultisampleEXT(GLenum target, GLsizei samples, + GLenum internalFormat, GLsizei width, + GLsizei height, + realGLboolean fixedSampleLocations, + GLuint memory, GLuint64 offset) { + BEFORE_GL_CALL; + mSymbols.fTexStorageMem2DMultisampleEXT(target, samples, internalFormat, + width, height, fixedSampleLocations, + memory, offset); + AFTER_GL_CALL; + } + + void fTexStorageMem3DEXT(GLenum target, GLsizei levels, GLenum internalFormat, + GLsizei width, GLsizei height, GLsizei depth, + GLuint memory, GLuint64 offset) { + BEFORE_GL_CALL; + mSymbols.fTexStorageMem3DEXT(target, levels, internalFormat, width, height, + depth, memory, offset); + AFTER_GL_CALL; + } + + void fTexStorageMem3DMultisampleEXT(GLenum target, GLsizei samples, + GLenum internalFormat, GLsizei width, + GLsizei height, GLsizei depth, + realGLboolean fixedSampleLocations, + GLuint memory, GLuint64 offset) { + BEFORE_GL_CALL; + mSymbols.fTexStorageMem3DMultisampleEXT( + target, samples, internalFormat, width, height, depth, + fixedSampleLocations, memory, offset); + AFTER_GL_CALL; + } + + void fBufferStorageMemEXT(GLenum target, GLsizeiptr size, GLuint memory, + GLuint64 offset) { + BEFORE_GL_CALL; + mSymbols.fBufferStorageMemEXT(target, size, memory, offset); + AFTER_GL_CALL; + } + + void fTextureStorageMem2DEXT(GLuint texture, GLsizei levels, + GLenum internalFormat, GLsizei width, + GLsizei height, GLuint memory, GLuint64 offset) { + BEFORE_GL_CALL; + mSymbols.fTextureStorageMem2DEXT(texture, levels, internalFormat, width, + height, memory, offset); + AFTER_GL_CALL; + } + + void fTextureStorageMem2DMultisampleEXT(GLuint texture, GLsizei samples, + GLenum internalFormat, GLsizei width, + GLsizei height, + realGLboolean fixedSampleLocations, + GLuint memory, GLuint64 offset) { + BEFORE_GL_CALL; + mSymbols.fTextureStorageMem2DMultisampleEXT( + texture, samples, internalFormat, width, height, fixedSampleLocations, + memory, offset); + AFTER_GL_CALL; + } + + void fTextureStorageMem3DEXT(GLuint texture, GLsizei levels, + GLenum internalFormat, GLsizei width, + GLsizei height, GLsizei depth, GLuint memory, + GLuint64 offset) { + BEFORE_GL_CALL; + mSymbols.fTextureStorageMem3DEXT(texture, levels, internalFormat, width, + height, depth, memory, offset); + AFTER_GL_CALL; + } + + void fTextureStorageMem3DMultisampleEXT(GLuint texture, GLsizei samples, + GLenum internalFormat, GLsizei width, + GLsizei height, GLsizei depth, + realGLboolean fixedSampleLocations, + GLuint memory, GLuint64 offset) { + BEFORE_GL_CALL; + mSymbols.fTextureStorageMem3DMultisampleEXT( + texture, samples, internalFormat, width, height, depth, + fixedSampleLocations, memory, offset); + AFTER_GL_CALL; + } + + void fNamedBufferStorageMemEXT(GLuint buffer, GLsizeiptr size, GLuint memory, + GLuint64 offset) { + BEFORE_GL_CALL; + mSymbols.fNamedBufferStorageMemEXT(buffer, size, memory, offset); + AFTER_GL_CALL; + } + + // ----------------------------------------------------------------------------- + // Extension EXT_memory_object_fd + + void fImportMemoryFdEXT(GLuint memory, GLuint64 size, GLenum handleType, + GLint fd) { + BEFORE_GL_CALL; + mSymbols.fImportMemoryFdEXT(memory, size, handleType, fd); + AFTER_GL_CALL; + } + // - #undef BEFORE_GL_CALL diff --git a/gfx/gl/GLContextSymbols.h b/gfx/gl/GLContextSymbols.h index 558e59fe4d76..97180d612f37 100644 --- a/gfx/gl/GLContextSymbols.h +++ b/gfx/gl/GLContextSymbols.h @@ -474,6 +474,45 @@ struct GLContextSymbols final { // GL_EXT_semaphore_fd void(GLAPIENTRY* fImportSemaphoreFdEXT)(GLuint, GLenum, GLint); + + // EXT_memory_object + void(GLAPIENTRY* fGetUnsignedBytevEXT)(GLenum, GLubyte*); + void(GLAPIENTRY* fGetUnsignedBytei_vEXT)(GLenum, GLuint, GLubyte*); + void(GLAPIENTRY* fDeleteMemoryObjectsEXT)(GLsizei, const GLuint*); + void(GLAPIENTRY* fIsMemoryObjectEXT)(GLuint); + void(GLAPIENTRY* fCreateMemoryObjectsEXT)(GLsizei, GLuint*); + void(GLAPIENTRY* fMemoryObjectParameterivEXT)(GLuint, GLenum, const GLint*); + void(GLAPIENTRY* fGetMemoryObjectParameterivEXT)(GLuint, GLenum, GLint*); + void(GLAPIENTRY* fTexStorageMem2DEXT)(GLenum, GLsizei, GLenum, GLsizei, + GLsizei, GLuint, GLuint64); + void(GLAPIENTRY* fTexStorageMem2DMultisampleEXT)(GLenum, GLsizei, GLenum, + GLsizei, GLsizei, + realGLboolean, GLuint, + GLuint64); + void(GLAPIENTRY* fTexStorageMem3DEXT)(GLenum, GLsizei, GLenum, GLsizei, + GLsizei, GLsizei, GLuint, GLuint64); + void(GLAPIENTRY* fTexStorageMem3DMultisampleEXT)(GLenum, GLsizei, GLenum, + GLsizei, GLsizei, GLsizei, + realGLboolean, GLuint, + GLuint64); + void(GLAPIENTRY* fBufferStorageMemEXT)(GLenum, GLsizeiptr, GLuint, GLuint64); + void(GLAPIENTRY* fTextureStorageMem2DEXT)(GLuint, GLsizei, GLenum, GLsizei, + GLsizei, GLuint, GLuint64); + void(GLAPIENTRY* fTextureStorageMem2DMultisampleEXT)(GLuint, GLsizei, GLenum, + GLsizei, GLsizei, + realGLboolean, GLuint, + GLuint64); + void(GLAPIENTRY* fTextureStorageMem3DEXT)(GLuint, GLsizei, GLenum, GLsizei, + GLsizei, GLsizei, GLuint, GLuint64); + void(GLAPIENTRY* fTextureStorageMem3DMultisampleEXT)(GLuint, GLsizei, GLenum, + GLsizei, GLsizei, + GLsizei, realGLboolean, + GLuint, GLuint64); + void(GLAPIENTRY* fNamedBufferStorageMemEXT)(GLuint, GLsizeiptr, GLuint, + GLuint64); + + // EXT_memory_object_fd + void(GLAPIENTRY* fImportMemoryFdEXT)(GLuint, GLuint64, GLenum, GLint); }; } // namespace gl