Add glMemoryBarrierByRegion and glTextureBarrier

This commit is contained in:
baldurk
2014-11-25 21:16:56 +00:00
parent 67140ee100
commit eccde9c8b6
6 changed files with 66 additions and 0 deletions
+2
View File
@@ -237,6 +237,8 @@ enum GLChunkType
DISPATCH_COMPUTE,
DISPATCH_COMPUTE_INDIRECT,
MEMORY_BARRIER,
MEMORY_BARRIER_BY_REGION,
TEXTURE_BARRIER,
DRAWARRAYS,
DRAWARRAYS_INDIRECT,
DRAWARRAYS_INSTANCED,
+8
View File
@@ -182,6 +182,8 @@ const char *GLChunkNames[] =
"glDispatchCompute",
"glDispatchComputeIndirect",
"glMemoryBarrier",
"glMemoryBarrierByRegion",
"glTextureBarrier",
"glDrawArrays",
"glDrawArraysIndirect",
"glDrawArraysInstanced",
@@ -1973,6 +1975,12 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
case MEMORY_BARRIER:
Serialise_glMemoryBarrier(0);
break;
case MEMORY_BARRIER_BY_REGION:
Serialise_glMemoryBarrierByRegion(0);
break;
case TEXTURE_BARRIER:
Serialise_glTextureBarrier();
break;
case DRAWARRAYS:
Serialise_glDrawArrays(eGL_NONE, 0, 0);
break;
+2
View File
@@ -545,6 +545,8 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z));
IMPLEMENT_FUNCTION_SERIALISED(void, glDispatchComputeIndirect(GLintptr indirect));
IMPLEMENT_FUNCTION_SERIALISED(void, glMemoryBarrier(GLbitfield barriers));
IMPLEMENT_FUNCTION_SERIALISED(void, glMemoryBarrierByRegion(GLbitfield barriers));
IMPLEMENT_FUNCTION_SERIALISED(void, glTextureBarrier());
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));
+2
View File
@@ -451,6 +451,8 @@ struct GLHookSet
PFNGLDISPATCHCOMPUTEPROC glDispatchCompute;
PFNGLDISPATCHCOMPUTEINDIRECTPROC glDispatchComputeIndirect;
PFNGLMEMORYBARRIERPROC glMemoryBarrier;
PFNGLMEMORYBARRIERBYREGIONPROC glMemoryBarrierByRegion;
PFNGLTEXTUREBARRIERPROC glTextureBarrier;
PFNGLCLEARDEPTHFPROC glClearDepthf;
PFNGLCLEARBUFFERFVPROC glClearBufferfv;
PFNGLCLEARBUFFERIVPROC glClearBufferiv;
+4
View File
@@ -483,6 +483,8 @@
HookExtension(PFNGLDISPATCHCOMPUTEPROC, glDispatchCompute); \
HookExtension(PFNGLDISPATCHCOMPUTEINDIRECTPROC, glDispatchComputeIndirect); \
HookExtension(PFNGLMEMORYBARRIERPROC, glMemoryBarrier); \
HookExtension(PFNGLMEMORYBARRIERBYREGIONPROC, glMemoryBarrierByRegion); \
HookExtension(PFNGLTEXTUREBARRIERPROC, glTextureBarrier); \
HookExtension(PFNGLCLEARDEPTHFPROC, glClearDepthf); \
HookExtension(PFNGLCLEARBUFFERFVPROC, glClearBufferfv); \
HookExtension(PFNGLCLEARBUFFERIVPROC, glClearBufferiv); \
@@ -1156,6 +1158,8 @@
HookWrapper3(void, glDispatchCompute, GLuint, num_groups_x, GLuint, num_groups_y, GLuint, num_groups_z); \
HookWrapper1(void, glDispatchComputeIndirect, GLintptr, indirect); \
HookWrapper1(void, glMemoryBarrier, GLbitfield, barriers); \
HookWrapper1(void, glMemoryBarrierByRegion, GLbitfield, barriers); \
HookWrapper0(void, glTextureBarrier); \
HookWrapper1(void, glClearDepthf, GLfloat, d); \
HookWrapper3(void, glClearBufferfv, GLenum, buffer, GLint, drawbuffer, const GLfloat *, value); \
HookWrapper3(void, glClearBufferiv, GLenum, buffer, GLint, drawbuffer, const GLint *, value); \
@@ -147,6 +147,54 @@ void WrappedOpenGL::glMemoryBarrier(GLbitfield barriers)
}
}
bool WrappedOpenGL::Serialise_glMemoryBarrierByRegion(GLbitfield barriers)
{
SERIALISE_ELEMENT(uint32_t, Barriers, barriers);
if(m_State <= EXECUTING)
{
m_Real.glMemoryBarrierByRegion(Barriers);
}
return true;
}
void WrappedOpenGL::glMemoryBarrierByRegion(GLbitfield barriers)
{
m_Real.glMemoryBarrierByRegion(barriers);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(MEMORY_BARRIER_BY_REGION);
Serialise_glMemoryBarrierByRegion(barriers);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glTextureBarrier()
{
if(m_State <= EXECUTING)
{
m_Real.glTextureBarrier();
}
return true;
}
void WrappedOpenGL::glTextureBarrier()
{
m_Real.glTextureBarrier();
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(TEXTURE_BARRIER);
Serialise_glTextureBarrier();
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glDrawArrays(GLenum mode, GLint first, GLsizei count)
{
SERIALISE_ELEMENT(GLenum, Mode, mode);