From d318ca51828e33d3dd71ca14a8e94a5b81165dbb Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 3 Nov 2014 22:25:11 +0000 Subject: [PATCH] Implement all glUniformN_ and glProgramUniformMatrixMxN_ variants * Using macros for most implementations redirecting to either Serialise_glUniformVector or Serialise_glUniformMatrix --- renderdoc/driver/gl/gl_common.cpp | 57 ++ renderdoc/driver/gl/gl_driver.cpp | 21 - renderdoc/driver/gl/gl_driver.h | 145 ++- renderdoc/driver/gl/gl_hookset.h | 116 ++- renderdoc/driver/gl/gl_hookset_defs.h | 232 ++++- .../driver/gl/wrappers/gl_uniform_funcs.cpp | 888 ++++++++---------- 6 files changed, 895 insertions(+), 564 deletions(-) diff --git a/renderdoc/driver/gl/gl_common.cpp b/renderdoc/driver/gl/gl_common.cpp index 53adeed3b..a0debb10e 100644 --- a/renderdoc/driver/gl/gl_common.cpp +++ b/renderdoc/driver/gl/gl_common.cpp @@ -280,6 +280,63 @@ ResourceFormat MakeResourceFormat(WrappedOpenGL &gl, GLenum target, GLenum fmt) return ret; } +template<> +string ToStrHelper::Get(const WrappedOpenGL::UniformType &el) +{ + switch(el) + { + case WrappedOpenGL::UNIFORM_UNKNOWN: return "unk"; + +#define VEC2STR(suffix) case WrappedOpenGL::CONCAT(VEC, suffix): return STRINGIZE(suffix); + VEC2STR(1fv) + VEC2STR(1iv) + VEC2STR(1uiv) + VEC2STR(1dv) + VEC2STR(2fv) + VEC2STR(2iv) + VEC2STR(2uiv) + VEC2STR(2dv) + VEC2STR(3fv) + VEC2STR(3iv) + VEC2STR(3uiv) + VEC2STR(3dv) + VEC2STR(4fv) + VEC2STR(4iv) + VEC2STR(4uiv) + VEC2STR(4dv) +#undef VEC2STR + +#define MAT2STR(suffix) case WrappedOpenGL::CONCAT(MAT, suffix): return STRINGIZE(suffix); + MAT2STR(2fv) + MAT2STR(2x3fv) + MAT2STR(2x4fv) + MAT2STR(3fv) + MAT2STR(3x2fv) + MAT2STR(3x4fv) + MAT2STR(4fv) + MAT2STR(4x2fv) + MAT2STR(4x3fv) + MAT2STR(2dv) + MAT2STR(2x3dv) + MAT2STR(2x4dv) + MAT2STR(3dv) + MAT2STR(3x2dv) + MAT2STR(3x4dv) + MAT2STR(4dv) + MAT2STR(4x2dv) + MAT2STR(4x3dv) +#undef MAT2STR + + default: + break; + } + + char tostrBuf[256] = {0}; + StringFormat::snprintf(tostrBuf, 255, "WrappedOpenGL::UniformType<%d>", el); + + return tostrBuf; +} + template<> string ToStrHelper::Get(const RDCGLenum &el) { diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index 02383a6cb..6ecf143e2 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -203,27 +203,6 @@ const char *GLChunkNames[] = "EndCapture", }; -template<> -string ToStrHelper::Get(const WrappedOpenGL::UniformType &el) -{ - switch(el) - { - case WrappedOpenGL::UNIFORM_UNKNOWN: return "unk"; - case WrappedOpenGL::VEC1FV: return "1fv"; - case WrappedOpenGL::VEC1IV: return "1iv"; - case WrappedOpenGL::VEC1UIV: return "1uiv"; - case WrappedOpenGL::VEC2FV: return "2fv"; - case WrappedOpenGL::VEC3FV: return "3fv"; - case WrappedOpenGL::VEC4FV: return "4fv"; - case WrappedOpenGL::MAT4FV: return "4fv"; - } - - char tostrBuf[256] = {0}; - StringFormat::snprintf(tostrBuf, 255, "WrappedOpenGL::UniformType<%d>", el); - - return tostrBuf; -} - GLInitParams::GLInitParams() { SerialiseVersion = GL_SERIALISE_VERSION; diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index 7ec1a20de..62c833dd6 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -558,14 +558,45 @@ class WrappedOpenGL { UNIFORM_UNKNOWN, - VEC1FV, - VEC1IV, - VEC1UIV, - VEC2FV, - VEC3FV, - VEC4FV, + VEC1fv, + VEC1iv, + VEC1uiv, + VEC1dv, - MAT4FV, + VEC2fv, + VEC2iv, + VEC2uiv, + VEC2dv, + + VEC3fv, + VEC3iv, + VEC3uiv, + VEC3dv, + + VEC4fv, + VEC4iv, + VEC4uiv, + VEC4dv, + + MAT2fv, + MAT2x3fv, + MAT2x4fv, + MAT3fv, + MAT3x2fv, + MAT3x4fv, + MAT4fv, + MAT4x2fv, + MAT4x3fv, + + MAT2dv, + MAT2x3dv, + MAT2x4dv, + MAT3dv, + MAT3x2dv, + MAT3x4dv, + MAT4dv, + MAT4x2dv, + MAT4x3dv, }; bool Serialise_glUniformMatrix(GLint location, GLsizei count, GLboolean transpose, const void *value, UniformType type); @@ -574,25 +605,111 @@ class WrappedOpenGL bool Serialise_glProgramUniformMatrix(GLuint program, GLint location, GLsizei count, GLboolean transpose, const void *value, UniformType type); bool Serialise_glProgramUniformVector(GLuint program, 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, glUniform1f(GLint location, GLfloat v0)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1i(GLint location, GLint v0)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1ui(GLint location, GLuint v0)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1d(GLint location, GLdouble v0)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2f(GLint location, GLfloat v0, GLfloat v1)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2i(GLint location, GLint v0, GLint v1)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2ui(GLint location, GLuint v0, GLuint v1)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2d(GLint location, GLdouble v0, GLdouble v1)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3i(GLint location, GLint v0, GLint v1, GLint v2)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3d(GLint location, GLdouble v0, GLdouble v1, GLdouble v2)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4d(GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3)); + 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, glUniform1dv(GLint location, GLsizei count, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2iv(GLint location, GLsizei count, const GLint *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2uiv(GLint location, GLsizei count, const GLuint *value)); IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2fv(GLint location, GLsizei count, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2dv(GLint location, GLsizei count, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3iv(GLint location, GLsizei count, const GLint *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3uiv(GLint location, GLsizei count, const GLuint *value)); IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3fv(GLint location, GLsizei count, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3dv(GLint location, GLsizei count, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4iv(GLint location, GLsizei count, const GLint *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4uiv(GLint location, GLsizei count, const GLuint *value)); IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4fv(GLint location, GLsizei count, const GLfloat *value)); - - IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4dv(GLint location, GLsizei count, const GLdouble *value)); + + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1f(GLuint program, GLint location, GLfloat v0)); IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1i(GLuint program, GLint location, GLint v0)); - IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1ui(GLuint program, GLint location, GLuint v0)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1d(GLuint program, GLint location, GLdouble v0)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2d(GLuint program, GLint location, GLdouble v0, GLdouble v1)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3d(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4d(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint *value)); IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1dv(GLuint program, GLint location, GLsizei count, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2iv(GLuint program, GLint location, GLsizei count, const GLint *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2uiv(GLuint program, GLint location, GLsizei count, const GLuint *value)); IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2dv(GLuint program, GLint location, GLsizei count, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3iv(GLuint program, GLint location, GLsizei count, const GLint *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3uiv(GLuint program, GLint location, GLsizei count, const GLuint *value)); IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3dv(GLuint program, GLint location, GLsizei count, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4iv(GLuint program, GLint location, GLsizei count, const GLint *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4uiv(GLuint program, GLint location, GLsizei count, const GLuint *value)); IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4dv(GLuint program, GLint location, GLsizei count, const GLdouble *value)); + + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix2dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix2x3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix2x4dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix3x2dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix3x4dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4x2dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4x3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix2dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix2x3dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix2x4dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix3dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix3x2dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix3x4dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4x2dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4x3dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)); IMPLEMENT_FUNCTION_SERIALISED(void, glDrawArrays(GLenum mode, GLint first, GLsizei count)); IMPLEMENT_FUNCTION_SERIALISED(void, glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index 0bade91ab..50f56b00c 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -139,14 +139,6 @@ struct GLHookSet PFNGLRELEASESHADERCOMPILERPROC glReleaseShaderCompiler; PFNGLLINKPROGRAMPROC glLinkProgram; PFNGLPROGRAMPARAMETERIPROC glProgramParameteri; - PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv; - PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i; - PFNGLPROGRAMUNIFORM1FVPROC glProgramUniform1fv; - PFNGLPROGRAMUNIFORM1IVPROC glProgramUniform1iv; - PFNGLPROGRAMUNIFORM1UIVPROC glProgramUniform1uiv; - PFNGLPROGRAMUNIFORM2FVPROC glProgramUniform2fv; - PFNGLPROGRAMUNIFORM3FVPROC glProgramUniform3fv; - PFNGLPROGRAMUNIFORM4FVPROC glProgramUniform4fv; PFNGLUSEPROGRAMPROC glUseProgram; PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages; PFNGLVALIDATEPROGRAMPROC glValidateProgram; @@ -257,16 +249,106 @@ struct GLHookSet PFNGLGETUNIFORMUIVPROC glGetUniformuiv; PFNGLGETUNIFORMDVPROC glGetUniformdv; PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding; - PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv; - PFNGLUNIFORM1FPROC glUniform1f; - PFNGLUNIFORM1IPROC glUniform1i; - PFNGLUNIFORM1UIPROC glUniform1ui; - PFNGLUNIFORM1FVPROC glUniform1fv; - PFNGLUNIFORM1IVPROC glUniform1iv; + PFNGLUNIFORM1FPROC glUniform1f; + PFNGLUNIFORM1IPROC glUniform1i; + PFNGLUNIFORM1UIPROC glUniform1ui; + PFNGLUNIFORM1DPROC glUniform1d; + PFNGLUNIFORM2FPROC glUniform2f; + PFNGLUNIFORM2IPROC glUniform2i; + PFNGLUNIFORM2UIPROC glUniform2ui; + PFNGLUNIFORM2DPROC glUniform2d; + PFNGLUNIFORM3FPROC glUniform3f; + PFNGLUNIFORM3IPROC glUniform3i; + PFNGLUNIFORM3UIPROC glUniform3ui; + PFNGLUNIFORM3DPROC glUniform3d; + PFNGLUNIFORM4FPROC glUniform4f; + PFNGLUNIFORM4IPROC glUniform4i; + PFNGLUNIFORM4UIPROC glUniform4ui; + PFNGLUNIFORM4DPROC glUniform4d; + PFNGLUNIFORM1FVPROC glUniform1fv; + PFNGLUNIFORM1IVPROC glUniform1iv; PFNGLUNIFORM1UIVPROC glUniform1uiv; - PFNGLUNIFORM2FVPROC glUniform2fv; - PFNGLUNIFORM3FVPROC glUniform3fv; - PFNGLUNIFORM4FVPROC glUniform4fv; + PFNGLUNIFORM1DVPROC glUniform1dv; + PFNGLUNIFORM2FVPROC glUniform2fv; + PFNGLUNIFORM2IVPROC glUniform2iv; + PFNGLUNIFORM2UIVPROC glUniform2uiv; + PFNGLUNIFORM2DVPROC glUniform2dv; + PFNGLUNIFORM3FVPROC glUniform3fv; + PFNGLUNIFORM3IVPROC glUniform3iv; + PFNGLUNIFORM3UIVPROC glUniform3uiv; + PFNGLUNIFORM3DVPROC glUniform3dv; + PFNGLUNIFORM4FVPROC glUniform4fv; + PFNGLUNIFORM4IVPROC glUniform4iv; + PFNGLUNIFORM4UIVPROC glUniform4uiv; + PFNGLUNIFORM4DVPROC glUniform4dv; + PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv; + PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv; + PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv; + PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv; + PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv; + PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv; + PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv; + PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv; + PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv; + PFNGLUNIFORMMATRIX2DVPROC glUniformMatrix2dv; + PFNGLUNIFORMMATRIX2X3DVPROC glUniformMatrix2x3dv; + PFNGLUNIFORMMATRIX2X4DVPROC glUniformMatrix2x4dv; + PFNGLUNIFORMMATRIX3DVPROC glUniformMatrix3dv; + PFNGLUNIFORMMATRIX3X2DVPROC glUniformMatrix3x2dv; + PFNGLUNIFORMMATRIX3X4DVPROC glUniformMatrix3x4dv; + PFNGLUNIFORMMATRIX4DVPROC glUniformMatrix4dv; + PFNGLUNIFORMMATRIX4X2DVPROC glUniformMatrix4x2dv; + PFNGLUNIFORMMATRIX4X3DVPROC glUniformMatrix4x3dv; + PFNGLPROGRAMUNIFORM1FPROC glProgramUniform1f; + PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i; + PFNGLPROGRAMUNIFORM1UIPROC glProgramUniform1ui; + PFNGLPROGRAMUNIFORM1DPROC glProgramUniform1d; + PFNGLPROGRAMUNIFORM2FPROC glProgramUniform2f; + PFNGLPROGRAMUNIFORM2IPROC glProgramUniform2i; + PFNGLPROGRAMUNIFORM2UIPROC glProgramUniform2ui; + PFNGLPROGRAMUNIFORM2DPROC glProgramUniform2d; + PFNGLPROGRAMUNIFORM3FPROC glProgramUniform3f; + PFNGLPROGRAMUNIFORM3IPROC glProgramUniform3i; + PFNGLPROGRAMUNIFORM3UIPROC glProgramUniform3ui; + PFNGLPROGRAMUNIFORM3DPROC glProgramUniform3d; + PFNGLPROGRAMUNIFORM4FPROC glProgramUniform4f; + PFNGLPROGRAMUNIFORM4IPROC glProgramUniform4i; + PFNGLPROGRAMUNIFORM4UIPROC glProgramUniform4ui; + PFNGLPROGRAMUNIFORM4DPROC glProgramUniform4d; + PFNGLPROGRAMUNIFORM1FVPROC glProgramUniform1fv; + PFNGLPROGRAMUNIFORM1IVPROC glProgramUniform1iv; + PFNGLPROGRAMUNIFORM1UIVPROC glProgramUniform1uiv; + PFNGLPROGRAMUNIFORM1DVPROC glProgramUniform1dv; + PFNGLPROGRAMUNIFORM2FVPROC glProgramUniform2fv; + PFNGLPROGRAMUNIFORM2IVPROC glProgramUniform2iv; + PFNGLPROGRAMUNIFORM2UIVPROC glProgramUniform2uiv; + PFNGLPROGRAMUNIFORM2DVPROC glProgramUniform2dv; + PFNGLPROGRAMUNIFORM3FVPROC glProgramUniform3fv; + PFNGLPROGRAMUNIFORM3IVPROC glProgramUniform3iv; + PFNGLPROGRAMUNIFORM3UIVPROC glProgramUniform3uiv; + PFNGLPROGRAMUNIFORM3DVPROC glProgramUniform3dv; + PFNGLPROGRAMUNIFORM4FVPROC glProgramUniform4fv; + PFNGLPROGRAMUNIFORM4IVPROC glProgramUniform4iv; + PFNGLPROGRAMUNIFORM4UIVPROC glProgramUniform4uiv; + PFNGLPROGRAMUNIFORM4DVPROC glProgramUniform4dv; + PFNGLPROGRAMUNIFORMMATRIX2FVPROC glProgramUniformMatrix2fv; + PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glProgramUniformMatrix2x3fv; + PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glProgramUniformMatrix2x4fv; + PFNGLPROGRAMUNIFORMMATRIX3FVPROC glProgramUniformMatrix3fv; + PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glProgramUniformMatrix3x2fv; + PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glProgramUniformMatrix3x4fv; + PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv; + PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glProgramUniformMatrix4x2fv; + PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glProgramUniformMatrix4x3fv; + PFNGLPROGRAMUNIFORMMATRIX2DVPROC glProgramUniformMatrix2dv; + PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glProgramUniformMatrix2x3dv; + PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glProgramUniformMatrix2x4dv; + PFNGLPROGRAMUNIFORMMATRIX3DVPROC glProgramUniformMatrix3dv; + PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glProgramUniformMatrix3x2dv; + PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glProgramUniformMatrix3x4dv; + PFNGLPROGRAMUNIFORMMATRIX4DVPROC glProgramUniformMatrix4dv; + PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glProgramUniformMatrix4x2dv; + PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glProgramUniformMatrix4x3dv; PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements; PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance; PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced; diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index fbb2f4c32..55ef882bc 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -152,14 +152,6 @@ HookExtension(PFNGLRELEASESHADERCOMPILERPROC, glReleaseShaderCompiler); \ HookExtension(PFNGLLINKPROGRAMPROC, glLinkProgram); \ HookExtension(PFNGLPROGRAMPARAMETERIPROC, glProgramParameteri); \ - HookExtension(PFNGLPROGRAMUNIFORMMATRIX4FVPROC, glProgramUniformMatrix4fv); \ - HookExtension(PFNGLPROGRAMUNIFORM1IPROC, glProgramUniform1i); \ - HookExtension(PFNGLPROGRAMUNIFORM1FVPROC, glProgramUniform1fv); \ - HookExtension(PFNGLPROGRAMUNIFORM1IVPROC, glProgramUniform1iv); \ - HookExtension(PFNGLPROGRAMUNIFORM1UIVPROC, glProgramUniform1uiv); \ - HookExtension(PFNGLPROGRAMUNIFORM2FVPROC, glProgramUniform2fv); \ - HookExtension(PFNGLPROGRAMUNIFORM3FVPROC, glProgramUniform3fv); \ - HookExtension(PFNGLPROGRAMUNIFORM4FVPROC, glProgramUniform4fv); \ HookExtension(PFNGLUSEPROGRAMPROC, glUseProgram); \ HookExtension(PFNGLUSEPROGRAMSTAGESPROC, glUseProgramStages); \ HookExtension(PFNGLVALIDATEPROGRAMPROC, glValidateProgram); \ @@ -271,16 +263,106 @@ HookExtension(PFNGLGETUNIFORMUIVPROC, glGetUniformuiv); \ HookExtension(PFNGLGETUNIFORMDVPROC, glGetUniformdv); \ HookExtension(PFNGLUNIFORMBLOCKBINDINGPROC, glUniformBlockBinding); \ - HookExtension(PFNGLUNIFORMMATRIX4FVPROC, glUniformMatrix4fv); \ - HookExtension(PFNGLUNIFORM1FPROC, glUniform1f); \ - HookExtension(PFNGLUNIFORM1IPROC, glUniform1i); \ - HookExtension(PFNGLUNIFORM1UIPROC, glUniform1ui); \ - HookExtension(PFNGLUNIFORM1FVPROC, glUniform1fv); \ - HookExtension(PFNGLUNIFORM1IVPROC, glUniform1iv); \ + HookExtension(PFNGLUNIFORM1FPROC, glUniform1f); \ + HookExtension(PFNGLUNIFORM1IPROC, glUniform1i); \ + HookExtension(PFNGLUNIFORM1UIPROC, glUniform1ui); \ + HookExtension(PFNGLUNIFORM1DPROC, glUniform1d); \ + HookExtension(PFNGLUNIFORM2FPROC, glUniform2f); \ + HookExtension(PFNGLUNIFORM2IPROC, glUniform2i); \ + HookExtension(PFNGLUNIFORM2UIPROC, glUniform2ui); \ + HookExtension(PFNGLUNIFORM2DPROC, glUniform2d); \ + HookExtension(PFNGLUNIFORM3FPROC, glUniform3f); \ + HookExtension(PFNGLUNIFORM3IPROC, glUniform3i); \ + HookExtension(PFNGLUNIFORM3UIPROC, glUniform3ui); \ + HookExtension(PFNGLUNIFORM3DPROC, glUniform3d); \ + HookExtension(PFNGLUNIFORM4FPROC, glUniform4f); \ + HookExtension(PFNGLUNIFORM4IPROC, glUniform4i); \ + HookExtension(PFNGLUNIFORM4UIPROC, glUniform4ui); \ + HookExtension(PFNGLUNIFORM4DPROC, glUniform4d); \ + HookExtension(PFNGLUNIFORM1FVPROC, glUniform1fv); \ + HookExtension(PFNGLUNIFORM1IVPROC, glUniform1iv); \ HookExtension(PFNGLUNIFORM1UIVPROC, glUniform1uiv); \ - HookExtension(PFNGLUNIFORM2FVPROC, glUniform2fv); \ - HookExtension(PFNGLUNIFORM3FVPROC, glUniform3fv); \ - HookExtension(PFNGLUNIFORM4FVPROC, glUniform4fv); \ + HookExtension(PFNGLUNIFORM1DVPROC, glUniform1dv); \ + HookExtension(PFNGLUNIFORM2FVPROC, glUniform2fv); \ + HookExtension(PFNGLUNIFORM2IVPROC, glUniform2iv); \ + HookExtension(PFNGLUNIFORM2UIVPROC, glUniform2uiv); \ + HookExtension(PFNGLUNIFORM2DVPROC, glUniform2dv); \ + HookExtension(PFNGLUNIFORM3FVPROC, glUniform3fv); \ + HookExtension(PFNGLUNIFORM3IVPROC, glUniform3iv); \ + HookExtension(PFNGLUNIFORM3UIVPROC, glUniform3uiv); \ + HookExtension(PFNGLUNIFORM3DVPROC, glUniform3dv); \ + HookExtension(PFNGLUNIFORM4FVPROC, glUniform4fv); \ + HookExtension(PFNGLUNIFORM4IVPROC, glUniform4iv); \ + HookExtension(PFNGLUNIFORM4UIVPROC, glUniform4uiv); \ + HookExtension(PFNGLUNIFORM4DVPROC, glUniform4dv); \ + HookExtension(PFNGLUNIFORMMATRIX2FVPROC, glUniformMatrix2fv); \ + HookExtension(PFNGLUNIFORMMATRIX2X3FVPROC, glUniformMatrix2x3fv); \ + HookExtension(PFNGLUNIFORMMATRIX2X4FVPROC, glUniformMatrix2x4fv); \ + HookExtension(PFNGLUNIFORMMATRIX3FVPROC, glUniformMatrix3fv); \ + HookExtension(PFNGLUNIFORMMATRIX3X2FVPROC, glUniformMatrix3x2fv); \ + HookExtension(PFNGLUNIFORMMATRIX3X4FVPROC, glUniformMatrix3x4fv); \ + HookExtension(PFNGLUNIFORMMATRIX4FVPROC, glUniformMatrix4fv); \ + HookExtension(PFNGLUNIFORMMATRIX4X2FVPROC, glUniformMatrix4x2fv); \ + HookExtension(PFNGLUNIFORMMATRIX4X3FVPROC, glUniformMatrix4x3fv); \ + HookExtension(PFNGLUNIFORMMATRIX2DVPROC, glUniformMatrix2dv); \ + HookExtension(PFNGLUNIFORMMATRIX2X3DVPROC, glUniformMatrix2x3dv); \ + HookExtension(PFNGLUNIFORMMATRIX2X4DVPROC, glUniformMatrix2x4dv); \ + HookExtension(PFNGLUNIFORMMATRIX3DVPROC, glUniformMatrix3dv); \ + HookExtension(PFNGLUNIFORMMATRIX3X2DVPROC, glUniformMatrix3x2dv); \ + HookExtension(PFNGLUNIFORMMATRIX3X4DVPROC, glUniformMatrix3x4dv); \ + HookExtension(PFNGLUNIFORMMATRIX4DVPROC, glUniformMatrix4dv); \ + HookExtension(PFNGLUNIFORMMATRIX4X2DVPROC, glUniformMatrix4x2dv); \ + HookExtension(PFNGLUNIFORMMATRIX4X3DVPROC, glUniformMatrix4x3dv); \ + HookExtension(PFNGLPROGRAMUNIFORM1FPROC, glProgramUniform1f); \ + HookExtension(PFNGLPROGRAMUNIFORM1IPROC, glProgramUniform1i); \ + HookExtension(PFNGLPROGRAMUNIFORM1UIPROC, glProgramUniform1ui); \ + HookExtension(PFNGLPROGRAMUNIFORM1DPROC, glProgramUniform1d); \ + HookExtension(PFNGLPROGRAMUNIFORM2FPROC, glProgramUniform2f); \ + HookExtension(PFNGLPROGRAMUNIFORM2IPROC, glProgramUniform2i); \ + HookExtension(PFNGLPROGRAMUNIFORM2UIPROC, glProgramUniform2ui); \ + HookExtension(PFNGLPROGRAMUNIFORM2DPROC, glProgramUniform2d); \ + HookExtension(PFNGLPROGRAMUNIFORM3FPROC, glProgramUniform3f); \ + HookExtension(PFNGLPROGRAMUNIFORM3IPROC, glProgramUniform3i); \ + HookExtension(PFNGLPROGRAMUNIFORM3UIPROC, glProgramUniform3ui); \ + HookExtension(PFNGLPROGRAMUNIFORM3DPROC, glProgramUniform3d); \ + HookExtension(PFNGLPROGRAMUNIFORM4FPROC, glProgramUniform4f); \ + HookExtension(PFNGLPROGRAMUNIFORM4IPROC, glProgramUniform4i); \ + HookExtension(PFNGLPROGRAMUNIFORM4UIPROC, glProgramUniform4ui); \ + HookExtension(PFNGLPROGRAMUNIFORM4DPROC, glProgramUniform4d); \ + HookExtension(PFNGLPROGRAMUNIFORM1FVPROC, glProgramUniform1fv); \ + HookExtension(PFNGLPROGRAMUNIFORM1IVPROC, glProgramUniform1iv); \ + HookExtension(PFNGLPROGRAMUNIFORM1UIVPROC, glProgramUniform1uiv); \ + HookExtension(PFNGLPROGRAMUNIFORM1DVPROC, glProgramUniform1dv); \ + HookExtension(PFNGLPROGRAMUNIFORM2FVPROC, glProgramUniform2fv); \ + HookExtension(PFNGLPROGRAMUNIFORM2IVPROC, glProgramUniform2iv); \ + HookExtension(PFNGLPROGRAMUNIFORM2UIVPROC, glProgramUniform2uiv); \ + HookExtension(PFNGLPROGRAMUNIFORM2DVPROC, glProgramUniform2dv); \ + HookExtension(PFNGLPROGRAMUNIFORM3FVPROC, glProgramUniform3fv); \ + HookExtension(PFNGLPROGRAMUNIFORM3IVPROC, glProgramUniform3iv); \ + HookExtension(PFNGLPROGRAMUNIFORM3UIVPROC, glProgramUniform3uiv); \ + HookExtension(PFNGLPROGRAMUNIFORM3DVPROC, glProgramUniform3dv); \ + HookExtension(PFNGLPROGRAMUNIFORM4FVPROC, glProgramUniform4fv); \ + HookExtension(PFNGLPROGRAMUNIFORM4IVPROC, glProgramUniform4iv); \ + HookExtension(PFNGLPROGRAMUNIFORM4UIVPROC, glProgramUniform4uiv); \ + HookExtension(PFNGLPROGRAMUNIFORM4DVPROC, glProgramUniform4dv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX2FVPROC, glProgramUniformMatrix2fv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC, glProgramUniformMatrix2x3fv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC, glProgramUniformMatrix2x4fv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX3FVPROC, glProgramUniformMatrix3fv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC, glProgramUniformMatrix3x2fv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC, glProgramUniformMatrix3x4fv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX4FVPROC, glProgramUniformMatrix4fv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC, glProgramUniformMatrix4x2fv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC, glProgramUniformMatrix4x3fv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX2DVPROC, glProgramUniformMatrix2dv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC, glProgramUniformMatrix2x3dv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC, glProgramUniformMatrix2x4dv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX3DVPROC, glProgramUniformMatrix3dv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC, glProgramUniformMatrix3x2dv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC, glProgramUniformMatrix3x4dv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX4DVPROC, glProgramUniformMatrix4dv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC, glProgramUniformMatrix4x2dv); \ + HookExtension(PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC, glProgramUniformMatrix4x3dv); \ HookExtension(PFNGLDRAWRANGEELEMENTSPROC, glDrawRangeElements); \ HookExtension(PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC, glDrawArraysInstancedBaseInstance); \ HookExtension(PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced); \ @@ -507,14 +589,6 @@ HookWrapper0(void, glReleaseShaderCompiler); \ HookWrapper1(void, glLinkProgram, GLuint, program); \ HookWrapper3(void, glProgramParameteri, GLuint, program, GLenum, pname, GLint, value); \ - HookWrapper5(void, glProgramUniformMatrix4fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ - HookWrapper3(void, glProgramUniform1i, GLuint, program, GLint, location, GLint, v0); \ - HookWrapper4(void, glProgramUniform1fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \ - HookWrapper4(void, glProgramUniform1iv, GLuint, program, GLint, location, GLsizei, count, const GLint *, value); \ - HookWrapper4(void, glProgramUniform1uiv, GLuint, program, GLint, location, GLsizei, count, const GLuint *, value); \ - HookWrapper4(void, glProgramUniform2fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \ - HookWrapper4(void, glProgramUniform3fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \ - HookWrapper4(void, glProgramUniform4fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \ HookWrapper1(void, glUseProgram, GLuint, program); \ HookWrapper3(void, glUseProgramStages, GLuint, pipeline, GLbitfield, stages, GLuint, program); \ HookWrapper1(void, glValidateProgram, GLuint, program); \ @@ -625,16 +699,106 @@ HookWrapper3(void, glGetUniformuiv, GLuint, program, GLint, location, GLuint *, params); \ HookWrapper3(void, glGetUniformdv, GLuint, program, GLint, location, GLdouble *, params); \ HookWrapper3(void, glUniformBlockBinding, GLuint, program, GLuint, uniformBlockIndex, GLuint, uniformBlockBinding); \ - HookWrapper4(void, glUniformMatrix4fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ - HookWrapper2(void, glUniform1f, GLint, location, GLfloat, v0); \ - HookWrapper2(void, glUniform1i, GLint, location, GLint, v0); \ - HookWrapper2(void, glUniform1ui, GLint, location, GLuint, v0); \ - HookWrapper3(void, glUniform1fv, GLint, location, GLsizei, count, const GLfloat *, value); \ - HookWrapper3(void, glUniform1iv, GLint, location, GLsizei, count, const GLint *, value); \ + HookWrapper2(void, glUniform1f, GLint, location, GLfloat, v0); \ + HookWrapper2(void, glUniform1i, GLint, location, GLint, v0); \ + HookWrapper2(void, glUniform1ui, GLint, location, GLuint, v0); \ + HookWrapper2(void, glUniform1d, GLint, location, GLdouble, x); \ + HookWrapper3(void, glUniform2f, GLint, location, GLfloat, v0, GLfloat, v1); \ + HookWrapper3(void, glUniform2i, GLint, location, GLint, v0, GLint, v1); \ + HookWrapper3(void, glUniform2ui, GLint, location, GLuint, v0, GLuint, v1); \ + HookWrapper3(void, glUniform2d, GLint, location, GLdouble, x, GLdouble, y); \ + HookWrapper4(void, glUniform3f, GLint, location, GLfloat, v0, GLfloat, v1, GLfloat, v2); \ + HookWrapper4(void, glUniform3i, GLint, location, GLint, v0, GLint, v1, GLint, v2); \ + HookWrapper4(void, glUniform3ui, GLint, location, GLuint, v0, GLuint, v1, GLuint, v2); \ + HookWrapper4(void, glUniform3d, GLint, location, GLdouble, x, GLdouble, y, GLdouble, z); \ + HookWrapper5(void, glUniform4f, GLint, location, GLfloat, v0, GLfloat, v1, GLfloat, v2, GLfloat, v3); \ + HookWrapper5(void, glUniform4i, GLint, location, GLint, v0, GLint, v1, GLint, v2, GLint, v3); \ + HookWrapper5(void, glUniform4ui, GLint, location, GLuint, v0, GLuint, v1, GLuint, v2, GLuint, v3); \ + HookWrapper5(void, glUniform4d, GLint, location, GLdouble, x, GLdouble, y, GLdouble, z, GLdouble, w); \ + 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); \ + HookWrapper3(void, glUniform1dv, GLint, location, GLsizei, count, const GLdouble *, value); \ + HookWrapper3(void, glUniform2fv, GLint, location, GLsizei, count, const GLfloat *, value); \ + HookWrapper3(void, glUniform2iv, GLint, location, GLsizei, count, const GLint *, value); \ + HookWrapper3(void, glUniform2uiv, GLint, location, GLsizei, count, const GLuint *, value); \ + HookWrapper3(void, glUniform2dv, GLint, location, GLsizei, count, const GLdouble *, value); \ + HookWrapper3(void, glUniform3fv, GLint, location, GLsizei, count, const GLfloat *, value); \ + HookWrapper3(void, glUniform3iv, GLint, location, GLsizei, count, const GLint *, value); \ + HookWrapper3(void, glUniform3uiv, GLint, location, GLsizei, count, const GLuint *, value); \ + HookWrapper3(void, glUniform3dv, GLint, location, GLsizei, count, const GLdouble *, value); \ + HookWrapper3(void, glUniform4fv, GLint, location, GLsizei, count, const GLfloat *, value); \ + HookWrapper3(void, glUniform4iv, GLint, location, GLsizei, count, const GLint *, value); \ + HookWrapper3(void, glUniform4uiv, GLint, location, GLsizei, count, const GLuint *, value); \ + HookWrapper3(void, glUniform4dv, GLint, location, GLsizei, count, const GLdouble *, value); \ + HookWrapper4(void, glUniformMatrix2fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper4(void, glUniformMatrix2x3fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper4(void, glUniformMatrix2x4fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper4(void, glUniformMatrix3fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper4(void, glUniformMatrix3x2fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper4(void, glUniformMatrix3x4fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper4(void, glUniformMatrix4fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper4(void, glUniformMatrix4x2fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper4(void, glUniformMatrix4x3fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper4(void, glUniformMatrix2dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper4(void, glUniformMatrix2x3dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper4(void, glUniformMatrix2x4dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper4(void, glUniformMatrix3dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper4(void, glUniformMatrix3x2dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper4(void, glUniformMatrix3x4dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper4(void, glUniformMatrix4dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper4(void, glUniformMatrix4x2dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper4(void, glUniformMatrix4x3dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper3(void, glProgramUniform1f, GLuint, program, GLint, location, GLfloat, v0); \ + HookWrapper3(void, glProgramUniform1i, GLuint, program, GLint, location, GLint, v0); \ + HookWrapper3(void, glProgramUniform1ui, GLuint, program, GLint, location, GLuint, v0); \ + HookWrapper3(void, glProgramUniform1d, GLuint, program, GLint, location, GLdouble, v0); \ + HookWrapper4(void, glProgramUniform2f, GLuint, program, GLint, location, GLfloat, v0, GLfloat, v1); \ + HookWrapper4(void, glProgramUniform2i, GLuint, program, GLint, location, GLint, v0, GLint, v1); \ + HookWrapper4(void, glProgramUniform2ui, GLuint, program, GLint, location, GLuint, v0, GLuint, v1); \ + HookWrapper4(void, glProgramUniform2d, GLuint, program, GLint, location, GLdouble, v0, GLdouble, v1); \ + HookWrapper5(void, glProgramUniform3f, GLuint, program, GLint, location, GLfloat, v0, GLfloat, v1, GLfloat, v2); \ + HookWrapper5(void, glProgramUniform3i, GLuint, program, GLint, location, GLint, v0, GLint, v1, GLint, v2); \ + HookWrapper5(void, glProgramUniform3ui, GLuint, program, GLint, location, GLuint, v0, GLuint, v1, GLuint, v2); \ + HookWrapper5(void, glProgramUniform3d, GLuint, program, GLint, location, GLdouble, v0, GLdouble, v1, GLdouble, v2); \ + HookWrapper6(void, glProgramUniform4f, GLuint, program, GLint, location, GLfloat, v0, GLfloat, v1, GLfloat, v2, GLfloat, v3); \ + HookWrapper6(void, glProgramUniform4i, GLuint, program, GLint, location, GLint, v0, GLint, v1, GLint, v2, GLint, v3); \ + HookWrapper6(void, glProgramUniform4ui, GLuint, program, GLint, location, GLuint, v0, GLuint, v1, GLuint, v2, GLuint, v3); \ + HookWrapper6(void, glProgramUniform4d, GLuint, program, GLint, location, GLdouble, v0, GLdouble, v1, GLdouble, v2, GLdouble, v3); \ + HookWrapper4(void, glProgramUniform1fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \ + HookWrapper4(void, glProgramUniform1iv, GLuint, program, GLint, location, GLsizei, count, const GLint *, value); \ + HookWrapper4(void, glProgramUniform1uiv, GLuint, program, GLint, location, GLsizei, count, const GLuint *, value); \ + HookWrapper4(void, glProgramUniform1dv, GLuint, program, GLint, location, GLsizei, count, const GLdouble *, value); \ + HookWrapper4(void, glProgramUniform2fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \ + HookWrapper4(void, glProgramUniform2iv, GLuint, program, GLint, location, GLsizei, count, const GLint *, value); \ + HookWrapper4(void, glProgramUniform2uiv, GLuint, program, GLint, location, GLsizei, count, const GLuint *, value); \ + HookWrapper4(void, glProgramUniform2dv, GLuint, program, GLint, location, GLsizei, count, const GLdouble *, value); \ + HookWrapper4(void, glProgramUniform3fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \ + HookWrapper4(void, glProgramUniform3iv, GLuint, program, GLint, location, GLsizei, count, const GLint *, value); \ + HookWrapper4(void, glProgramUniform3uiv, GLuint, program, GLint, location, GLsizei, count, const GLuint *, value); \ + HookWrapper4(void, glProgramUniform3dv, GLuint, program, GLint, location, GLsizei, count, const GLdouble *, value); \ + HookWrapper4(void, glProgramUniform4fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \ + HookWrapper4(void, glProgramUniform4iv, GLuint, program, GLint, location, GLsizei, count, const GLint *, value); \ + HookWrapper4(void, glProgramUniform4uiv, GLuint, program, GLint, location, GLsizei, count, const GLuint *, value); \ + HookWrapper4(void, glProgramUniform4dv, GLuint, program, GLint, location, GLsizei, count, const GLdouble *, value); \ + HookWrapper5(void, glProgramUniformMatrix2fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper5(void, glProgramUniformMatrix2x3fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper5(void, glProgramUniformMatrix2x4fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper5(void, glProgramUniformMatrix3fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper5(void, glProgramUniformMatrix3x2fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper5(void, glProgramUniformMatrix3x4fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper5(void, glProgramUniformMatrix4fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper5(void, glProgramUniformMatrix4x2fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper5(void, glProgramUniformMatrix4x3fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \ + HookWrapper5(void, glProgramUniformMatrix2dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper5(void, glProgramUniformMatrix2x3dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper5(void, glProgramUniformMatrix2x4dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper5(void, glProgramUniformMatrix3dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper5(void, glProgramUniformMatrix3x2dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper5(void, glProgramUniformMatrix3x4dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper5(void, glProgramUniformMatrix4dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper5(void, glProgramUniformMatrix4x2dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ + HookWrapper5(void, glProgramUniformMatrix4x3dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \ HookWrapper6(void, glDrawRangeElements, GLenum, mode, GLuint, start, GLuint, end, GLsizei, count, GLenum, type, const void *, indices); \ HookWrapper5(void, glDrawArraysInstancedBaseInstance, GLenum, mode, GLint, first, GLsizei, count, GLsizei, instancecount, GLuint, baseinstance); \ HookWrapper4(void, glDrawArraysInstanced, GLenum, mode, GLint, first, GLsizei, count, GLsizei, instancecount); \ diff --git a/renderdoc/driver/gl/wrappers/gl_uniform_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_uniform_funcs.cpp index 59dac4192..4c89a3e55 100644 --- a/renderdoc/driver/gl/wrappers/gl_uniform_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_uniform_funcs.cpp @@ -26,226 +26,6 @@ #include "common/string_utils.h" #include "../gl_driver.h" -void WrappedOpenGL::glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) -{ - m_Real.glUniformMatrix4fv(location, count, transpose, value); - - if(m_State >= WRITING) - { - GLResourceRecord *record = m_ContextRecord; - - // TODO grab this at capture time as initial state for program resources - if(m_State == WRITING_IDLE) - record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program)); - - if(record) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_MATRIX); - Serialise_glProgramUniformMatrix(m_Program, location, count, transpose, value, MAT4FV); - - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glUniform1f(GLint location, GLfloat value) -{ - m_Real.glUniform1f(location, value); - - if(m_State >= WRITING) - { - GLResourceRecord *record = m_ContextRecord; - - // TODO grab this at capture time as initial state for program resources - if(m_State == WRITING_IDLE) - record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program)); - - if(record) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(m_Program, location, 1, &value, VEC1FV); - - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glUniform1i(GLint location, GLint value) -{ - m_Real.glUniform1i(location, value); - - if(m_State >= WRITING) - { - GLResourceRecord *record = m_ContextRecord; - - // TODO grab this at capture time as initial state for program resources - if(m_State == WRITING_IDLE) - record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program)); - - if(record) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(m_Program, location, 1, &value, VEC1IV); - - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glUniform1ui(GLint location, GLuint value) -{ - m_Real.glUniform1ui(location, value); - - if(m_State >= WRITING) - { - GLResourceRecord *record = m_ContextRecord; - - // TODO grab this at capture time as initial state for program resources - if(m_State == WRITING_IDLE) - record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program)); - - if(record) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(m_Program, location, 1, &value, VEC1UIV); - - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glUniform1fv(GLint location, GLsizei count, const GLfloat *value) -{ - m_Real.glUniform1fv(location, count, value); - - if(m_State >= WRITING) - { - GLResourceRecord *record = m_ContextRecord; - - // TODO grab this at capture time as initial state for program resources - if(m_State == WRITING_IDLE) - record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program)); - - if(record) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(m_Program, location, count, value, VEC1FV); - - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glUniform1iv(GLint location, GLsizei count, const GLint *value) -{ - m_Real.glUniform1iv(location, count, value); - - if(m_State >= WRITING) - { - GLResourceRecord *record = m_ContextRecord; - - // TODO grab this at capture time as initial state for program resources - if(m_State == WRITING_IDLE) - record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program)); - - if(record) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(m_Program, location, count, value, VEC1IV); - - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glUniform1uiv(GLint location, GLsizei count, const GLuint *value) -{ - m_Real.glUniform1uiv(location, count, value); - - if(m_State >= WRITING) - { - GLResourceRecord *record = m_ContextRecord; - - // TODO grab this at capture time as initial state for program resources - if(m_State == WRITING_IDLE) - record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program)); - - if(record) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(m_Program, location, count, value, VEC1UIV); - - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glUniform2fv(GLint location, GLsizei count, const GLfloat *value) -{ - m_Real.glUniform2fv(location, count, value); - - if(m_State >= WRITING) - { - GLResourceRecord *record = m_ContextRecord; - - // TODO grab this at capture time as initial state for program resources - if(m_State == WRITING_IDLE) - record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program)); - - if(record) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(m_Program, location, count, value, VEC2FV); - - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glUniform3fv(GLint location, GLsizei count, const GLfloat *value) -{ - m_Real.glUniform3fv(location, count, value); - - if(m_State >= WRITING) - { - GLResourceRecord *record = m_ContextRecord; - - // TODO grab this at capture time as initial state for program resources - if(m_State == WRITING_IDLE) - record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program)); - - if(record) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(m_Program, location, count, value, VEC3FV); - - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glUniform4fv(GLint location, GLsizei count, const GLfloat *value) -{ - m_Real.glUniform4fv(location, count, value); - - if(m_State >= WRITING) - { - GLResourceRecord *record = m_ContextRecord; - - // TODO grab this at capture time as initial state for program resources - if(m_State == WRITING_IDLE) - record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program)); - - if(record) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(m_Program, location, count, value, VEC4FV); - - record->AddChunk(scope.Get()); - } - } -} - bool WrappedOpenGL::Serialise_glProgramUniformVector(GLuint program, GLint location, GLsizei count, const void *value, UniformType type) { SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(ProgramRes(GetCtx(), program))); @@ -254,37 +34,69 @@ bool WrappedOpenGL::Serialise_glProgramUniformVector(GLuint program, GLint locat SERIALISE_ELEMENT(uint32_t, Count, count); size_t elemsPerVec = 0; + size_t elemSize = sizeof(float); 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; + case VEC1iv: + case VEC1uiv: + case VEC1fv: + case VEC1dv: elemsPerVec = 1; break; + case VEC2iv: + case VEC2uiv: + case VEC2fv: + case VEC2dv: elemsPerVec = 2; break; + case VEC3iv: + case VEC3uiv: + case VEC3fv: + case VEC3dv: elemsPerVec = 3; break; + case VEC4iv: + case VEC4uiv: + case VEC4fv: + case VEC4dv: elemsPerVec = 4; break; default: RDCERR("Unexpected uniform type to Serialise_glProgramUniformVector: %d", Type); } + + switch(Type) + { + case VEC1dv: + case VEC2dv: + case VEC3dv: + case VEC4dv: + elemSize = sizeof(double); + default: + break; + } if(m_State >= WRITING) { - m_pSerialiser->RawWriteBytes(value, sizeof(float)*elemsPerVec*Count); + m_pSerialiser->RawWriteBytes(value, elemSize*elemsPerVec*Count); } else if(m_State <= EXECUTING) { - value = m_pSerialiser->RawReadBytes(sizeof(float)*elemsPerVec*Count); + value = m_pSerialiser->RawReadBytes(elemSize*elemsPerVec*Count); GLuint live = GetResourceManager()->GetLiveResource(id).name; switch(Type) { - case VEC1IV: m_Real.glProgramUniform1iv(live, Loc, Count, (const GLint *)value); break; - case VEC1UIV: m_Real.glProgramUniform1uiv(live, Loc, Count, (const GLuint *)value); break; - case VEC1FV: m_Real.glProgramUniform1fv(live, Loc, Count, (const GLfloat *)value); break; - case VEC2FV: m_Real.glProgramUniform2fv(live, Loc, Count, (const GLfloat *)value); break; - case VEC3FV: m_Real.glProgramUniform3fv(live, Loc, Count, (const GLfloat *)value); break; - case VEC4FV: m_Real.glProgramUniform4fv(live, Loc, Count, (const GLfloat *)value); break; + case VEC1iv: m_Real.glProgramUniform1iv(live, Loc, Count, (const GLint *)value); break; + case VEC1uiv: m_Real.glProgramUniform1uiv(live, Loc, Count, (const GLuint *)value); break; + case VEC1fv: m_Real.glProgramUniform1fv(live, Loc, Count, (const GLfloat *)value); break; + case VEC1dv: m_Real.glProgramUniform1dv(live, Loc, Count, (const GLdouble *)value); break; + case VEC2iv: m_Real.glProgramUniform2iv(live, Loc, Count, (const GLint *)value); break; + case VEC2uiv: m_Real.glProgramUniform2uiv(live, Loc, Count, (const GLuint *)value); break; + case VEC2fv: m_Real.glProgramUniform2fv(live, Loc, Count, (const GLfloat *)value); break; + case VEC2dv: m_Real.glProgramUniform2dv(live, Loc, Count, (const GLdouble *)value); break; + case VEC3iv: m_Real.glProgramUniform3iv(live, Loc, Count, (const GLint *)value); break; + case VEC3uiv: m_Real.glProgramUniform3uiv(live, Loc, Count, (const GLuint *)value); break; + case VEC3fv: m_Real.glProgramUniform3fv(live, Loc, Count, (const GLfloat *)value); break; + case VEC3dv: m_Real.glProgramUniform3dv(live, Loc, Count, (const GLdouble *)value); break; + case VEC4iv: m_Real.glProgramUniform4iv(live, Loc, Count, (const GLint *)value); break; + case VEC4uiv: m_Real.glProgramUniform4uiv(live, Loc, Count, (const GLuint *)value); break; + case VEC4fv: m_Real.glProgramUniform4fv(live, Loc, Count, (const GLfloat *)value); break; + case VEC4dv: m_Real.glProgramUniform4dv(live, Loc, Count, (const GLdouble *)value); break; default: RDCERR("Unexpected uniform type to Serialise_glProgramUniformVector: %d", Type); } @@ -292,44 +104,38 @@ bool WrappedOpenGL::Serialise_glProgramUniformVector(GLuint program, GLint locat if(m_pSerialiser->GetDebugText()) { + union + { + float *f; + int32_t *i; + uint32_t *u; + double *d; + } v; + + v.f = (float *)value; + switch(Type) { - case VEC1FV: - { - float *f = (float *)value; - m_pSerialiser->DebugPrint("value: {%f}\n", f[0]); - break; - } - case VEC1IV: - { - int32_t *i = (int32_t *)value; - m_pSerialiser->DebugPrint("value: {%d}\n", i[0]); - break; - } - case VEC1UIV: - { - uint32_t *u = (uint32_t *)value; - m_pSerialiser->DebugPrint("value: {%u}\n", u[0]); - break; - } - case VEC2FV: - { - float *f = (float *)value; - m_pSerialiser->DebugPrint("value: {%f %f}\n", f[0], f[1]); - break; - } - case VEC3FV: - { - float *f = (float *)value; - m_pSerialiser->DebugPrint("value: {%f %f %f}\n", f[0], f[1], f[2]); - break; - } - case VEC4FV: - { - float *f = (float *)value; - m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[0], f[1], f[2], f[3]); - break; - } + case VEC1fv: m_pSerialiser->DebugPrint("value: {%f}\n", v.f[0]); break; + case VEC1iv: m_pSerialiser->DebugPrint("value: {%d}\n", v.i[0]); break; + case VEC1uiv: m_pSerialiser->DebugPrint("value: {%u}\n", v.u[0]); break; + case VEC1dv: m_pSerialiser->DebugPrint("value: {%f}\n", (float)v.d[0]); break; + + case VEC2fv: m_pSerialiser->DebugPrint("value: {%f, %f}\n", v.f[0], v.f[1]); break; + case VEC2iv: m_pSerialiser->DebugPrint("value: {%d, %d}\n", v.i[0], v.i[1]); break; + case VEC2uiv: m_pSerialiser->DebugPrint("value: {%u, %u}\n", v.u[0], v.u[1]); break; + case VEC2dv: m_pSerialiser->DebugPrint("value: {%f, %f}\n", (float)v.d[0], (float)v.d[1]); break; + + case VEC3fv: m_pSerialiser->DebugPrint("value: {%f, %f, %f}\n", v.f[0], v.f[1], v.f[2]); break; + case VEC3iv: m_pSerialiser->DebugPrint("value: {%d, %d, %d}\n", v.i[0], v.i[1], v.i[2]); break; + case VEC3uiv: m_pSerialiser->DebugPrint("value: {%u, %u, %u}\n", v.u[0], v.u[1], v.u[2]); break; + case VEC3dv: m_pSerialiser->DebugPrint("value: {%f, %f, %f}\n", (float)v.d[0], (float)v.d[1], (float)v.d[2]); break; + + case VEC4fv: m_pSerialiser->DebugPrint("value: {%f, %f, %f, %f}\n", v.f[0], v.f[1], v.f[2], v.f[3]); break; + case VEC4iv: m_pSerialiser->DebugPrint("value: {%d, %d, %d, %d}\n", v.i[0], v.i[1], v.i[2], v.i[3]); break; + case VEC4uiv: m_pSerialiser->DebugPrint("value: {%u, %u, %u, %u}\n", v.u[0], v.u[1], v.u[2], v.u[3]); break; + case VEC4dv: m_pSerialiser->DebugPrint("value: {%f, %f, %f, %f}\n", (float)v.d[0], (float)v.d[1], (float)v.d[2], (float)v.d[3]); break; + default: RDCERR("Unexpected uniform type to Serialise_glProgramUniformVector: %d", Type); } @@ -338,167 +144,6 @@ bool WrappedOpenGL::Serialise_glProgramUniformVector(GLuint program, GLint locat return true; } -void WrappedOpenGL::glProgramUniform1i(GLuint program, GLint location, GLint v0) -{ - m_Real.glProgramUniform1i(program, location, v0); - - if(m_State > WRITING) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(program, location, 1, &v0, VEC1IV); - - if(m_State == WRITING_CAPFRAME) - { - m_ContextRecord->AddChunk(scope.Get()); - } - else - { - // TODO grab this at capture time as initial state for program resources - GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program)); - RDCASSERT(record); - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint *value) -{ - m_Real.glProgramUniform1iv(program, location, count, value); - - if(m_State > WRITING) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(program, location, count, value, VEC1IV); - - if(m_State == WRITING_CAPFRAME) - { - m_ContextRecord->AddChunk(scope.Get()); - } - else - { - // TODO grab this at capture time as initial state for program resources - GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program)); - RDCASSERT(record); - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat *value) -{ - m_Real.glProgramUniform1fv(program, location, count, value); - - if(m_State > WRITING) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(program, location, count, value, VEC1FV); - - if(m_State == WRITING_CAPFRAME) - { - m_ContextRecord->AddChunk(scope.Get()); - } - else - { - // TODO grab this at capture time as initial state for program resources - GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program)); - RDCASSERT(record); - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint *value) -{ - m_Real.glProgramUniform1uiv(program, location, count, value); - - if(m_State > WRITING) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(program, location, count, value, VEC1UIV); - - if(m_State == WRITING_CAPFRAME) - { - m_ContextRecord->AddChunk(scope.Get()); - } - else - { - // TODO grab this at capture time as initial state for program resources - GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program)); - RDCASSERT(record); - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat *value) -{ - m_Real.glProgramUniform2fv(program, location, count, value); - - if(m_State > WRITING) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(program, location, count, value, VEC2FV); - - if(m_State == WRITING_CAPFRAME) - { - m_ContextRecord->AddChunk(scope.Get()); - } - else - { - // TODO grab this at capture time as initial state for program resources - GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program)); - RDCASSERT(record); - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat *value) -{ - m_Real.glProgramUniform3fv(program, location, count, value); - - if(m_State > WRITING) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(program, location, count, value, VEC3FV); - - if(m_State == WRITING_CAPFRAME) - { - m_ContextRecord->AddChunk(scope.Get()); - } - else - { - // TODO grab this at capture time as initial state for program resources - GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program)); - RDCASSERT(record); - record->AddChunk(scope.Get()); - } - } -} - -void WrappedOpenGL::glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat *value) -{ - m_Real.glProgramUniform4fv(program, location, count, value); - - if(m_State > WRITING) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); - Serialise_glProgramUniformVector(program, location, count, value, VEC4FV); - - if(m_State == WRITING_CAPFRAME) - { - m_ContextRecord->AddChunk(scope.Get()); - } - else - { - // TODO grab this at capture time as initial state for program resources - GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program)); - RDCASSERT(record); - record->AddChunk(scope.Get()); - } - } -} - bool WrappedOpenGL::Serialise_glProgramUniformMatrix(GLuint program, GLint location, GLsizei count, GLboolean transpose, const void *value, UniformType type) { SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(ProgramRes(GetCtx(), program))); @@ -508,27 +153,82 @@ bool WrappedOpenGL::Serialise_glProgramUniformMatrix(GLuint program, GLint locat SERIALISE_ELEMENT(uint8_t, Transpose, transpose); size_t elemsPerMat = 0; + size_t elemSize = sizeof(float); switch(Type) { - case MAT4FV: elemsPerMat = 16; break; + case MAT2fv: + case MAT2dv: + elemsPerMat = 2*2; break; + case MAT2x3fv: + case MAT2x3dv: + case MAT3x2fv: + case MAT3x2dv: + elemsPerMat = 2*3; break; + case MAT2x4fv: + case MAT4x2fv: + elemsPerMat = 2*4; break; + case MAT3fv: + elemsPerMat = 3*3; break; + case MAT3x4fv: + case MAT4x3fv: + elemsPerMat = 3*4; break; + case MAT4fv: + elemsPerMat = 4*4; break; default: RDCERR("Unexpected uniform type to Serialise_glProgramUniformMatrix: %d", Type); } + + bool isDouble = false; + + switch(Type) + { + case MAT2dv: + case MAT2x3dv: + case MAT2x4dv: + case MAT3dv: + case MAT3x2dv: + case MAT3x4dv: + case MAT4dv: + case MAT4x2dv: + case MAT4x3dv: + elemSize = sizeof(double); + isDouble = true; + break; + default: + break; + } if(m_State >= WRITING) { - m_pSerialiser->RawWriteBytes(value, sizeof(float)*elemsPerMat*Count); + m_pSerialiser->RawWriteBytes(value, elemSize*elemsPerMat*Count); } else if(m_State <= EXECUTING) { - value = m_pSerialiser->RawReadBytes(sizeof(float)*elemsPerMat*Count); + value = m_pSerialiser->RawReadBytes(elemSize*elemsPerMat*Count); GLuint live = GetResourceManager()->GetLiveResource(id).name; switch(Type) { - case MAT4FV: m_Real.glProgramUniformMatrix4fv(live, Loc, Count, Transpose, (const GLfloat *)value); break; + case MAT2fv: m_Real.glProgramUniformMatrix2fv (live, Loc, Count, Transpose, (const GLfloat *)value); break; + case MAT2x3fv: m_Real.glProgramUniformMatrix2x3fv(live, Loc, Count, Transpose, (const GLfloat *)value); break; + case MAT2x4fv: m_Real.glProgramUniformMatrix2x4fv(live, Loc, Count, Transpose, (const GLfloat *)value); break; + case MAT3fv: m_Real.glProgramUniformMatrix3fv (live, Loc, Count, Transpose, (const GLfloat *)value); break; + case MAT3x2fv: m_Real.glProgramUniformMatrix3x2fv(live, Loc, Count, Transpose, (const GLfloat *)value); break; + case MAT3x4fv: m_Real.glProgramUniformMatrix3x4fv(live, Loc, Count, Transpose, (const GLfloat *)value); break; + case MAT4fv: m_Real.glProgramUniformMatrix4fv (live, Loc, Count, Transpose, (const GLfloat *)value); break; + case MAT4x2fv: m_Real.glProgramUniformMatrix4x2fv(live, Loc, Count, Transpose, (const GLfloat *)value); break; + case MAT4x3fv: m_Real.glProgramUniformMatrix4x3fv(live, Loc, Count, Transpose, (const GLfloat *)value); break; + case MAT2dv: m_Real.glProgramUniformMatrix2dv (live, Loc, Count, Transpose, (const GLdouble *)value); break; + case MAT2x3dv: m_Real.glProgramUniformMatrix2x3dv(live, Loc, Count, Transpose, (const GLdouble *)value); break; + case MAT2x4dv: m_Real.glProgramUniformMatrix2x4dv(live, Loc, Count, Transpose, (const GLdouble *)value); break; + case MAT3dv: m_Real.glProgramUniformMatrix3dv (live, Loc, Count, Transpose, (const GLdouble *)value); break; + case MAT3x2dv: m_Real.glProgramUniformMatrix3x2dv(live, Loc, Count, Transpose, (const GLdouble *)value); break; + case MAT3x4dv: m_Real.glProgramUniformMatrix3x4dv(live, Loc, Count, Transpose, (const GLdouble *)value); break; + case MAT4dv: m_Real.glProgramUniformMatrix4dv (live, Loc, Count, Transpose, (const GLdouble *)value); break; + case MAT4x2dv: m_Real.glProgramUniformMatrix4x2dv(live, Loc, Count, Transpose, (const GLdouble *)value); break; + case MAT4x3dv: m_Real.glProgramUniformMatrix4x3dv(live, Loc, Count, Transpose, (const GLdouble *)value); break; default: RDCERR("Unexpected uniform type to Serialise_glProgramUniformMatrix: %d", Type); } @@ -536,54 +236,286 @@ bool WrappedOpenGL::Serialise_glProgramUniformMatrix(GLuint program, GLint locat if(m_pSerialiser->GetDebugText()) { - switch(Type) + float *fv = (float *)value; + double *dv = (double *)value; + + m_pSerialiser->DebugPrint("value: {"); + for(size_t i=0; i < elemsPerMat; i++) { - case MAT4FV: - { - float *f = (float *)value; - if(Transpose) - { - m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[0], f[4], f[8], f[12]); - m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[1], f[5], f[9], f[13]); - m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[2], f[6], f[10], f[14]); - m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[3], f[7], f[11], f[15]); - } - else - { - m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[0], f[1], f[2], f[3]); - m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[4], f[5], f[6], f[7]); - m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[8], f[9], f[10], f[11]); - m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[12], f[13], f[14], f[15]); - } - break; - } - default: - RDCERR("Unexpected uniform type to Serialise_glProgramUniformMatrix: %d", Type); + if(i == 0) + m_pSerialiser->DebugPrint("%f", isDouble ? (float)dv[i] : fv[i]); + else + m_pSerialiser->DebugPrint(", %f", isDouble ? (float)dv[i] : fv[i]); } + m_pSerialiser->DebugPrint("}\n"); } return true; } -void WrappedOpenGL::glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) -{ - m_Real.glProgramUniformMatrix4fv(program, location, count, transpose, value); - - if(m_State > WRITING) - { - SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_MATRIX); - Serialise_glProgramUniformMatrix(program, location, count, transpose, value, MAT4FV); - - if(m_State == WRITING_CAPFRAME) - { - m_ContextRecord->AddChunk(scope.Get()); - } - else - { - // TODO grab this at capture time as initial state for program resources - GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program)); - RDCASSERT(record); - record->AddChunk(scope.Get()); - } - } +#define UNIFORM_FUNC(count, suffix, paramtype, ...) \ +void WrappedOpenGL::CONCAT(CONCAT(FUNCNAME, count), suffix)(FUNCPARAMS, __VA_ARGS__) \ +{ \ + m_Real.CONCAT(CONCAT(FUNCNAME, count), suffix)(FUNCARGPASS, ARRAYLIST); \ +\ + if(m_State >= WRITING) \ + { \ + GLResourceRecord *record = m_ContextRecord; \ +\ + /* TODO grab this at capture time as initial state for program resources */ \ + if(m_State == WRITING_IDLE) \ + record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), PROGRAM)); \ +\ + if(record) \ + { \ + SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); \ + const paramtype vals[] = { ARRAYLIST }; \ + Serialise_glProgramUniformVector(PROGRAM, location, 1, vals, CONCAT(CONCAT(VEC, count), CONCAT(suffix, v))); \ +\ + record->AddChunk(scope.Get()); \ + } \ + } \ } + +#define FUNCNAME glUniform +#define FUNCPARAMS GLint location +#define FUNCARGPASS location +#define PROGRAM m_Program + +#define ARRAYLIST v0 + +UNIFORM_FUNC(1, f, GLfloat, GLfloat v0) +UNIFORM_FUNC(1, i, GLint, GLint v0) +UNIFORM_FUNC(1, ui, GLuint, GLuint v0) +UNIFORM_FUNC(1, d, GLdouble, GLdouble v0) + +#undef ARRAYLIST +#define ARRAYLIST v0, v1 + +UNIFORM_FUNC(2, f, GLfloat, GLfloat v0, GLfloat v1) +UNIFORM_FUNC(2, i, GLint, GLint v0, GLint v1) +UNIFORM_FUNC(2, ui, GLuint, GLuint v0, GLuint v1) +UNIFORM_FUNC(2, d, GLdouble, GLdouble v0, GLdouble v1) + +#undef ARRAYLIST +#define ARRAYLIST v0, v1, v2 + +UNIFORM_FUNC(3, f, GLfloat, GLfloat v0, GLfloat v1, GLfloat v2) +UNIFORM_FUNC(3, i, GLint, GLint v0, GLint v1, GLint v2) +UNIFORM_FUNC(3, ui, GLuint, GLuint v0, GLuint v1, GLuint v2) +UNIFORM_FUNC(3, d, GLdouble, GLdouble v0, GLdouble v1, GLdouble v2) + +#undef ARRAYLIST +#define ARRAYLIST v0, v1, v2, v3 + +UNIFORM_FUNC(4, f, GLfloat, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) +UNIFORM_FUNC(4, i, GLint, GLint v0, GLint v1, GLint v2, GLint v3) +UNIFORM_FUNC(4, ui, GLuint, GLuint v0, GLuint v1, GLuint v2, GLuint v3) +UNIFORM_FUNC(4, d, GLdouble, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) + +#undef FUNCNAME +#undef FUNCPARAMS +#undef FUNCARGPASS +#undef PROGRAM +#define FUNCNAME glProgramUniform +#define FUNCPARAMS GLuint program, GLint location +#define FUNCARGPASS program, location +#define PROGRAM program + +#undef ARRAYLIST +#define ARRAYLIST v0 + +UNIFORM_FUNC(1, f, GLfloat, GLfloat v0) +UNIFORM_FUNC(1, i, GLint, GLint v0) +UNIFORM_FUNC(1, ui, GLuint, GLuint v0) +UNIFORM_FUNC(1, d, GLdouble, GLdouble v0) + +#undef ARRAYLIST +#define ARRAYLIST v0, v1 + +UNIFORM_FUNC(2, f, GLfloat, GLfloat v0, GLfloat v1) +UNIFORM_FUNC(2, i, GLint, GLint v0, GLint v1) +UNIFORM_FUNC(2, ui, GLuint, GLuint v0, GLuint v1) +UNIFORM_FUNC(2, d, GLdouble, GLdouble v0, GLdouble v1) + +#undef ARRAYLIST +#define ARRAYLIST v0, v1, v2 + +UNIFORM_FUNC(3, f, GLfloat, GLfloat v0, GLfloat v1, GLfloat v2) +UNIFORM_FUNC(3, i, GLint, GLint v0, GLint v1, GLint v2) +UNIFORM_FUNC(3, ui, GLuint, GLuint v0, GLuint v1, GLuint v2) +UNIFORM_FUNC(3, d, GLdouble, GLdouble v0, GLdouble v1, GLdouble v2) + +#undef ARRAYLIST +#define ARRAYLIST v0, v1, v2, v3 + +UNIFORM_FUNC(4, f, GLfloat, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) +UNIFORM_FUNC(4, i, GLint, GLint v0, GLint v1, GLint v2, GLint v3) +UNIFORM_FUNC(4, ui, GLuint, GLuint v0, GLuint v1, GLuint v2, GLuint v3) +UNIFORM_FUNC(4, d, GLdouble, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) + +#undef ARRAYLIST + +#undef UNIFORM_FUNC +#define UNIFORM_FUNC(unicount, suffix, paramtype) \ +void WrappedOpenGL::CONCAT(CONCAT(FUNCNAME, unicount), CONCAT(suffix, v))(FUNCPARAMS, GLsizei count, const paramtype *value) \ +{ \ + m_Real.CONCAT(CONCAT(FUNCNAME, unicount), CONCAT(suffix, v))(FUNCARGPASS, count, value); \ +\ + if(m_State >= WRITING) \ + { \ + GLResourceRecord *record = m_ContextRecord; \ +\ + /* TODO grab this at capture time as initial state for program resources */ \ + if(m_State == WRITING_IDLE) \ + record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), PROGRAM)); \ +\ + if(record) \ + { \ + SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); \ + Serialise_glProgramUniformVector(PROGRAM, location, count, value, CONCAT(CONCAT(VEC, unicount), CONCAT(suffix, v))); \ +\ + record->AddChunk(scope.Get()); \ + } \ + } \ +} + +#undef FUNCNAME +#undef FUNCPARAMS +#undef FUNCARGPASS +#undef PROGRAM +#define FUNCNAME glUniform +#define FUNCPARAMS GLint location +#define FUNCARGPASS location +#define PROGRAM m_Program + +UNIFORM_FUNC(1, f, GLfloat) +UNIFORM_FUNC(1, i, GLint) +UNIFORM_FUNC(1, ui, GLuint) +UNIFORM_FUNC(1, d, GLdouble) + +UNIFORM_FUNC(2, f, GLfloat) +UNIFORM_FUNC(2, i, GLint) +UNIFORM_FUNC(2, ui, GLuint) +UNIFORM_FUNC(2, d, GLdouble) + +UNIFORM_FUNC(3, f, GLfloat) +UNIFORM_FUNC(3, i, GLint) +UNIFORM_FUNC(3, ui, GLuint) +UNIFORM_FUNC(3, d, GLdouble) + +UNIFORM_FUNC(4, f, GLfloat) +UNIFORM_FUNC(4, i, GLint) +UNIFORM_FUNC(4, ui, GLuint) +UNIFORM_FUNC(4, d, GLdouble) + +#undef FUNCNAME +#undef FUNCPARAMS +#undef FUNCARGPASS +#undef PROGRAM +#define FUNCNAME glProgramUniform +#define FUNCPARAMS GLuint program, GLint location +#define FUNCARGPASS program, location +#define PROGRAM program + +UNIFORM_FUNC(1, f, GLfloat) +UNIFORM_FUNC(1, i, GLint) +UNIFORM_FUNC(1, ui, GLuint) +UNIFORM_FUNC(1, d, GLdouble) + +UNIFORM_FUNC(2, f, GLfloat) +UNIFORM_FUNC(2, i, GLint) +UNIFORM_FUNC(2, ui, GLuint) +UNIFORM_FUNC(2, d, GLdouble) + +UNIFORM_FUNC(3, f, GLfloat) +UNIFORM_FUNC(3, i, GLint) +UNIFORM_FUNC(3, ui, GLuint) +UNIFORM_FUNC(3, d, GLdouble) + +UNIFORM_FUNC(4, f, GLfloat) +UNIFORM_FUNC(4, i, GLint) +UNIFORM_FUNC(4, ui, GLuint) +UNIFORM_FUNC(4, d, GLdouble) + +#undef UNIFORM_FUNC +#define UNIFORM_FUNC(dim, suffix, paramtype) \ +void WrappedOpenGL::CONCAT(CONCAT(FUNCNAME, dim), suffix)(FUNCPARAMS, GLsizei count, GLboolean transpose, const paramtype *value) \ +{ \ + m_Real.CONCAT(CONCAT(FUNCNAME, dim), suffix)(FUNCARGPASS, count, transpose, value); \ +\ + if(m_State >= WRITING) \ + { \ + GLResourceRecord *record = m_ContextRecord; \ +\ + /* TODO grab this at capture time as initial state for program resources */ \ + if(m_State == WRITING_IDLE) \ + record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), PROGRAM)); \ +\ + if(record) \ + { \ + SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_MATRIX); \ + Serialise_glProgramUniformMatrix(PROGRAM, location, count, transpose, value, CONCAT(CONCAT(MAT, dim), suffix)); \ +\ + record->AddChunk(scope.Get()); \ + } \ + } \ +} + +#undef FUNCNAME +#undef FUNCPARAMS +#undef FUNCARGPASS +#undef PROGRAM +#define FUNCNAME glUniformMatrix +#define FUNCPARAMS GLint location +#define FUNCARGPASS location +#define PROGRAM m_Program + +UNIFORM_FUNC(2, fv, GLfloat) +UNIFORM_FUNC(2x3, fv, GLfloat) +UNIFORM_FUNC(2x4, fv, GLfloat) +UNIFORM_FUNC(3, fv, GLfloat) +UNIFORM_FUNC(3x2, fv, GLfloat) +UNIFORM_FUNC(3x4, fv, GLfloat) +UNIFORM_FUNC(4, fv, GLfloat) +UNIFORM_FUNC(4x2, fv, GLfloat) +UNIFORM_FUNC(4x3, fv, GLfloat) + +UNIFORM_FUNC(2, dv, GLdouble) +UNIFORM_FUNC(2x3, dv, GLdouble) +UNIFORM_FUNC(2x4, dv, GLdouble) +UNIFORM_FUNC(3, dv, GLdouble) +UNIFORM_FUNC(3x2, dv, GLdouble) +UNIFORM_FUNC(3x4, dv, GLdouble) +UNIFORM_FUNC(4, dv, GLdouble) +UNIFORM_FUNC(4x2, dv, GLdouble) +UNIFORM_FUNC(4x3, dv, GLdouble) + +#undef FUNCNAME +#undef FUNCPARAMS +#undef FUNCARGPASS +#undef PROGRAM +#define FUNCNAME glProgramUniformMatrix +#define FUNCPARAMS GLuint program, GLint location +#define FUNCARGPASS program, location +#define PROGRAM program + +UNIFORM_FUNC(2, fv, GLfloat) +UNIFORM_FUNC(2x3, fv, GLfloat) +UNIFORM_FUNC(2x4, fv, GLfloat) +UNIFORM_FUNC(3, fv, GLfloat) +UNIFORM_FUNC(3x2, fv, GLfloat) +UNIFORM_FUNC(3x4, fv, GLfloat) +UNIFORM_FUNC(4, fv, GLfloat) +UNIFORM_FUNC(4x2, fv, GLfloat) +UNIFORM_FUNC(4x3, fv, GLfloat) + +UNIFORM_FUNC(2, dv, GLdouble) +UNIFORM_FUNC(2x3, dv, GLdouble) +UNIFORM_FUNC(2x4, dv, GLdouble) +UNIFORM_FUNC(3, dv, GLdouble) +UNIFORM_FUNC(3x2, dv, GLdouble) +UNIFORM_FUNC(3x4, dv, GLdouble) +UNIFORM_FUNC(4, dv, GLdouble) +UNIFORM_FUNC(4x2, dv, GLdouble) +UNIFORM_FUNC(4x3, dv, GLdouble)