From 76ba104918216b0d102eb482aa1e362aba74f472 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 31 May 2014 16:56:48 +0100 Subject: [PATCH] Add glSamplerParameter variants --- renderdoc/driver/gl/gl_common.h | 5 + renderdoc/driver/gl/gl_device_driver.cpp | 167 ++++++++++++++++++++++- renderdoc/driver/gl/gl_driver.cpp | 20 +++ renderdoc/driver/gl/gl_driver.h | 5 + renderdoc/driver/gl/gl_hookset.h | 5 + renderdoc/driver/gl/gl_hookset_defs.h | 10 ++ 6 files changed, 211 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index 9bbc111a4..7d5a91699 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -164,6 +164,11 @@ enum GLChunkType GEN_SAMPLERS, SAMPLER_PARAMETERI, + SAMPLER_PARAMETERF, + SAMPLER_PARAMETERIV, + SAMPLER_PARAMETERFV, + SAMPLER_PARAMETERIIV, + SAMPLER_PARAMETERIUIV, BIND_SAMPLER, GEN_BUFFER, diff --git a/renderdoc/driver/gl/gl_device_driver.cpp b/renderdoc/driver/gl/gl_device_driver.cpp index 103d0e16e..3c17b8ed5 100644 --- a/renderdoc/driver/gl/gl_device_driver.cpp +++ b/renderdoc/driver/gl/gl_device_driver.cpp @@ -390,7 +390,7 @@ bool WrappedOpenGL::Serialise_glSamplerParameteri(GLuint sampler, GLenum pname, if(m_State < WRITING) { GLResource res = GetResourceManager()->GetLiveResource(id); - glSamplerParameteri(res.name, pname, param); + glSamplerParameteri(res.name, PName, Param); } return true; @@ -412,6 +412,171 @@ void WrappedOpenGL::glSamplerParameteri(GLuint sampler, GLenum pname, GLint para } } +bool WrappedOpenGL::Serialise_glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) +{ + SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(SamplerRes(sampler))); + SERIALISE_ELEMENT(GLenum, PName, pname); + SERIALISE_ELEMENT(float, Param, param); + + if(m_State < WRITING) + { + GLResource res = GetResourceManager()->GetLiveResource(id); + glSamplerParameterf(res.name, PName, Param); + } + + return true; +} + +void WrappedOpenGL::glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) +{ + m_Real.glSamplerParameterf(sampler, pname, param); + + if(m_State >= WRITING) + { + SCOPED_SERIALISE_CONTEXT(SAMPLER_PARAMETERF); + Serialise_glSamplerParameterf(sampler, pname, param); + + if(m_State == WRITING_IDLE) + GetResourceManager()->GetResourceRecord(SamplerRes(sampler))->AddChunk(scope.Get()); + else + m_ContextRecord->AddChunk(scope.Get()); + } +} + +bool WrappedOpenGL::Serialise_glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint *params) +{ + SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(SamplerRes(sampler))); + SERIALISE_ELEMENT(GLenum, PName, pname); + const size_t nParams = (PName == eGL_TEXTURE_BORDER_COLOR ? 4U : 1U); + SERIALISE_ELEMENT_ARR(int32_t, Params, params, nParams); + + if(m_State < WRITING) + { + GLResource res = GetResourceManager()->GetLiveResource(id); + glSamplerParameteriv(res.name, PName, Params); + } + + delete[] Params; + + return true; +} + +void WrappedOpenGL::glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint *params) +{ + m_Real.glSamplerParameteriv(sampler, pname, params); + + if(m_State >= WRITING) + { + SCOPED_SERIALISE_CONTEXT(SAMPLER_PARAMETERIV); + Serialise_glSamplerParameteriv(sampler, pname, params); + + if(m_State == WRITING_IDLE) + GetResourceManager()->GetResourceRecord(SamplerRes(sampler))->AddChunk(scope.Get()); + else + m_ContextRecord->AddChunk(scope.Get()); + } +} + +bool WrappedOpenGL::Serialise_glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *params) +{ + SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(SamplerRes(sampler))); + SERIALISE_ELEMENT(GLenum, PName, pname); + const size_t nParams = (PName == eGL_TEXTURE_BORDER_COLOR ? 4U : 1U); + SERIALISE_ELEMENT_ARR(float, Params, params, nParams); + + if(m_State < WRITING) + { + GLResource res = GetResourceManager()->GetLiveResource(id); + glSamplerParameterfv(res.name, PName, Params); + } + + return true; +} + +void WrappedOpenGL::glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *params) +{ + m_Real.glSamplerParameterfv(sampler, pname, params); + + if(m_State >= WRITING) + { + SCOPED_SERIALISE_CONTEXT(SAMPLER_PARAMETERFV); + Serialise_glSamplerParameterfv(sampler, pname, params); + + if(m_State == WRITING_IDLE) + GetResourceManager()->GetResourceRecord(SamplerRes(sampler))->AddChunk(scope.Get()); + else + m_ContextRecord->AddChunk(scope.Get()); + } +} + +bool WrappedOpenGL::Serialise_glSamplerParameterIiv(GLuint sampler, GLenum pname, const GLint *params) +{ + SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(SamplerRes(sampler))); + SERIALISE_ELEMENT(GLenum, PName, pname); + const size_t nParams = (PName == eGL_TEXTURE_BORDER_COLOR ? 4U : 1U); + SERIALISE_ELEMENT_ARR(int32_t, Params, params, nParams); + + if(m_State < WRITING) + { + GLResource res = GetResourceManager()->GetLiveResource(id); + glSamplerParameterIiv(res.name, PName, Params); + } + + delete[] Params; + + return true; +} + +void WrappedOpenGL::glSamplerParameterIiv(GLuint sampler, GLenum pname, const GLint *params) +{ + m_Real.glSamplerParameterIiv(sampler, pname, params); + + if(m_State >= WRITING) + { + SCOPED_SERIALISE_CONTEXT(SAMPLER_PARAMETERIIV); + Serialise_glSamplerParameterIiv(sampler, pname, params); + + if(m_State == WRITING_IDLE) + GetResourceManager()->GetResourceRecord(SamplerRes(sampler))->AddChunk(scope.Get()); + else + m_ContextRecord->AddChunk(scope.Get()); + } +} + +bool WrappedOpenGL::Serialise_glSamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *params) +{ + SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(SamplerRes(sampler))); + SERIALISE_ELEMENT(GLenum, PName, pname); + const size_t nParams = (PName == eGL_TEXTURE_BORDER_COLOR ? 4U : 1U); + SERIALISE_ELEMENT_ARR(uint32_t, Params, params, nParams); + + if(m_State < WRITING) + { + GLResource res = GetResourceManager()->GetLiveResource(id); + glSamplerParameterIuiv(res.name, PName, Params); + } + + delete[] Params; + + return true; +} + +void WrappedOpenGL::glSamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *params) +{ + m_Real.glSamplerParameterIuiv(sampler, pname, params); + + if(m_State >= WRITING) + { + SCOPED_SERIALISE_CONTEXT(SAMPLER_PARAMETERIUIV); + Serialise_glSamplerParameterIuiv(sampler, pname, params); + + if(m_State == WRITING_IDLE) + GetResourceManager()->GetResourceRecord(SamplerRes(sampler))->AddChunk(scope.Get()); + else + m_ContextRecord->AddChunk(scope.Get()); + } +} + bool WrappedOpenGL::Serialise_glPixelStorei(GLenum pname, GLint param) { SERIALISE_ELEMENT(GLenum, PName, pname); diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index 2085dbf9d..2ea946027 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -121,6 +121,11 @@ const char *GLChunkNames[] = "glGenSamplers", "glSamplerParameteri", + "glSamplerParameterf", + "glSamplerParameteriv", + "glSamplerParameterfv", + "glSamplerParameterIiv", + "glSamplerParameterIuiv", "glBindSampler", "glGenBuffers", @@ -1007,6 +1012,21 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context) case SAMPLER_PARAMETERI: Serialise_glSamplerParameteri(0, eGL_UNKNOWN_ENUM, 0); break; + case SAMPLER_PARAMETERF: + Serialise_glSamplerParameterf(0, eGL_UNKNOWN_ENUM, 0); + break; + case SAMPLER_PARAMETERIV: + Serialise_glSamplerParameteriv(0, eGL_UNKNOWN_ENUM, NULL); + break; + case SAMPLER_PARAMETERFV: + Serialise_glSamplerParameterfv(0, eGL_UNKNOWN_ENUM, NULL); + break; + case SAMPLER_PARAMETERIIV: + Serialise_glSamplerParameterIiv(0, eGL_UNKNOWN_ENUM, NULL); + break; + case SAMPLER_PARAMETERIUIV: + Serialise_glSamplerParameterIuiv(0, eGL_UNKNOWN_ENUM, NULL); + break; case CLEAR_COLOR: Serialise_glClearColor(0, 0, 0, 0); diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index 3af7ede4a..d4308b3bd 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -314,6 +314,11 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glGenSamplers(GLsizei count, GLuint *samplers)); IMPLEMENT_FUNCTION_SERIALISED(void, glBindSampler(GLuint unit, GLuint sampler)); IMPLEMENT_FUNCTION_SERIALISED(void, glSamplerParameteri(GLuint sampler, GLenum pname, GLint param)); + IMPLEMENT_FUNCTION_SERIALISED(void, glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)); + IMPLEMENT_FUNCTION_SERIALISED(void, glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint *params)); + IMPLEMENT_FUNCTION_SERIALISED(void, glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *params)); + IMPLEMENT_FUNCTION_SERIALISED(void, glSamplerParameterIiv(GLuint sampler, GLenum pname, const GLint *params)); + IMPLEMENT_FUNCTION_SERIALISED(void, glSamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glViewport(GLint x, GLint y, GLsizei width, GLsizei height)); IMPLEMENT_FUNCTION_SERIALISED(void, glViewportIndexedf(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h)); IMPLEMENT_FUNCTION_SERIALISED(void, glViewportIndexedfv(GLuint index, const GLfloat *v)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index 8b183c4b8..bb42a3ff0 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -159,6 +159,11 @@ struct GLHookSet PFNGLGENSAMPLERSPROC glGenSamplers; PFNGLBINDSAMPLERPROC glBindSampler; PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri; + PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf; + PFNGLSAMPLERPARAMETERIVPROC glSamplerParameteriv; + PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv; + PFNGLSAMPLERPARAMETERIIVPROC glSamplerParameterIiv; + PFNGLSAMPLERPARAMETERIUIVPROC glSamplerParameterIuiv; PFNGLCLEARBUFFERFVPROC glClearBufferfv; PFNGLCLEARBUFFERIVPROC glClearBufferiv; PFNGLCLEARBUFFERUIVPROC glClearBufferuiv; diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index 659e92696..21484886f 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -171,6 +171,11 @@ HookExtension(PFNGLGENSAMPLERSPROC, glGenSamplers); \ HookExtension(PFNGLBINDSAMPLERPROC, glBindSampler); \ HookExtension(PFNGLSAMPLERPARAMETERIPROC, glSamplerParameteri); \ + HookExtension(PFNGLSAMPLERPARAMETERFPROC, glSamplerParameterf); \ + HookExtension(PFNGLSAMPLERPARAMETERIVPROC, glSamplerParameteriv); \ + HookExtension(PFNGLSAMPLERPARAMETERFVPROC, glSamplerParameterfv); \ + HookExtension(PFNGLSAMPLERPARAMETERIIVPROC, glSamplerParameterIiv); \ + HookExtension(PFNGLSAMPLERPARAMETERIUIVPROC, glSamplerParameterIuiv); \ HookExtension(PFNGLCLEARBUFFERFVPROC, glClearBufferfv); \ HookExtension(PFNGLCLEARBUFFERIVPROC, glClearBufferiv); \ HookExtension(PFNGLCLEARBUFFERUIVPROC, glClearBufferuiv); \ @@ -396,6 +401,11 @@ HookWrapper2(void, glGenSamplers, GLsizei, count, GLuint *, samplers); \ HookWrapper2(void, glBindSampler, GLuint, unit, GLuint, sampler); \ HookWrapper3(void, glSamplerParameteri, GLuint, sampler, GLenum, pname, GLint, param); \ + HookWrapper3(void, glSamplerParameterf, GLuint, sampler, GLenum, pname, GLfloat, param); \ + HookWrapper3(void, glSamplerParameteriv, GLuint, sampler, GLenum, pname, const GLint *, param); \ + HookWrapper3(void, glSamplerParameterfv, GLuint, sampler, GLenum, pname, const GLfloat *, param); \ + HookWrapper3(void, glSamplerParameterIiv, GLuint, sampler, GLenum, pname, const GLint *, param); \ + HookWrapper3(void, glSamplerParameterIuiv, GLuint, sampler, GLenum, pname, const GLuint *, param); \ HookWrapper3(void, glClearBufferfv, GLenum, buffer, GLint, drawbuffer, const GLfloat *, value); \ HookWrapper3(void, glClearBufferiv, GLenum, buffer, GLint, drawbuffer, const GLint *, value); \ HookWrapper3(void, glClearBufferuiv, GLenum, buffer, GLint, drawbuffer, const GLuint *, value); \