OpenGLRenderer: Fix loading of glSpecializeShader

This commit is contained in:
SirLynix 2022-05-09 13:19:31 +02:00
parent 6dc2cefc2c
commit b0ecb64f19
3 changed files with 16 additions and 14 deletions

View File

@ -19,9 +19,9 @@
#define GL_FILL 0x1B02 #define GL_FILL 0x1B02
#define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551 #define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551
#define GL_SPIR_V_BINARY_ARB 0x9552 #define GL_SPIR_V_BINARY_ARB 0x9552
typedef void (GL_APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode);
typedef void (GL_APIENTRYP PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const GLchar* pEntryPoint, GLuint numSpecializationConstants, const GLuint* pConstantIndex, const GLuint* pConstantValue);
typedef void (GL_APIENTRYP PFNGLDRAWBUFFERPROC) (GLenum buf); typedef void (GL_APIENTRYP PFNGLDRAWBUFFERPROC) (GLenum buf);
typedef void (GL_APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode);
typedef void (GL_APIENTRYP PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLchar* pEntryPoint, GLuint numSpecializationConstants, const GLuint* pConstantIndex, const GLuint* pConstantValue);
// OpenGL core // OpenGL core
#define NAZARA_OPENGLRENDERER_FOREACH_GLES_FUNC(cb, extCb) \ #define NAZARA_OPENGLRENDERER_FOREACH_GLES_FUNC(cb, extCb) \
@ -169,22 +169,19 @@ typedef void (GL_APIENTRYP PFNGLDRAWBUFFERPROC) (GLenum buf);
cb(glVertexAttribIPointer, PFNGLVERTEXATTRIBIPOINTERPROC) \ cb(glVertexAttribIPointer, PFNGLVERTEXATTRIBIPOINTERPROC) \
cb(glVertexAttribPointer, PFNGLVERTEXATTRIBPOINTERPROC) \ cb(glVertexAttribPointer, PFNGLVERTEXATTRIBPOINTERPROC) \
cb(glViewport, PFNGLVIEWPORTPROC) \ cb(glViewport, PFNGLVIEWPORTPROC) \
\ /* Core OpenGL (extension in OpenGL ES) */ \
extCb(glCopyImageSubData, PFNGLCOPYIMAGESUBDATAPROC) \
\
extCb(glDebugMessageCallback, PFNGLDEBUGMESSAGECALLBACKPROC) \
\
extCb(glDrawBuffer, PFNGLDRAWBUFFERPROC) \ extCb(glDrawBuffer, PFNGLDRAWBUFFERPROC) \
\
extCb(glPolygonMode, PFNGLPOLYGONMODEPROC) \ extCb(glPolygonMode, PFNGLPOLYGONMODEPROC) \
\ /* OpenGL 4.2 - OpenGL ES 3.1 */\
extCb(glMemoryBarrier, PFNGLMEMORYBARRIERPROC) \ extCb(glMemoryBarrier, PFNGLMEMORYBARRIERPROC) \
extCb(glMemoryBarrierByRegion, PFNGLMEMORYBARRIERBYREGIONPROC) \ extCb(glMemoryBarrierByRegion, PFNGLMEMORYBARRIERBYREGIONPROC) \
\ /* OpenGL 4.3 - OpenGL ES 3.2 */\
extCb(glCopyImageSubData, PFNGLCOPYIMAGESUBDATAPROC) \
extCb(glDebugMessageCallback, PFNGLDEBUGMESSAGECALLBACKPROC) \
extCb(glObjectLabel, PFNGLOBJECTLABELPROC) \ extCb(glObjectLabel, PFNGLOBJECTLABELPROC) \
extCb(glPopDebugGroup, PFNGLPOPDEBUGGROUPPROC) \ extCb(glPopDebugGroup, PFNGLPOPDEBUGGROUPPROC) \
extCb(glPushDebugGroup, PFNGLPUSHDEBUGGROUPPROC) \ extCb(glPushDebugGroup, PFNGLPUSHDEBUGGROUPPROC) \
\ /* OpenGL 4.6 - GL_ARB_spirv_extensions */\
extCb(glSpecializeShaderARB, PFNGLSPECIALIZESHADERARBPROC) \ extCb(glSpecializeShader, PFNGLSPECIALIZESHADERPROC) \
#endif // NAZARA_OPENGLRENDERER_WRAPPER_COREFUNCTIONS_HPP #endif // NAZARA_OPENGLRENDERER_WRAPPER_COREFUNCTIONS_HPP

View File

@ -90,9 +90,9 @@ namespace Nz::GL
{ {
assert(m_objectId); assert(m_objectId);
const Context& context = EnsureDeviceContext(); const Context& context = EnsureDeviceContext();
assert(context.glSpecializeShaderARB); assert(context.glSpecializeShader);
context.glSpecializeShaderARB(m_objectId, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue); context.glSpecializeShader(m_objectId, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue);
} }
inline GLuint Shader::CreateHelper(OpenGLDevice& /*device*/, const Context& context, GLenum shaderStage) inline GLuint Shader::CreateHelper(OpenGLDevice& /*device*/, const Context& context, GLenum shaderStage)

View File

@ -804,6 +804,11 @@ namespace Nz::GL
return loader.Load<PFNGLPOLYGONMODENVPROC, functionIndex>(glPolygonMode, "glPolygonModeNV", false); //< from GL_NV_polygon_mode return loader.Load<PFNGLPOLYGONMODENVPROC, functionIndex>(glPolygonMode, "glPolygonModeNV", false); //< from GL_NV_polygon_mode
} }
else if (function == "glSpecializeShader")
{
constexpr std::size_t functionIndex = UnderlyingCast(FunctionIndex::glSpecializeShader);
return loader.Load<PFNGLSPECIALIZESHADERPROC, functionIndex>(glSpecializeShader, "glSpecializeShaderARB", false); //< from GL_ARB_spirv_extensions
}
return false; return false;
} }