Add other BaseVertex variants of glDrawElements*, and glDrawRangeElements

This commit is contained in:
Baldur Karlsson
2014-06-17 17:03:55 +01:00
parent 272fa3d2b7
commit b659c734a1
6 changed files with 217 additions and 12 deletions
+3
View File
@@ -163,9 +163,12 @@ enum GLChunkType
DRAWARRAYS_INSTANCED,
DRAWARRAYS_INSTANCEDBASEINSTANCE,
DRAWELEMENTS,
DRAWRANGEELEMENTS,
DRAWELEMENTS_INSTANCED,
DRAWELEMENTS_INSTANCEDBASEINSTANCE,
DRAWELEMENTS_BASEVERTEX,
DRAWELEMENTS_INSTANCEDBASEVERTEX,
DRAWELEMENTS_INSTANCEDBASEVERTEXBASEINSTANCE,
GEN_FRAMEBUFFERS,
FRAMEBUFFER_TEX,
+184 -4
View File
@@ -1112,7 +1112,7 @@ bool WrappedOpenGL::Serialise_glDrawElements(GLenum mode, GLsizei count, GLenum
ToStr::Get(Mode) + ", " +
ToStr::Get(Count) + ", " +
ToStr::Get(Type) + ", " +
ToStr::Get(IdxOffset) + ", " + ")";
ToStr::Get(IdxOffset) + ")";
FetchDrawcall draw;
draw.name = widen(name);
@@ -1147,6 +1147,64 @@ void WrappedOpenGL::glDrawElements(GLenum mode, GLsizei count, GLenum type, cons
}
}
bool WrappedOpenGL::Serialise_glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices)
{
SERIALISE_ELEMENT(GLenum, Mode, mode);
SERIALISE_ELEMENT(uint32_t, Start, start);
SERIALISE_ELEMENT(uint32_t, End, end);
SERIALISE_ELEMENT(uint32_t, Count, count);
SERIALISE_ELEMENT(GLenum, Type, type);
SERIALISE_ELEMENT(uint64_t, IdxOffset, (uint64_t)indices);
if(m_State <= EXECUTING)
{
m_Real.glDrawRangeElements(Mode, Start, End, Count, Type, (const void *)IdxOffset);
}
const string desc = m_pSerialiser->GetDebugStr();
if(m_State == READING)
{
AddEvent(DRAWELEMENTS, desc);
string name = "glDrawRangeElements(" +
ToStr::Get(Mode) + ", " +
ToStr::Get(Count) + ", " +
ToStr::Get(Type) + ", " +
ToStr::Get(IdxOffset) + ")";
FetchDrawcall draw;
draw.name = widen(name);
draw.numIndices = Count;
draw.numInstances = 1;
draw.indexOffset = (uint32_t)IdxOffset;
draw.vertexOffset = 0;
draw.instanceOffset = 0;
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
m_LastDrawMode = Mode;
m_LastIndexSize = Type;
m_LastIndexOffset = (GLuint)IdxOffset;
AddDrawcall(draw, true);
}
return true;
}
void WrappedOpenGL::glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices)
{
m_Real.glDrawRangeElements(mode, start, end, count, type, indices);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(DRAWRANGEELEMENTS);
Serialise_glDrawRangeElements(mode, start, end, count, type, indices);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex)
{
SERIALISE_ELEMENT(GLenum, Mode, mode);
@@ -1170,7 +1228,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsBaseVertex(GLenum mode, GLsizei coun
ToStr::Get(Count) + ", " +
ToStr::Get(Type) + ", " +
ToStr::Get(IdxOffset) + ", " +
ToStr::Get(BaseVtx) + ", " + ")";
ToStr::Get(BaseVtx) + ")";
FetchDrawcall draw;
draw.name = widen(name);
@@ -1228,7 +1286,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstanced(GLenum mode, GLsizei count
ToStr::Get(Count) + ", " +
ToStr::Get(Type) + ", " +
ToStr::Get(IdxOffset) + ", " +
ToStr::Get(InstCount) + ", " + ")";
ToStr::Get(InstCount) + ")";
FetchDrawcall draw;
draw.name = widen(name);
@@ -1288,7 +1346,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseInstance(GLenum mode, G
ToStr::Get(Type) + ", " +
ToStr::Get(IdxOffset) + ", " +
ToStr::Get(InstCount) + ", " +
ToStr::Get(BaseInstance) + ", " + ")";
ToStr::Get(BaseInstance) + ")";
FetchDrawcall draw;
draw.name = widen(name);
@@ -1323,6 +1381,128 @@ void WrappedOpenGL::glDrawElementsInstancedBaseInstance(GLenum mode, GLsizei cou
}
}
bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex)
{
SERIALISE_ELEMENT(GLenum, Mode, mode);
SERIALISE_ELEMENT(uint32_t, Count, count);
SERIALISE_ELEMENT(GLenum, Type, type);
SERIALISE_ELEMENT(uint64_t, IdxOffset, (uint64_t)indices);
SERIALISE_ELEMENT(uint32_t, InstCount, instancecount);
SERIALISE_ELEMENT(int32_t, BaseVertex, basevertex);
if(m_State <= EXECUTING)
{
m_Real.glDrawElementsInstancedBaseVertex(Mode, Count, Type, (const void *)IdxOffset, InstCount, BaseVertex);
}
const string desc = m_pSerialiser->GetDebugStr();
if(m_State == READING)
{
AddEvent(DRAWELEMENTS_INSTANCEDBASEVERTEX, desc);
string name = "glDrawElementsInstancedBaseVertex(" +
ToStr::Get(Mode) + ", " +
ToStr::Get(Count) + ", " +
ToStr::Get(Type) + ", " +
ToStr::Get(IdxOffset) + ", " +
ToStr::Get(InstCount) + ", " +
ToStr::Get(BaseVertex) + ")";
FetchDrawcall draw;
draw.name = widen(name);
draw.numIndices = Count;
draw.numInstances = InstCount;
draw.indexOffset = (uint32_t)IdxOffset;
draw.vertexOffset = BaseVertex;
draw.instanceOffset = 0;
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
m_LastDrawMode = Mode;
m_LastIndexSize = Type;
m_LastIndexOffset = (GLuint)IdxOffset;
AddDrawcall(draw, true);
}
return true;
}
void WrappedOpenGL::glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex)
{
m_Real.glDrawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(DRAWELEMENTS_INSTANCEDBASEVERTEX);
Serialise_glDrawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertexBaseInstance(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance)
{
SERIALISE_ELEMENT(GLenum, Mode, mode);
SERIALISE_ELEMENT(uint32_t, Count, count);
SERIALISE_ELEMENT(GLenum, Type, type);
SERIALISE_ELEMENT(uint64_t, IdxOffset, (uint64_t)indices);
SERIALISE_ELEMENT(uint32_t, InstCount, instancecount);
SERIALISE_ELEMENT(int32_t, BaseVertex, basevertex);
SERIALISE_ELEMENT(uint32_t, BaseInstance, baseinstance);
if(m_State <= EXECUTING)
{
m_Real.glDrawElementsInstancedBaseVertexBaseInstance(Mode, Count, Type, (const void *)IdxOffset, InstCount, BaseVertex, BaseInstance);
}
const string desc = m_pSerialiser->GetDebugStr();
if(m_State == READING)
{
AddEvent(DRAWELEMENTS_INSTANCEDBASEVERTEXBASEINSTANCE, desc);
string name = "glDrawElementsInstancedBaseVertexBaseInstance(" +
ToStr::Get(Mode) + ", " +
ToStr::Get(Count) + ", " +
ToStr::Get(Type) + ", " +
ToStr::Get(IdxOffset) + ", " +
ToStr::Get(InstCount) + ", " +
ToStr::Get(BaseVertex) + ", " +
ToStr::Get(BaseInstance) + ")";
FetchDrawcall draw;
draw.name = widen(name);
draw.numIndices = Count;
draw.numInstances = InstCount;
draw.indexOffset = (uint32_t)IdxOffset;
draw.vertexOffset = BaseVertex;
draw.instanceOffset = BaseInstance;
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
m_LastDrawMode = Mode;
m_LastIndexSize = Type;
m_LastIndexOffset = (GLuint)IdxOffset;
AddDrawcall(draw, true);
}
return true;
}
void WrappedOpenGL::glDrawElementsInstancedBaseVertexBaseInstance(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance)
{
m_Real.glDrawElementsInstancedBaseVertexBaseInstance(mode, count, type, indices, instancecount, basevertex, baseinstance);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(DRAWELEMENTS_INSTANCEDBASEVERTEXBASEINSTANCE);
Serialise_glDrawElementsInstancedBaseVertexBaseInstance(mode, count, type, indices, instancecount, basevertex, baseinstance);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
{
SERIALISE_ELEMENT(GLenum, buf, buffer);
+11 -2
View File
@@ -120,9 +120,12 @@ const char *GLChunkNames[] =
"glDrawArraysInstanced",
"glDrawArraysInstancedBaseInstance",
"glDrawElements",
"glDrawRangeElements",
"glDrawElementsInstanced",
"glDrawElementsInstancedBaseInstance",
"glDrawElementsBaseVertex",
"glDrawElementsInstancedBaseVertex",
"glDrawElementsInstancedBaseVertexBaseInstance",
"glGenFramebuffers",
"glFramebufferTexture",
"glReadBuffer",
@@ -1197,14 +1200,20 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
case DRAWELEMENTS:
Serialise_glDrawElements(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL);
break;
case DRAWELEMENTS_BASEVERTEX:
Serialise_glDrawElementsBaseVertex(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL, 0);
break;
case DRAWELEMENTS_INSTANCED:
Serialise_glDrawElementsInstanced(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL, 0);
break;
case DRAWELEMENTS_INSTANCEDBASEINSTANCE:
Serialise_glDrawElementsInstancedBaseInstance(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL, 0, 0);
break;
case DRAWELEMENTS_BASEVERTEX:
Serialise_glDrawElementsBaseVertex(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL, 0);
case DRAWELEMENTS_INSTANCEDBASEVERTEX:
Serialise_glDrawElementsInstancedBaseVertex(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL, 0, 0);
break;
case DRAWELEMENTS_INSTANCEDBASEVERTEXBASEINSTANCE:
Serialise_glDrawElementsInstancedBaseVertexBaseInstance(eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, NULL, 0, 0, 0);
break;
case GEN_BUFFER:
+3
View File
@@ -450,9 +450,12 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount));
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawArraysInstancedBaseInstance(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance));
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices));
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices));
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex));
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount));
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsInstancedBaseInstance(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance));
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex));
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsInstancedBaseVertexBaseInstance(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance));
IMPLEMENT_FUNCTION_SERIALISED(void, glDeleteBuffers(GLsizei n, const GLuint *buffers));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, void *data));
IMPLEMENT_FUNCTION_SERIALISED(void, glDeleteVertexArrays(GLsizei n, const GLuint *arrays));
+4 -1
View File
@@ -42,6 +42,7 @@ struct GLHookSet
PFNGLDEPTHMASKPROC glDepthMask;
PFNGLDISABLEPROC glDisable;
PFNGLDRAWBUFFERPROC glDrawBuffer;
PFNGLDRAWELEMENTSPROC glDrawElements;
PFNGLDRAWARRAYSPROC glDrawArrays;
PFNGLENABLEPROC glEnable;
PFNGLFLUSHPROC glFlush;
@@ -206,12 +207,14 @@ struct GLHookSet
PFNGLUNIFORM2FVPROC glUniform2fv;
PFNGLUNIFORM3FVPROC glUniform3fv;
PFNGLUNIFORM4FVPROC glUniform4fv;
PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance;
PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
PFNGLDRAWELEMENTSPROC glDrawElements;
PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glDrawElementsInstancedBaseInstance;
PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex;
PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance;
PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
// --
+12 -5
View File
@@ -42,6 +42,7 @@
HookInit(glDepthMask); \
HookInit(glDisable); \
HookInit(glDrawBuffer); \
HookInit(glDrawElements); \
HookInit(glDrawArrays); \
HookInit(glEnable); \
HookInit(glFlush); \
@@ -218,12 +219,14 @@
HookExtension(PFNGLUNIFORM2FVPROC, glUniform2fv); \
HookExtension(PFNGLUNIFORM3FVPROC, glUniform3fv); \
HookExtension(PFNGLUNIFORM4FVPROC, glUniform4fv); \
HookExtension(PFNGLDRAWRANGEELEMENTSPROC, glDrawRangeElements); \
HookExtension(PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC, glDrawArraysInstancedBaseInstance); \
HookExtension(PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced); \
HookExtension(PFNGLDRAWELEMENTSPROC, glDrawElements); \
HookExtension(PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstanced); \
HookExtension(PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC, glDrawElementsInstancedBaseInstance); \
HookExtension(PFNGLDRAWELEMENTSBASEVERTEXPROC, glDrawElementsBaseVertex); \
HookExtension(PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC, glDrawElementsInstancedBaseVertex); \
HookExtension(PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC, glDrawElementsInstancedBaseVertexBaseInstance); \
HookExtension(PFNGLBLITFRAMEBUFFERPROC, glBlitFramebuffer); \
HookExtension(PFNGLBINDTEXTUREPROC, glBindTexture); \
HookExtension(PFNGLBLENDFUNCPROC, glBlendFunc); \
@@ -236,6 +239,7 @@
HookExtension(PFNGLDEPTHMASKPROC, glDepthMask); \
HookExtension(PFNGLDISABLEPROC, glDisable); \
HookExtension(PFNGLDRAWBUFFERPROC, glDrawBuffer); \
HookExtension(PFNGLDRAWELEMENTSPROC, glDrawElements); \
HookExtension(PFNGLDRAWARRAYSPROC, glDrawArrays); \
HookExtension(PFNGLENABLEPROC, glEnable); \
HookExtension(PFNGLFLUSHPROC, glFlush); \
@@ -300,6 +304,7 @@
HookWrapper1(void, glDepthMask, GLboolean, flag); \
HookWrapper1(void, glDisable, GLenum, cap); \
HookWrapper1(void, glDrawBuffer, GLenum, mode); \
HookWrapper4(void, glDrawElements, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices); \
HookWrapper3(void, glDrawArrays, GLenum, mode, GLint, first, GLsizei, count); \
HookWrapper1(void, glEnable, GLenum, cap); \
HookWrapper0(void, glFlush); \
@@ -388,10 +393,10 @@
HookWrapper2(void, glBlendEquationSeparate, GLenum, modeRGB, GLenum, modeAlpha); \
HookWrapper3(void, glBlendEquationSeparatei, GLuint, buf, GLenum, modeRGB, GLenum, modeAlpha); \
HookWrapper5(void, glColorMaski, GLuint, index, GLboolean, r, GLboolean, g, GLboolean, b, GLboolean, a); \
HookWrapper2(void, glDepthRange, GLdouble, nearVal, GLdouble, farVal); \
HookWrapper2(void, glDepthRangef, GLfloat, nearVal, GLfloat, farVal); \
HookWrapper2(void, glDepthRange, GLdouble, near, GLdouble, far); \
HookWrapper2(void, glDepthRangef, GLfloat, n, GLfloat, f); \
HookWrapper3(void, glDepthRangeArrayv, GLuint, first, GLsizei, count, const GLdouble *, v); \
HookWrapper2(void, glDepthBoundsEXT, GLclampd, nearVal, GLclampd, farVal); \
HookWrapper2(void, glDepthBoundsEXT, GLclampd, zmin, GLclampd, zmax); \
HookWrapper1(GLuint, glCreateShader, GLenum, type); \
HookWrapper1(void, glDeleteShader, GLuint, shader); \
HookWrapper4(void, glShaderSource, GLuint, shader, GLsizei, count, const GLchar *const*, string, const GLint *, length); \
@@ -475,12 +480,14 @@
HookWrapper3(void, glUniform2fv, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper3(void, glUniform3fv, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper3(void, glUniform4fv, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper6(void, glDrawRangeElements, GLenum, mode, GLuint, start, GLuint, end, GLsizei, count, GLenum, type, const void *, indices); \
HookWrapper5(void, glDrawArraysInstancedBaseInstance, GLenum, mode, GLint, first, GLsizei, count, GLsizei, instancecount, GLuint, baseinstance); \
HookWrapper4(void, glDrawArraysInstanced, GLenum, mode, GLint, first, GLsizei, count, GLsizei, instancecount); \
HookWrapper4(void, glDrawElements, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices); \
HookWrapper5(void, glDrawElementsInstanced, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices, GLsizei, instancecount); \
HookWrapper6(void, glDrawElementsInstancedBaseInstance, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices, GLsizei, instancecount, GLuint, baseinstance); \
HookWrapper5(void, glDrawElementsBaseVertex, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices, GLint, basevertex); \
HookWrapper6(void, glDrawElementsInstancedBaseVertex, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices, GLsizei, instancecount, GLint, basevertex); \
HookWrapper7(void, glDrawElementsInstancedBaseVertexBaseInstance, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices, GLsizei, instancecount, GLint, basevertex, GLuint, baseinstance); \
HookWrapper10(void, glBlitFramebuffer, GLint, srcX0, GLint, srcY0, GLint, srcX1, GLint, srcY1, GLint, dstX0, GLint, dstY0, GLint, dstX1, GLint, dstY1, GLbitfield, mask, GLenum, filter); \