Skip to content

Commit 7c11d3f

Browse files
committed
Add support for semaphore and memory object interop for dx12/vulkan to gl
1 parent d175947 commit 7c11d3f

3 files changed

Lines changed: 199 additions & 0 deletions

File tree

indra/llrender/llgl.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,25 @@ PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC glMultiDrawArraysIndirectCount = nullpt
969969
PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC glMultiDrawElementsIndirectCount = nullptr;
970970
PFNGLPOLYGONOFFSETCLAMPPROC glPolygonOffsetClamp = nullptr;
971971

972+
// GL_EXT_memory_object
973+
PFNGLCREATEMEMORYOBJECTSEXTPROC glCreateMemoryObjectsEXT = nullptr;
974+
PFNGLDELETEMEMORYOBJECTSEXTPROC glDeleteMemoryObjectsEXT = nullptr;
975+
PFNGLMEMORYOBJECTPARAMETERIVEXTPROC glMemoryObjectParameterivEXT = nullptr;
976+
PFNGLTEXSTORAGEMEM2DEXTPROC glTexStorageMem2DEXT = nullptr;
977+
978+
// GL_EXT_semaphore
979+
PFNGLGENSEMAPHORESEXTPROC glGenSemaphoresEXT = nullptr;
980+
PFNGLDELETESEMAPHORESEXTPROC glDeleteSemaphoresEXT = nullptr;
981+
PFNGLSEMAPHOREPARAMETERUI64VEXTPROC glSemaphoreParameterui64vEXT = nullptr;
982+
PFNGLWAITSEMAPHOREEXTPROC glWaitSemaphoreEXT = nullptr;
983+
PFNGLSIGNALSEMAPHOREEXTPROC glSignalSemaphoreEXT = nullptr;
984+
985+
// GL_EXT_memory_object_win32
986+
PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC glImportMemoryWin32HandleEXT = nullptr;
987+
988+
// GL_EXT_semaphore_win32
989+
PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC glImportSemaphoreWin32HandleEXT = nullptr;
990+
972991
#endif
973992

974993
LLGLManager gGLManager;
@@ -1630,6 +1649,10 @@ void LLGLManager::initExtensions()
16301649

16311650
mHasNVXGpuMemoryInfo = mGLExtensions.contains("GL_NVX_gpu_memory_info");
16321651
mHasATIMemInfo = mGLExtensions.contains("GL_ATI_meminfo"); //Basic AMD method, also see mHasAMDAssociations
1652+
mHasEXTMemoryObject = mGLExtensions.contains("GL_EXT_memory_object");
1653+
mHasEXTSemaphore = mGLExtensions.contains("GL_EXT_semaphore");
1654+
mHasEXTMemoryObjectWin32 = mGLExtensions.contains("GL_EXT_memory_object_win32");
1655+
mHasEXTSemaphoreWin32 = mGLExtensions.contains("GL_EXT_semaphore_win32");
16331656

16341657
// Misc
16351658
glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, (GLint*) &mGLMaxVertexRange);
@@ -1642,6 +1665,43 @@ void LLGLManager::initExtensions()
16421665
// Load entire OpenGL API through GetProcAddress, leaving sections beyond mGLVersion unloaded
16431666
LL_DEBUGS("RenderInit") << "GL Probe: Getting symbols" << LL_ENDL;
16441667

