mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-22 06:26:30 +00:00
Implement glShaderStorageBlockBinding
This commit is contained in:
@@ -138,6 +138,7 @@ enum GLChunkType
|
||||
BINDATTRIB_LOCATION,
|
||||
BINDFRAGDATA_LOCATION,
|
||||
UNIFORM_BLOCKBIND,
|
||||
STORAGE_BLOCKBIND,
|
||||
PROGRAMUNIFORM_VECTOR,
|
||||
PROGRAMUNIFORM_MATRIX,
|
||||
LINKPROGRAM,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -447,6 +447,7 @@ struct GLHookSet
|
||||
PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv;
|
||||
PFNGLVIEWPORTARRAYVPROC glViewportArrayv;
|
||||
PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
|
||||
PFNGLSHADERSTORAGEBLOCKBINDINGPROC glShaderStorageBlockBinding;
|
||||
PFNGLUNIFORM1FPROC glUniform1f;
|
||||
PFNGLUNIFORM1IPROC glUniform1i;
|
||||
PFNGLUNIFORM1UIPROC glUniform1ui;
|
||||
|
||||
@@ -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)));
|
||||
|
||||
Reference in New Issue
Block a user