From d0b3078b95ce385ec03d6ffdfe10d73dc0895f2c Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 6 Nov 2014 23:30:00 +0000 Subject: [PATCH] Implement glPointParameter* --- renderdoc/driver/gl/gl_common.h | 4 + renderdoc/driver/gl/gl_driver.cpp | 16 +++ renderdoc/driver/gl/gl_driver.h | 4 + renderdoc/driver/gl/gl_hookset.h | 4 + renderdoc/driver/gl/gl_hookset_defs.h | 9 ++ renderdoc/driver/gl/gl_renderstate.cpp | 12 ++ renderdoc/driver/gl/gl_renderstate.h | 3 + .../driver/gl/wrappers/gl_state_funcs.cpp | 104 ++++++++++++++++++ 8 files changed, 156 insertions(+) diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index 8f8474158..68733b087 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -181,6 +181,10 @@ enum GLChunkType DEPTH_BOUNDS, PATCH_PARAMI, PATCH_PARAMFV, + POINT_PARAMF, + POINT_PARAMFV, + POINT_PARAMI, + POINT_PARAMIV, VIEWPORT, VIEWPORT_ARRAY, SCISSOR, diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index ca90bccf0..f1836db28 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -134,6 +134,10 @@ const char *GLChunkNames[] = "glDepthBoundsEXT", "glPatchParameteri", "glPatchParameterfv", + "glPointParameterf", + "glPointParameterfv", + "glPointParameteri", + "glPointParameteriv", "glViewport", "glViewportArrayv", "glScissor", @@ -1668,6 +1672,18 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context) case PATCH_PARAMFV: Serialise_glPatchParameterfv(eGL_NONE, NULL); break; + case POINT_PARAMF: + Serialise_glPointParameterf(eGL_NONE, 0.0f); + break; + case POINT_PARAMFV: + Serialise_glPointParameterfv(eGL_NONE, NULL); + break; + case POINT_PARAMI: + Serialise_glPointParameteri(eGL_NONE, 0); + break; + case POINT_PARAMIV: + Serialise_glPointParameteriv(eGL_NONE, NULL); + break; case VIEWPORT: Serialise_glViewport(0, 0, 0, 0); break; diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index 617e98863..3dba4d159 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -370,6 +370,10 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glPolygonOffset(GLfloat factor, GLfloat units)); IMPLEMENT_FUNCTION_SERIALISED(void, glPatchParameteri(GLenum pname, GLint param)); IMPLEMENT_FUNCTION_SERIALISED(void, glPatchParameterfv(GLenum pname, const GLfloat *params)); + IMPLEMENT_FUNCTION_SERIALISED(void, glPointParameterf(GLenum pname, GLfloat param)); + IMPLEMENT_FUNCTION_SERIALISED(void, glPointParameterfv(GLenum pname, const GLfloat *params)); + IMPLEMENT_FUNCTION_SERIALISED(void, glPointParameteri(GLenum pname, GLint param)); + IMPLEMENT_FUNCTION_SERIALISED(void, glPointParameteriv(GLenum pname, const GLint *params)); IMPLEMENT_FUNCTION_SERIALISED(void, glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels)); IMPLEMENT_FUNCTION_SERIALISED(void, glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels)); IMPLEMENT_FUNCTION_SERIALISED(void, glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index cbb8f7d85..aafb833fe 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -321,6 +321,10 @@ struct GLHookSet PFNGLSAMPLERPARAMETERIUIVPROC glSamplerParameterIuiv; PFNGLPATCHPARAMETERIPROC glPatchParameteri; PFNGLPATCHPARAMETERFVPROC glPatchParameterfv; + PFNGLPOINTPARAMETERFPROC glPointParameterf; + PFNGLPOINTPARAMETERFVPROC glPointParameterfv; + PFNGLPOINTPARAMETERIPROC glPointParameteri; + PFNGLPOINTPARAMETERIVPROC glPointParameteriv; PFNGLDISPATCHCOMPUTEPROC glDispatchCompute; PFNGLMEMORYBARRIERPROC glMemoryBarrier; PFNGLCLEARBUFFERFVPROC glClearBufferfv; diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index c9a246ca9..286a15306 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -240,6 +240,7 @@ HookExtension(PFNGLBLENDFUNCSEPARATEIPROC, glBlendFuncSeparatei); \ HookExtension(PFNGLBLENDEQUATIONPROC, glBlendEquation); \ HookExtension(PFNGLBLENDEQUATIONIPROC, glBlendEquationi); \ + HookExtensionAlias(PFNGLBLENDEQUATIONIPROC, glBlendEquationi, glBlendEquationiARB); \ HookExtension(PFNGLBLENDEQUATIONSEPARATEPROC, glBlendEquationSeparate); \ HookExtension(PFNGLBLENDEQUATIONSEPARATEIPROC, glBlendEquationSeparatei); \ HookExtension(PFNGLSTENCILFUNCSEPARATEPROC, glStencilFuncSeparate); \ @@ -343,6 +344,10 @@ HookExtension(PFNGLSAMPLERPARAMETERIUIVPROC, glSamplerParameterIuiv); \ HookExtension(PFNGLPATCHPARAMETERIPROC, glPatchParameteri); \ HookExtension(PFNGLPATCHPARAMETERFVPROC, glPatchParameterfv); \ + HookExtension(PFNGLPOINTPARAMETERFPROC, glPointParameterf); \ + HookExtension(PFNGLPOINTPARAMETERFVPROC, glPointParameterfv); \ + HookExtension(PFNGLPOINTPARAMETERIPROC, glPointParameteri); \ + HookExtension(PFNGLPOINTPARAMETERIVPROC, glPointParameteriv); \ HookExtension(PFNGLDISPATCHCOMPUTEPROC, glDispatchCompute); \ HookExtension(PFNGLMEMORYBARRIERPROC, glMemoryBarrier); \ HookExtension(PFNGLCLEARBUFFERFVPROC, glClearBufferfv); \ @@ -867,6 +872,10 @@ HookWrapper3(void, glSamplerParameterIuiv, GLuint, sampler, GLenum, pname, const GLuint *, param); \ HookWrapper2(void, glPatchParameteri, GLenum, pname, GLint, value); \ HookWrapper2(void, glPatchParameterfv, GLenum, pname, const GLfloat *, values); \ + HookWrapper2(void, glPointParameterf, GLenum, pname, GLfloat, param); \ + HookWrapper2(void, glPointParameterfv, GLenum, pname, const GLfloat *, params); \ + HookWrapper2(void, glPointParameteri, GLenum, pname, GLint, param); \ + HookWrapper2(void, glPointParameteriv, GLenum, pname, const GLint *, params); \ HookWrapper3(void, glDispatchCompute, GLuint, num_groups_x, GLuint, num_groups_y, GLuint, num_groups_z); \ HookWrapper1(void, glMemoryBarrier, GLbitfield, barriers); \ HookWrapper3(void, glClearBufferfv, GLenum, buffer, GLint, drawbuffer, const GLfloat *, value); \ diff --git a/renderdoc/driver/gl/gl_renderstate.cpp b/renderdoc/driver/gl/gl_renderstate.cpp index 7b51d5cfb..7312f5194 100644 --- a/renderdoc/driver/gl/gl_renderstate.cpp +++ b/renderdoc/driver/gl/gl_renderstate.cpp @@ -101,6 +101,9 @@ void GLRenderState::FetchState() m_Real->glGetIntegeri_v(eGL_VERTEX_BINDING_DIVISOR, i, (GLint *)&VertexBuffers[i].Divisor); } + m_Real->glGetFloatv(eGL_POINT_FADE_THRESHOLD_SIZE, &PointFadeThresholdSize); + m_Real->glGetIntegerv(eGL_POINT_SPRITE_COORD_ORIGIN, (GLint*)&PointSpriteOrigin); + m_Real->glGetIntegerv(eGL_CURRENT_PROGRAM, (GLint *)&Program); m_Real->glGetIntegerv(eGL_PROGRAM_PIPELINE_BINDING, (GLint *)&Pipeline); @@ -282,6 +285,9 @@ void GLRenderState::ApplyState() m_Real->glBindVertexBuffer(i, VertexBuffers[i].Buffer, (GLintptr)VertexBuffers[i].Offset, (GLsizei)VertexBuffers[i].Stride); m_Real->glVertexBindingDivisor(i, VertexBuffers[i].Divisor); } + + m_Real->glPointParameterf(eGL_POINT_FADE_THRESHOLD_SIZE, PointFadeThresholdSize); + m_Real->glPointParameteri(eGL_POINT_SPRITE_COORD_ORIGIN, (GLint)PointSpriteOrigin); m_Real->glUseProgram(Program); m_Real->glBindProgramPipeline(Pipeline); @@ -432,6 +438,9 @@ void GLRenderState::Clear() RDCEraseEl(VAO); RDCEraseEl(VertexBuffers); + RDCEraseEl(PointFadeThresholdSize); + RDCEraseEl(PointSpriteOrigin); + RDCEraseEl(Program); RDCEraseEl(Pipeline); @@ -511,6 +520,9 @@ void GLRenderState::Serialise(LogState state, void *ctx, WrappedOpenGL *gl) if(state < WRITING && ID != ResourceId()) VertexBuffers[i].Buffer = rm->GetLiveResource(ID).name; } + m_pSerialiser->Serialise("GL_POINT_FADE_THRESHOLD_SIZE", PointFadeThresholdSize); + m_pSerialiser->Serialise("GL_POINT_SPRITE_COORD_ORIGIN", PointSpriteOrigin); + for(size_t i=0; i < ARRAY_COUNT(BufferBindings); i++) { ResourceId ID = ResourceId(); diff --git a/renderdoc/driver/gl/gl_renderstate.h b/renderdoc/driver/gl/gl_renderstate.h index 0046adef4..2f04238f9 100644 --- a/renderdoc/driver/gl/gl_renderstate.h +++ b/renderdoc/driver/gl/gl_renderstate.h @@ -106,6 +106,9 @@ struct GLRenderState } VertexBuffers[16]; GLuint VAO; + float PointFadeThresholdSize; + GLenum PointSpriteOrigin; + uint32_t BufferBindings[10]; struct IdxRangeBuffer { diff --git a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp index c4ed62e59..20df567c8 100644 --- a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp @@ -952,6 +952,110 @@ void WrappedOpenGL::glPatchParameterfv(GLenum pname, const GLfloat *values) } } +bool WrappedOpenGL::Serialise_glPointParameteri(GLenum pname, GLint param) +{ + SERIALISE_ELEMENT(GLenum, PName, pname); + SERIALISE_ELEMENT(int32_t, Param, param); + + if(m_State <= EXECUTING) + { + m_Real.glPointParameteri(PName, Param); + } + + return true; +} + +void WrappedOpenGL::glPointParameteri(GLenum pname, GLint param) +{ + m_Real.glPointParameteri(pname, param); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(POINT_PARAMI); + Serialise_glPointParameteri(pname, param); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + +bool WrappedOpenGL::Serialise_glPointParameteriv(GLenum pname, const GLint *params) +{ + SERIALISE_ELEMENT(GLenum, PName, pname); + SERIALISE_ELEMENT(int32_t, Param, *params); + + if(m_State <= EXECUTING) + { + m_Real.glPointParameteriv(PName, &Param); + } + + return true; +} + +void WrappedOpenGL::glPointParameteriv(GLenum pname, const GLint *params) +{ + m_Real.glPointParameteriv(pname, params); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(POINT_PARAMIV); + Serialise_glPointParameteriv(pname, params); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + +bool WrappedOpenGL::Serialise_glPointParameterf(GLenum pname, GLfloat param) +{ + SERIALISE_ELEMENT(GLenum, PName, pname); + SERIALISE_ELEMENT(float, Param, param); + + if(m_State <= EXECUTING) + { + m_Real.glPointParameterf(PName, Param); + } + + return true; +} + +void WrappedOpenGL::glPointParameterf(GLenum pname, GLfloat param) +{ + m_Real.glPointParameterf(pname, param); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(POINT_PARAMF); + Serialise_glPointParameterf(pname, param); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + +bool WrappedOpenGL::Serialise_glPointParameterfv(GLenum pname, const GLfloat *params) +{ + SERIALISE_ELEMENT(GLenum, PName, pname); + SERIALISE_ELEMENT(float, Param, *params); + + if(m_State <= EXECUTING) + { + m_Real.glPointParameterfv(PName, &Param); + } + + return true; +} + +void WrappedOpenGL::glPointParameterfv(GLenum pname, const GLfloat *params) +{ + m_Real.glPointParameterfv(pname, params); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(POINT_PARAMFV); + Serialise_glPointParameterfv(pname, params); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + bool WrappedOpenGL::Serialise_glViewport(GLint x, GLint y, GLsizei width, GLsizei height) { SERIALISE_ELEMENT(int32_t, X, x);