1668+
// Init EXT and ARB extensions FIRST, because they may be used in later GL versions
1669+
1670+
// GL_EXT_memory_object
1671+
if (mHasEXTMemoryObject)
1672+
{
1673+
glCreateMemoryObjectsEXT = (PFNGLCREATEMEMORYOBJECTSEXTPROC)LL_GET_PROC_ADDRESS("glCreateMemoryObjectsEXT");
1674+
glDeleteMemoryObjectsEXT = (PFNGLDELETEMEMORYOBJECTSEXTPROC)LL_GET_PROC_ADDRESS("glDeleteMemoryObjectsEXT");
1675+
glMemoryObjectParameterivEXT = (PFNGLMEMORYOBJECTPARAMETERIVEXTPROC)LL_GET_PROC_ADDRESS("glMemoryObjectParameterivEXT");
1676+
glTexStorageMem2DEXT = (PFNGLTEXSTORAGEMEM2DEXTPROC)LL_GET_PROC_ADDRESS("glTexStorageMem2DEXT");
1677+
LL_INFOS("RenderInit") << "GL_EXT_memory_object symbols loaded" << LL_ENDL;
1678+
}
1679+
1680+
// GL_EXT_semaphore
1681+
if (mHasEXTSemaphore)
1682+
{
1683+
glGenSemaphoresEXT = (PFNGLGENSEMAPHORESEXTPROC)LL_GET_PROC_ADDRESS("glGenSemaphoresEXT");
1684+
glDeleteSemaphoresEXT = (PFNGLDELETESEMAPHORESEXTPROC)LL_GET_PROC_ADDRESS("glDeleteSemaphoresEXT");
1685+
glSemaphoreParameterui64vEXT = (PFNGLSEMAPHOREPARAMETERUI64VEXTPROC)LL_GET_PROC_ADDRESS("glSemaphoreParameterui64vEXT");
1686+
glWaitSemaphoreEXT = (PFNGLWAITSEMAPHOREEXTPROC)LL_GET_PROC_ADDRESS("glWaitSemaphoreEXT");
1687+
glSignalSemaphoreEXT = (PFNGLSIGNALSEMAPHOREEXTPROC)LL_GET_PROC_ADDRESS("glSignalSemaphoreEXT");
1688+
LL_INFOS("RenderInit") << "GL_EXT_semaphore symbols loaded" << LL_ENDL;
1689+
}
1690+
1691+
// GL_EXT_memory_object_win32
1692+
if (mHasEXTMemoryObjectWin32)
1693+
{
1694+
glImportMemoryWin32HandleEXT = (PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC)LL_GET_PROC_ADDRESS("glImportMemoryWin32HandleEXT");
1695+
LL_INFOS("RenderInit") << "GL_EXT_memory_object_win32 symbols loaded" << LL_ENDL;
1696+
}
1697+
1698+
// GL_EXT_semaphore_win32
1699+
if (mHasEXTSemaphoreWin32)
1700+
{
1701+
glImportSemaphoreWin32HandleEXT = (PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC)LL_GET_PROC_ADDRESS("glImportSemaphoreWin32HandleEXT");
1702+
LL_INFOS("RenderInit") << "GL_EXT_semaphore_win32 symbols loaded" << LL_ENDL;
1703+
}
1704+
16451705
// GL_VERSION_1_2
16461706
if (mGLVersion < 1.19f)
16471707
{

indra/llrender/llgl.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ class LLGLManager
106106
bool mHasNVXGpuMemoryInfo = false;
107107
bool mHasATIMemInfo = false;
108108
bool mHasGLXMESAQueryRenderer = false;
109+
bool mHasEXTMemoryObject = false;
110+
bool mHasEXTSemaphore = false;
111+
bool mHasEXTMemoryObjectWin32 = false;
112+
bool mHasEXTSemaphoreWin32 = false;
109113

110114
bool mIsAMD;
111115
bool mIsNVIDIA;

indra/llrender/llglheaders.h

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,122 @@
8282
#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD
8383
#endif
8484

85+
#ifndef GL_EXT_memory_object
86+
#define GL_EXT_memory_object 1
87+
#define GL_TEXTURE_TILING_EXT 0x9580
88+
#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581
89+
#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B
90+
#define GL_NUM_TILING_TYPES_EXT 0x9582
91+
#define GL_TILING_TYPES_EXT 0x9583
92+
#define GL_OPTIMAL_TILING_EXT 0x9584
93+
#define GL_LINEAR_TILING_EXT 0x9585
94+
#define GL_NUM_DEVICE_UUIDS_EXT 0x9596
95+
#define GL_DEVICE_UUID_EXT 0x9597
96+
#define GL_DRIVER_UUID_EXT 0x9598
97+
#define GL_UUID_SIZE_EXT 16
98+
typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte *data);
99+
typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte *data);
100+
typedef void (APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint *memoryObjects);
101+
typedef GLboolean (APIENTRYP PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject);
102+
typedef void (APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint *memoryObjects);
103+
typedef void (APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint *params);
104+
typedef void (APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint *params);
105+
typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
106+
typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
107+
typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
108+
typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
109+
typedef void (APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset);
110+
typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
111+
typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
112+
typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
113+
typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
114+
typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset);
115+
typedef void (APIENTRYP PFNGLTEXSTORAGEMEM1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset);
116+
typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM1DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset);
117+
#ifdef GL_GLEXT_PROTOTYPES
118+
GLAPI void APIENTRY glGetUnsignedBytevEXT (GLenum pname, GLubyte *data);
119+
GLAPI void APIENTRY glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte *data);
120+
GLAPI void APIENTRY glDeleteMemoryObjectsEXT (GLsizei n, const GLuint *memoryObjects);
121+
GLAPI GLboolean APIENTRY glIsMemoryObjectEXT (GLuint memoryObject);
122+
GLAPI void APIENTRY glCreateMemoryObjectsEXT (GLsizei n, GLuint *memoryObjects);
123+
GLAPI void APIENTRY glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint *params);
124+
GLAPI void APIENTRY glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint *params);
125+
GLAPI void APIENTRY glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
126+
GLAPI void APIENTRY glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
127+
GLAPI void APIENTRY glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
128+
GLAPI void APIENTRY glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
129+
GLAPI void APIENTRY glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset);
130+
GLAPI void APIENTRY glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
131+
GLAPI void APIENTRY glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
132+
GLAPI void APIENTRY glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
133+
GLAPI void APIENTRY glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
134+
GLAPI void APIENTRY glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset);
135+
GLAPI void APIENTRY glTexStorageMem1DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset);
136+
GLAPI void APIENTRY glTextureStorageMem1DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset);
137+
#endif
138+
#endif /* GL_EXT_memory_object */
139+
140+
#ifndef GL_EXT_semaphore
141+
#define GL_EXT_semaphore 1
142+
#define GL_LAYOUT_GENERAL_EXT 0x958D
143+
#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E
144+
#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F
145+
#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590
146+
#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591
147+
#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592
148+
#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593
149+
#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530
150+
#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531
151+
typedef void (APIENTRYP PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint *semaphores);
152+
typedef void (APIENTRYP PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint *semaphores);
153+
typedef GLboolean (APIENTRYP PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore);
154+
typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64 *params);
155+
typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64 *params);
156+
typedef void (APIENTRYP PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts);
157+
typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts);
158+
#ifdef GL_GLEXT_PROTOTYPES
159+
GLAPI void APIENTRY glGenSemaphoresEXT (GLsizei n, GLuint *semaphores);
160+
GLAPI void APIENTRY glDeleteSemaphoresEXT (GLsizei n, const GLuint *semaphores);
161+
GLAPI GLboolean APIENTRY glIsSemaphoreEXT (GLuint semaphore);
162+
GLAPI void APIENTRY glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64 *params);
163+
GLAPI void APIENTRY glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64 *params);
164+
GLAPI void APIENTRY glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts);
165+
GLAPI void APIENTRY glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts);
166+
#endif
167+
#endif /* GL_EXT_semaphore */
168+
169+
// GL_EXT_memory_object_win32
170+
#ifndef GL_EXT_memory_object_win32
171+
#define GL_EXT_memory_object_win32 1
172+
#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587
173+
#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588
174+
#define GL_DEVICE_LUID_EXT 0x9599
175+
#define GL_DEVICE_NODE_MASK_EXT 0x959A
176+
#define GL_LUID_SIZE_EXT 8
177+
#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589
178+
#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A
179+
#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B
180+
#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C
181+
typedef void(APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC)(GLuint memory, GLuint64 size, GLenum handleType, void* handle);
182+
typedef void(APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC)(GLuint memory, GLuint64 size, GLenum handleType, const void* name);
183+
#ifdef GL_GLEXT_PROTOTYPES
184+
GLAPI void APIENTRY glImportMemoryWin32HandleEXT(GLuint memory, GLuint64 size, GLenum handleType, void* handle);
185+
GLAPI void APIENTRY glImportMemoryWin32NameEXT(GLuint memory, GLuint64 size, GLenum handleType, const void* name);
186+
#endif
187+
#endif /* GL_EXT_memory_object_win32 */
188+
189+
#ifndef GL_EXT_semaphore_win32
190+
#define GL_EXT_semaphore_win32 1
191+
#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594
192+
#define GL_D3D12_FENCE_VALUE_EXT 0x9595
193+
typedef void(APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC)(GLuint semaphore, GLenum handleType, void* handle);
194+
typedef void(APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC)(GLuint semaphore, GLenum handleType, const void* name);
195+
#ifdef GL_GLEXT_PROTOTYPES
196+
GLAPI void APIENTRY glImportSemaphoreWin32HandleEXT(GLuint semaphore, GLenum handleType, void* handle);
197+
GLAPI void APIENTRY glImportSemaphoreWin32NameEXT(GLuint semaphore, GLenum handleType, const void* name);
198+
#endif
199+
#endif /* GL_EXT_semaphore_win32 */
200+
85201
// GL_EXT_texture_sRGB constants
86202
#ifndef GL_EXT_texture_sRGB
87203
#define GL_EXT_texture_sRGB 1
@@ -879,6 +995,25 @@ extern PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC glMultiDrawArraysIndirectCount;
879995
extern PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC glMultiDrawElementsIndirectCount;
880996
extern PFNGLPOLYGONOFFSETCLAMPPROC glPolygonOffsetClamp;
881997

