Add some more easily-implemented extensions

This commit is contained in:
baldurk
2014-12-20 09:48:29 +00:00
parent da93a4e0a0
commit 44cdab44b4
6 changed files with 72 additions and 11 deletions
+1
View File
@@ -305,6 +305,7 @@ enum GLChunkType
BIND_VERTEXBUFFERS,
VERTEXBINDINGDIVISOR,
DISPATCH_COMPUTE,
DISPATCH_COMPUTE_GROUP_SIZE,
DISPATCH_COMPUTE_INDIRECT,
MEMORY_BARRIER,
MEMORY_BARRIER_BY_REGION,
+7
View File
@@ -199,6 +199,7 @@ const char *GLChunkNames[] =
"glBindVertexBuffers",
"glVertexBindingDivisor",
"glDispatchCompute",
"glDispatchComputeGroupSizeARB",
"glDispatchComputeIndirect",
"glMemoryBarrier",
"glMemoryBarrierByRegion",
@@ -343,6 +344,7 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_ARB_clear_texture");
globalExts.push_back("GL_ARB_color_buffer_float");
globalExts.push_back("GL_ARB_compute_shader");
globalExts.push_back("GL_ARB_compute_variable_group_size");
globalExts.push_back("GL_ARB_conservative_depth");
globalExts.push_back("GL_ARB_copy_buffer");
globalExts.push_back("GL_ARB_copy_image");
@@ -367,6 +369,7 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_ARB_framebuffer_object");
globalExts.push_back("GL_ARB_framebuffer_sRGB");
globalExts.push_back("GL_ARB_get_program_binary");
globalExts.push_back("GL_ARB_geometry_shader4");
globalExts.push_back("GL_ARB_gpu_shader_fp64");
globalExts.push_back("GL_ARB_gpu_shader5");
globalExts.push_back("GL_ARB_half_float_pixel");
@@ -450,6 +453,7 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_ARB_vertex_program");
globalExts.push_back("GL_ARB_vertex_type_10f_11f_11f_rev");
globalExts.push_back("GL_ARB_vertex_type_2_10_10_10_rev");
globalExts.push_back("GL_ARB_viewport_array");
globalExts.push_back("GL_EXT_depth_bounds_test");
globalExts.push_back("GL_EXT_direct_state_access");
globalExts.push_back("GL_EXT_framebuffer_blit");
@@ -2329,6 +2333,9 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
case DISPATCH_COMPUTE:
Serialise_glDispatchCompute(0, 0, 0);
break;
case DISPATCH_COMPUTE_GROUP_SIZE:
Serialise_glDispatchComputeGroupSizeARB(0, 0, 0, 0, 0, 0);
break;
case DISPATCH_COMPUTE_INDIRECT:
Serialise_glDispatchComputeIndirect(0);
break;
+1
View File
@@ -600,6 +600,7 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawTransformFeedbackStreamInstanced(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount));
IMPLEMENT_FUNCTION_SERIALISED(void, glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z));
IMPLEMENT_FUNCTION_SERIALISED(void, glDispatchComputeGroupSizeARB(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z));
IMPLEMENT_FUNCTION_SERIALISED(void, glDispatchComputeIndirect(GLintptr indirect));
IMPLEMENT_FUNCTION_SERIALISED(void, glMemoryBarrier(GLbitfield barriers));
IMPLEMENT_FUNCTION_SERIALISED(void, glMemoryBarrierByRegion(GLbitfield barriers));
+4 -3
View File
@@ -264,7 +264,7 @@ struct GLHookSet
PFNGLDETACHSHADERPROC glDetachShader;
PFNGLRELEASESHADERCOMPILERPROC glReleaseShaderCompiler;
PFNGLLINKPROGRAMPROC glLinkProgram;
PFNGLPROGRAMPARAMETERIPROC glProgramParameteri;
PFNGLPROGRAMPARAMETERIPROC glProgramParameteri; // aliases glProgramParameteriARB
PFNGLUSEPROGRAMPROC glUseProgram;
PFNGLSHADERBINARYPROC glShaderBinary;
PFNGLPROGRAMBINARYPROC glProgramBinary;
@@ -301,12 +301,12 @@ struct GLHookSet
PFNGLDRAWBUFFERSPROC glDrawBuffers; // aliases glDrawBuffersARB
PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; // aliases glGenFramebuffersEXT
PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; // aliases glBindFramebufferEXT
PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture;
PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture; // aliases glFramebufferTextureARB
PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D; // aliases glFramebufferTexture1DEXT
PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; // aliases glFramebufferTexture2DEXT
PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D; // aliases glFramebufferTexture3DEXT
PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer; // aliases glFramebufferRenderbufferEXT
PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer;
PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer; // aliases glFramebufferTextureLayerARB
PFNGLFRAMEBUFFERPARAMETERIPROC glFramebufferParameteri;
PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; // aliases glDeleteFramebuffersEXT
PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers; // aliases glGenRenderbuffersEXT
@@ -463,6 +463,7 @@ struct GLHookSet
PFNGLPOINTPARAMETERIPROC glPointParameteri;
PFNGLPOINTPARAMETERIVPROC glPointParameteriv;
PFNGLDISPATCHCOMPUTEPROC glDispatchCompute;
PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC glDispatchComputeGroupSizeARB;
PFNGLDISPATCHCOMPUTEINDIRECTPROC glDispatchComputeIndirect;
PFNGLMEMORYBARRIERPROC glMemoryBarrier;
PFNGLMEMORYBARRIERBYREGIONPROC glMemoryBarrierByRegion;
+5 -8
View File
@@ -412,6 +412,7 @@
HookExtensionAlias(PFNGLBLITFRAMEBUFFERPROC, glBlitFramebuffer, glBlitFramebufferEXT); \
HookExtension(PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC, glRenderbufferStorageMultisample); \
HookExtension(PFNGLFRAMEBUFFERTEXTURELAYERPROC, glFramebufferTextureLayer); \
HookExtensionAlias(PFNGLFRAMEBUFFERTEXTURELAYERPROC, glFramebufferTextureLayer, glFramebufferTextureLayerARB); \
HookExtension(PFNGLMAPBUFFERRANGEPROC, glMapBufferRange); \
HookExtension(PFNGLFLUSHMAPPEDBUFFERRANGEPROC, glFlushMappedBufferRange); \
HookExtension(PFNGLBINDVERTEXARRAYPROC, glBindVertexArray); \
@@ -448,6 +449,7 @@
HookExtension(PFNGLGETINTEGER64I_VPROC, glGetInteger64i_v); \
HookExtension(PFNGLGETBUFFERPARAMETERI64VPROC, glGetBufferParameteri64v); \
HookExtension(PFNGLFRAMEBUFFERTEXTUREPROC, glFramebufferTexture); \
HookExtensionAlias(PFNGLFRAMEBUFFERTEXTUREPROC, glFramebufferTexture, glFramebufferTextureARB); \
HookExtension(PFNGLTEXIMAGE2DMULTISAMPLEPROC, glTexImage2DMultisample); \
HookExtension(PFNGLTEXIMAGE3DMULTISAMPLEPROC, glTexImage3DMultisample); \
HookExtension(PFNGLGETMULTISAMPLEFVPROC, glGetMultisamplefv); \
@@ -542,6 +544,7 @@
HookExtension(PFNGLGETPROGRAMBINARYPROC, glGetProgramBinary); \
HookExtension(PFNGLPROGRAMBINARYPROC, glProgramBinary); \
HookExtension(PFNGLPROGRAMPARAMETERIPROC, glProgramParameteri); \
HookExtensionAlias(PFNGLPROGRAMPARAMETERIPROC, glProgramParameteri, glProgramParameteriARB); \
HookExtension(PFNGLUSEPROGRAMSTAGESPROC, glUseProgramStages); \
HookExtension(PFNGLACTIVESHADERPROGRAMPROC, glActiveShaderProgram); \
HookExtension(PFNGLCREATESHADERPROGRAMVPROC, glCreateShaderProgramv); \
@@ -739,6 +742,7 @@
HookExtension(PFNGLREADNPIXELSPROC, glReadnPixels); \
HookExtensionAlias(PFNGLREADNPIXELSPROC, glReadnPixels, glReadnPixelsARB); \
HookExtension(PFNGLTEXTUREBARRIERPROC, glTextureBarrier); \
HookExtension(PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC, glDispatchComputeGroupSizeARB); \
HookExtension(PFNGLBLENDBARRIERKHRPROC, glBlendBarrierKHR); \
HookExtension(PFNGLDEPTHBOUNDSEXTPROC, glDepthBoundsEXT); \
HookExtension(PFNGLTEXTUREPARAMETERFEXTPROC, glTextureParameterfEXT); \
@@ -1514,6 +1518,7 @@
HookWrapper4(void, glGetnUniformuiv, GLuint, program, GLint, location, GLsizei, bufSize, GLuint *, params); \
HookWrapper8(void, glReadnPixels, GLint, x, GLint, y, GLsizei, width, GLsizei, height, GLenum, format, GLenum, type, GLsizei, bufSize, void *, data); \
HookWrapper0(void, glTextureBarrier); \
HookWrapper6(void, glDispatchComputeGroupSizeARB, GLuint, num_groups_x, GLuint, num_groups_y, GLuint, num_groups_z, GLuint, group_size_x, GLuint, group_size_y, GLuint, group_size_z); \
HookWrapper0(void, glBlendBarrierKHR); \
HookWrapper2(void, glDepthBoundsEXT, GLclampd, zmin, GLclampd, zmax); \
HookWrapper4(void, glTextureParameterfEXT, GLuint, texture, GLenum, target, GLenum, pname, GLfloat, param); \
@@ -1738,7 +1743,6 @@
HookWrapper2(void, glvertexattribl1ui64varb, GLuint, index, const GLuint64EXT *, v); \
HookWrapper3(void, glgetvertexattriblui64varb, GLuint, index, GLenum, pname, GLuint64EXT *, params); \
HookWrapper3(GLsync, glcreatesyncfromcleventarb, struct _cl_context *, context, struct _cl_event *, event, GLbitfield, flags); \
HookWrapper6(void, gldispatchcomputegroupsizearb, GLuint, num_groups_x, GLuint, num_groups_y, GLuint, num_groups_z, GLuint, group_size_x, GLuint, group_size_y, GLuint, group_size_z); \
HookWrapper5(void, glmultidrawarraysindirectcountarb, GLenum, mode, GLintptr, indirect, GLintptr, drawcount, GLsizei, maxdrawcount, GLsizei, stride); \
HookWrapper6(void, glmultidrawelementsindirectcountarb, GLenum, mode, GLenum, type, GLintptr, indirect, GLintptr, drawcount, GLsizei, maxdrawcount, GLsizei, stride); \
HookWrapper5(void, glnamedstringarb, GLenum, type, GLint, namelen, const GLchar *, name, GLint, stringlen, const GLchar *, string); \
@@ -1887,9 +1891,6 @@
HookWrapper3(void, glgetprogramivarb, GLenum, target, GLenum, pname, GLint *, params); \
HookWrapper3(void, glgetprogramstringarb, GLenum, target, GLenum, pname, void *, string); \
HookWrapper1(GLboolean, glisprogramarb, GLuint, program); \
HookWrapper3(void, glprogramparameteriarb, GLuint, program, GLenum, pname, GLint, value); \
HookWrapper4(void, glframebuffertexturearb, GLenum, target, GLenum, attachment, GLuint, texture, GLint, level); \
HookWrapper5(void, glframebuffertexturelayerarb, GLenum, target, GLenum, attachment, GLuint, texture, GLint, level, GLint, layer); \
HookWrapper5(void, glframebuffertexturefacearb, GLenum, target, GLenum, attachment, GLuint, texture, GLint, level, GLenum, face); \
HookWrapper6(void, glcolortable, GLenum, target, GLenum, internalformat, GLsizei, width, GLenum, format, GLenum, type, const void *, table); \
HookWrapper3(void, glcolortableparameterfv, GLenum, target, GLenum, pname, const GLfloat *, params); \
@@ -3432,7 +3433,6 @@
HandleUnsupported(PFNGLVERTEXATTRIBL1UI64VARBPROC, glvertexattribl1ui64varb); \
HandleUnsupported(PFNGLGETVERTEXATTRIBLUI64VARBPROC, glgetvertexattriblui64varb); \
HandleUnsupported(PFNGLCREATESYNCFROMCLEVENTARBPROC, glcreatesyncfromcleventarb); \
HandleUnsupported(PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC, gldispatchcomputegroupsizearb); \
HandleUnsupported(PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC, glmultidrawarraysindirectcountarb); \
HandleUnsupported(PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC, glmultidrawelementsindirectcountarb); \
HandleUnsupported(PFNGLNAMEDSTRINGARBPROC, glnamedstringarb); \
@@ -3581,9 +3581,6 @@
HandleUnsupported(PFNGLGETPROGRAMIVARBPROC, glgetprogramivarb); \
HandleUnsupported(PFNGLGETPROGRAMSTRINGARBPROC, glgetprogramstringarb); \
HandleUnsupported(PFNGLISPROGRAMARBPROC, glisprogramarb); \
HandleUnsupported(PFNGLPROGRAMPARAMETERIARBPROC, glprogramparameteriarb); \
HandleUnsupported(PFNGLFRAMEBUFFERTEXTUREARBPROC, glframebuffertexturearb); \
HandleUnsupported(PFNGLFRAMEBUFFERTEXTURELAYERARBPROC, glframebuffertexturelayerarb); \
HandleUnsupported(PFNGLFRAMEBUFFERTEXTUREFACEARBPROC, glframebuffertexturefacearb); \
HandleUnsupported(PFNGLCOLORTABLEPROC, glcolortable); \
HandleUnsupported(PFNGLCOLORTABLEPARAMETERFVPROC, glcolortableparameterfv); \
@@ -74,6 +74,60 @@ void WrappedOpenGL::glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y,
}
}
bool WrappedOpenGL::Serialise_glDispatchComputeGroupSizeARB(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z)
{
SERIALISE_ELEMENT(uint32_t, X, num_groups_x);
SERIALISE_ELEMENT(uint32_t, Y, num_groups_y);
SERIALISE_ELEMENT(uint32_t, Z, num_groups_z);
SERIALISE_ELEMENT(uint32_t, sX, group_size_x);
SERIALISE_ELEMENT(uint32_t, sY, group_size_y);
SERIALISE_ELEMENT(uint32_t, sZ, group_size_z);
if(m_State <= EXECUTING)
{
m_Real.glDispatchComputeGroupSizeARB(X, Y, Z, sX, sY, sZ);
}
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
if(m_State == READING)
{
AddEvent(DISPATCH_COMPUTE, desc);
string name = "glDispatchComputeGroupSizeARB(" +
ToStr::Get(X) + ", " +
ToStr::Get(Y) + ", " +
ToStr::Get(Z) + ", " +
ToStr::Get(sX) + ", " +
ToStr::Get(sY) + ", " +
ToStr::Get(sZ) + ")";
FetchDrawcall draw;
draw.name = name;
draw.flags |= eDraw_Dispatch;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
return true;
}
void WrappedOpenGL::glDispatchComputeGroupSizeARB(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z)
{
m_Real.glDispatchComputeGroupSizeARB(num_groups_x, num_groups_y, num_groups_z, group_size_x, group_size_y, group_size_z);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(DISPATCH_COMPUTE_GROUP_SIZE);
Serialise_glDispatchComputeGroupSizeARB(num_groups_x, num_groups_y, num_groups_z, group_size_x, group_size_y, group_size_z);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glDispatchComputeIndirect(GLintptr indirect)
{
SERIALISE_ELEMENT(uint64_t, offs, indirect);