On replay check that expected func ptrs for 4.3 + EXT_dsa are present

* Also log out which function pointers are actually available
This commit is contained in:
baldurk
2015-07-23 20:28:03 +02:00
parent 4d5d44d686
commit dcc5362dc1
+306 -1
View File
@@ -458,7 +458,312 @@ ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **dr
}
}
WrappedOpenGL *gl = new WrappedOpenGL(logfile, GetRealFunctions());
const GLHookSet &real = GetRealFunctions();
PFNGLGETSTRINGPROC *ptrs = (PFNGLGETSTRINGPROC *)ℜ
size_t num = sizeof(real)/sizeof(PFNGLGETSTRINGPROC);
RDCLOG("Function pointers available:");
for(size_t i=0; i < num; )
{
uint64_t ptrmask = 0;
for(size_t j=0; j < 64; j++)
if(i + j < num && ptrs[i+j])
ptrmask |= 1ULL<<(63-j);
i += 64;
RDCLOG("%64llb", ptrmask);
}
// check for the presence of GL functions we will call unconditionally as part of the replay process.
// Other functions that are only called to deserialise are checked for presence separately
#define CHECK_PRESENT(func) \
if(!real.func) \
{ \
RDCERR("Missing function %s, required for replay. RenderDoc requires a 4.3 context and EXT_direct_state_access", #func); \
wglMakeCurrentProc(NULL, NULL); \
wglDeleteRC(rc); \
ReleaseDC(w, dc); \
GLReplay::PostContextShutdownCounters(); \
return eReplayCreate_APIHardwareUnsupported; \
}
// these functions should all be present as part of a 4.3 context, but let's just be extra-careful
CHECK_PRESENT(glActiveTexture)
CHECK_PRESENT(glAttachShader)
CHECK_PRESENT(glBeginQuery)
CHECK_PRESENT(glBeginTransformFeedback)
CHECK_PRESENT(glBindAttribLocation)
CHECK_PRESENT(glBindBuffer)
CHECK_PRESENT(glBindBufferBase)
CHECK_PRESENT(glBindBufferRange)
CHECK_PRESENT(glBindFragDataLocation)
CHECK_PRESENT(glBindFramebuffer)
CHECK_PRESENT(glBindImageTexture)
CHECK_PRESENT(glBindProgramPipeline)
CHECK_PRESENT(glBindSampler)
CHECK_PRESENT(glBindTexture)
CHECK_PRESENT(glBindTransformFeedback)
CHECK_PRESENT(glBindVertexArray)
CHECK_PRESENT(glBindVertexBuffer)
CHECK_PRESENT(glBlendColor)
CHECK_PRESENT(glBlendEquationSeparate)
CHECK_PRESENT(glBlendEquationSeparatei)
CHECK_PRESENT(glBlendFunc)
CHECK_PRESENT(glBlendFuncSeparate)
CHECK_PRESENT(glBlendFuncSeparatei)
CHECK_PRESENT(glBlitFramebuffer)
CHECK_PRESENT(glBufferData)
CHECK_PRESENT(glBufferSubData)
CHECK_PRESENT(glClearBufferData)
CHECK_PRESENT(glClearBufferfi)
CHECK_PRESENT(glClearBufferfv)
CHECK_PRESENT(glClearBufferiv)
CHECK_PRESENT(glClearBufferuiv)
CHECK_PRESENT(glClearColor)
CHECK_PRESENT(glClearDepth)
CHECK_PRESENT(glColorMaski)
CHECK_PRESENT(glCompileShader)
CHECK_PRESENT(glCopyImageSubData)
CHECK_PRESENT(glCreateProgram)
CHECK_PRESENT(glCreateShader)
CHECK_PRESENT(glCreateShaderProgramv)
CHECK_PRESENT(glCullFace)
CHECK_PRESENT(glDebugMessageCallback)
CHECK_PRESENT(glDeleteBuffers)
CHECK_PRESENT(glDeleteFramebuffers)
CHECK_PRESENT(glDeleteProgram)
CHECK_PRESENT(glDeleteProgramPipelines)
CHECK_PRESENT(glDeleteQueries)
CHECK_PRESENT(glDeleteSamplers)
CHECK_PRESENT(glDeleteShader)
CHECK_PRESENT(glDeleteTextures)
CHECK_PRESENT(glDeleteTransformFeedbacks)
CHECK_PRESENT(glDeleteVertexArrays)
CHECK_PRESENT(glDepthFunc)
CHECK_PRESENT(glDepthMask)
CHECK_PRESENT(glDepthRangeArrayv)
CHECK_PRESENT(glDetachShader)
CHECK_PRESENT(glDisable)
CHECK_PRESENT(glDisablei)
CHECK_PRESENT(glDisableVertexAttribArray)
CHECK_PRESENT(glDispatchCompute)
CHECK_PRESENT(glDrawArrays)
CHECK_PRESENT(glDrawArraysInstanced)
CHECK_PRESENT(glDrawArraysInstancedBaseInstance)
CHECK_PRESENT(glDrawBuffers)
CHECK_PRESENT(glDrawElements)
CHECK_PRESENT(glDrawElementsBaseVertex)
CHECK_PRESENT(glDrawElementsInstancedBaseVertexBaseInstance)
CHECK_PRESENT(glEnable)
CHECK_PRESENT(glEnablei)
CHECK_PRESENT(glEnableVertexAttribArray)
CHECK_PRESENT(glEndConditionalRender)
CHECK_PRESENT(glEndQuery)
CHECK_PRESENT(glEndQueryIndexed)
CHECK_PRESENT(glEndTransformFeedback)
CHECK_PRESENT(glFramebufferTexture)
CHECK_PRESENT(glFramebufferTexture2D)
CHECK_PRESENT(glFramebufferTexture3D)
CHECK_PRESENT(glFramebufferTextureLayer)
CHECK_PRESENT(glFrontFace)
CHECK_PRESENT(glGenBuffers)
CHECK_PRESENT(glGenFramebuffers)
CHECK_PRESENT(glGenProgramPipelines)
CHECK_PRESENT(glGenQueries)
CHECK_PRESENT(glGenSamplers)
CHECK_PRESENT(glGenTextures)
CHECK_PRESENT(glGenTransformFeedbacks)
CHECK_PRESENT(glGenVertexArrays)
CHECK_PRESENT(glGetActiveAtomicCounterBufferiv)
CHECK_PRESENT(glGetActiveUniformBlockiv)
CHECK_PRESENT(glGetAttribLocation)
CHECK_PRESENT(glGetBooleani_v)
CHECK_PRESENT(glGetBooleanv)
CHECK_PRESENT(glGetBufferParameteriv)
CHECK_PRESENT(glGetBufferSubData)
CHECK_PRESENT(glGetCompressedTexImage)
CHECK_PRESENT(glGetDoublei_v)
CHECK_PRESENT(glGetDoublev)
CHECK_PRESENT(glGetError)
CHECK_PRESENT(glGetFloati_v)
CHECK_PRESENT(glGetFloatv)
CHECK_PRESENT(glGetFragDataLocation)
CHECK_PRESENT(glGetFramebufferAttachmentParameteriv)
CHECK_PRESENT(glGetInteger64i_v)
CHECK_PRESENT(glGetIntegeri_v)
CHECK_PRESENT(glGetIntegerv)
CHECK_PRESENT(glGetInternalformativ)
CHECK_PRESENT(glGetObjectLabel)
CHECK_PRESENT(glGetProgramInfoLog)
CHECK_PRESENT(glGetProgramInterfaceiv)
CHECK_PRESENT(glGetProgramiv)
CHECK_PRESENT(glGetProgramPipelineiv)
CHECK_PRESENT(glGetProgramResourceIndex)
CHECK_PRESENT(glGetProgramResourceiv)
CHECK_PRESENT(glGetProgramResourceName)
CHECK_PRESENT(glGetProgramStageiv)
CHECK_PRESENT(glGetQueryObjectuiv)
CHECK_PRESENT(glGetSamplerParameterfv)
CHECK_PRESENT(glGetSamplerParameteriv)
CHECK_PRESENT(glGetShaderInfoLog)
CHECK_PRESENT(glGetShaderiv)
CHECK_PRESENT(glGetString)
CHECK_PRESENT(glGetStringi)
CHECK_PRESENT(glGetTexImage)
CHECK_PRESENT(glGetTexLevelParameteriv)
CHECK_PRESENT(glGetTexParameterfv)
CHECK_PRESENT(glGetTexParameteriv)
CHECK_PRESENT(glGetUniformBlockIndex)
CHECK_PRESENT(glGetUniformdv)
CHECK_PRESENT(glGetUniformfv)
CHECK_PRESENT(glGetUniformiv)
CHECK_PRESENT(glGetUniformLocation)
CHECK_PRESENT(glGetUniformSubroutineuiv)
CHECK_PRESENT(glGetUniformuiv)
CHECK_PRESENT(glGetVertexAttribfv)
CHECK_PRESENT(glGetVertexAttribiv)
CHECK_PRESENT(glHint)
CHECK_PRESENT(glIsEnabled)
CHECK_PRESENT(glIsEnabledi)
CHECK_PRESENT(glLineWidth)
CHECK_PRESENT(glLinkProgram)
CHECK_PRESENT(glLogicOp)
CHECK_PRESENT(glMapBufferRange)
CHECK_PRESENT(glMinSampleShading)
CHECK_PRESENT(glObjectLabel)
CHECK_PRESENT(glPatchParameterfv)
CHECK_PRESENT(glPatchParameteri)
CHECK_PRESENT(glPixelStorei)
CHECK_PRESENT(glPointParameterf)
CHECK_PRESENT(glPointParameteri)
CHECK_PRESENT(glPointSize)
CHECK_PRESENT(glPolygonMode)
CHECK_PRESENT(glPolygonOffset)
CHECK_PRESENT(glPrimitiveRestartIndex)
CHECK_PRESENT(glProgramParameteri)
CHECK_PRESENT(glProgramUniform1dv)
CHECK_PRESENT(glProgramUniform1fv)
CHECK_PRESENT(glProgramUniform1iv)
CHECK_PRESENT(glProgramUniform1ui)
CHECK_PRESENT(glProgramUniform1uiv)
CHECK_PRESENT(glProgramUniform2dv)
CHECK_PRESENT(glProgramUniform2fv)
CHECK_PRESENT(glProgramUniform2iv)
CHECK_PRESENT(glProgramUniform2uiv)
CHECK_PRESENT(glProgramUniform3dv)
CHECK_PRESENT(glProgramUniform3fv)
CHECK_PRESENT(glProgramUniform3iv)
CHECK_PRESENT(glProgramUniform3uiv)
CHECK_PRESENT(glProgramUniform4dv)
CHECK_PRESENT(glProgramUniform4fv)
CHECK_PRESENT(glProgramUniform4iv)
CHECK_PRESENT(glProgramUniform4ui)
CHECK_PRESENT(glProgramUniform4uiv)
CHECK_PRESENT(glProgramUniformMatrix2dv)
CHECK_PRESENT(glProgramUniformMatrix2fv)
CHECK_PRESENT(glProgramUniformMatrix2x3dv)
CHECK_PRESENT(glProgramUniformMatrix2x3fv)
CHECK_PRESENT(glProgramUniformMatrix2x4dv)
CHECK_PRESENT(glProgramUniformMatrix2x4fv)
CHECK_PRESENT(glProgramUniformMatrix3dv)
CHECK_PRESENT(glProgramUniformMatrix3fv)
CHECK_PRESENT(glProgramUniformMatrix3x2dv)
CHECK_PRESENT(glProgramUniformMatrix3x2fv)
CHECK_PRESENT(glProgramUniformMatrix3x4dv)
CHECK_PRESENT(glProgramUniformMatrix3x4fv)
CHECK_PRESENT(glProgramUniformMatrix4dv)
CHECK_PRESENT(glProgramUniformMatrix4fv)
CHECK_PRESENT(glProgramUniformMatrix4x2dv)
CHECK_PRESENT(glProgramUniformMatrix4x2fv)
CHECK_PRESENT(glProgramUniformMatrix4x3dv)
CHECK_PRESENT(glProgramUniformMatrix4x3fv)
CHECK_PRESENT(glProvokingVertex)
CHECK_PRESENT(glReadBuffer)
CHECK_PRESENT(glReadPixels)
CHECK_PRESENT(glSampleCoverage)
CHECK_PRESENT(glSampleMaski)
CHECK_PRESENT(glSamplerParameteri)
CHECK_PRESENT(glScissorIndexedv)
CHECK_PRESENT(glShaderSource)
CHECK_PRESENT(glShaderStorageBlockBinding)
CHECK_PRESENT(glStencilFuncSeparate)
CHECK_PRESENT(glStencilMask)
CHECK_PRESENT(glStencilMaskSeparate)
CHECK_PRESENT(glStencilOpSeparate)
CHECK_PRESENT(glTexImage2D)
CHECK_PRESENT(glTexParameteri)
CHECK_PRESENT(glTexStorage2D)
CHECK_PRESENT(glTextureView)
CHECK_PRESENT(glTransformFeedbackVaryings)
CHECK_PRESENT(glUniform1i)
CHECK_PRESENT(glUniform1ui)
CHECK_PRESENT(glUniform2f)
CHECK_PRESENT(glUniform2fv)
CHECK_PRESENT(glUniform4fv)
CHECK_PRESENT(glUniformBlockBinding)
CHECK_PRESENT(glUniformMatrix4fv)
CHECK_PRESENT(glUniformSubroutinesuiv)
CHECK_PRESENT(glUnmapBuffer)
CHECK_PRESENT(glUseProgram)
CHECK_PRESENT(glUseProgramStages)
CHECK_PRESENT(glVertexAttrib4fv)
CHECK_PRESENT(glVertexAttribBinding)
CHECK_PRESENT(glVertexAttribFormat)
CHECK_PRESENT(glVertexAttribIFormat)
CHECK_PRESENT(glVertexAttribLFormat)
CHECK_PRESENT(glVertexAttribPointer)
CHECK_PRESENT(glVertexBindingDivisor)
CHECK_PRESENT(glViewport)
CHECK_PRESENT(glViewportArrayv)
CHECK_PRESENT(glViewportIndexedf)
// these functions should be present as part of EXT_direct_state_access, let's verify
CHECK_PRESENT(glCompressedTextureImage1DEXT)
CHECK_PRESENT(glCompressedTextureImage2DEXT)
CHECK_PRESENT(glCompressedTextureImage3DEXT)
CHECK_PRESENT(glCompressedTextureSubImage1DEXT)
CHECK_PRESENT(glCompressedTextureSubImage2DEXT)
CHECK_PRESENT(glCompressedTextureSubImage3DEXT)
CHECK_PRESENT(glGetCompressedTextureImageEXT)
CHECK_PRESENT(glGetNamedBufferParameterivEXT)
CHECK_PRESENT(glGetNamedBufferSubDataEXT)
CHECK_PRESENT(glGetNamedFramebufferAttachmentParameterivEXT)
CHECK_PRESENT(glGetTextureLevelParameterivEXT)
CHECK_PRESENT(glGetTextureParameterfvEXT)
CHECK_PRESENT(glGetTextureParameterivEXT)
CHECK_PRESENT(glMapNamedBufferEXT)
CHECK_PRESENT(glNamedBufferDataEXT)
CHECK_PRESENT(glNamedBufferStorageEXT)
CHECK_PRESENT(glNamedBufferSubDataEXT)
CHECK_PRESENT(glNamedFramebufferRenderbufferEXT)
CHECK_PRESENT(glNamedFramebufferTextureEXT)
CHECK_PRESENT(glNamedFramebufferTextureLayerEXT)
CHECK_PRESENT(glTextureBufferRangeEXT)
CHECK_PRESENT(glTextureImage1DEXT)
CHECK_PRESENT(glTextureImage2DEXT)
CHECK_PRESENT(glTextureImage3DEXT)
CHECK_PRESENT(glTextureParameterfvEXT)
CHECK_PRESENT(glTextureParameterivEXT)
CHECK_PRESENT(glTextureStorage1DEXT)
CHECK_PRESENT(glTextureStorage2DEXT)
CHECK_PRESENT(glTextureStorage2DMultisampleEXT)
CHECK_PRESENT(glTextureStorage3DEXT)
CHECK_PRESENT(glTextureStorage3DMultisampleEXT)
CHECK_PRESENT(glTextureSubImage1DEXT)
CHECK_PRESENT(glTextureSubImage2DEXT)
CHECK_PRESENT(glTextureSubImage3DEXT)
CHECK_PRESENT(glUnmapNamedBufferEXT)
// other functions are either checked for presence explicitly (like
// depth bounds or polygon offset clamp EXT functions), or they are
// only called when such a call is serialised from the logfile, and
// so they are checked for validity separately.
WrappedOpenGL *gl = new WrappedOpenGL(logfile, real);
gl->Initialise(initParams);
RDCLOG("Created device.");