Implement glShaderStorageBlockBinding

This commit is contained in:
baldurk
2014-11-11 22:54:56 +00:00
parent c0fb5fa8ac
commit b8f74610b4
6 changed files with 40 additions and 0 deletions
+1
View File
@@ -138,6 +138,7 @@ enum GLChunkType
BINDATTRIB_LOCATION,
BINDFRAGDATA_LOCATION,
UNIFORM_BLOCKBIND,
STORAGE_BLOCKBIND,
PROGRAMUNIFORM_VECTOR,
PROGRAMUNIFORM_MATRIX,
LINKPROGRAM,
+4
View File
@@ -91,6 +91,7 @@ const char *GLChunkNames[] =
"glBindAttribLocation",
"glBindFragDataLocation",
"glUniformBlockBinding",
"glShaderStorageBlockBinding",
"glProgramUniformMatrix*",
"glProgramUniformVector*",
"glLinkProgram",
@@ -1680,6 +1681,9 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
case UNIFORM_BLOCKBIND:
Serialise_glUniformBlockBinding(0, 0, 0);
break;
case STORAGE_BLOCKBIND:
Serialise_glShaderStorageBlockBinding(0, 0, 0);
break;
case PROGRAMUNIFORM_VECTOR:
Serialise_glProgramUniformVector(0, eGL_NONE, 0, 0, UNIFORM_UNKNOWN);
break;
+1
View File
@@ -495,6 +495,7 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glLinkProgram(GLuint program));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramParameteri(GLuint program, GLenum pname, GLint value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding));
IMPLEMENT_FUNCTION_SERIALISED(void, glShaderStorageBlockBinding(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding));
IMPLEMENT_FUNCTION_SERIALISED(void, glBindAttribLocation(GLuint program, GLuint index, const GLchar *name));
IMPLEMENT_FUNCTION_SERIALISED(void, glBindFragDataLocation(GLuint program, GLuint color, const GLchar *name));
IMPLEMENT_FUNCTION_SERIALISED(void, glUseProgram(GLuint program));
+1
View File
@@ -447,6 +447,7 @@ struct GLHookSet
PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv;
PFNGLVIEWPORTARRAYVPROC glViewportArrayv;
PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
PFNGLSHADERSTORAGEBLOCKBINDINGPROC glShaderStorageBlockBinding;
PFNGLUNIFORM1FPROC glUniform1f;
PFNGLUNIFORM1IPROC glUniform1i;
PFNGLUNIFORM1UIPROC glUniform1ui;
+2
View File
@@ -466,6 +466,7 @@
HookExtension(PFNGLVIEWPORTINDEXEDFVPROC, glViewportIndexedfv); \
HookExtension(PFNGLVIEWPORTARRAYVPROC, glViewportArrayv); \
HookExtension(PFNGLUNIFORMBLOCKBINDINGPROC, glUniformBlockBinding); \
HookExtension(PFNGLSHADERSTORAGEBLOCKBINDINGPROC, glShaderStorageBlockBinding); \
HookExtension(PFNGLUNIFORM1FPROC, glUniform1f); \
HookExtension(PFNGLUNIFORM1IPROC, glUniform1i); \
HookExtension(PFNGLUNIFORM1UIPROC, glUniform1ui); \
@@ -1101,6 +1102,7 @@
HookWrapper2(void, glViewportIndexedfv, GLuint, index, const GLfloat *, v); \
HookWrapper3(void, glViewportArrayv, GLuint, first, GLsizei, count, const GLfloat *, v); \
HookWrapper3(void, glUniformBlockBinding, GLuint, program, GLuint, uniformBlockIndex, GLuint, uniformBlockBinding); \
HookWrapper3(void, glShaderStorageBlockBinding, GLuint, program, GLuint, storageBlockIndex, GLuint, storageBlockBinding); \
HookWrapper2(void, glUniform1f, GLint, location, GLfloat, v0); \
HookWrapper2(void, glUniform1i, GLint, location, GLint, v0); \
HookWrapper2(void, glUniform1ui, GLint, location, GLuint, v0); \
@@ -506,6 +506,37 @@ void WrappedOpenGL::glUniformBlockBinding(GLuint program, GLuint uniformBlockInd
}
}
bool WrappedOpenGL::Serialise_glShaderStorageBlockBinding(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding)
{
SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(ProgramRes(GetCtx(), program)));
SERIALISE_ELEMENT(uint32_t, index, storageBlockIndex);
SERIALISE_ELEMENT(uint32_t, binding, storageBlockBinding);
if(m_State == READING)
{
m_Real.glShaderStorageBlockBinding(GetResourceManager()->GetLiveResource(id).name, index, binding);
}
return true;
}
void WrappedOpenGL::glShaderStorageBlockBinding(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding)
{
m_Real.glShaderStorageBlockBinding(program, storageBlockIndex, storageBlockBinding);
if(m_State >= WRITING)
{
GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program));
RDCASSERT(record);
{
SCOPED_SERIALISE_CONTEXT(STORAGE_BLOCKBIND);
Serialise_glShaderStorageBlockBinding(program, storageBlockIndex, storageBlockBinding);
record->AddChunk(scope.Get());
}
}
}
bool WrappedOpenGL::Serialise_glBindAttribLocation(GLuint program, GLuint index, const GLchar *name_)
{
SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(ProgramRes(GetCtx(), program)));