Implement glMemoryBarrier

This commit is contained in:
baldurk
2014-11-02 19:52:58 +00:00
parent dcc9937bed
commit bb87949c89
6 changed files with 34 additions and 0 deletions
+1
View File
@@ -188,6 +188,7 @@ enum GLChunkType
UNIFORM_MATRIX,
UNIFORM_VECTOR,
DISPATCH_COMPUTE,
MEMORY_BARRIER,
DRAWARRAYS,
DRAWARRAYS_INSTANCED,
DRAWARRAYS_INSTANCEDBASEINSTANCE,
+4
View File
@@ -141,6 +141,7 @@ const char *GLChunkNames[] =
"glUniformMatrix*",
"glUniformVector*",
"glDispatchCompute",
"glMemoryBarrier",
"glDrawArrays",
"glDrawArraysInstanced",
"glDrawArraysInstancedBaseInstance",
@@ -1708,6 +1709,9 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
case DISPATCH_COMPUTE:
Serialise_glDispatchCompute(0, 0, 0);
break;
case MEMORY_BARRIER:
Serialise_glMemoryBarrier(0);
break;
case DRAWARRAYS:
Serialise_glDrawArrays(eGL_NONE, 0, 0);
break;
+1
View File
@@ -521,6 +521,7 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(GLboolean, glUnmapBuffer(GLenum target));
IMPLEMENT_FUNCTION_SERIALISED(void, glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z));
IMPLEMENT_FUNCTION_SERIALISED(void, glMemoryBarrier(GLbitfield barriers));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value));
+1
View File
@@ -232,6 +232,7 @@ struct GLHookSet
PFNGLPATCHPARAMETERIPROC glPatchParameteri;
PFNGLPATCHPARAMETERFVPROC glPatchParameterfv;
PFNGLDISPATCHCOMPUTEPROC glDispatchCompute;
PFNGLMEMORYBARRIERPROC glMemoryBarrier;
PFNGLCLEARBUFFERFVPROC glClearBufferfv;
PFNGLCLEARBUFFERIVPROC glClearBufferiv;
PFNGLCLEARBUFFERUIVPROC glClearBufferuiv;
+2
View File
@@ -246,6 +246,7 @@
HookExtension(PFNGLPATCHPARAMETERIPROC, glPatchParameteri); \
HookExtension(PFNGLPATCHPARAMETERFVPROC, glPatchParameterfv); \
HookExtension(PFNGLDISPATCHCOMPUTEPROC, glDispatchCompute); \
HookExtension(PFNGLMEMORYBARRIERPROC, glMemoryBarrier); \
HookExtension(PFNGLCLEARBUFFERFVPROC, glClearBufferfv); \
HookExtension(PFNGLCLEARBUFFERIVPROC, glClearBufferiv); \
HookExtension(PFNGLCLEARBUFFERUIVPROC, glClearBufferuiv); \
@@ -598,6 +599,7 @@
HookWrapper2(void, glPatchParameteri, GLenum, pname, GLint, value); \
HookWrapper2(void, glPatchParameterfv, GLenum, pname, const GLfloat *, values); \
HookWrapper3(void, glDispatchCompute, GLuint, num_groups_x, GLuint, num_groups_y, GLuint, num_groups_z); \
HookWrapper1(void, glMemoryBarrier, GLbitfield, barriers); \
HookWrapper3(void, glClearBufferfv, GLenum, buffer, GLint, drawbuffer, const GLfloat *, value); \
HookWrapper3(void, glClearBufferiv, GLenum, buffer, GLint, drawbuffer, const GLint *, value); \
HookWrapper3(void, glClearBufferuiv, GLenum, buffer, GLint, drawbuffer, const GLuint *, value); \
@@ -74,6 +74,31 @@ void WrappedOpenGL::glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y,
}
}
bool WrappedOpenGL::Serialise_glMemoryBarrier(GLbitfield barriers)
{
SERIALISE_ELEMENT(uint32_t, Barriers, barriers);
if(m_State <= EXECUTING)
{
m_Real.glMemoryBarrier(Barriers);
}
return true;
}
void WrappedOpenGL::glMemoryBarrier(GLbitfield barriers)
{
m_Real.glMemoryBarrier(barriers);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(MEMORY_BARRIER);
Serialise_glMemoryBarrier(barriers);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glDrawArrays(GLenum mode, GLint first, GLsizei count)
{
SERIALISE_ELEMENT(GLenum, Mode, mode);