998+
// GL_EXT_memory_object
999+
extern PFNGLCREATEMEMORYOBJECTSEXTPROC glCreateMemoryObjectsEXT;
1000+
extern PFNGLDELETEMEMORYOBJECTSEXTPROC glDeleteMemoryObjectsEXT;
1001+
extern PFNGLMEMORYOBJECTPARAMETERIVEXTPROC glMemoryObjectParameterivEXT;
1002+
extern PFNGLTEXSTORAGEMEM2DEXTPROC glTexStorageMem2DEXT;
1003+
1004+
// GL_EXT_semaphore
1005+
extern PFNGLGENSEMAPHORESEXTPROC glGenSemaphoresEXT;
1006+
extern PFNGLDELETESEMAPHORESEXTPROC glDeleteSemaphoresEXT;
1007+
extern PFNGLSEMAPHOREPARAMETERUI64VEXTPROC glSemaphoreParameterui64vEXT;
1008+
extern PFNGLWAITSEMAPHOREEXTPROC glWaitSemaphoreEXT;
1009+
extern PFNGLSIGNALSEMAPHOREEXTPROC glSignalSemaphoreEXT;
1010+
1011+
// GL_EXT_memory_object_win32
1012+
extern PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC glImportMemoryWin32HandleEXT;
1013+
1014+
// GL_EXT_semaphore_win32
1015+
extern PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC glImportSemaphoreWin32HandleEXT;
1016+
8821017
#endif
8831018

8841019
#if defined(TRACY_ENABLE) && LL_PROFILER_ENABLE_TRACY_OPENGL

0 commit comments

Comments
 (0)