diff --git a/renderdoc/driver/gl/gl_device_driver.cpp b/renderdoc/driver/gl/gl_device_driver.cpp index 3c17b8ed5..342a0f994 100644 --- a/renderdoc/driver/gl/gl_device_driver.cpp +++ b/renderdoc/driver/gl/gl_device_driver.cpp @@ -1264,6 +1264,10 @@ bool WrappedOpenGL::Serialise_glUniformVector(GLint location, GLsizei count, con switch(Type) { + case VEC1IV: + case VEC1UIV: + case VEC1FV: elemsPerVec = 1; break; + case VEC2FV: elemsPerVec = 2; break; case VEC3FV: elemsPerVec = 3; break; case VEC4FV: elemsPerVec = 4; break; default: @@ -1280,6 +1284,10 @@ bool WrappedOpenGL::Serialise_glUniformVector(GLint location, GLsizei count, con switch(Type) { + case VEC1FV: m_Real.glUniform1fv(Loc, Count, (const GLfloat *)value); break; + case VEC1IV: m_Real.glUniform1iv(Loc, Count, (const GLint *)value); break; + case VEC1UIV: m_Real.glUniform1uiv(Loc, Count, (const GLuint *)value); break; + case VEC2FV: m_Real.glUniform2fv(Loc, Count, (const GLfloat *)value); break; case VEC3FV: m_Real.glUniform3fv(Loc, Count, (const GLfloat *)value); break; case VEC4FV: m_Real.glUniform4fv(Loc, Count, (const GLfloat *)value); break; default: @@ -1311,6 +1319,97 @@ bool WrappedOpenGL::Serialise_glUniformVector(GLint location, GLsizei count, con return true; } +void WrappedOpenGL::glUniform1f(GLint location, GLfloat value) +{ + m_Real.glUniform1f(location, value); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(UNIFORM_VECTOR); + Serialise_glUniformVector(location, 1, &value, VEC1FV); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + +void WrappedOpenGL::glUniform1i(GLint location, GLint value) +{ + m_Real.glUniform1i(location, value); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(UNIFORM_VECTOR); + Serialise_glUniformVector(location, 1, &value, VEC1IV); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + +void WrappedOpenGL::glUniform1ui(GLint location, GLuint value) +{ + m_Real.glUniform1ui(location, value); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(UNIFORM_VECTOR); + Serialise_glUniformVector(location, 1, &value, VEC1UIV); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + +void WrappedOpenGL::glUniform1fv(GLint location, GLsizei count, const GLfloat *value) +{ + m_Real.glUniform1fv(location, count, value); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(UNIFORM_VECTOR); + Serialise_glUniformVector(location, count, value, VEC1FV); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + +void WrappedOpenGL::glUniform1iv(GLint location, GLsizei count, const GLint *value) +{ + m_Real.glUniform1iv(location, count, value); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(UNIFORM_VECTOR); + Serialise_glUniformVector(location, count, value, VEC1IV); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + +void WrappedOpenGL::glUniform1uiv(GLint location, GLsizei count, const GLuint *value) +{ + m_Real.glUniform1uiv(location, count, value); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(UNIFORM_VECTOR); + Serialise_glUniformVector(location, count, value, VEC1UIV); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + +void WrappedOpenGL::glUniform2fv(GLint location, GLsizei count, const GLfloat *value) +{ + m_Real.glUniform2fv(location, count, value); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(UNIFORM_VECTOR); + Serialise_glUniformVector(location, count, value, VEC2FV); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + void WrappedOpenGL::glUniform3fv(GLint location, GLsizei count, const GLfloat *value) { m_Real.glUniform3fv(location, count, value); diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index d4308b3bd..40ef27d95 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -409,6 +409,10 @@ class WrappedOpenGL { UNIFORM_UNKNOWN, + VEC1FV, + VEC1IV, + VEC1UIV, + VEC2FV, VEC3FV, VEC4FV, @@ -419,6 +423,13 @@ class WrappedOpenGL bool Serialise_glUniformVector(GLint location, GLsizei count, const void *value, UniformType type); IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1f(GLint location, GLfloat value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1i(GLint location, GLint value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1ui(GLint location, GLuint value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1iv(GLint location, GLsizei count, const GLint *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1uiv(GLint location, GLsizei count, const GLuint *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1fv(GLint location, GLsizei count, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2fv(GLint location, GLsizei count, const GLfloat *value)); IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3fv(GLint location, GLsizei count, const GLfloat *value)); IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4fv(GLint location, GLsizei count, const GLfloat *value)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index bb42a3ff0..c151b6a0a 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -184,6 +184,13 @@ struct GLHookSet PFNGLGETUNIFORMFVPROC glGetUniformfv; PFNGLGETUNIFORMIVPROC glGetUniformiv; PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv; + PFNGLUNIFORM1FPROC glUniform1f; + PFNGLUNIFORM1IPROC glUniform1i; + PFNGLUNIFORM1UIPROC glUniform1ui; + PFNGLUNIFORM1FVPROC glUniform1fv; + PFNGLUNIFORM1IVPROC glUniform1iv; + PFNGLUNIFORM1UIVPROC glUniform1uiv; + PFNGLUNIFORM2FVPROC glUniform2fv; PFNGLUNIFORM3FVPROC glUniform3fv; PFNGLUNIFORM4FVPROC glUniform4fv; PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance; diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index 21484886f..d0208a3f6 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -196,6 +196,13 @@ HookExtension(PFNGLGETUNIFORMFVPROC, glGetUniformfv); \ HookExtension(PFNGLGETUNIFORMIVPROC, glGetUniformiv); \ HookExtension(PFNGLUNIFORMMATRIX4FVPROC, glUniformMatrix4fv); \ + HookExtension(PFNGLUNIFORM1FPROC, glUniform1f); \ + HookExtension(PFNGLUNIFORM1IPROC, glUniform1i); \ + HookExtension(PFNGLUNIFORM1UIPROC, glUniform1ui); \ + HookExtension(PFNGLUNIFORM1FVPROC, glUniform1fv); \ + HookExtension(PFNGLUNIFORM1IVPROC, glUniform1iv); \ + HookExtension(PFNGLUNIFORM1UIVPROC, glUniform1uiv); \ + HookExtension(PFNGLUNIFORM2FVPROC, glUniform2fv); \ HookExtension(PFNGLUNIFORM3FVPROC, glUniform3fv); \ HookExtension(PFNGLUNIFORM4FVPROC, glUniform4fv); \ HookExtension(PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC, glDrawArraysInstancedBaseInstance); \ @@ -426,6 +433,13 @@ HookWrapper3(void, glGetUniformfv, GLuint, program, GLint, location, GLfloat *, params); \ HookWrapper3(void, glGetUniformiv, GLuint, program, GLint, location, GLint *, params); \ HookWrapper4(void, glUniformMatrix4fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper2(void, glUniform1f, GLint, location, GLfloat, value); \ + HookWrapper2(void, glUniform1i, GLint, location, GLint, value); \ + HookWrapper2(void, glUniform1ui, GLint, location, GLuint, value); \ + HookWrapper3(void, glUniform1fv, GLint, location, GLsizei, count, const GLfloat *, value); \ + HookWrapper3(void, glUniform1iv, GLint, location, GLsizei, count, const GLint *, value); \ + HookWrapper3(void, glUniform1uiv, GLint, location, GLsizei, count, const GLuint *, value); \ + 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); \ HookWrapper5(void, glDrawArraysInstancedBaseInstance, GLenum, mode, GLint, first, GLsizei, count, GLsizei, instancecount, GLuint, baseinstance); \